diff --git a/BUILD.gn b/BUILD.gn
index 545f306..dd884bc2 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -416,15 +416,6 @@
     }
   }
 
-  if (is_linux || is_chromeos) {
-    # This is only used by ChromeOS, but we want maximal fuzzer coverage, so
-    # run it under linux too.
-    deps += [
-      "//third_party/minizip:minizip_compress_fuzzer",
-      "//third_party/minizip:minizip_uncompress_fuzzer",
-    ]
-  }
-
   if (is_linux || is_chromeos || is_android) {
     deps += [
       "//third_party/breakpad:breakpad_unittests",
diff --git a/DEPS b/DEPS
index 8bc0d19b..a6f4f60e 100644
--- a/DEPS
+++ b/DEPS
@@ -304,15 +304,15 @@
   # 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': 'e846588a085ee6126f797554920aede739ff7e54',
+  'skia_revision': '5d2d4664c6f3426a8b2ef38afdd32db07a795841',
   # 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': '70471fb8947c55531279b6e38f9742573c52e599',
+  'v8_revision': 'b285c029fa6446694dc83c926eaa2f19f8a085a3',
   # 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': 'd53c520e84439c62ab80ee9deb59134843803195',
+  'angle_revision': 'b28fa2e46fa955f06a442f1556a661135fab2bd8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -383,7 +383,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': '0a399a140719c34359c84927e2059f1da0ec4f08',
+  'devtools_frontend_revision': '21a4d813888e3746c7152c696514eb30b5dcb72b',
   # 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.
@@ -419,11 +419,11 @@
   # 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': '99d3586f1e0a3f0be2d41684f520b23fba98cbee',
+  'dawn_revision': '6cbf417af28413d04ceb96bf1da5a0b5b1e0e28f',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': '727431e5948831dd3aef3767c514e805f0d0e714',
+  'quiche_revision': '5c6e701b672b5b4082bb66243bb6d11a42a512b3',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ios_webkit
   # and whatever else without interference from each other.
@@ -770,7 +770,7 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    'edfdfd21553f5a144e90e48180d6c82c6271791f',
+    'a8531a60bc6274ae6ce7102dbfecbea6c59c11e3',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -869,7 +869,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': 'RfofwT99yNfWzTmmLkvaAtCGnVWLmK2PVGR9lGoGR8MC',
+          'version': '0dJx59jm2UDQ3VPykPvWPCdvJND9sqz0tpKmzUh7LKMC',
         },
       ],
       'dep_type': 'cipd',
@@ -880,7 +880,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': 'MEwjkOjFLDymEGcqbh8Ln6UelgSWJuDvkmreJHSEc8kC',
+          'version': 'rf3GtiTWSbcZlQf_U3Xp2IjcIM9EIEAnnS5MPsBXVWAC',
         },
       ],
       'dep_type': 'cipd',
@@ -891,7 +891,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': '9xod2NiwyoVtB1cdWWTdOsn3gg-Y6ZXYLTkN8CM_HugC',
+          'version': 'OTuON8WMfu_uPj-lNTei5SsM-rYwOwAUjKaKyw0NgboC',
         },
       ],
       'dep_type': 'cipd',
@@ -959,7 +959,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'vucigm9QehNBW0p981LMiu5B2AzDNIr88d1RgaS8rZ0C',
+          'version': 'Q-lWiernA7aWcef61zbeP_6-NuR_iFel0fewmbSecF4C',
       },
     ],
     'condition': 'checkout_android',
@@ -1176,7 +1176,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '6e4d09656c2bd3bf7b964eb04a53267d715c5540',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '6169b5c606704e6478e895c332b4d7aacf241c36',
       'condition': 'checkout_chromeos',
   },
 
@@ -1210,7 +1210,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '904c419c0f8424f48af381f04cb7764ed069d32f',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '35e149a161d083d0a28273c1d607408d75835ad1',
     'condition': 'checkout_src_internal',
   },
 
@@ -1261,7 +1261,7 @@
     Var('chromium_git') + '/external/github.com/google/gemmlowp.git' + '@' + '13d57703abca3005d97b19df1f2db731607a7dc2',
 
   'src/third_party/grpc/src': {
-      'url': Var('chromium_git') + '/external/github.com/grpc/grpc.git' + '@' + '38b9254a790320d2eaf8ac3ae4c3f3050d1ff106',
+      'url': Var('chromium_git') + '/external/github.com/grpc/grpc.git' + '@' + 'a017e9b7f20743c69627b94d7d101e4e6baadb44',
   },
 
   'src/third_party/freetype/src':
@@ -1899,7 +1899,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@8e62ff34d079e9e538ed407a36d2490a4cd66661',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@84d832b1228015ac169c6ceb58203dd1461b5ff0',
     'condition': 'checkout_src_internal',
   },
 
@@ -1929,7 +1929,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'B4N0Vbou0A9mLbK2h8J0DsS2p2b6alG6yGktvi870cIC',
+        'version': 'GEZXT0XjOaikxOrb25yFUrJ8m2XT7FTbz-psTa93vO0C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1940,7 +1940,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'hplzpK0RzuvFcloTmR9Bopruebi5lnQDb1mN5gEFz_UC',
+        'version': '9BJLfrTnxKemgmsXElHL3cw_2TVDjcJv7vQ4KWnDnHQC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/aw_autofill_client.cc b/android_webview/browser/aw_autofill_client.cc
index a964a287..beac231 100644
--- a/android_webview/browser/aw_autofill_client.cc
+++ b/android_webview/browser/aw_autofill_client.cc
@@ -197,20 +197,17 @@
   return false;
 }
 
-bool AwAutofillClient::IsFastCheckoutTriggerForm(
+bool AwAutofillClient::TryToShowFastCheckout(
     const autofill::FormData& form,
-    const autofill::FormFieldData& field) {
+    const autofill::FormFieldData& field,
+    autofill::AutofillDriver* driver) {
   return false;
 }
 
-bool AwAutofillClient::ShowFastCheckout(
-    base::WeakPtr<autofill::FastCheckoutDelegate> delegate) {
-  NOTREACHED();
-  return false;
-}
+void AwAutofillClient::HideFastCheckout(bool allow_further_runs) {}
 
-void AwAutofillClient::HideFastCheckout() {
-  NOTREACHED();
+bool AwAutofillClient::IsShowingFastCheckoutUI() {
+  return false;
 }
 
 bool AwAutofillClient::IsTouchToFillCreditCardSupported() {
diff --git a/android_webview/browser/aw_autofill_client.h b/android_webview/browser/aw_autofill_client.h
index c4d824e..78ec471 100644
--- a/android_webview/browser/aw_autofill_client.h
+++ b/android_webview/browser/aw_autofill_client.h
@@ -113,12 +113,12 @@
       AddressProfileSavePromptCallback callback) override;
   bool HasCreditCardScanFeature() override;
   void ScanCreditCard(CreditCardScanCallback callback) override;
+  bool TryToShowFastCheckout(const autofill::FormData& form,
+                             const autofill::FormFieldData& field,
+                             autofill::AutofillDriver* driver) override;
+  void HideFastCheckout(bool allow_further_runs) override;
   bool IsFastCheckoutSupported() override;
-  bool IsFastCheckoutTriggerForm(const autofill::FormData& form,
-                                 const autofill::FormFieldData& field) override;
-  bool ShowFastCheckout(
-      base::WeakPtr<autofill::FastCheckoutDelegate> delegate) override;
-  void HideFastCheckout() override;
+  bool IsShowingFastCheckoutUI() override;
   bool IsTouchToFillCreditCardSupported() override;
   bool ShowTouchToFillCreditCard(
       base::WeakPtr<autofill::TouchToFillDelegate> delegate,
diff --git a/android_webview/browser/aw_browser_process.cc b/android_webview/browser/aw_browser_process.cc
index 40f755c..40241d6 100644
--- a/android_webview/browser/aw_browser_process.cc
+++ b/android_webview/browser/aw_browser_process.cc
@@ -15,6 +15,8 @@
 #include "base/android/jni_string.h"
 #include "base/base_paths_posix.h"
 #include "base/path_service.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/component_updater/android/component_loader_policy.h"
 #include "components/crash/core/common/crash_key.h"
diff --git a/android_webview/browser/aw_contents_io_thread_client.h b/android_webview/browser/aw_contents_io_thread_client.h
index 180ec102..a95e6a3f 100644
--- a/android_webview/browser/aw_contents_io_thread_client.h
+++ b/android_webview/browser/aw_contents_io_thread_client.h
@@ -14,6 +14,7 @@
 #include "base/android/scoped_java_ref.h"
 #include "base/compiler_specific.h"
 #include "base/functional/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "content/public/browser/global_routing_id.h"
 
diff --git a/android_webview/browser/aw_pac_processor.cc b/android_webview/browser/aw_pac_processor.cc
index 2b897f2..e01de9c 100644
--- a/android_webview/browser/aw_pac_processor.cc
+++ b/android_webview/browser/aw_pac_processor.cc
@@ -20,6 +20,7 @@
 #include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/thread_restrictions.h"
 #include "net/base/address_list.h"
diff --git a/android_webview/browser/gfx/browser_view_renderer.cc b/android_webview/browser/gfx/browser_view_renderer.cc
index fed4a4f..1d877dc 100644
--- a/android_webview/browser/gfx/browser_view_renderer.cc
+++ b/android_webview/browser/gfx/browser_view_renderer.cc
@@ -20,6 +20,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/supports_user_data.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/traced_value.h"
 #include "cc/base/math_util.h"
 #include "components/viz/common/features.h"
diff --git a/android_webview/browser/gfx/browser_view_renderer.h b/android_webview/browser/gfx/browser_view_renderer.h
index bd06a6f8..84cb46c 100644
--- a/android_webview/browser/gfx/browser_view_renderer.h
+++ b/android_webview/browser/gfx/browser_view_renderer.h
@@ -19,6 +19,7 @@
 #include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "content/public/browser/android/synchronous_compositor.h"
diff --git a/android_webview/browser/gfx/overlay_processor_webview.cc b/android_webview/browser/gfx/overlay_processor_webview.cc
index e66a4b6..e8ae3c6 100644
--- a/android_webview/browser/gfx/overlay_processor_webview.cc
+++ b/android_webview/browser/gfx/overlay_processor_webview.cc
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
 #include "components/viz/service/display/display_compositor_memory_and_task_controller.h"
diff --git a/android_webview/browser/gfx/render_thread_manager.cc b/android_webview/browser/gfx/render_thread_manager.cc
index 8da6f8ca..5d583dc6 100644
--- a/android_webview/browser/gfx/render_thread_manager.cc
+++ b/android_webview/browser/gfx/render_thread_manager.cc
@@ -17,6 +17,7 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
diff --git a/android_webview/browser/gfx/root_frame_sink_proxy.cc b/android_webview/browser/gfx/root_frame_sink_proxy.cc
index c3fd3aa..d1cb01d 100644
--- a/android_webview/browser/gfx/root_frame_sink_proxy.cc
+++ b/android_webview/browser/gfx/root_frame_sink_proxy.cc
@@ -9,6 +9,7 @@
 #include "android_webview/browser/gfx/root_frame_sink.h"
 #include "android_webview/browser/gfx/viz_compositor_thread_runner_webview.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace android_webview {
 
diff --git a/android_webview/browser/gfx/task_queue_webview.cc b/android_webview/browser/gfx/task_queue_webview.cc
index e1b966c..0b86c863 100644
--- a/android_webview/browser/gfx/task_queue_webview.cc
+++ b/android_webview/browser/gfx/task_queue_webview.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/synchronization/condition_variable.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/threading/thread_checker.h"
 #include "base/threading/thread_local.h"
diff --git a/android_webview/browser/gfx/test/invalidate_test.cc b/android_webview/browser/gfx/test/invalidate_test.cc
index c33d1c7e..510acec5 100644
--- a/android_webview/browser/gfx/test/invalidate_test.cc
+++ b/android_webview/browser/gfx/test/invalidate_test.cc
@@ -11,6 +11,7 @@
 #include "android_webview/browser/gfx/scoped_app_gl_state_restore.h"
 #include "android_webview/browser/gfx/viz_compositor_thread_runner_webview.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
diff --git a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
index 062983dc..c706a151 100644
--- a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
+++ b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
 #include "components/viz/service/main/viz_compositor_thread_runner.h"
diff --git a/android_webview/browser/network_service/aw_proxy_config_monitor.cc b/android_webview/browser/network_service/aw_proxy_config_monitor.cc
index 2d000a4..23e32640 100644
--- a/android_webview/browser/network_service/aw_proxy_config_monitor.cc
+++ b/android_webview/browser/network_service/aw_proxy_config_monitor.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "content/public/browser/browser_thread.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/android_webview/common/aw_content_client.cc b/android_webview/common/aw_content_client.cc
index 2d7c0d51..ca98d1b 100644
--- a/android_webview/common/aw_content_client.cc
+++ b/android_webview/common/aw_content_client.cc
@@ -13,6 +13,7 @@
 #include "base/debug/crash_logging.h"
 #include "base/functional/bind.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/embedder_support/origin_trials/origin_trial_policy_impl.h"
 #include "components/services/heap_profiling/public/cpp/profiling_client.h"
 #include "components/version_info/version_info.h"
diff --git a/android_webview/common/aw_content_client.h b/android_webview/common/aw_content_client.h
index 80f834d..60f0347 100644
--- a/android_webview/common/aw_content_client.h
+++ b/android_webview/common/aw_content_client.h
@@ -9,6 +9,7 @@
 #include "content/public/common/content_client.h"
 
 #include "base/compiler_specific.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace embedder_support {
 class OriginTrialPolicyImpl;
diff --git a/android_webview/renderer/aw_websocket_handshake_throttle_provider.cc b/android_webview/renderer/aw_websocket_handshake_throttle_provider.cc
index 9d104d5..df6b255 100644
--- a/android_webview/renderer/aw_websocket_handshake_throttle_provider.cc
+++ b/android_webview/renderer/aw_websocket_handshake_throttle_provider.cc
@@ -8,6 +8,7 @@
 
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/safe_browsing/content/renderer/websocket_sb_handshake_throttle.h"
 #include "components/safe_browsing/core/common/features.h"
 #include "content/public/common/content_features.h"
diff --git a/android_webview/renderer/aw_websocket_handshake_throttle_provider.h b/android_webview/renderer/aw_websocket_handshake_throttle_provider.h
index 177785ae..2f40b2a 100644
--- a/android_webview/renderer/aw_websocket_handshake_throttle_provider.h
+++ b/android_webview/renderer/aw_websocket_handshake_throttle_provider.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "components/safe_browsing/content/common/safe_browsing.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 15efc15..2956dbb0 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1431,8 +1431,6 @@
     "system/message_center/session_state_notification_blocker.h",
     "system/message_center/unified_message_center_bubble.cc",
     "system/message_center/unified_message_center_bubble.h",
-    "system/microphone_mute/microphone_mute_notification_controller.cc",
-    "system/microphone_mute/microphone_mute_notification_controller.h",
     "system/model/clock_model.cc",
     "system/model/clock_model.h",
     "system/model/clock_observer.h",
@@ -2980,6 +2978,7 @@
     "shelf/shelf_drag_handle_unittest.cc",
     "shelf/shelf_layout_manager_unittest.cc",
     "shelf/shelf_locking_manager_unittest.cc",
+    "shelf/shelf_party_feature_pod_controller_unittest.cc",
     "shelf/shelf_tooltip_manager_unittest.cc",
     "shelf/shelf_unittest.cc",
     "shelf/shelf_view_unittest.cc",
@@ -3097,7 +3096,6 @@
     "system/message_center/notifier_settings_view_unittest.cc",
     "system/message_center/session_state_notification_blocker_unittest.cc",
     "system/message_center/unified_message_center_bubble_unittest.cc",
-    "system/microphone_mute/microphone_mute_notification_controller_unittest.cc",
     "system/nearby_share/nearby_share_feature_pod_controller_unittest.cc",
     "system/network/active_network_icon_unittest.cc",
     "system/network/auto_connect_notifier_unittest.cc",
@@ -3552,6 +3550,7 @@
 
 test("ash_pixeltests") {
   sources = [
+    "ambient/ui/ambient_info_view_pixeltest.cc",
     "app_list/views/app_list_item_view_pixeltest.cc",
     "app_list/views/app_list_view_pixeltest.cc",
     "fullscreen_pixeltest.cc",
@@ -3582,6 +3581,7 @@
     "//components/viz/test:test_support",
     "//google_apis/calendar:test_support",
     "//mojo/core/embedder:embedder",
+    "//ui/message_center",
     "//ui/views:test_support",
   ]
 }
diff --git a/ash/accelerometer/accelerometer_file_reader.cc b/ash/accelerometer/accelerometer_file_reader.cc
index b0be64d1..4dcb0e84 100644
--- a/ash/accelerometer/accelerometer_file_reader.cc
+++ b/ash/accelerometer/accelerometer_file_reader.cc
@@ -30,8 +30,6 @@
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace ash {
 
diff --git a/ash/accelerometer/accelerometer_file_reader.h b/ash/accelerometer/accelerometer_file_reader.h
index aa149d4..9b8775f 100644
--- a/ash/accelerometer/accelerometer_file_reader.h
+++ b/ash/accelerometer/accelerometer_file_reader.h
@@ -11,6 +11,7 @@
 #include "ash/accelerometer/accelerometer_reader.h"
 #include "base/files/file_util.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 
diff --git a/ash/ambient/ambient_photo_controller.h b/ash/ambient/ambient_photo_controller.h
index c826fd9c..4c27f88 100644
--- a/ash/ambient/ambient_photo_controller.h
+++ b/ash/ambient/ambient_photo_controller.h
@@ -23,6 +23,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "net/base/backoff_entry.h"
 #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/ash/ambient/ambient_view_delegate_impl.cc b/ash/ambient/ambient_view_delegate_impl.cc
index c77bde3..139133635 100644
--- a/ash/ambient/ambient_view_delegate_impl.cc
+++ b/ash/ambient/ambient_view_delegate_impl.cc
@@ -8,7 +8,6 @@
 #include "ash/ambient/model/ambient_backend_model.h"
 #include "base/check.h"
 #include "base/functional/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 
 namespace ash {
 
diff --git a/ash/ambient/test/ambient_ash_test_base.cc b/ash/ambient/test/ambient_ash_test_base.cc
index 4de6d70..5ae8632 100644
--- a/ash/ambient/test/ambient_ash_test_base.cc
+++ b/ash/ambient/test/ambient_ash_test_base.cc
@@ -29,6 +29,7 @@
 #include "ash/root_window_controller.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/test/ash_test_util.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/location.h"
@@ -91,10 +92,10 @@
   void DecodePhoto(
       const std::string& data,
       base::OnceCallback<void(const gfx::ImageSkia&)> callback) override {
-    gfx::ImageSkia image =
-        decoded_image_ ? *decoded_image_
-                       : gfx::test::CreateImageSkia(decoded_size_.width(),
-                                                    decoded_size_.height());
+    gfx::ImageSkia image = decoded_image_ ? *decoded_image_
+                                          : CreateSolidColorTestImage(
+                                                decoded_size_, decoded_color_);
+
     // Only use once.
     decoded_image_.reset();
 
@@ -140,6 +141,8 @@
     decoded_size_.set_height(height);
   }
 
+  void SetDecodedPhotoColor(SkColor color) { decoded_color_ = color; }
+
   void SetDecodedPhoto(const gfx::ImageSkia& image) { decoded_image_ = image; }
 
   void SetPhotoDownloadDelay(base::TimeDelta delay) {
@@ -164,6 +167,8 @@
   // If not null, will return this data when downloading.
   std::unique_ptr<std::string> download_data_;
 
+  // Color of the test images.
+  SkColor decoded_color_ = SK_ColorGREEN;
   // Width and height of test images.
   gfx::Size decoded_size_{10, 20};
   // If set, will replay this image.
@@ -357,6 +362,13 @@
   photo_cache->SetDecodedPhotoSize(width, height);
 }
 
+void AmbientAshTestBase::SetDecodedPhotoColor(SkColor color) {
+  auto* photo_cache = static_cast<TestAmbientPhotoCacheImpl*>(
+      photo_controller()->get_photo_cache_for_testing());
+
+  photo_cache->SetDecodedPhotoColor(color);
+}
+
 void AmbientAshTestBase::SetPhotoOrientation(bool portrait) {
   backend_controller()->SetPhotoOrientation(portrait);
 }
diff --git a/ash/ambient/test/ambient_ash_test_base.h b/ash/ambient/test/ambient_ash_test_base.h
index 8dbaa494..b395127d 100644
--- a/ash/ambient/test/ambient_ash_test_base.h
+++ b/ash/ambient/test/ambient_ash_test_base.h
@@ -116,6 +116,9 @@
   // Set the size of the next image that will be loaded.
   void SetDecodedPhotoSize(int width, int height);
 
+  // Set the color of the next image that will be loaded.
+  void SetDecodedPhotoColor(SkColor color);
+
   void SetPhotoOrientation(bool portrait);
 
   void SetPhotoTopicType(::ambient::TopicType topic_type);
diff --git a/ash/ambient/ui/ambient_info_view_pixeltest.cc b/ash/ambient/ui/ambient_info_view_pixeltest.cc
new file mode 100644
index 0000000..6b419e4
--- /dev/null
+++ b/ash/ambient/ui/ambient_info_view_pixeltest.cc
@@ -0,0 +1,49 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/ambient/ambient_weather_controller.h"
+#include "ash/ambient/test/ambient_ash_test_base.h"
+#include "ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h"
+#include "ash/test/pixel/ash_pixel_differ.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/skia/include/core/SkColor.h"
+
+namespace ash {
+
+class AmbientInfoViewTest : public AmbientAshTestBase {
+ public:
+  absl::optional<pixel_test::InitParams> CreatePixelTestInitParams()
+      const override {
+    return pixel_test::InitParams();
+  }
+
+  void SetUp() override {
+    AmbientAshTestBase::SetUp();
+    GetSessionControllerClient()->set_show_lock_screen_views(true);
+    SetDecodedPhotoColor(SK_ColorYELLOW);
+    // Set the photo size to match the display size.
+    SetDecodedPhotoSize(800, 600);
+  }
+
+  void TearDown() override {
+    CloseAmbientScreen();
+    AmbientAshTestBase::TearDown();
+  }
+};
+
+TEST_F(AmbientInfoViewTest, ShowAmbientInfoView) {
+  ShowAmbientScreen();
+  DisableJitter();
+
+  WeatherInfo info;
+  info.show_celsius = true;
+  info.condition_icon_url = "https://fake-icon-url";
+  info.temp_f = 70.0f;
+  backend_controller()->SetWeatherInfo(info);
+  FastForwardToRefreshWeather();
+
+  EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen(
+      "ambient_info_view.rev_0", GetAmbientInfoView()));
+}
+}  // namespace ash
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc
index 2a75f06..1bd2870 100644
--- a/ash/app_list/app_list_controller_impl_unittest.cc
+++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -51,6 +51,7 @@
 #include "base/i18n/number_formatting.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "components/session_manager/session_manager_types.h"
 #include "ui/compositor/layer.h"
diff --git a/ash/app_list/views/continue_task_container_view.cc b/ash/app_list/views/continue_task_container_view.cc
index 0dbb63f..644a91be 100644
--- a/ash/app_list/views/continue_task_container_view.cc
+++ b/ash/app_list/views/continue_task_container_view.cc
@@ -17,6 +17,7 @@
 #include "base/check.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "extensions/common/constants.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
diff --git a/ash/capture_mode/capture_label_view.cc b/ash/capture_mode/capture_label_view.cc
index 00282936..394181c 100644
--- a/ash/capture_mode/capture_label_view.cc
+++ b/ash/capture_mode/capture_label_view.cc
@@ -17,6 +17,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/i18n/number_formatting.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/time/time.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ash/capture_mode/capture_mode_controller.cc b/ash/capture_mode/capture_mode_controller.cc
index 0fd7679f..2c507ab 100644
--- a/ash/capture_mode/capture_mode_controller.cc
+++ b/ash/capture_mode/capture_mode_controller.cc
@@ -39,6 +39,7 @@
 #include "base/notreached.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/current_thread.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/ash/capture_mode/capture_mode_test_util.cc b/ash/capture_mode/capture_mode_test_util.cc
index 15f2640..df38fc22 100644
--- a/ash/capture_mode/capture_mode_test_util.cc
+++ b/ash/capture_mode/capture_mode_test_util.cc
@@ -22,6 +22,7 @@
 #include "base/files/file_util.h"
 #include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/display/screen.h"
diff --git a/ash/capture_mode/capture_mode_util.cc b/ash/capture_mode/capture_mode_util.cc
index 8e2748e..9bc377db 100644
--- a/ash/capture_mode/capture_mode_util.cc
+++ b/ash/capture_mode/capture_mode_util.cc
@@ -23,6 +23,7 @@
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/check.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/image_model.h"
 #include "ui/chromeos/events/keyboard_layout_util.h"
diff --git a/ash/child_accounts/parent_access_controller_impl.cc b/ash/child_accounts/parent_access_controller_impl.cc
index 05c4238..1e90142 100644
--- a/ash/child_accounts/parent_access_controller_impl.cc
+++ b/ash/child_accounts/parent_access_controller_impl.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/session_manager/session_manager_types.h"
 #include "ui/base/l10n/l10n_util.h"
 
diff --git a/ash/components/BUILD.gn b/ash/components/BUILD.gn
index 6de7906..a125aa6 100644
--- a/ash/components/BUILD.gn
+++ b/ash/components/BUILD.gn
@@ -19,7 +19,6 @@
     "//ash/components/arc:unit_tests",
     "//ash/components/arc/mojom:unit_tests",
     "//ash/components/arc/session:unit_tests",
-    "//base",
     "//base/test:test_support",
     "//chromeos/ash/components:test_support",
     "//mojo/core/embedder",
diff --git a/ash/components/DEPS b/ash/components/DEPS
index 7e7d463..a70db67b 100644
--- a/ash/components/DEPS
+++ b/ash/components/DEPS
@@ -1,7 +1,4 @@
 include_rules = [
-  "+mojo/core",
-  "+ui",
-
   # Codes in //ash/components are used by ash-chrome, so allow it.
   "+chromeos/ash",
 ]
diff --git a/ash/components/arc/lock_screen/arc_lock_screen_bridge.cc b/ash/components/arc/lock_screen/arc_lock_screen_bridge.cc
index 19417cc1..d77da0d 100644
--- a/ash/components/arc/lock_screen/arc_lock_screen_bridge.cc
+++ b/ash/components/arc/lock_screen/arc_lock_screen_bridge.cc
@@ -9,7 +9,6 @@
 #include "ash/components/arc/session/arc_service_manager.h"
 #include "base/functional/bind.h"
 #include "base/memory/singleton.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/session_manager/core/session_manager.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
diff --git a/ash/components/arc/system_ui/arc_system_ui_bridge.cc b/ash/components/arc/system_ui/arc_system_ui_bridge.cc
index ca7f84e..711554a 100644
--- a/ash/components/arc/system_ui/arc_system_ui_bridge.cc
+++ b/ash/components/arc/system_ui/arc_system_ui_bridge.cc
@@ -13,7 +13,6 @@
 #include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/singleton.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
 namespace arc {
diff --git a/ash/components/arc/timer/arc_timer_bridge.cc b/ash/components/arc/timer/arc_timer_bridge.cc
index 96a8c4f..1f59d5aa 100644
--- a/ash/components/arc/timer/arc_timer_bridge.cc
+++ b/ash/components/arc/timer/arc_timer_bridge.cc
@@ -13,7 +13,6 @@
 #include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/singleton.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "mojo/public/cpp/system/handle.h"
diff --git a/ash/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc b/ash/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
index e06a430..94feb1c 100644
--- a/ash/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
+++ b/ash/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
@@ -18,6 +18,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/media_log.h"
 #include "media/base/video_frame.h"
diff --git a/ash/components/arc/video_accelerator/gpu_arc_video_decoder.cc b/ash/components/arc/video_accelerator/gpu_arc_video_decoder.cc
index c9eba701..a1793f2 100644
--- a/ash/components/arc/video_accelerator/gpu_arc_video_decoder.cc
+++ b/ash/components/arc/video_accelerator/gpu_arc_video_decoder.cc
@@ -16,7 +16,7 @@
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/posix/eintr_wrapper.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
diff --git a/ash/components/arc/video_accelerator/gpu_arc_video_frame_pool.cc b/ash/components/arc/video_accelerator/gpu_arc_video_frame_pool.cc
index 0d46e95..1556cd8 100644
--- a/ash/components/arc/video_accelerator/gpu_arc_video_frame_pool.cc
+++ b/ash/components/arc/video_accelerator/gpu_arc_video_frame_pool.cc
@@ -10,6 +10,8 @@
 #include "ash/components/arc/video_accelerator/protected_buffer_manager.h"
 #include "base/functional/bind.h"
 #include "base/posix/eintr_wrapper.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
 #include "media/base/decoder_status.h"
diff --git a/ash/components/test/DEPS b/ash/components/test/DEPS
new file mode 100644
index 0000000..9243dcd6
--- /dev/null
+++ b/ash/components/test/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+mojo/core/embedder",
+]
diff --git a/ash/components/test/run_all_unittests.cc b/ash/components/test/run_all_unittests.cc
index 0a171db..cf1b6321 100644
--- a/ash/components/test/run_all_unittests.cc
+++ b/ash/components/test/run_all_unittests.cc
@@ -3,23 +3,13 @@
 // found in the LICENSE file.
 
 #include "base/test/launcher/unit_test_launcher.h"
-#include "base/threading/thread.h"
 #include "chromeos/ash/components/test/ash_test_suite.h"
 #include "mojo/core/embedder/embedder.h"
-#include "mojo/core/embedder/scoped_ipc_support.h"
 
 int main(int argc, char** argv) {
   ash::AshTestSuite test_suite(argc, argv);
 
   mojo::core::Init();
-  // The IPC thread is necessary for the window service.
-  base::Thread ipc_thread("IPC thread");
-  ipc_thread.StartWithOptions(
-      base::Thread::Options(base::MessagePumpType::IO, 0));
-  mojo::core::ScopedIPCSupport ipc_support(
-      ipc_thread.task_runner(),
-      mojo::core::ScopedIPCSupport::ShutdownPolicy::CLEAN);
-
   return base::LaunchUnitTests(
       argc, argv,
       base::BindOnce(&ash::AshTestSuite::Run, base::Unretained(&test_suite)));
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index cc61fb2..196a10be 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -1176,7 +1176,7 @@
 // response time).
 BASE_FEATURE(kStartAssistantAudioDecoderOnDemand,
              "StartAssistantAudioDecoderOnDemand",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Enable or disable a new header bar for the ChromeOS virtual keyboard.
 BASE_FEATURE(kVirtualKeyboardNewHeader,
@@ -1499,7 +1499,7 @@
 // https://crbug.com/1299099.
 BASE_FEATURE(kOobeHidDetectionRevamp,
              "OobeHidDetectionRevamp",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Enables OOBE Jelly features.
 BASE_FEATURE(kOobeJelly, "OobeJelly", base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 07e56147..5f98c93 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -550,8 +550,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kStylusBatteryStatus);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kStartAssistantAudioDecoderOnDemand);
-COMPONENT_EXPORT(ASH_CONSTANTS)
-BASE_DECLARE_FEATURE(kSyncSettingsCategorization);
 COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSystemExtensions);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kSystemExtensionsManagedDeviceHealthServices);
diff --git a/ash/events/keyboard_capability_delegate_impl.cc b/ash/events/keyboard_capability_delegate_impl.cc
index 135a9e592..b649546 100644
--- a/ash/events/keyboard_capability_delegate_impl.cc
+++ b/ash/events/keyboard_capability_delegate_impl.cc
@@ -20,6 +20,16 @@
   Shell::Get()->session_controller()->RemoveObserver(this);
 }
 
+void KeyboardCapabilityDelegateImpl::AddObserver(
+    ui::KeyboardCapability::Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void KeyboardCapabilityDelegateImpl::RemoveObserver(
+    ui::KeyboardCapability::Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
 bool KeyboardCapabilityDelegateImpl::TopRowKeysAreFKeys() const {
   // Handle the case when top_row_are_f_keys_pref_ is not initialized yet.
   if (top_row_are_f_keys_pref_->GetPrefName().empty()) {
@@ -41,7 +51,17 @@
 void KeyboardCapabilityDelegateImpl::InitUserPrefs(PrefService* prefs) {
   if (prefs && prefs->FindPreference(prefs::kSendFunctionKeys)) {
     top_row_are_f_keys_pref_ = std::make_unique<BooleanPrefMember>();
-    top_row_are_f_keys_pref_->Init(prefs::kSendFunctionKeys, prefs);
+    top_row_are_f_keys_pref_->Init(
+        prefs::kSendFunctionKeys, prefs,
+        base::BindRepeating(
+            &KeyboardCapabilityDelegateImpl::NotifyTopRowKeysAreFKeysChanged,
+            base::Unretained(this)));
+  }
+}
+
+void KeyboardCapabilityDelegateImpl::NotifyTopRowKeysAreFKeysChanged() {
+  for (auto& observer : observers_) {
+    observer.OnTopRowKeysAreFKeysChanged();
   }
 }
 
diff --git a/ash/events/keyboard_capability_delegate_impl.h b/ash/events/keyboard_capability_delegate_impl.h
index eebab94..a798a05 100644
--- a/ash/events/keyboard_capability_delegate_impl.h
+++ b/ash/events/keyboard_capability_delegate_impl.h
@@ -6,6 +6,7 @@
 #define ASH_EVENTS_KEYBOARD_CAPABILITY_DELEGATE_IMPL_H_
 
 #include "ash/public/cpp/session/session_observer.h"
+#include "base/observer_list.h"
 #include "components/prefs/pref_member.h"
 #include "ui/chromeos/events/keyboard_capability.h"
 
@@ -27,6 +28,8 @@
   ~KeyboardCapabilityDelegateImpl() override;
 
   // ui::EventRewriterChromeOS::Delegate:
+  void AddObserver(ui::KeyboardCapability::Observer* observer) override;
+  void RemoveObserver(ui::KeyboardCapability::Observer* observer) override;
   bool TopRowKeysAreFKeys() const override;
   void SetTopRowKeysAsFKeysEnabledForTesting(bool enabled) override;
 
@@ -37,8 +40,13 @@
   // Initiate user preferences with given pref service.
   void InitUserPrefs(PrefService* prefs);
 
+  void NotifyTopRowKeysAreFKeysChanged();
+
   // An observer to listen for changes to prefs::kSendFunctionKeys.
   std::unique_ptr<BooleanPrefMember> top_row_are_f_keys_pref_;
+
+  // A list of KeyboardCapability Observers.
+  base::ObserverList<ui::KeyboardCapability::Observer>::Unchecked observers_;
 };
 
 }  // namespace ash
diff --git a/ash/events/keyboard_capability_unittest.cc b/ash/events/keyboard_capability_unittest.cc
index d1942c5..22297d7 100644
--- a/ash/events/keyboard_capability_unittest.cc
+++ b/ash/events/keyboard_capability_unittest.cc
@@ -4,30 +4,37 @@
 
 #include "ui/chromeos/events/keyboard_capability.h"
 
+#include "ash/constants/ash_pref_names.h"
+#include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
+#include "components/prefs/pref_service.h"
 #include "ui/events/keycodes/keyboard_codes_posix.h"
 
 namespace ash {
 
-constexpr ui::KeyboardCode kSixPackKeyList[] = {
-    ui::KeyboardCode::VKEY_DELETE, ui::KeyboardCode::VKEY_HOME,
-    ui::KeyboardCode::VKEY_UP,     ui::KeyboardCode::VKEY_END,
-    ui::KeyboardCode::VKEY_NEXT,   ui::KeyboardCode::VKEY_INSERT,
+namespace {
+
+class TestObserver : public ui::KeyboardCapability::Observer {
+ public:
+  TestObserver() = default;
+  TestObserver(const TestObserver&) = delete;
+  TestObserver& operator=(const TestObserver&) = delete;
+  ~TestObserver() override = default;
+
+  void OnTopRowKeysAreFKeysChanged() override {
+    ++top_row_keys_are_f_keys_changed_count_;
+  }
+
+  int top_row_keys_are_f_keys_changed_count() {
+    return top_row_keys_are_f_keys_changed_count_;
+  }
+
+ private:
+  int top_row_keys_are_f_keys_changed_count_ = 0;
 };
 
-constexpr ui::KeyboardCode kLegacyLayoutTwoTopRowKeyList[] = {
-    ui::KeyboardCode::VKEY_BROWSER_BACK,
-    ui::KeyboardCode::VKEY_BROWSER_REFRESH,
-    ui::KeyboardCode::VKEY_ZOOM,
-    ui::KeyboardCode::VKEY_MEDIA_LAUNCH_APP1,
-    ui::KeyboardCode::VKEY_BRIGHTNESS_DOWN,
-    ui::KeyboardCode::VKEY_BRIGHTNESS_UP,
-    ui::KeyboardCode::VKEY_MEDIA_PLAY_PAUSE,
-    ui::KeyboardCode::VKEY_VOLUME_MUTE,
-    ui::KeyboardCode::VKEY_VOLUME_DOWN,
-    ui::KeyboardCode::VKEY_VOLUME_UP,
-};
+}  // namespace
 
 class KeyboardCapabilityTest : public AshTestBase {
  public:
@@ -37,12 +44,38 @@
   void SetUp() override {
     AshTestBase::SetUp();
     keyboard_capability_ = Shell::Get()->keyboard_capability();
+    test_observer_ = std::make_unique<TestObserver>();
+    keyboard_capability_->AddObserver(test_observer_.get());
+  }
+
+  void TearDown() override {
+    keyboard_capability_->RemoveObserver(test_observer_.get());
+    AshTestBase::TearDown();
   }
 
  protected:
   ui::KeyboardCapability* keyboard_capability_;
+  std::unique_ptr<TestObserver> test_observer_;
 };
 
+TEST_F(KeyboardCapabilityTest, TestObserver) {
+  EXPECT_EQ(0, test_observer_->top_row_keys_are_f_keys_changed_count());
+  EXPECT_FALSE(keyboard_capability_->TopRowKeysAreFKeys());
+  PrefService* prefs =
+      Shell::Get()->session_controller()->GetActivePrefService();
+  prefs->SetBoolean(prefs::kSendFunctionKeys, true);
+  prefs->CommitPendingWrite();
+
+  EXPECT_TRUE(keyboard_capability_->TopRowKeysAreFKeys());
+  EXPECT_EQ(1, test_observer_->top_row_keys_are_f_keys_changed_count());
+
+  prefs->SetBoolean(prefs::kSendFunctionKeys, false);
+  prefs->CommitPendingWrite();
+
+  EXPECT_FALSE(keyboard_capability_->TopRowKeysAreFKeys());
+  EXPECT_EQ(2, test_observer_->top_row_keys_are_f_keys_changed_count());
+}
+
 TEST_F(KeyboardCapabilityTest, TestTopRowKeysAreFKeys) {
   // Top row keys are F-Keys pref is false in default.
   EXPECT_FALSE(keyboard_capability_->TopRowKeysAreFKeys());
@@ -55,7 +88,7 @@
 }
 
 TEST_F(KeyboardCapabilityTest, TestIsSixPackKey) {
-  for (const ui::KeyboardCode key_code : kSixPackKeyList) {
+  for (const auto& [key_code, _] : ui::kSixPackKeyToSystemKeyMap) {
     EXPECT_TRUE(keyboard_capability_->IsSixPackKey(key_code));
   }
 
@@ -64,11 +97,11 @@
 }
 
 TEST_F(KeyboardCapabilityTest, TestIsTopRowKey) {
-  for (const ui::KeyboardCode key_code : kLegacyLayoutTwoTopRowKeyList) {
+  for (const auto& [key_code, _] : ui::kLayout2TopRowKeyToFKeyMap) {
     EXPECT_TRUE(keyboard_capability_->IsTopRowKey(key_code));
   }
 
-  // A key not in the kLegacyLayoutTwoTopRowKeyList is not a top row key.
+  // A key not in the kLayout2TopRowKeyToFKeyMap is not a top row key.
   EXPECT_FALSE(keyboard_capability_->IsTopRowKey(ui::KeyboardCode::VKEY_A));
 }
 
diff --git a/ash/hud_display/data_source.cc b/ash/hud_display/data_source.cc
index 55cd04f..223b59a 100644
--- a/ash/hud_display/data_source.cc
+++ b/ash/hud_display/data_source.cc
@@ -10,7 +10,6 @@
 #include "base/cxx17_backports.h"
 #include "base/functional/bind.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace ash {
 namespace hud_display {
diff --git a/ash/keyboard/virtual_keyboard_controller.cc b/ash/keyboard/virtual_keyboard_controller.cc
index e3765152..bf73f5fb 100644
--- a/ash/keyboard/virtual_keyboard_controller.cc
+++ b/ash/keyboard/virtual_keyboard_controller.cc
@@ -20,6 +20,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ui/base/emoji/emoji_panel_helper.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
diff --git a/ash/login/login_screen_controller.cc b/ash/login/login_screen_controller.cc
index 4204063..8cbd71f 100644
--- a/ash/login/login_screen_controller.cc
+++ b/ash/login/login_screen_controller.cc
@@ -31,6 +31,7 @@
 #include "base/functional/callback.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/account_id/account_id.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/session_manager/session_manager_types.h"
diff --git a/ash/login/ui/pin_request_view.cc b/ash/login/ui/pin_request_view.cc
index 7071a80b..bff10ac 100644
--- a/ash/login/ui/pin_request_view.cc
+++ b/ash/login/ui/pin_request_view.cc
@@ -15,6 +15,7 @@
 #include "ash/style/ash_color_provider.h"
 #include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ash/metrics/login_unlock_throughput_recorder_unittest.cc b/ash/metrics/login_unlock_throughput_recorder_unittest.cc
index b6d7fa4..b4181dc 100644
--- a/ash/metrics/login_unlock_throughput_recorder_unittest.cc
+++ b/ash/metrics/login_unlock_throughput_recorder_unittest.cc
@@ -15,6 +15,7 @@
 #include "ash/shell.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "chromeos/ash/components/login/login_state/login_state.h"
 #include "components/app_constants/constants.h"
diff --git a/ash/projector/projector_metadata_controller.cc b/ash/projector/projector_metadata_controller.cc
index fcd24c5..2120419 100644
--- a/ash/projector/projector_metadata_controller.cc
+++ b/ash/projector/projector_metadata_controller.cc
@@ -16,7 +16,6 @@
 #include "base/task/current_thread.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/mojo/mojom/speech_recognition.mojom.h"
 #include "third_party/icu/source/common/unicode/locid.h"
 
diff --git a/ash/projector/projector_ui_controller_unittest.cc b/ash/projector/projector_ui_controller_unittest.cc
index 1306d787..e6fba08 100644
--- a/ash/projector/projector_ui_controller_unittest.cc
+++ b/ash/projector/projector_ui_controller_unittest.cc
@@ -18,6 +18,7 @@
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/test/ash_test_base.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "projector_ui_controller.h"
diff --git a/ash/public/cpp/pagination/pagination_model_unittest.cc b/ash/public/cpp/pagination/pagination_model_unittest.cc
index bbd1ab69..e7c48e9 100644
--- a/ash/public/cpp/pagination/pagination_model_unittest.cc
+++ b/ash/public/cpp/pagination/pagination_model_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/compiler_specific.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "ui/views/test/widget_test.h"
 
diff --git a/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl_unittest.cc b/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl_unittest.cc
index a952677..033f114 100644
--- a/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl_unittest.cc
+++ b/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h"
 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index daa0f07..5ccce5f5 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -83,6 +83,7 @@
 #include "base/functional/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/aura/client/drag_drop_client.h"
diff --git a/ash/shelf/hotseat_widget_unittest.cc b/ash/shelf/hotseat_widget_unittest.cc
index ca5d156..058137a 100644
--- a/ash/shelf/hotseat_widget_unittest.cc
+++ b/ash/shelf/hotseat_widget_unittest.cc
@@ -44,6 +44,7 @@
 #include "ash/wm/window_state.h"
 #include "ash/wm/wm_event.h"
 #include "ash/wm/work_area_insets.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/icu_test_util.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/ash/shelf/shelf_background_animator_unittest.cc b/ash/shelf/shelf_background_animator_unittest.cc
index 9ca14018..a27ec5c57 100644
--- a/ash/shelf/shelf_background_animator_unittest.cc
+++ b/ash/shelf/shelf_background_animator_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/functional/callback.h"
 #include "base/run_loop.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/gfx/animation/slide_animation.h"
 
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 747778b..6a236e8 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -61,6 +61,7 @@
 #include "base/i18n/rtl.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/prefs/pref_service.h"
 #include "ui/aura/client/drag_drop_client.h"
 #include "ui/aura/client/screen_position_client.h"
diff --git a/ash/shelf/shelf_party_feature_pod_controller.cc b/ash/shelf/shelf_party_feature_pod_controller.cc
index 95ea99a3..8b516e3 100644
--- a/ash/shelf/shelf_party_feature_pod_controller.cc
+++ b/ash/shelf/shelf_party_feature_pod_controller.cc
@@ -4,6 +4,7 @@
 
 #include "ash/shelf/shelf_party_feature_pod_controller.h"
 
+#include "ash/constants/ash_features.h"
 #include "ash/constants/quick_settings_catalogs.h"
 #include "ash/public/cpp/shelf_model.h"
 #include "ash/resources/vector_icons/vector_icons.h"
@@ -12,11 +13,23 @@
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/unified/feature_pod_button.h"
+#include "ash/system/unified/feature_tile.h"
 #include "ash/system/unified/quick_settings_metrics_util.h"
 #include "components/session_manager/session_manager_types.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace ash {
+namespace {
+
+bool IsButtonVisible() {
+  SessionControllerImpl* session_controller =
+      Shell::Get()->session_controller();
+  return session_controller->GetSessionState() ==
+             session_manager::SessionState::ACTIVE &&
+         !session_controller->IsEnterpriseManaged();
+}
+
+}  // namespace
 
 ShelfPartyFeaturePodController::ShelfPartyFeaturePodController() = default;
 
@@ -27,6 +40,7 @@
 
 FeaturePodButton* ShelfPartyFeaturePodController::CreateButton() {
   DCHECK(!button_);
+  DCHECK(!features::IsQsRevampEnabled());
   button_ = new FeaturePodButton(this);
   button_->DisableLabelButtonFocus();
   button_->SetVectorIcon(kShelfPartyIcon);
@@ -42,6 +56,25 @@
   return button_;
 }
 
+std::unique_ptr<FeatureTile> ShelfPartyFeaturePodController::CreateTile() {
+  DCHECK(!tile_);
+  DCHECK(features::IsQsRevampEnabled());
+  auto tile = std::make_unique<FeatureTile>(
+      base::BindRepeating(&ShelfPartyFeaturePodController::OnIconPressed,
+                          weak_factory_.GetWeakPtr()));
+  tile_ = tile.get();
+  tile_->SetVectorIcon(kShelfPartyIcon);
+  tile_->SetLabel(
+      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SHELF_PARTY_LABEL));
+
+  // `UpdateTile()` will update visibility.
+  tile_->SetVisible(false);
+  UpdateTile();
+  Shell::Get()->session_controller()->AddObserver(this);
+  Shell::Get()->shelf_controller()->model()->AddObserver(this);
+  return tile;
+}
+
 QsFeatureCatalogName ShelfPartyFeaturePodController::GetCatalogName() {
   return QsFeatureCatalogName::kShelfParty;
 }
@@ -56,21 +89,24 @@
 
 void ShelfPartyFeaturePodController::OnSessionStateChanged(
     session_manager::SessionState state) {
-  UpdateButton();
+  Update();
 }
 
 void ShelfPartyFeaturePodController::ShelfPartyToggled(bool in_shelf_party) {
-  UpdateButton();
+  Update();
+}
+
+void ShelfPartyFeaturePodController::Update() {
+  if (features::IsQsRevampEnabled()) {
+    UpdateTile();
+  } else {
+    UpdateButton();
+  }
 }
 
 void ShelfPartyFeaturePodController::UpdateButton() {
   DCHECK(button_);
-  const SessionControllerImpl* session_controller =
-      Shell::Get()->session_controller();
-
-  const bool visible = session_controller->GetSessionState() ==
-                           session_manager::SessionState::ACTIVE &&
-                       !session_controller->IsEnterpriseManaged();
+  const bool visible = IsButtonVisible();
   // If the button's visibility changes from invisible to visible, log its
   // visibility.
   if (!button_->GetVisible() && visible)
@@ -90,4 +126,27 @@
                   : IDS_ASH_STATUS_TRAY_SHELF_PARTY_DISABLED_STATE_TOOLTIP)));
 }
 
+void ShelfPartyFeaturePodController::UpdateTile() {
+  DCHECK(tile_);
+  const bool visible = IsButtonVisible();
+  // If the button's visibility changes from invisible to visible, log its
+  // visibility.
+  if (!tile_->GetVisible() && visible) {
+    TrackVisibilityUMA();
+  }
+  tile_->SetVisible(visible);
+
+  const bool toggled =
+      Shell::Get()->shelf_controller()->model()->in_shelf_party();
+  tile_->SetToggled(toggled);
+  tile_->SetSubLabel(l10n_util::GetStringUTF16(
+      toggled ? IDS_ASH_STATUS_TRAY_SHELF_PARTY_ON_SUBLABEL
+              : IDS_ASH_STATUS_TRAY_SHELF_PARTY_OFF_SUBLABEL));
+  tile_->SetTooltipText(l10n_util::GetStringFUTF16(
+      IDS_ASH_STATUS_TRAY_SHELF_PARTY_TOGGLE_TOOLTIP,
+      l10n_util::GetStringUTF16(
+          toggled ? IDS_ASH_STATUS_TRAY_SHELF_PARTY_ENABLED_STATE_TOOLTIP
+                  : IDS_ASH_STATUS_TRAY_SHELF_PARTY_DISABLED_STATE_TOOLTIP)));
+}
+
 }  // namespace ash
diff --git a/ash/shelf/shelf_party_feature_pod_controller.h b/ash/shelf/shelf_party_feature_pod_controller.h
index 6526c347..00303f8 100644
--- a/ash/shelf/shelf_party_feature_pod_controller.h
+++ b/ash/shelf/shelf_party_feature_pod_controller.h
@@ -10,9 +10,13 @@
 #include "ash/public/cpp/session/session_observer.h"
 #include "ash/public/cpp/shelf_model_observer.h"
 #include "ash/system/unified/feature_pod_controller_base.h"
+#include "base/memory/weak_ptr.h"
 
 namespace ash {
 
+class FeaturePodButton;
+class FeatureTile;
+
 // Controller of a feature pod button that toggles shelf party mode.
 class ASH_EXPORT ShelfPartyFeaturePodController
     : public FeaturePodControllerBase,
@@ -28,6 +32,7 @@
 
   // FeaturePodControllerBase:
   FeaturePodButton* CreateButton() override;
+  std::unique_ptr<FeatureTile> CreateTile() override;
   QsFeatureCatalogName GetCatalogName() override;
   void OnIconPressed() override;
 
@@ -38,9 +43,15 @@
   void ShelfPartyToggled(bool in_shelf_party) override;
 
  private:
+  void Update();
   void UpdateButton();
+  void UpdateTile();
 
+  // Owned by the views hierarchy.
   FeaturePodButton* button_ = nullptr;
+  FeatureTile* tile_ = nullptr;
+
+  base::WeakPtrFactory<ShelfPartyFeaturePodController> weak_factory_{this};
 };
 
 }  // namespace ash
diff --git a/ash/shelf/shelf_party_feature_pod_controller_unittest.cc b/ash/shelf/shelf_party_feature_pod_controller_unittest.cc
new file mode 100644
index 0000000..5cc4ec7
--- /dev/null
+++ b/ash/shelf/shelf_party_feature_pod_controller_unittest.cc
@@ -0,0 +1,99 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/shelf/shelf_party_feature_pod_controller.h"
+
+#include <memory>
+
+#include "ash/constants/ash_features.h"
+#include "ash/public/cpp/shelf_model.h"
+#include "ash/shelf/shelf_controller.h"
+#include "ash/shell.h"
+#include "ash/system/unified/feature_pod_button.h"
+#include "ash/system/unified/feature_tile.h"
+#include "ash/test/ash_test_base.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/scoped_feature_list.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace ash {
+
+// Tests are parameterized by feature QsRevamp.
+class ShelfPartyFeaturePodControllerTest
+    : public AshTestBase,
+      public testing::WithParamInterface<bool> {
+ public:
+  ShelfPartyFeaturePodControllerTest() {
+    if (IsQsRevampEnabled()) {
+      feature_list_.InitWithFeatures(
+          {features::kShelfParty, features::kQsRevamp, features::kQsRevampWip},
+          {});
+    } else {
+      feature_list_.InitWithFeatures(
+          {features::kShelfParty},
+          {features::kQsRevamp, features::kQsRevampWip});
+    }
+  }
+
+  bool IsQsRevampEnabled() const { return GetParam(); }
+
+  // AshTestBase:
+  void TearDown() override {
+    tile_.reset();
+    button_.reset();
+    controller_.reset();
+    AshTestBase::TearDown();
+  }
+
+  void CreateButton() {
+    controller_ = std::make_unique<ShelfPartyFeaturePodController>();
+    if (IsQsRevampEnabled()) {
+      tile_ = controller_->CreateTile();
+    } else {
+      button_ = base::WrapUnique(controller_->CreateButton());
+    }
+  }
+
+  bool IsButtonVisible() {
+    return IsQsRevampEnabled() ? tile_->GetVisible() : button_->GetVisible();
+  }
+
+  void PressIcon() { controller_->OnIconPressed(); }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+  std::unique_ptr<ShelfPartyFeaturePodController> controller_;
+  std::unique_ptr<FeaturePodButton> button_;
+  std::unique_ptr<FeatureTile> tile_;
+};
+
+INSTANTIATE_TEST_SUITE_P(QsRevamp,
+                         ShelfPartyFeaturePodControllerTest,
+                         testing::Bool());
+
+TEST_P(ShelfPartyFeaturePodControllerTest, ButtonVisibility) {
+  // The button is visible in an active session.
+  CreateButton();
+  EXPECT_TRUE(IsButtonVisible());
+
+  // The button is not visible at the lock screen.
+  GetSessionControllerClient()->LockScreen();
+  CreateButton();
+  EXPECT_FALSE(IsButtonVisible());
+}
+
+TEST_P(ShelfPartyFeaturePodControllerTest, PressIconTogglesShelfParty) {
+  CreateButton();
+  ASSERT_FALSE(Shell::Get()->shelf_controller()->model()->in_shelf_party());
+
+  // Pressing the icon enables shelf party.
+  PressIcon();
+  EXPECT_TRUE(Shell::Get()->shelf_controller()->model()->in_shelf_party());
+
+  // Pressing the icon again disables shelf party.
+  PressIcon();
+  EXPECT_FALSE(Shell::Get()->shelf_controller()->model()->in_shelf_party());
+}
+
+}  // namespace ash
diff --git a/ash/shelf/shelf_tooltip_manager.cc b/ash/shelf/shelf_tooltip_manager.cc
index 6c70b13..dc7338a25 100644
--- a/ash/shelf/shelf_tooltip_manager.cc
+++ b/ash/shelf/shelf_tooltip_manager.cc
@@ -14,7 +14,6 @@
 #include "ash/shelf/shelf_widget.h"
 #include "ash/shell.h"
 #include "base/functional/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "ui/aura/window.h"
 #include "ui/events/event.h"
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 040c15e..fec79a0 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -58,6 +58,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/scoped_observation.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "components/account_id/account_id.h"
 #include "components/services/app_service/public/cpp/app_registry_cache_wrapper.h"
diff --git a/ash/shell.cc b/ash/shell.cc
index 668cb90..c97e29a8 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -652,6 +652,7 @@
 
   // Observes `SessionController` and must be destroyed before it.
   privacy_hub_controller_.reset();
+  microphone_privacy_switch_controller_.reset();
 
   for (auto& observer : shell_observers_)
     observer.OnShellDestroying();
@@ -1452,6 +1453,11 @@
   if (features::IsCrosPrivacyHubEnabled()) {
     // One of the subcontrollers accesses the SystemNotificationController.
     privacy_hub_controller_ = std::make_unique<PrivacyHubController>();
+  } else if (features::IsMicMuteNotificationsEnabled()) {
+    // TODO(b/264388354) Until PrivacyHub is enabled for all keep this around
+    // for the already existing microphone notifications to continue working.
+    microphone_privacy_switch_controller_ =
+        std::make_unique<MicrophonePrivacySwitchController>();
   }
 
   // WmModeController should be created before initializing the window tree
diff --git a/ash/shell.h b/ash/shell.h
index a5d24d7b..e5316618 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -163,6 +163,7 @@
 class MediaControllerImpl;
 class MessageCenterAshImpl;
 class MessageCenterController;
+class MicrophonePrivacySwitchController;
 class MouseCursorEventFilter;
 class MruWindowTracker;
 class MultiDeviceNotificationPresenter;
@@ -907,6 +908,8 @@
   std::unique_ptr<MessageCenterAshImpl> message_center_ash_impl_;
   std::unique_ptr<MediaControllerImpl> media_controller_;
   std::unique_ptr<MediaNotificationProviderImpl> media_notification_provider_;
+  std::unique_ptr<MicrophonePrivacySwitchController>
+      microphone_privacy_switch_controller_;
   std::unique_ptr<MruWindowTracker> mru_window_tracker_;
   std::unique_ptr<MultiDeviceNotificationPresenter>
       multidevice_notification_presenter_;
diff --git a/ash/shell_unittest.cc b/ash/shell_unittest.cc
index 9aea1bf..5ffd429 100644
--- a/ash/shell_unittest.cc
+++ b/ash/shell_unittest.cc
@@ -40,7 +40,6 @@
 #include "base/containers/flat_set.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/account_id/account_id.h"
 #include "ui/aura/env.h"
 #include "ui/aura/window.h"
diff --git a/ash/shortcut_viewer/views/keyboard_shortcut_view.cc b/ash/shortcut_viewer/views/keyboard_shortcut_view.cc
index 1e931fc..1beba339 100644
--- a/ash/shortcut_viewer/views/keyboard_shortcut_view.cc
+++ b/ash/shortcut_viewer/views/keyboard_shortcut_view.cc
@@ -32,6 +32,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "chromeos/ui/base/window_properties.h"
diff --git a/ash/system/camera/camera_effects_controller.cc b/ash/system/camera/camera_effects_controller.cc
index 05f637a..55372b3 100644
--- a/ash/system/camera/camera_effects_controller.cc
+++ b/ash/system/camera/camera_effects_controller.cc
@@ -15,6 +15,7 @@
 #include "base/check_is_test.h"
 #include "base/notreached.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "components/prefs/pref_registry_simple.h"
diff --git a/ash/system/holding_space/holding_space_progress_indicator_util.cc b/ash/system/holding_space/holding_space_progress_indicator_util.cc
index 238334e8..349b02d 100644
--- a/ash/system/holding_space/holding_space_progress_indicator_util.cc
+++ b/ash/system/holding_space/holding_space_progress_indicator_util.cc
@@ -12,7 +12,6 @@
 #include "ash/public/cpp/holding_space/holding_space_progress.h"
 #include "ash/system/holding_space/holding_space_animation_registry.h"
 #include "ash/system/progress_indicator/progress_indicator.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 
 namespace ash {
 namespace holding_space_util {
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc
index dd2d6af..f3afed0 100644
--- a/ash/system/ime_menu/ime_menu_tray.cc
+++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -170,6 +170,7 @@
     SetOrientation(views::BoxLayout::Orientation::kHorizontal);
     SetInsideBorderInsets(kTitleViewPadding);
     SetMinimumCrossAxisSize(kTrayPopupItemMinHeight);
+    SetCrossAxisAlignment(views::BoxLayout::CrossAxisAlignment::kCenter);
 
     auto* title_label = AddChildView(std::make_unique<views::Label>(
         l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_IME)));
diff --git a/ash/system/message_center/ash_notification_view_pixeltest.cc b/ash/system/message_center/ash_notification_view_pixeltest.cc
index bbb2a174..dc7df5d 100644
--- a/ash/system/message_center/ash_notification_view_pixeltest.cc
+++ b/ash/system/message_center/ash_notification_view_pixeltest.cc
@@ -7,8 +7,9 @@
 #include "ash/test/ash_test_util.h"
 #include "ash/test/pixel/ash_pixel_differ.h"
 #include "ash/test/pixel/ash_pixel_test_init_params.h"
+#include "base/strings/utf_string_conversions.h"
 #include "ui/base/models/image_model.h"
-#include "ui/views/view.h"
+#include "ui/message_center/views/message_view.h"
 
 namespace ash {
 
@@ -75,14 +76,15 @@
   const std::string title = GetParam().first;
 
   const std::string id = test_api()->AddCustomNotification(
-      title, "Notification Content",
+      base::UTF8ToUTF16(title), u"Notification Content",
       ui::ImageModel::FromImageSkia(CreateSolidColorTestImage(
           gfx::Size(/*width=*/45, /*height=*/45), SK_ColorGREEN)));
 
   test_api()->ToggleBubble();
 
   // Make sure the notification view exists and is visible.
-  views::View* notification_view = test_api()->GetNotificationViewForId(id);
+  message_center::MessageView* notification_view =
+      test_api()->GetNotificationViewForId(id);
   ASSERT_TRUE(notification_view);
   EXPECT_TRUE(notification_view->GetVisible());
 
diff --git a/ash/system/message_center/notification_grouping_controller.cc b/ash/system/message_center/notification_grouping_controller.cc
index 6ccb9b4..5db40d2 100644
--- a/ash/system/message_center/notification_grouping_controller.cc
+++ b/ash/system/message_center/notification_grouping_controller.cc
@@ -4,11 +4,13 @@
 
 #include "ash/system/message_center/notification_grouping_controller.h"
 
+#include "ash/constants/ash_features.h"
 #include "ash/system/message_center/ash_message_popup_collection.h"
 #include "ash/system/message_center/ash_notification_view.h"
 #include "ash/system/message_center/message_center_utils.h"
 #include "ash/system/message_center/metrics_utils.h"
 #include "ash/system/message_center/unified_message_center_bubble.h"
+#include "ash/system/notification_center/notification_center_tray.h"
 #include "ash/system/notification_center/notification_center_view.h"
 #include "ash/system/notification_center/notification_list_view.h"
 #include "ash/system/unified/unified_system_tray.h"
@@ -46,8 +48,9 @@
 
     child_parent_map_[notification_id] = parent_id;
 
-    if (notification_id != parent_id)
+    if (notification_id != parent_id) {
       notifications_in_parent_map_[parent_id].insert(notification_id);
+    }
   }
 
   // Remove a single child notification from a grouped notification.
@@ -63,11 +66,13 @@
     notifications_in_parent_map_.erase(parent_id);
     std::vector<std::string> to_be_deleted;
     for (const auto& it : child_parent_map_) {
-      if (it.second == parent_id)
+      if (it.second == parent_id) {
         to_be_deleted.push_back(it.first);
+      }
     }
-    for (const auto& child : to_be_deleted)
+    for (const auto& child : to_be_deleted) {
       child_parent_map_.erase(child);
+    }
   }
 
   const std::string& GetParentForChild(const std::string& child_id) {
@@ -100,8 +105,9 @@
     // Replace all occurrences of `old_parent_id` with `new_parent_id`.
     std::vector<std::string> to_be_updated;
     for (const auto& child : child_parent_map_) {
-      if (child.second == old_parent_id)
+      if (child.second == old_parent_id) {
         to_be_updated.push_back(child.first);
+      }
     }
     for (const auto& id : to_be_updated) {
       child_parent_map_.erase(child_parent_map_.find(id));
@@ -132,8 +138,10 @@
 }  // namespace
 
 NotificationGroupingController::NotificationGroupingController(
-    UnifiedSystemTray* tray)
-    : tray_(tray),
+    UnifiedSystemTray* system_tray,
+    NotificationCenterTray* notification_tray)
+    : system_tray_(system_tray),
+      notification_tray_(notification_tray),
       grouped_notification_list_(&GetGroupedNotificationListInstance()) {
   observer_.Observe(MessageCenter::Get());
 }
@@ -161,8 +169,9 @@
     return;
   }
 
-  if (!parent_view->IsManuallyExpandedOrCollapsed())
+  if (!parent_view->IsManuallyExpandedOrCollapsed()) {
     parent_view->SetExpanded(false);
+  }
 
   std::vector<const Notification*> notifications;
   for (auto* notification : MessageCenter::Get()->GetNotifications()) {
@@ -190,13 +199,15 @@
   auto* message_center = MessageCenter::Get();
 
   auto* notification_view_controller = GetActiveNotificationViewController();
-  if (!notification_view_controller)
+  if (!notification_view_controller) {
     return;
+  }
 
   Notification* notification =
       message_center->FindNotificationById(notification_id);
-  if (!notification)
+  if (!notification) {
     return;
+  }
 
   parent_id = SetupParentNotification(parent_notification, parent_id);
 
@@ -205,10 +216,11 @@
 
   MessageView* parent_view =
       notification_view_controller->GetMessageViewForNotificationId(parent_id);
-  if (parent_view)
+  if (parent_view) {
     parent_view->AddGroupNotification(*notification);
-  else
+  } else {
     message_center->ResetSinglePopup(parent_id);
+  }
 
   metrics_utils::LogCountOfNotificationsInOneGroup(
       grouped_notification_list_->GetGroupedNotificationsForParent(parent_id)
@@ -237,8 +249,9 @@
     auto* controller =
         message_center_utils::GetActiveNotificationViewControllerForDisplay(
             display.id());
-    if (!controller)
+    if (!controller) {
       continue;
+    }
     controller->ConvertNotificationViewToGroupedNotificationView(
         /*ungrouped_notification_id=*/old_parent_id,
         /*new_grouped_notification_id=*/new_parent_id);
@@ -303,11 +316,13 @@
   copy->set_delegate(parent_notification.delegate());
   copy->set_vector_small_image(parent_notification.parent_vector_small_image());
 
-  if (parent_notification.accent_color_id().has_value())
+  if (parent_notification.accent_color_id().has_value()) {
     copy->set_accent_color_id(parent_notification.accent_color_id().value());
+  }
 
-  if (parent_notification.accent_color().has_value())
+  if (parent_notification.accent_color().has_value()) {
     copy->set_accent_color(parent_notification.accent_color().value());
+  }
 
   // After copying, set to be a group parent.
   copy->SetGroupParent();
@@ -339,21 +354,31 @@
 
 message_center::NotificationViewController*
 NotificationGroupingController::GetActiveNotificationViewController() {
-  if (tray_->IsMessageCenterBubbleShown()) {
-    auto* notification_list_view = tray_->message_center_bubble()
-                                       ->notification_center_view()
-                                       ->notification_list_view();
-    if (notification_list_view)
-      return notification_list_view;
+  if (message_center::MessageCenter::Get()->IsMessageCenterVisible()) {
+    if (features::IsQsRevampEnabled()) {
+      return notification_tray_->GetNotificationListView();
+    }
+    // Return `notification_list_view()` if `message_center_bubble()` exists,
+    // return nullptr otherwise. It would be incorrect to return
+    // `MessagePopupCollection` in that case since `IsMessageCenterVisible` is
+    // true which means that `MessagePopupCollection` is not the active view
+    // controller. This state can happen if this function is called during
+    // `message_center_bubble()` construction.
+    return system_tray_->IsMessageCenterBubbleShown()
+               ? system_tray_->message_center_bubble()
+                     ->notification_center_view()
+                     ->notification_list_view()
+               : nullptr;
   }
-  return tray_->GetMessagePopupCollection();
+  return system_tray_->GetMessagePopupCollection();
 }
 
 void NotificationGroupingController::OnNotificationAdded(
     const std::string& notification_id) {
   // Do not double process a notification that was re-added as a grouped parent.
-  if (adding_parent_grouped_notification_)
+  if (adding_parent_grouped_notification_) {
     return;
+  }
 
   auto* message_center = MessageCenter::Get();
   Notification* notification =
@@ -361,11 +386,13 @@
 
   // We only need to process notifications that are children of an
   // existing group. So do nothing otherwise.
-  if (!notification)
+  if (!notification) {
     return;
+  }
 
-  if (!notification->group_child())
+  if (!notification->group_child()) {
     return;
+  }
 
   Notification* parent_notification =
       message_center->FindParentNotification(notification);
@@ -397,8 +424,9 @@
 
   if (parent_view) {
     parent_view->AddGroupNotification(*notification);
-    if (message_center->FindPopupNotificationById(parent_id))
+    if (message_center->FindPopupNotificationById(parent_id)) {
       message_center->ResetPopupTimer(parent_id);
+    }
   } else {
     message_center->ResetSinglePopup(parent_id);
   }
@@ -413,8 +441,9 @@
 void NotificationGroupingController::OnNotificationDisplayed(
     const std::string& notification_id,
     const message_center::DisplaySource source) {
-  if (grouped_notification_list_->ParentNotificationExists(notification_id))
+  if (grouped_notification_list_->ParentNotificationExists(notification_id)) {
     PopulateGroupParent(notification_id);
+  }
 }
 
 void NotificationGroupingController::OnNotificationRemoved(
@@ -428,8 +457,9 @@
 
     RemoveGroupedChild(notification_id);
 
-    if (message_center->FindPopupNotificationById(parent_id))
+    if (message_center->FindPopupNotificationById(parent_id)) {
       message_center->ResetPopupTimer(parent_id);
+    }
 
     metrics_utils::LogCountOfNotificationsInOneGroup(
         grouped_notification_list_->GetGroupedNotificationsForParent(parent_id)
@@ -445,8 +475,9 @@
                        std::back_inserter(to_be_deleted));
     grouped_notification_list_->ClearGroupedNotification(notification_id);
 
-    for (const auto& id : to_be_deleted)
+    for (const auto& id : to_be_deleted) {
       message_center->RemoveNotification(id, by_user);
+    }
   }
 }
 
diff --git a/ash/system/message_center/notification_grouping_controller.h b/ash/system/message_center/notification_grouping_controller.h
index 3eda56ad..1e09bb7 100644
--- a/ash/system/message_center/notification_grouping_controller.h
+++ b/ash/system/message_center/notification_grouping_controller.h
@@ -19,6 +19,7 @@
 class GroupedNotificationList;
 }  // namespace
 
+class NotificationCenterTray;
 class UnifiedSystemTray;
 
 // A controller class to manage adding, removing and updating group
@@ -26,7 +27,8 @@
 class NotificationGroupingController
     : public message_center::MessageCenterObserver {
  public:
-  explicit NotificationGroupingController(UnifiedSystemTray* tray);
+  NotificationGroupingController(UnifiedSystemTray* system_tray,
+                                 NotificationCenterTray* notification_tray);
   NotificationGroupingController(const NotificationGroupingController& other) =
       delete;
   NotificationGroupingController& operator=(
@@ -83,7 +85,13 @@
   // to prevent an infinite loop.
   bool adding_parent_grouped_notification_ = false;
 
-  UnifiedSystemTray* const tray_;
+  // Owner of this class.
+  UnifiedSystemTray* const system_tray_;
+
+  // Raw ptr to the `NotificationCenterTray` adjacent to `system_tray_`, has the
+  // same owner as `system_tray_`.
+  // TODO(b/251687017): Make this the owner of this class.
+  NotificationCenterTray* const notification_tray_;
 
   // A data structure that holds all grouped notifications along with their
   // associations with their parent notifications. This pointer is assigned to a
diff --git a/ash/system/message_center/notification_grouping_controller_unittest.cc b/ash/system/message_center/notification_grouping_controller_unittest.cc
index 8095ddf..6233a03 100644
--- a/ash/system/message_center/notification_grouping_controller_unittest.cc
+++ b/ash/system/message_center/notification_grouping_controller_unittest.cc
@@ -8,6 +8,8 @@
 #include "ash/constants/ash_features.h"
 #include "ash/system/message_center/ash_message_popup_collection.h"
 #include "ash/system/message_center/ash_notification_view.h"
+#include "ash/system/notification_center/notification_center_tray.h"
+#include "ash/system/tray/tray_background_view.h"
 #include "ash/system/unified/unified_system_tray.h"
 #include "ash/test/ash_test_base.h"
 #include "base/run_loop.h"
@@ -34,7 +36,9 @@
 const char kIdFormat[] = "id%ld";
 }  // namespace
 
-class NotificationGroupingControllerTest : public AshTestBase {
+class NotificationGroupingControllerTest
+    : public AshTestBase,
+      public testing::WithParamInterface<bool> {
  public:
   NotificationGroupingControllerTest() = default;
   NotificationGroupingControllerTest(
@@ -44,8 +48,16 @@
   ~NotificationGroupingControllerTest() override = default;
 
   void SetUp() override {
-    scoped_feature_list_.InitAndEnableFeature(
-        ash::features::kNotificationsRefresh);
+    if (IsQsRevampEnabled()) {
+      scoped_feature_list_.InitWithFeatures(
+          /*enabled_features=*/{features::kQsRevamp, features::kQsRevampWip},
+          /*disabled_features=*/{});
+    } else {
+      scoped_feature_list_.InitWithFeatures(
+          /*enabled_features=*/{},
+          /*disabled_features=*/{features::kQsRevamp, features::kQsRevampWip});
+    }
+
     AshTestBase::SetUp();
   }
 
@@ -127,12 +139,18 @@
     return view->slide_out_controller_for_test();
   }
 
+  bool IsQsRevampEnabled() const { return GetParam(); }
+
   base::test::ScopedFeatureList scoped_feature_list_;
 
   size_t notifications_counter_ = 0;
 };
 
-TEST_F(NotificationGroupingControllerTest, BasicGrouping) {
+INSTANTIATE_TEST_SUITE_P(All,
+                         NotificationGroupingControllerTest,
+                         testing::Bool() /* IsQsRevampEnabled() */);
+
+TEST_P(NotificationGroupingControllerTest, BasicGrouping) {
   auto* message_center = MessageCenter::Get();
   std::string id0, id1, id2;
   const GURL url(u"http://test-url.com/");
@@ -148,7 +166,7 @@
   EXPECT_TRUE(message_center->FindNotificationById(id_parent)->group_parent());
 }
 
-TEST_F(NotificationGroupingControllerTest, BasicRemoval) {
+TEST_P(NotificationGroupingControllerTest, BasicRemoval) {
   std::string id0, id1, id2;
   const GURL url(u"http://test-url.com");
   id0 = AddNotificationWithOriginUrl(url);
@@ -172,9 +190,15 @@
       MessageCenter::Get()->FindNotificationById(id_parent)->group_parent());
 }
 
-TEST_F(NotificationGroupingControllerTest,
+TEST_P(NotificationGroupingControllerTest,
        ParentNotificationReshownWithNewChild) {
-  auto* tray = GetPrimaryUnifiedSystemTray();
+  TrayBackgroundView* tray;
+
+  if (features::IsQsRevampEnabled()) {
+    tray = GetPrimaryNotificationCenterTray();
+  } else {
+    tray = GetPrimaryUnifiedSystemTray();
+  }
 
   std::string id0;
   const GURL url(u"http://test-url.com");
@@ -204,7 +228,7 @@
   EXPECT_TRUE(GetPopupView(parent_id));
 }
 
-TEST_F(NotificationGroupingControllerTest,
+TEST_P(NotificationGroupingControllerTest,
        RemovingParentRemovesChildGroupNotifications) {
   std::string id0;
   const GURL url(u"http://test-url.com");
@@ -220,7 +244,7 @@
   ASSERT_FALSE(MessageCenter::Get()->HasPopupNotifications());
 }
 
-TEST_F(NotificationGroupingControllerTest,
+TEST_P(NotificationGroupingControllerTest,
        RepopulatedParentNotificationRemoval) {
   auto* message_center = MessageCenter::Get();
   std::string id0, id1, id2, id3, id4;
@@ -232,9 +256,17 @@
 
   std::string parent_id = id0 + kIdSuffixForGroupContainerNotification;
 
-  // Toggle the system tray to dismiss all popups.
-  GetPrimaryUnifiedSystemTray()->ShowBubble();
-  GetPrimaryUnifiedSystemTray()->CloseBubble();
+  if (IsQsRevampEnabled()) {
+    // Toggle the notification tray to dismiss all popups.
+    GetPrimaryNotificationCenterTray()->ShowBubble();
+    GetPrimaryNotificationCenterTray()->CloseBubble();
+  } else {
+    // Toggle the system tray to dismiss all popups.
+    GetPrimaryUnifiedSystemTray()->ShowBubble();
+    GetPrimaryUnifiedSystemTray()->CloseBubble();
+  }
+
+  ASSERT_FALSE(MessageCenter::Get()->HasPopupNotifications());
 
   id4 = AddNotificationWithOriginUrl(url);
 
@@ -252,7 +284,7 @@
   EXPECT_TRUE(parent->group_parent());
 }
 
-TEST_F(NotificationGroupingControllerTest, ParentNotificationMetadata) {
+TEST_P(NotificationGroupingControllerTest, ParentNotificationMetadata) {
   auto* message_center = MessageCenter::Get();
   std::string id0, id1, id2;
   const GURL url(u"http://test-url.com/");
@@ -278,7 +310,7 @@
   EXPECT_EQ(&icon, &parent_notification->vector_small_image());
 }
 
-TEST_F(NotificationGroupingControllerTest,
+TEST_P(NotificationGroupingControllerTest,
        NotificationsGroupingOnMultipleScreens) {
   UpdateDisplay("800x600,800x600");
   auto* message_center = MessageCenter::Get();
@@ -302,7 +334,7 @@
 
 // Even though it is not a web notification, privacy indicators notification
 // should group together.
-TEST_F(NotificationGroupingControllerTest, GroupPrivacyIndicatorsNotification) {
+TEST_P(NotificationGroupingControllerTest, GroupPrivacyIndicatorsNotification) {
   auto* message_center = MessageCenter::Get();
   std::string id0, id1;
   const GURL url0(u"http://test-url1.com/");
@@ -322,9 +354,13 @@
 
 // Create a group notification while the message center bubble is
 // is shown.
-TEST_F(NotificationGroupingControllerTest,
+TEST_P(NotificationGroupingControllerTest,
        NotificationsGroupingMessageCenterBubbleShown) {
-  GetPrimaryUnifiedSystemTray()->ShowBubble();
+  if (IsQsRevampEnabled()) {
+    GetPrimaryNotificationCenterTray()->ShowBubble();
+  } else {
+    GetPrimaryUnifiedSystemTray()->ShowBubble();
+  }
 
   auto* message_center = MessageCenter::Get();
   std::string id0, id1, id2;
@@ -341,7 +377,7 @@
   EXPECT_TRUE(message_center->FindNotificationById(id_parent)->group_parent());
 }
 
-TEST_F(NotificationGroupingControllerTest,
+TEST_P(NotificationGroupingControllerTest,
        GroupedNotificationRemovedDuringAnimation) {
   auto* message_center = MessageCenter::Get();
   std::string id0, id1;
@@ -362,7 +398,7 @@
   waiter.Wait(GetPopupView(id0)->message_view()->layer());
 }
 
-TEST_F(NotificationGroupingControllerTest,
+TEST_P(NotificationGroupingControllerTest,
        ParentNotificationRemovedDuringAnimation) {
   // Enable animations.
   ui::ScopedAnimationDurationScaleMode duration(
@@ -391,7 +427,7 @@
 // correctly dismissed when swiped in the collapse state rather than moved into
 // the center of the screen. Also, tests that the correct notifications are
 // dismissed by swiping in the expanded state.
-TEST_F(NotificationGroupingControllerTest, NotificationSwipeGestureBehavior) {
+TEST_P(NotificationGroupingControllerTest, NotificationSwipeGestureBehavior) {
   auto* message_center = MessageCenter::Get();
   std::string parent_id, id0, id1, id2, id3;
   const GURL url(u"http://test-url.com/");
@@ -438,7 +474,7 @@
 // Regression test for b/251684908. Tests that a duplicate `AddNotification`
 // event does not cause the associated notification popup to be dismissed or the
 // original notification to be grouped incorrectly.
-TEST_F(NotificationGroupingControllerTest, DuplicateAddNotificationNotGrouped) {
+TEST_P(NotificationGroupingControllerTest, DuplicateAddNotificationNotGrouped) {
   std::string id = AddNotificationWithOriginUrl(GURL(u"http://test-url.com/"));
 
   auto* popup = GetPopupView(id);
@@ -461,7 +497,7 @@
   EXPECT_FALSE(message_center->FindNotificationById(id)->group_child());
 }
 
-TEST_F(NotificationGroupingControllerTest, ChildNotificationUpdate) {
+TEST_P(NotificationGroupingControllerTest, ChildNotificationUpdate) {
   auto* message_center = MessageCenter::Get();
   std::string id0, id1, id2;
   const GURL url(u"http://test-url.com/");
@@ -483,7 +519,7 @@
 // When the last child of the group notification is removed, its parent
 // notification should be removed as well. We are testing in the case where
 // there is no popup or notification center is not showing.
-TEST_F(NotificationGroupingControllerTest, ChildNotificationRemove) {
+TEST_P(NotificationGroupingControllerTest, ChildNotificationRemove) {
   auto* message_center = MessageCenter::Get();
   std::string id0, id1;
   const GURL url(u"http://test-url.com/");
diff --git a/ash/system/microphone_mute/microphone_mute_notification_controller.cc b/ash/system/microphone_mute/microphone_mute_notification_controller.cc
deleted file mode 100644
index f474cf33..0000000
--- a/ash/system/microphone_mute/microphone_mute_notification_controller.cc
+++ /dev/null
@@ -1,233 +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 "ash/system/microphone_mute/microphone_mute_notification_controller.h"
-
-#include <cstdint>
-#include <string>
-#include <vector>
-
-#include "ash/constants/notifier_catalogs.h"
-#include "ash/public/cpp/new_window_delegate.h"
-#include "ash/public/cpp/notification_utils.h"
-#include "ash/public/cpp/sensor_disabled_notification_delegate.h"
-#include "ash/shell.h"
-#include "ash/strings/grit/ash_strings.h"
-#include "ash/system/privacy_hub/privacy_hub_metrics.h"
-#include "ash/system/privacy_hub/privacy_hub_notification_controller.h"
-#include "ash/system/system_notification_controller.h"
-#include "base/functional/bind.h"
-#include "base/strings/utf_string_conversions.h"
-#include "components/vector_icons/vector_icons.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/message_center/message_center.h"
-#include "ui/message_center/public/cpp/notification_delegate.h"
-
-namespace ash {
-namespace {
-
-// TODO(b/244529735): Replace the generic support URL with the final one.
-const char kLearnMoreUrl[] = "https://www.support.google.com/chromebook";
-
-void SetMicrophoneNotificationVisible(const bool visible) {
-  PrivacyHubNotificationController* const privacy_hub_notification_controller =
-      Shell::Get()->system_notification_controller()->privacy_hub();
-  if (visible) {
-    privacy_hub_notification_controller->ShowSensorDisabledNotification(
-        PrivacyHubNotificationController::Sensor::kMicrophone);
-  } else {
-    privacy_hub_notification_controller->RemoveSensorDisabledNotification(
-        PrivacyHubNotificationController::Sensor::kMicrophone);
-  }
-}
-
-}  // namespace
-
-// static
-const char MicrophoneMuteNotificationController::kNotificationId[] =
-    "ash://microphone_mute";
-
-MicrophoneMuteNotificationController::MicrophoneMuteNotificationController() {
-  audio_observation_.Observe(CrasAudioHandler::Get());
-}
-
-MicrophoneMuteNotificationController::~MicrophoneMuteNotificationController() =
-    default;
-
-void MicrophoneMuteNotificationController::OnInputMuteChanged(
-    bool mute_on,
-    CrasAudioHandler::InputMuteChangeMethod method) {
-  mic_mute_on_ = mute_on;
-  mic_muted_by_mute_switch_ =
-      CrasAudioHandler::Get()->input_muted_by_microphone_mute_switch();
-
-  if (input_stream_count_)
-    SetMicrophoneNotificationVisible(mic_mute_on_);
-}
-
-void MicrophoneMuteNotificationController::
-    OnInputMutedByMicrophoneMuteSwitchChanged(bool muted) {
-  if (mic_muted_by_mute_switch_ == muted)
-    return;
-
-  mic_muted_by_mute_switch_ = muted;
-
-  if (input_stream_count_)
-    SetMicrophoneNotificationVisible(mic_mute_on_);
-}
-
-void MicrophoneMuteNotificationController::
-    OnNumberOfInputStreamsWithPermissionChanged() {
-  // Catches the case where a mic-using app is launched while the mic is muted.
-  const int input_stream_count = CountActiveInputStreams();
-  const bool stream_count_decreased = input_stream_count < input_stream_count_;
-  input_stream_count_ = input_stream_count;
-
-  if (!stream_count_decreased) {
-    SetMicrophoneNotificationVisible(input_stream_count_ && mic_mute_on_);
-  } else if (!input_stream_count_) {
-    SetMicrophoneNotificationVisible(false);
-  }
-}
-
-void MicrophoneMuteNotificationController::MaybeShowNotification(
-    message_center::NotificationPriority priority,
-    bool recreate) {
-  if (mic_mute_on_) {
-    auto* sensor_disabled_notification_delegate =
-        SensorDisabledNotificationDelegate::Get();
-    // `SensorDisabledNotificationDelegate` is not created in guest mode.
-    if (!sensor_disabled_notification_delegate) {
-      return;
-    }
-    std::vector<std::u16string> app_names =
-        sensor_disabled_notification_delegate->GetAppsAccessingSensor(
-            SensorDisabledNotificationDelegate::Sensor::kMicrophone);
-    if (!app_names.empty() || input_stream_count_) {
-      if (recreate)
-        RemoveMicrophoneMuteNotification();
-
-      std::unique_ptr<message_center::Notification> notification =
-          GenerateMicrophoneMuteNotification(app_names, priority);
-      message_center::MessageCenter::Get()->AddNotification(
-          std::move(notification));
-      return;
-    }
-  }
-
-  RemoveMicrophoneMuteNotification();
-}
-
-// static
-void MicrophoneMuteNotificationController::SetAndLogMicrophoneMute(
-    const bool muted) {
-  CrasAudioHandler::Get()->SetInputMute(
-      muted, CrasAudioHandler::InputMuteChangeMethod::kOther);
-  privacy_hub_metrics::LogMicrophoneEnabledFromNotification(!muted);
-}
-
-std::unique_ptr<message_center::Notification>
-MicrophoneMuteNotificationController::GenerateMicrophoneMuteNotification(
-    const std::vector<std::u16string>& app_names,
-    message_center::NotificationPriority priority) {
-  message_center::RichNotificationData notification_data;
-  notification_data.priority = priority;
-  current_notification_priority_ = priority;
-  notification_data.remove_on_click = true;
-
-  scoped_refptr<message_center::NotificationDelegate> delegate;
-
-  if (mic_muted_by_mute_switch_) {
-    // If microphone is muted by the hardware(HW) switch, show the 'Learn more'
-    // button, pointing to the instructions how to unmute the system (unmute
-    // can't be done programmatically).
-    notification_data.buttons.emplace_back(
-        l10n_util::GetStringUTF16(IDS_ASH_LEARN_MORE));
-    delegate =
-        base::MakeRefCounted<message_center::HandleNotificationClickDelegate>(
-            base::BindRepeating([](absl::optional<int> button_index) {
-              if (!button_index) {
-                return;
-              }
-
-              NewWindowDelegate::GetPrimary()->OpenUrl(
-                  GURL(kLearnMoreUrl),
-                  NewWindowDelegate::OpenUrlFrom::kUserInteraction,
-                  NewWindowDelegate::Disposition::kNewForegroundTab);
-            }));
-  } else {
-    // If microphone is muted by the software(SW) switch, add the unmute
-    // button to the notification.
-    notification_data.buttons.emplace_back(l10n_util::GetStringUTF16(
-        IDS_MICROPHONE_MUTED_NOTIFICATION_ACTION_BUTTON));
-    delegate =
-        base::MakeRefCounted<message_center::HandleNotificationClickDelegate>(
-            base::BindRepeating([](absl::optional<int> button_index) {
-              if (!button_index) {
-                PrivacyHubNotificationController::OpenPrivacyHubSettingsPage();
-                return;
-              }
-
-              SetAndLogMicrophoneMute(false);
-            }));
-  }
-
-  std::unique_ptr<message_center::Notification> notification =
-      CreateSystemNotificationPtr(
-          message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId,
-          GetNotificationTitle(), GetNotificationMessage(app_names),
-          /*display_source=*/std::u16string(), GURL(),
-          message_center::NotifierId(
-              message_center::NotifierType::SYSTEM_COMPONENT, kNotificationId,
-              NotificationCatalogName::kMicrophoneMute),
-          notification_data, delegate, vector_icons::kSettingsIcon,
-          message_center::SystemNotificationWarningLevel::NORMAL);
-  return notification;
-}
-
-std::u16string MicrophoneMuteNotificationController::GetNotificationMessage(
-    const std::vector<std::u16string>& app_names) const {
-  if (app_names.size() == 1) {
-    return l10n_util::GetStringFUTF16(
-        IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_ONE_APP_NAME,
-        app_names[0]);
-  } else if (app_names.size() == 2) {
-    return l10n_util::GetStringFUTF16(
-        IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_TWO_APP_NAMES,
-        app_names[0], app_names[1]);
-  }
-
-  // If no application name can be determined or more than 2 applications are
-  // attempting to use the microphone, we display this message in the
-  // notification.
-  return l10n_util::GetStringUTF16(IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE);
-}
-
-std::u16string MicrophoneMuteNotificationController::GetNotificationTitle()
-    const {
-  if (mic_muted_by_mute_switch_) {
-    return l10n_util::GetStringUTF16(
-        IDS_MICROPHONE_MUTED_BY_HW_SWITCH_NOTIFICATION_TITLE);
-  }
-  return l10n_util::GetStringUTF16(
-      IDS_MICROPHONE_MUTED_BY_SW_SWITCH_NOTIFICATION_TITLE);
-}
-
-void MicrophoneMuteNotificationController::RemoveMicrophoneMuteNotification() {
-  current_notification_priority_.reset();
-  message_center::MessageCenter::Get()->RemoveNotification(kNotificationId,
-                                                           /*by_user=*/false);
-}
-
-int MicrophoneMuteNotificationController::CountActiveInputStreams() {
-  int num_active_streams = 0;
-  base::flat_map<CrasAudioHandler::ClientType, uint32_t> input_streams =
-      CrasAudioHandler::Get()->GetNumberOfInputStreamsWithPermission();
-  for (auto& client_type_info : input_streams)
-    num_active_streams += client_type_info.second;
-
-  return num_active_streams;
-}
-
-}  // namespace ash
diff --git a/ash/system/microphone_mute/microphone_mute_notification_controller.h b/ash/system/microphone_mute/microphone_mute_notification_controller.h
deleted file mode 100644
index 779ed515..0000000
--- a/ash/system/microphone_mute/microphone_mute_notification_controller.h
+++ /dev/null
@@ -1,107 +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 ASH_SYSTEM_MICROPHONE_MUTE_MICROPHONE_MUTE_NOTIFICATION_CONTROLLER_H_
-#define ASH_SYSTEM_MICROPHONE_MUTE_MICROPHONE_MUTE_NOTIFICATION_CONTROLLER_H_
-
-#include <string>
-
-#include "ash/ash_export.h"
-#include "base/memory/weak_ptr.h"
-#include "base/scoped_observation.h"
-#include "chromeos/ash/components/audio/cras_audio_handler.h"
-#include "ui/message_center/public/cpp/notification_types.h"
-
-namespace message_center {
-class Notification;
-}  // namespace message_center
-
-namespace ash {
-
-// Controller class to manage microphone mute notifications. This
-// notification shows up when the user launches an app that uses the microphone
-// while the microphone is muted.
-class ASH_EXPORT MicrophoneMuteNotificationController
-    : public ash::CrasAudioHandler::AudioObserver {
- public:
-  MicrophoneMuteNotificationController();
-  MicrophoneMuteNotificationController(
-      const MicrophoneMuteNotificationController&) = delete;
-  MicrophoneMuteNotificationController& operator=(
-      const MicrophoneMuteNotificationController&) = delete;
-  ~MicrophoneMuteNotificationController() override;
-
-  // Shows the microphone muted notification if it needs to be shown.
-  // |priority| - The priority with which the notification should be shown.
-  // |recreate| - Whether the notification should be recreated if it's already
-  // shown.
-  void MaybeShowNotification(message_center::NotificationPriority priority,
-                             bool recreate);
-
-  // ash::CrasAudioHandler::AudioObserver:
-  void OnInputMuteChanged(
-      bool mute_on,
-      CrasAudioHandler::InputMuteChangeMethod method) override;
-  void OnInputMutedByMicrophoneMuteSwitchChanged(bool muted) override;
-  void OnNumberOfInputStreamsWithPermissionChanged() override;
-
-  static const char kNotificationId[];
-
-  // Set the microphone input to `muted` and log the interaction.
-  static void SetAndLogMicrophoneMute(bool muted);
-
- private:
-  friend class MicrophoneMuteNotificationControllerTest;
-
-  // Creates a notification for telling the user they're attempting to use the
-  // mic while the mic is muted.
-  std::unique_ptr<message_center::Notification>
-  GenerateMicrophoneMuteNotification(
-      const std::vector<std::u16string>& app_names,
-      message_center::NotificationPriority priority);
-
-  // Mic mute notification title.
-  std::u16string GetNotificationTitle() const;
-
-  // Mic mute notification body.
-  // If the list of names of the applications attempting to use the microphone
-  // provided via \p app_names is empty or has more that two elements, a generic
-  // text without referrring to any application name will be displayed.
-  // Otherwise, the displayed text will contain 1-2 application names depending
-  // on the availability.
-  std::u16string GetNotificationMessage(
-      const std::vector<std::u16string>& app_names) const;
-
-  // Takes down the mic mute notification.
-  void RemoveMicrophoneMuteNotification();
-
-  // Returns number if we have any active input stream with permission, of any
-  // client type.  See
-  // ash::CrasAudioClient::NumberOfInputStreamsWithPermissionChanged() for more
-  // details.
-  int CountActiveInputStreams();
-
-  // Whether the microphone is muted.
-  bool mic_mute_on_ = false;
-  // Whether the microphone is muted using a microphone mute switch.
-  bool mic_muted_by_mute_switch_ = false;
-  // The number of currently active audio input steams.
-  int input_stream_count_ = 0;
-
-  // Set when a microphone mute notification is shown. Contains the notification
-  // priority used for the notification.
-  absl::optional<message_center::NotificationPriority>
-      current_notification_priority_;
-
-  base::ScopedObservation<ash::CrasAudioHandler,
-                          ash::CrasAudioHandler::AudioObserver>
-      audio_observation_{this};
-
-  base::WeakPtrFactory<MicrophoneMuteNotificationController> weak_ptr_factory_{
-      this};
-};
-
-}  // namespace ash
-
-#endif  // ASH_SYSTEM_MICROPHONE_MUTE_MICROPHONE_MUTE_NOTIFICATION_CONTROLLER_H_
diff --git a/ash/system/microphone_mute/microphone_mute_notification_controller_unittest.cc b/ash/system/microphone_mute/microphone_mute_notification_controller_unittest.cc
deleted file mode 100644
index 7f508d1..0000000
--- a/ash/system/microphone_mute/microphone_mute_notification_controller_unittest.cc
+++ /dev/null
@@ -1,608 +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 <memory>
-#include <string>
-#include <vector>
-
-#include "ash/constants/ash_features.h"
-#include "ash/public/cpp/sensor_disabled_notification_delegate.h"
-#include "ash/public/cpp/test/test_new_window_delegate.h"
-#include "ash/public/cpp/test/test_system_tray_client.h"
-#include "ash/strings/grit/ash_strings.h"
-#include "ash/system/microphone_mute/microphone_mute_notification_controller.h"
-#include "ash/system/privacy_hub/privacy_hub_metrics.h"
-#include "ash/test/ash_test_base.h"
-#include "base/check.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/test/metrics/histogram_tester.h"
-#include "base/test/scoped_feature_list.h"
-#include "chromeos/ash/components/audio/cras_audio_handler.h"
-#include "chromeos/ash/components/dbus/audio/cras_audio_client.h"
-#include "chromeos/ash/components/dbus/audio/fake_cras_audio_client.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-#include "ui/aura/window.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/message_center/message_center.h"
-#include "ui/message_center/public/cpp/notification.h"
-#include "ui/message_center/public/cpp/notification_types.h"
-
-namespace ash {
-
-namespace {
-
-class FakeSensorDisabledNotificationDelegate
-    : public SensorDisabledNotificationDelegate {
- public:
-  std::vector<std::u16string> GetAppsAccessingSensor(Sensor sensor) override {
-    if (sensor == Sensor::kMicrophone) {
-      return apps_accessing_microphone_;
-    }
-    return {};
-  }
-
-  void LaunchAppAccessingMicrophone(
-      const absl::optional<std::u16string> app_name) {
-    if (app_name.has_value()) {
-      apps_accessing_microphone_.insert(apps_accessing_microphone_.begin(),
-                                        app_name.value());
-    }
-  }
-
- private:
-  std::vector<std::u16string> apps_accessing_microphone_;
-};
-
-class MockNewWindowDelegate : public testing::NiceMock<TestNewWindowDelegate> {
- public:
-  // TestNewWindowDelegate:
-  MOCK_METHOD(void,
-              OpenUrl,
-              (const GURL& url, OpenUrlFrom from, Disposition disposition),
-              (override));
-};
-
-}  // namespace
-
-class MicrophoneMuteNotificationControllerTest : public AshTestBase {
- public:
-  MicrophoneMuteNotificationControllerTest() {
-    scoped_feature_list_.InitAndEnableFeature(features::kMicMuteNotifications);
-    auto delegate = std::make_unique<MockNewWindowDelegate>();
-    new_window_delegate_ = delegate.get();
-    window_delegate_provider_ =
-        std::make_unique<TestNewWindowDelegateProvider>(std::move(delegate));
-  }
-  ~MicrophoneMuteNotificationControllerTest() override = default;
-
-  // AshTestBase:
-  void SetUp() override {
-    AshTestBase::SetUp();
-
-    controller_ = std::make_unique<MicrophoneMuteNotificationController>();
-    delegate_ = std::make_unique<FakeSensorDisabledNotificationDelegate>();
-  }
-
-  void TearDown() override {
-    controller_.reset();
-    delegate_.reset();
-    SetMicrophoneMuteSwitchState(/*muted=*/false);
-    AshTestBase::TearDown();
-  }
-
- protected:
-  message_center::Notification* GetNotification() {
-    const message_center::NotificationList::Notifications& notifications =
-        message_center::MessageCenter::Get()->GetVisibleNotifications();
-    for (auto* notification : notifications) {
-      if (notification->id() ==
-          MicrophoneMuteNotificationController::kNotificationId) {
-        return notification;
-      }
-    }
-    return nullptr;
-  }
-
-  message_center::Notification* GetPopupNotification() {
-    const message_center::NotificationList::PopupNotifications& notifications =
-        message_center::MessageCenter::Get()->GetPopupNotifications();
-    for (auto* notification : notifications) {
-      if (notification->id() ==
-          MicrophoneMuteNotificationController::kNotificationId) {
-        return notification;
-      }
-    }
-    return nullptr;
-  }
-
-  void MarkPopupAsShown() {
-    message_center::MessageCenter::Get()->MarkSinglePopupAsShown(
-        MicrophoneMuteNotificationController::kNotificationId, true);
-  }
-
-  void ClickOnNotificationButton() {
-    message_center::MessageCenter::Get()->ClickOnNotificationButton(
-        MicrophoneMuteNotificationController::kNotificationId,
-        /*button_index=*/0);
-  }
-
-  void ClickOnNotificationBody() {
-    message_center::MessageCenter::Get()->ClickOnNotification(
-        MicrophoneMuteNotificationController::kNotificationId);
-  }
-
-  void SetMicrophoneMuteSwitchState(bool muted) {
-    ui::MicrophoneMuteSwitchMonitor::Get()->SetMicrophoneMuteSwitchValue(muted);
-  }
-
-  void MuteMicrophone() {
-    CrasAudioHandler::Get()->SetInputMute(
-        true, CrasAudioHandler::InputMuteChangeMethod::kOther);
-  }
-
-  void UnMuteMicrophone() {
-    CrasAudioHandler::Get()->SetInputMute(
-        false, CrasAudioHandler::InputMuteChangeMethod::kOther);
-  }
-
-  void SetNumberOfActiveInputStreams(int number_of_active_input_streams) {
-    FakeCrasAudioClient::Get()->SetActiveInputStreamsWithPermission(
-        {{"CRAS_CLIENT_TYPE_CHROME", number_of_active_input_streams}});
-  }
-
-  void LaunchApp(absl::optional<std::u16string> app_name) {
-    delegate_->LaunchAppAccessingMicrophone(app_name);
-  }
-
-  const base::HistogramTester& histogram_tester() const {
-    return histogram_tester_;
-  }
-
-  MockNewWindowDelegate& new_window_delegate() { return *new_window_delegate_; }
-
- private:
-  const base::HistogramTester histogram_tester_;
-  base::test::ScopedFeatureList scoped_feature_list_;
-  std::unique_ptr<MicrophoneMuteNotificationController> controller_;
-  std::unique_ptr<FakeSensorDisabledNotificationDelegate> delegate_;
-  MockNewWindowDelegate* new_window_delegate_ = nullptr;
-  std::unique_ptr<TestNewWindowDelegateProvider> window_delegate_provider_;
-};
-
-TEST_F(MicrophoneMuteNotificationControllerTest, SimpleMuteUnMute) {
-  // No notification initially.
-  EXPECT_FALSE(GetNotification());
-
-  // Or when we mute.
-  MuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-
-  // Or when we unmute.
-  UnMuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest, LaunchAppNotUsingMicrophone) {
-  // No notification initially.
-  EXPECT_FALSE(GetNotification());
-
-  // No notification when we unmute.
-  UnMuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-
-  // Launch an app that's not using the mic, should be no notification.
-  LaunchApp(absl::nullopt);
-  SetNumberOfActiveInputStreams(0);
-  EXPECT_FALSE(GetNotification());
-
-  // Mute the mic, still no notification because no app is using the mic.
-  MuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest, LaunchAppUsingMicrophone) {
-  // No notification initially.
-  EXPECT_FALSE(GetNotification());
-
-  // No notification when we unmute.
-  UnMuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-
-  // Mute the mic, still no notification.
-  MuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-
-  // Launch an app that's using the mic. The microphone mute notification should
-  // show as a popup.
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-  // Notification should not be pinned.
-  EXPECT_FALSE(GetNotification()->rich_notification_data().pinned);
-
-  // Unmute again, notification goes down.
-  UnMuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       SilentNotificationOnMuteWhileMicInUse) {
-  // No notification initially.
-  EXPECT_FALSE(GetNotification());
-
-  // Launch an app that's using the mic, no notification because the microphone
-  // is not muted.
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-  EXPECT_FALSE(GetNotification());
-
-  // Mute the mic, a notification should be shown and also popup.
-  MuteMicrophone();
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       ShowPopupNotificationOnStreamAddition) {
-  // Launch an app while microphone is muted.
-  MuteMicrophone();
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-
-  ASSERT_TRUE(GetNotification());
-  ASSERT_TRUE(GetPopupNotification());
-
-  // Mark the notification as read.
-  MarkPopupAsShown();
-  ASSERT_FALSE(GetPopupNotification());
-
-  // Add an app, and verify the notification popup gets shown.
-  LaunchApp(u"rose");
-  SetNumberOfActiveInputStreams(2);
-
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       RemovingStreamDoesNotShowPopup) {
-  // Launch 2 apps while microphone is muted.
-  MuteMicrophone();
-  LaunchApp(u"junior");
-  LaunchApp(u"rose");
-  SetNumberOfActiveInputStreams(2);
-
-  ASSERT_TRUE(GetNotification());
-  ASSERT_TRUE(GetPopupNotification());
-
-  // Mark the notification as read.
-  MarkPopupAsShown();
-  ASSERT_FALSE(GetPopupNotification());
-
-  // Remove an active stream, and verify that the notification popup is not
-  // reshown.
-  SetNumberOfActiveInputStreams(1);
-
-  EXPECT_TRUE(GetNotification());
-  EXPECT_FALSE(GetPopupNotification());
-
-  // The notification should be removed if all input streams are removed.
-  LaunchApp(absl::nullopt);
-  SetNumberOfActiveInputStreams(0);
-
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       SwMuteNotificationActionButton) {
-  MuteMicrophone();
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-
-  // The mute notification should have an action button.
-  message_center::Notification* notification = GetNotification();
-  ASSERT_TRUE(notification);
-  EXPECT_EQ(1u, notification->buttons().size());
-
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                true),
-            0);
-  // Clicking the action button should unmute device.
-  ClickOnNotificationButton();
-  EXPECT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
-
-  EXPECT_FALSE(GetNotification());
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                true),
-            1);
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest, SwMuteNotificationActionBody) {
-  MuteMicrophone();
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-
-  // The mute notification should have an action button.
-  message_center::Notification* notification = GetNotification();
-  ASSERT_TRUE(notification);
-  EXPECT_EQ(1u, notification->buttons().size());
-
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::kPrivacyHubOpenedHistogram,
-                privacy_hub_metrics::PrivacyHubNavigationOrigin::kNotification),
-            0);
-
-  // Clicking the action button should unmute device.
-  ClickOnNotificationBody();
-  EXPECT_EQ(GetSystemTrayClient()->show_os_settings_privacy_hub_count(), 1);
-  EXPECT_TRUE(CrasAudioHandler::Get()->IsInputMuted());
-
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::kPrivacyHubOpenedHistogram,
-                privacy_hub_metrics::PrivacyHubNavigationOrigin::kNotification),
-            1);
-
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       HwMuteNotificationActionButton) {
-  SetMicrophoneMuteSwitchState(/*muted=*/true);
-
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-
-  // The mute notification should have a "Learn more" button.
-  message_center::Notification* notification = GetNotification();
-  ASSERT_TRUE(notification);
-  EXPECT_EQ(1u, notification->buttons().size());
-
-  // Clicking the "Learn more" button should open a new Chrome tab with the
-  // support link.
-  EXPECT_CALL(new_window_delegate(), OpenUrl).Times(1);
-  ClickOnNotificationButton();
-
-  EXPECT_TRUE(CrasAudioHandler::Get()->IsInputMuted());
-
-  SetMicrophoneMuteSwitchState(/*muted=*/false);
-  ASSERT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest, HwMuteNotificationActionBody) {
-  SetMicrophoneMuteSwitchState(/*muted=*/true);
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-
-  message_center::Notification* notification = GetNotification();
-  ASSERT_TRUE(notification);
-  EXPECT_EQ(1u, notification->buttons().size());
-
-  ClickOnNotificationBody();
-
-  // Check that clicking the body has no effect and notification disappears.
-  EXPECT_TRUE(CrasAudioHandler::Get()->IsInputMuted());
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       TogglingMuteSwitchRemovesNotificationActionButton) {
-  // Mute microphone, and activate an audio input stream.
-  MuteMicrophone();
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-
-  // The mute notification should have an action button.
-  message_center::Notification* notification = GetNotification();
-  ASSERT_TRUE(notification);
-  EXPECT_EQ(1u, notification->buttons().size());
-  EXPECT_EQ(l10n_util::GetStringUTF16(
-                IDS_MICROPHONE_MUTED_NOTIFICATION_ACTION_BUTTON),
-            notification->buttons()[0].title);
-
-  // Toggle microphone mute switch and verify that new notification appears with
-  // a "Learn more" button.
-  SetMicrophoneMuteSwitchState(/*muted=*/true);
-  notification = GetNotification();
-  ASSERT_TRUE(notification);
-  EXPECT_EQ(1u, notification->buttons().size());
-  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_LEARN_MORE),
-            notification->buttons()[0].title);
-
-  SetMicrophoneMuteSwitchState(/*muted=*/false);
-  ASSERT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       TogglingMuteSwitchDoesNotHideNotificationPopup) {
-  // Mute microphone, and activate an audio input stream.
-  MuteMicrophone();
-
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-
-  // Verify the notification popup is shown.
-  ASSERT_TRUE(GetNotification());
-  ASSERT_TRUE(GetPopupNotification());
-
-  // Toggle microphone mute switch and verify that toggling mute switch alone
-  // does not hide the notification popup.
-  SetMicrophoneMuteSwitchState(/*muted=*/true);
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-
-  SetMicrophoneMuteSwitchState(/*muted=*/false);
-  ASSERT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       RemovingAllInputStreamsWhileHwSwitchToggled) {
-  SetMicrophoneMuteSwitchState(/*muted=*/true);
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(2);
-
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-
-  SetNumberOfActiveInputStreams(0);
-
-  EXPECT_FALSE(GetNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest,
-       ToggleMicrophoneMuteSwitchWhileInputStreamActive) {
-  // Launch an app using microphone, and toggle mute switch.
-  LaunchApp(u"junior");
-  SetNumberOfActiveInputStreams(1);
-  SetMicrophoneMuteSwitchState(/*muted=*/true);
-
-  // Notification should be shown and also popup.
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-
-  // Add another audio input stream, and verify the notification popup shows.
-  LaunchApp(u"junior1");
-  SetNumberOfActiveInputStreams(2);
-
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-
-  // Mark notification as read, and then remove an audio input stream.
-  MarkPopupAsShown();
-  ASSERT_FALSE(GetPopupNotification());
-  SetNumberOfActiveInputStreams(1);
-
-  // Verify that notification popup is not reshown.
-  EXPECT_TRUE(GetNotification());
-  EXPECT_FALSE(GetPopupNotification());
-
-  // Adding another stream shows a popup again.
-  LaunchApp(u"rose");
-  SetNumberOfActiveInputStreams(2);
-
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest, NotificationText) {
-  // No notification initially.
-  EXPECT_FALSE(GetNotification());
-
-  // Mute the mic using sw switch, still no notification.
-  MuteMicrophone();
-  EXPECT_FALSE(GetNotification());
-
-  // Launch an app that's not using the mic, should be no notification.
-  LaunchApp(absl::nullopt);
-  EXPECT_FALSE(GetNotification());
-
-  // Launch an app that's using the mic, but the name of the app can not be
-  // determined.
-  LaunchApp(absl::nullopt);
-  SetNumberOfActiveInputStreams(1);
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-  EXPECT_EQ(l10n_util::GetStringUTF16(
-                IDS_MICROPHONE_MUTED_BY_SW_SWITCH_NOTIFICATION_TITLE),
-            GetNotification()->title());
-  // The notification body should not contain any app name.
-  EXPECT_EQ(
-      l10n_util::GetStringUTF16(IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE),
-      GetNotification()->message());
-
-  // Launch an app that's using the mic, the name of the app can be determined.
-  LaunchApp(u"app1");
-  SetNumberOfActiveInputStreams(2);
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-  // The notification body should contain name of the app.
-  EXPECT_EQ(
-      l10n_util::GetStringFUTF16(
-          IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_ONE_APP_NAME, u"app1"),
-      GetNotification()->message());
-
-  // Launch another app that's using the mic, the name of the app can be
-  // determined.
-  LaunchApp(u"app2");
-  SetNumberOfActiveInputStreams(3);
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-  // The notification body should contain the two available app names in the
-  // order of most recently launched.
-  EXPECT_EQ(l10n_util::GetStringFUTF16(
-                IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_TWO_APP_NAMES,
-                u"app2", u"app1"),
-            GetNotification()->message());
-
-  // Launch yet another app that's using the mic, the name of the app can be
-  // determined.
-  LaunchApp(u"app3");
-  SetNumberOfActiveInputStreams(4);
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-  // As more that two apps are attempting to use the microphone, we fall back to
-  // displaying the generic message in the notification.
-  EXPECT_EQ(
-      l10n_util::GetStringUTF16(IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE),
-      GetNotification()->message());
-
-  EXPECT_FALSE(
-      ui::MicrophoneMuteSwitchMonitor::Get()->microphone_mute_switch_on());
-  // Toggle the hw switch.
-  SetMicrophoneMuteSwitchState(/*muted=*/true);
-  EXPECT_TRUE(GetNotification());
-  EXPECT_TRUE(GetPopupNotification());
-  // The title of the notification should be different when microphone is muted
-  // by the hw switch.
-  EXPECT_EQ(l10n_util::GetStringUTF16(
-                IDS_MICROPHONE_MUTED_BY_HW_SWITCH_NOTIFICATION_TITLE),
-            GetNotification()->title());
-}
-
-TEST_F(MicrophoneMuteNotificationControllerTest, MetricCollection) {
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                true),
-            0);
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                false),
-            0);
-
-  MicrophoneMuteNotificationController::SetAndLogMicrophoneMute(true);
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                true),
-            0);
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                false),
-            1);
-
-  MicrophoneMuteNotificationController::SetAndLogMicrophoneMute(false);
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                true),
-            1);
-  EXPECT_EQ(histogram_tester().GetBucketCount(
-                privacy_hub_metrics::
-                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
-                false),
-            1);
-}
-
-}  // namespace ash
diff --git a/ash/system/network/network_state_list_detailed_view.cc b/ash/system/network/network_state_list_detailed_view.cc
index 79e59776..3fd20c9 100644
--- a/ash/system/network/network_state_list_detailed_view.cc
+++ b/ash/system/network/network_state_list_detailed_view.cc
@@ -19,7 +19,6 @@
 #include "base/functional/bind.h"
 #include "base/metrics/user_metrics.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/ash/components/network/network_connect.h"
 #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
diff --git a/ash/system/notification_center/notification_center_bubble.cc b/ash/system/notification_center/notification_center_bubble.cc
index 1346e56..289701c 100644
--- a/ash/system/notification_center/notification_center_bubble.cc
+++ b/ash/system/notification_center/notification_center_bubble.cc
@@ -41,7 +41,6 @@
 
   notification_center_view_ =
       bubble_view->AddChildView(std::make_unique<NotificationCenterView>());
-  notification_center_view_->Init();
 
   // Show the bubble.
   bubble_wrapper_ =
@@ -53,6 +52,11 @@
   bubble_wrapper_->bubble_view()->ResetDelegate();
 }
 
+void NotificationCenterBubble::ShowBubble() {
+  notification_center_view_->Init();
+  GetBubbleView()->SizeToContents();
+}
+
 TrayBubbleView* NotificationCenterBubble::GetBubbleView() {
   return bubble_wrapper_->bubble_view();
 }
diff --git a/ash/system/notification_center/notification_center_bubble.h b/ash/system/notification_center/notification_center_bubble.h
index 87a8fdf..8cf90f0 100644
--- a/ash/system/notification_center/notification_center_bubble.h
+++ b/ash/system/notification_center/notification_center_bubble.h
@@ -32,9 +32,20 @@
 
   ~NotificationCenterBubble() override;
 
+  // Initializes the `NotificationCenterView` which results in notifications
+  // being added to the view. This is necessary outside of the constructor
+  // because the `NotificationGroupingController` expects
+  // `NotificationCenterBubble` to be fully constructed when notifications are
+  // added to it.
+  void ShowBubble();
+
   TrayBubbleView* GetBubbleView();
   views::Widget* GetBubbleWidget();
 
+  NotificationCenterView* notification_center_view() {
+    return notification_center_view_;
+  }
+
  private:
   friend class NotificationCenterTestApi;
 
diff --git a/ash/system/notification_center/notification_center_bubble_unittest.cc b/ash/system/notification_center/notification_center_bubble_unittest.cc
index d34185eb..9cb5371 100644
--- a/ash/system/notification_center/notification_center_bubble_unittest.cc
+++ b/ash/system/notification_center/notification_center_bubble_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "ui/display/display.h"
 #include "ui/display/manager/display_manager.h"
+#include "ui/message_center/views/message_view.h"
 
 namespace ash {
 
@@ -123,4 +124,29 @@
   EXPECT_LT(notification_center_view->bounds().height(), display_height);
 }
 
+// Tests that notifications from a single notifier id are grouped in a single
+// parent notification view.
+TEST_F(NotificationCenterBubbleTest, NotificationsGroupingBasic) {
+  const std::string source_url = "http://test-url.com";
+
+  std::string id0, id1;
+  id0 = test_api()->AddNotificationWithSourceUrl(source_url);
+  id1 = test_api()->AddNotificationWithSourceUrl(source_url);
+
+  // Get the notification id for the parent notification. Parent notifications
+  // are created by copying the oldest notification for a given notifier_id.
+  const std::string parent_id =
+      test_api()->NotificationIdToParentNotificationId(id0);
+
+  test_api()->ToggleBubble();
+
+  auto* parent_notification_view =
+      test_api()->GetNotificationViewForId(parent_id);
+
+  // Ensure id0, id1 exist as child notifications inside the
+  // `parent_notification_view`.
+  EXPECT_TRUE(parent_notification_view->FindGroupNotificationView(id0));
+  EXPECT_TRUE(parent_notification_view->FindGroupNotificationView(id1));
+}
+
 }  // namespace ash
diff --git a/ash/system/notification_center/notification_center_test_api.cc b/ash/system/notification_center/notification_center_test_api.cc
index 5088263b..c0626bd 100644
--- a/ash/system/notification_center/notification_center_test_api.cc
+++ b/ash/system/notification_center/notification_center_test_api.cc
@@ -8,6 +8,7 @@
 #include "ash/shelf/shelf.h"
 #include "ash/shell.h"
 #include "ash/system/message_center/ash_message_popup_collection.h"
+#include "ash/system/message_center/ash_notification_view.h"
 #include "ash/system/message_center/unified_message_center_bubble.h"
 #include "ash/system/notification_center/notification_center_bubble.h"
 #include "ash/system/notification_center/notification_center_tray.h"
@@ -17,9 +18,12 @@
 #include "ash/system/unified/notification_counter_view.h"
 #include "ash/system/unified/unified_system_tray.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
 #include "ui/base/models/image_model.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/message_center/message_center.h"
+#include "ui/message_center/public/cpp/message_center_constants.h"
+#include "ui/message_center/public/cpp/notifier_id.h"
 #include "ui/message_center/views/message_popup_view.h"
 
 namespace ash {
@@ -47,20 +51,34 @@
   event_generator->ClickLeftButton();
 }
 
-std::string NotificationCenterTestApi::AddNotification() {
-  return AddCustomNotification(/*title=*/"test_title",
-                               /*message=*/"test_message",
-                               /*icon=*/ui::ImageModel());
-}
-
 std::string NotificationCenterTestApi::AddCustomNotification(
-    const std::string& title,
-    const std::string& message,
-    const ui::ImageModel& icon) {
+    const std::u16string& title,
+    const std::u16string& message,
+    const ui::ImageModel& icon,
+    const std::u16string& display_source,
+    const GURL& url,
+    const message_center::NotifierId& notifier_id) {
   const std::string id = GenerateNotificationId();
 
-  message_center::MessageCenter::Get()->AddNotification(
-      CreateNotification(id, title, message, icon));
+  message_center::MessageCenter::Get()->AddNotification(CreateNotification(
+      id, title, message, icon, display_source, url, notifier_id));
+  return id;
+}
+
+std::string NotificationCenterTestApi::AddNotification() {
+  return AddCustomNotification(/*title=*/u"test_title",
+                               /*message=*/u"test_message");
+}
+
+std::string NotificationCenterTestApi::AddNotificationWithSourceUrl(
+    const std::string& url) {
+  const std::string id = GenerateNotificationId();
+
+  GURL gurl = GURL(url);
+  message_center::MessageCenter::Get()->AddNotification(CreateNotification(
+      id, u"test_title", u"test_message", ui::ImageModel(),
+      base::EmptyString16(), gurl, message_center::NotifierId(gurl)));
+
   return id;
 }
 
@@ -91,8 +109,8 @@
       ->GetVisible();
 }
 
-views::View* NotificationCenterTestApi::GetNotificationViewForId(
-    const std::string& id) {
+message_center::MessageView*
+NotificationCenterTestApi::GetNotificationViewForId(const std::string& id) {
   // Ensure this api is only called when the notification list view exists, i.e.
   // The notification center bubble is open.
   DCHECK(GetNotificationListView());
@@ -134,6 +152,11 @@
       ->notification_bar_->clear_all_button_;
 }
 
+std::string NotificationCenterTestApi::NotificationIdToParentNotificationId(
+    const std::string& id) {
+  return id + message_center::kIdSuffixForGroupContainerNotification;
+}
+
 std::string NotificationCenterTestApi::GenerateNotificationId() {
   return base::NumberToString(notification_id_++);
 }
@@ -158,15 +181,17 @@
 }
 
 std::unique_ptr<message_center::Notification>
-NotificationCenterTestApi::CreateNotification(const std::string& id,
-                                              const std::string& title,
-                                              const std::string& message,
-                                              const ui::ImageModel& icon) {
+NotificationCenterTestApi::CreateNotification(
+    const std::string& id,
+    const std::u16string& title,
+    const std::u16string& message,
+    const ui::ImageModel& icon,
+    const std::u16string& display_source,
+    const GURL& url,
+    const message_center::NotifierId& notifier_id) {
   return std::make_unique<message_center::Notification>(
-      message_center::NOTIFICATION_TYPE_SIMPLE, id, base::UTF8ToUTF16(title),
-      u"test message", icon,
-      /*display_source=*/std::u16string(), GURL(), message_center::NotifierId(),
-      message_center::RichNotificationData(),
+      message_center::NOTIFICATION_TYPE_SIMPLE, id, title, message, icon,
+      display_source, url, notifier_id, message_center::RichNotificationData(),
       new message_center::NotificationDelegate());
 }
 
diff --git a/ash/system/notification_center/notification_center_test_api.h b/ash/system/notification_center/notification_center_test_api.h
index 9c2fe57..937e71af 100644
--- a/ash/system/notification_center/notification_center_test_api.h
+++ b/ash/system/notification_center/notification_center_test_api.h
@@ -8,8 +8,16 @@
 #include <memory>
 #include <string>
 
+#include "base/strings/string_util.h"
+#include "ui/base/models/image_model.h"
+#include "ui/message_center/public/cpp/notifier_id.h"
+
+class GURL;
+
 namespace message_center {
+class MessageView;
 class Notification;
+struct NotifierId;
 }  // namespace message_center
 
 namespace ui {
@@ -40,13 +48,22 @@
   // `NotificationCenterTray` on the primary display.
   void ToggleBubble();
 
+  // Adds a notification with custom parameters and returns the associated id.
+  std::string AddCustomNotification(
+      const std::u16string& title,
+      const std::u16string& message,
+      const ui::ImageModel& icon = ui::ImageModel(),
+      const std::u16string& display_source = base::EmptyString16(),
+      const GURL& url = GURL(),
+      const message_center::NotifierId& notifier_id =
+          message_center::NotifierId());
+
   // Adds a notification and returns the associated id.
   std::string AddNotification();
 
-  // Adds a notification with custom parameters and returns the associated id.
-  std::string AddCustomNotification(const std::string& title,
-                                    const std::string& message,
-                                    const ui::ImageModel& icon);
+  // Adds a notification with the source url and notifier id corresponding to
+  // the provided url as a string. Useful for testing notification grouping.
+  std::string AddNotificationWithSourceUrl(const std::string& url);
 
   // Removes the notification associated with the provided id.
   void RemoveNotification(const std::string& id);
@@ -71,7 +88,7 @@
 
   // Returns the notification view associated with the provided notification id.
   // Should be only used when the notifications bubble is open.
-  views::View* GetNotificationViewForId(const std::string& id);
+  message_center::MessageView* GetNotificationViewForId(const std::string& id);
 
   // Returns the popup view associated with the provided notification id,
   // nullptr otherwise.
@@ -95,6 +112,11 @@
   // center UI.
   views::View* GetClearAllButton();
 
+  // Converts a provided notification id to the corresponding parent
+  // notification id by adding the same suffix added by
+  // `NotificationGroupingController` to create a parent notification.
+  std::string NotificationIdToParentNotificationId(const std::string& id);
+
  private:
   std::string GenerateNotificationId();
 
@@ -102,9 +124,12 @@
 
   std::unique_ptr<message_center::Notification> CreateNotification(
       const std::string& id,
-      const std::string& title,
-      const std::string& message,
-      const ui::ImageModel& icon);
+      const std::u16string& title,
+      const std::u16string& message,
+      const ui::ImageModel& icon,
+      const std::u16string& display_source,
+      const GURL& url,
+      const message_center::NotifierId& notifier_id);
 
   int notification_id_ = 0;
   NotificationCenterTray* const notification_center_tray_;
diff --git a/ash/system/notification_center/notification_center_tray.cc b/ash/system/notification_center/notification_center_tray.cc
index 47c668821..80f67b36 100644
--- a/ash/system/notification_center/notification_center_tray.cc
+++ b/ash/system/notification_center/notification_center_tray.cc
@@ -12,6 +12,7 @@
 #include "ash/shelf/shelf.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/notification_center/notification_center_bubble.h"
+#include "ash/system/notification_center/notification_center_view.h"
 #include "ash/system/tray/tray_background_view.h"
 #include "ash/system/tray/tray_bubble_view.h"
 #include "ash/system/tray/tray_container.h"
@@ -58,6 +59,11 @@
   UpdateVisibility();
 }
 
+NotificationListView* NotificationCenterTray::GetNotificationListView() {
+  return bubble_ ? bubble_->notification_center_view()->notification_list_view()
+                 : nullptr;
+}
+
 bool NotificationCenterTray::IsBubbleShown() const {
   return !!bubble_;
 }
@@ -74,8 +80,9 @@
 
 void NotificationCenterTray::HideBubbleWithView(
     const TrayBubbleView* bubble_view) {
-  if (bubble_->GetBubbleView() == bubble_view)
+  if (bubble_->GetBubbleView() == bubble_view) {
     CloseBubble();
+  }
 }
 
 void NotificationCenterTray::ClickedOutsideBubble() {
@@ -83,8 +90,9 @@
 }
 
 void NotificationCenterTray::CloseBubble() {
-  if (!bubble_)
+  if (!bubble_) {
     return;
+  }
 
   bubble_.reset();
   SetIsActive(false);
@@ -96,16 +104,23 @@
 }
 
 void NotificationCenterTray::ShowBubble() {
-  if (bubble_)
+  if (bubble_) {
     return;
-
-  bubble_ = std::make_unique<NotificationCenterBubble>(this);
-  SetIsActive(true);
+  }
 
   // Inform the message center that the bubble is showing so that we do not
-  // create popups for incoming notifications and dismiss existing popups.
+  // create popups for incoming notifications and dismiss existing popups. This
+  // needs to happen before the bubble is created so that the
+  // `NotificationListView` is the active `NotificationViewController` when the
+  // `NotificationGroupingController` access it. This happens when notifications
+  // are added to the `NotificationListView`.
   message_center::MessageCenter::Get()->SetVisibility(
       message_center::VISIBILITY_MESSAGE_CENTER);
+
+  bubble_ = std::make_unique<NotificationCenterBubble>(this);
+  bubble_->ShowBubble();
+
+  SetIsActive(true);
 }
 
 void NotificationCenterTray::UpdateAfterLoginStatusChange() {
@@ -123,11 +138,13 @@
 void NotificationCenterTray::OnAnyBubbleVisibilityChanged(
     views::Widget* bubble_widget,
     bool visible) {
-  if (!IsBubbleShown())
+  if (!IsBubbleShown()) {
     return;
+  }
 
-  if (bubble_widget == GetBubbleWidget())
+  if (bubble_widget == GetBubbleWidget()) {
     return;
+  }
 
   if (visible) {
     // Another bubble is becoming visible while this bubble is being shown, so
@@ -162,8 +179,9 @@
   const bool new_visibility =
       message_center::MessageCenter::Get()->NotificationCount() > 0 &&
       system_tray_visible_;
-  if (new_visibility == visible_preferred())
+  if (new_visibility == visible_preferred()) {
     return;
+  }
 
   SetVisiblePreferred(new_visibility);
 
@@ -171,8 +189,9 @@
   notification_icons_controller_->UpdateNotificationIndicators();
 
   // We should close the bubble if there are no more notifications to show.
-  if (!new_visibility && bubble_)
+  if (!new_visibility && bubble_) {
     CloseBubble();
+  }
 }
 
 BEGIN_METADATA(NotificationCenterTray, TrayBackgroundView)
diff --git a/ash/system/notification_center/notification_center_tray.h b/ash/system/notification_center/notification_center_tray.h
index 5dfc98d..0d4bed4 100644
--- a/ash/system/notification_center/notification_center_tray.h
+++ b/ash/system/notification_center/notification_center_tray.h
@@ -22,6 +22,7 @@
 
 namespace ash {
 
+class NotificationListView;
 class Shelf;
 class TrayBubbleView;
 
@@ -42,6 +43,8 @@
   // Called when UnifiedSystemTray's preferred visibility changes.
   void OnSystemTrayVisibilityChanged(bool system_tray_visible);
 
+  NotificationListView* GetNotificationListView();
+
   // True if the bubble is shown.
   bool IsBubbleShown() const;
 
diff --git a/ash/system/notification_center/notification_list_view.cc b/ash/system/notification_center/notification_list_view.cc
index 84da9d2d2..3deff663 100644
--- a/ash/system/notification_center/notification_list_view.cc
+++ b/ash/system/notification_center/notification_list_view.cc
@@ -694,14 +694,12 @@
 NotificationListView::GetMessageViewForNotificationId(const std::string& id) {
   auto it = base::ranges::find(children(), id, [](auto* child) {
     DCHECK(child->GetClassName() == kMessageViewContainerClassName);
-    return static_cast<MessageViewContainer*>(child)
-        ->message_view()
-        ->notification_id();
+    return AsMVC(child)->message_view()->notification_id();
   });
 
   if (it == children().end())
     return nullptr;
-  return static_cast<MessageViewContainer*>(*it)->message_view();
+  return AsMVC(*it)->message_view();
 }
 
 void NotificationListView::ConvertNotificationViewToGroupedNotificationView(
diff --git a/ash/system/privacy_hub/microphone_privacy_switch_controller.cc b/ash/system/privacy_hub/microphone_privacy_switch_controller.cc
index f7b1a726..24e60c3 100644
--- a/ash/system/privacy_hub/microphone_privacy_switch_controller.cc
+++ b/ash/system/privacy_hub/microphone_privacy_switch_controller.cc
@@ -7,25 +7,72 @@
 #include <memory>
 
 #include "ash/constants/ash_pref_names.h"
+#include "ash/public/cpp/new_window_delegate.h"
 #include "ash/public/cpp/session/session_observer.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/strings/grit/ash_strings.h"
 #include "ash/system/privacy_hub/privacy_hub_controller.h"
+#include "ash/system/privacy_hub/privacy_hub_notification_controller.h"
+#include "ash/system/system_notification_controller.h"
 #include "base/functional/bind.h"
 #include "chromeos/ash/components/audio/cras_audio_handler.h"
 #include "components/prefs/pref_service.h"
 
 namespace ash {
+namespace {
 
-MicrophonePrivacySwitchController::MicrophonePrivacySwitchController() {
+// TODO(b/244529735): Replace the generic support URL with the final one.
+const char kLearnMoreUrl[] = "https://www.support.google.com/chromebook";
+
+size_t CountActiveInputStreams() {
+  size_t num_active_streams = 0;
+  const base::flat_map<CrasAudioHandler::ClientType, uint32_t> input_streams =
+      CrasAudioHandler::Get()->GetNumberOfInputStreamsWithPermission();
+  for (const auto& client_type_info : input_streams) {
+    num_active_streams += client_type_info.second;
+  }
+
+  return num_active_streams;
+}
+
+PrivacyHubDelegate* GetFrontend() {
+  if (PrivacyHubController* const privacy_hub =
+          Shell::Get()->privacy_hub_controller()) {
+    return privacy_hub->frontend();
+  }
+  return nullptr;
+}
+
+}  // namespace
+
+MicrophonePrivacySwitchController::MicrophonePrivacySwitchController()
+    : input_stream_count_(CountActiveInputStreams()),
+      mic_mute_on_(CrasAudioHandler::Get()->IsInputMuted()),
+      mic_muted_by_mute_switch_(
+          CrasAudioHandler::Get()->input_muted_by_microphone_mute_switch()),
+      mute_switch_notification_(
+          kNotificationId,
+          IDS_MICROPHONE_MUTED_BY_HW_SWITCH_NOTIFICATION_TITLE,
+          {IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE,
+           IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_ONE_APP_NAME,
+           IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_TWO_APP_NAMES},
+          {SensorDisabledNotificationDelegate::Sensor::kMicrophone},
+          base::MakeRefCounted<PrivacyHubNotificationClickDelegate>(
+              base::BindRepeating([]() {
+                NewWindowDelegate::GetPrimary()->OpenUrl(
+                    GURL(kLearnMoreUrl),
+                    NewWindowDelegate::OpenUrlFrom::kUserInteraction,
+                    NewWindowDelegate::Disposition::kNewForegroundTab);
+              })),
+          ash::NotificationCatalogName::kMicrophoneMute,
+          IDS_ASH_LEARN_MORE) {
   Shell::Get()->session_controller()->AddObserver(this);
-  ui::MicrophoneMuteSwitchMonitor::Get()->AddObserver(this);
   CrasAudioHandler::Get()->AddAudioObserver(this);
 }
 
 MicrophonePrivacySwitchController::~MicrophonePrivacySwitchController() {
   Shell::Get()->session_controller()->RemoveObserver(this);
-  ui::MicrophoneMuteSwitchMonitor::Get()->RemoveObserver(this);
   CrasAudioHandler::Get()->RemoveAudioObserver(this);
 }
 
@@ -48,6 +95,14 @@
 void MicrophonePrivacySwitchController::OnInputMuteChanged(
     bool mute_on,
     CrasAudioHandler::InputMuteChangeMethod method) {
+  mic_mute_on_ = mute_on;
+  mic_muted_by_mute_switch_ =
+      CrasAudioHandler::Get()->input_muted_by_microphone_mute_switch();
+
+  if (input_stream_count_) {
+    SetMicrophoneNotificationVisible(mic_mute_on_);
+  }
+
   // `pref_change_registrar_` is only initialized after a user logs in.
   if (pref_change_registrar_ == nullptr) {
     return;
@@ -62,6 +117,39 @@
   }
 }
 
+void MicrophonePrivacySwitchController::
+    OnInputMutedByMicrophoneMuteSwitchChanged(bool muted) {
+  PrivacyHubDelegate* const frontend = GetFrontend();
+  if (frontend) {
+    // In case this is called before the webui registers a frontend delegate
+    frontend->MicrophoneHardwareToggleChanged(muted);
+  }
+
+  if (mic_muted_by_mute_switch_ == muted) {
+    return;
+  }
+
+  mic_muted_by_mute_switch_ = muted;
+
+  if (input_stream_count_) {
+    SetMicrophoneNotificationVisible(mic_mute_on_);
+  }
+}
+
+void MicrophonePrivacySwitchController::
+    OnNumberOfInputStreamsWithPermissionChanged() {
+  // Catches the case where a mic-using app is launched while the mic is muted.
+  const size_t input_stream_count = CountActiveInputStreams();
+  const bool stream_count_increased = input_stream_count > input_stream_count_;
+  input_stream_count_ = input_stream_count;
+
+  if (stream_count_increased) {
+    SetMicrophoneNotificationVisible(input_stream_count_ && mic_mute_on_);
+  } else if (!input_stream_count_) {
+    SetMicrophoneNotificationVisible(false);
+  }
+}
+
 void MicrophonePrivacySwitchController::OnPreferenceChanged() {
   SetSystemMute();
 }
@@ -79,8 +167,7 @@
 }
 
 void MicrophonePrivacySwitchController::OnAudioNodesChanged() {
-  PrivacyHubDelegate* const frontend =
-      Shell::Get()->privacy_hub_controller()->frontend();
+  PrivacyHubDelegate* const frontend = GetFrontend();
 
   if (frontend) {
     // This may be called before the webui registers a frontend delegate
@@ -89,13 +176,23 @@
   }
 }
 
-void MicrophonePrivacySwitchController::OnMicrophoneMuteSwitchValueChanged(
-    bool muted) {
-  PrivacyHubDelegate* const frontend =
-      Shell::Get()->privacy_hub_controller()->frontend();
-  if (frontend) {
-    // In case this is called before the webui registers a frontend delegate
-    frontend->MicrophoneHardwareToggleChanged(muted);
+void MicrophonePrivacySwitchController::SetMicrophoneNotificationVisible(
+    const bool visible) {
+  mute_switch_notification_.Hide();
+
+  if (mic_muted_by_mute_switch_ && visible) {
+    mute_switch_notification_.Show();
+    return;
+  }
+
+  PrivacyHubNotificationController* const privacy_hub_notification_controller =
+      Shell::Get()->system_notification_controller()->privacy_hub();
+  if (visible) {
+    privacy_hub_notification_controller->ShowSensorDisabledNotification(
+        PrivacyHubNotificationController::Sensor::kMicrophone);
+  } else {
+    privacy_hub_notification_controller->RemoveSensorDisabledNotification(
+        PrivacyHubNotificationController::Sensor::kMicrophone);
   }
 }
 
diff --git a/ash/system/privacy_hub/microphone_privacy_switch_controller.h b/ash/system/privacy_hub/microphone_privacy_switch_controller.h
index 1feaeb1..05cbf91 100644
--- a/ash/system/privacy_hub/microphone_privacy_switch_controller.h
+++ b/ash/system/privacy_hub/microphone_privacy_switch_controller.h
@@ -9,49 +9,55 @@
 
 #include "ash/ash_export.h"
 #include "ash/public/cpp/session/session_observer.h"
+#include "ash/system/privacy_hub/privacy_hub_notification.h"
 #include "chromeos/ash/components/audio/cras_audio_handler.h"
 #include "components/prefs/pref_change_registrar.h"
-#include "ui/events/devices/microphone_mute_switch_monitor.h"
 
 namespace ash {
 
-// This controller keeps the KUserMicrophoneAllowed preference and the state of
+// This controller keeps the kUserMicrophoneAllowed preference and the state of
 // the system input mute in sync.
 class ASH_EXPORT MicrophonePrivacySwitchController
-    : public ui::MicrophoneMuteSwitchMonitor::Observer,
-      public CrasAudioHandler::AudioObserver,
+    : public CrasAudioHandler::AudioObserver,
       public SessionObserver {
  public:
-  MicrophonePrivacySwitchController();
-  ~MicrophonePrivacySwitchController() override;
+  static constexpr char kNotificationId[] = "ash://microphone_mute";
 
+  MicrophonePrivacySwitchController();
   MicrophonePrivacySwitchController(const MicrophonePrivacySwitchController&) =
       delete;
   MicrophonePrivacySwitchController& operator=(
       const MicrophonePrivacySwitchController&) = delete;
-
-  // SessionObserver
-  void OnActiveUserPrefServiceChanged(PrefService* pref_service) override;
+  ~MicrophonePrivacySwitchController() override;
 
   // CrasAudioHandler::AudioObserver
   void OnInputMuteChanged(
       bool mute_on,
       CrasAudioHandler::InputMuteChangeMethod method) override;
-
-  // CrasAudioHandler::AudioObserver
+  void OnInputMutedByMicrophoneMuteSwitchChanged(bool muted) override;
+  void OnNumberOfInputStreamsWithPermissionChanged() override;
   void OnAudioNodesChanged() override;
 
-  // ui::MicrophoneMuteSwitchMonitor::Observer
-  void OnMicrophoneMuteSwitchValueChanged(bool muted) override;
+  // SessionObserver
+  void OnActiveUserPrefServiceChanged(PrefService* pref_service) override;
 
  private:
-  // A callback that is invoked when the user changes KUserMicrophoneAllowed
+  // A callback that is invoked when the user changes kUserMicrophoneAllowed
   // preference from the Privacy Hub UI.
   void OnPreferenceChanged();
 
   // Updates the microphone mute status according to the user preference.
   void SetSystemMute();
 
+  // Show/hide the appropriate notification for the current state of the system.
+  // This means showing HW notification before even considering if a SW
+  // notification should be shown.
+  void SetMicrophoneNotificationVisible(bool visible);
+
+  size_t input_stream_count_ = 0;
+  bool mic_mute_on_ = false;
+  bool mic_muted_by_mute_switch_ = false;
+  PrivacyHubNotification mute_switch_notification_;
   std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_;
 };
 
diff --git a/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc b/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
index 364ea92..0b51d28 100644
--- a/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
+++ b/ash/system/privacy_hub/microphone_privacy_switch_controller_unittest.cc
@@ -4,21 +4,34 @@
 
 #include "ash/system/privacy_hub/microphone_privacy_switch_controller.h"
 
+#include <memory>
 #include <string>
 #include <vector>
 
+#include "ash/constants/ash_features.h"
 #include "ash/constants/ash_pref_names.h"
 #include "ash/public/cpp/privacy_hub_delegate.h"
 #include "ash/public/cpp/sensor_disabled_notification_delegate.h"
+#include "ash/public/cpp/test/test_new_window_delegate.h"
+#include "ash/public/cpp/test/test_system_tray_client.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
+#include "ash/strings/grit/ash_strings.h"
+#include "ash/system/privacy_hub/microphone_privacy_switch_controller.h"
 #include "ash/system/privacy_hub/privacy_hub_controller.h"
+#include "ash/system/privacy_hub/privacy_hub_metrics.h"
 #include "ash/test/ash_test_base.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "chromeos/ash/components/audio/cras_audio_handler.h"
+#include "chromeos/ash/components/dbus/audio/fake_cras_audio_client.h"
 #include "components/account_id/account_id.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/message_center/message_center.h"
+#include "ui/message_center/public/cpp/notification.h"
 
 namespace ash {
 
@@ -30,8 +43,31 @@
     : public SensorDisabledNotificationDelegate {
  public:
   std::vector<std::u16string> GetAppsAccessingSensor(Sensor sensor) override {
+    if (sensor == Sensor::kMicrophone) {
+      return apps_accessing_microphone_;
+    }
     return {};
   }
+
+  void LaunchAppAccessingMicrophone(
+      const absl::optional<std::u16string> app_name) {
+    if (app_name.has_value()) {
+      apps_accessing_microphone_.insert(apps_accessing_microphone_.begin(),
+                                        app_name.value());
+    }
+  }
+
+ private:
+  std::vector<std::u16string> apps_accessing_microphone_;
+};
+
+class MockNewWindowDelegate : public testing::NiceMock<TestNewWindowDelegate> {
+ public:
+  // TestNewWindowDelegate:
+  MOCK_METHOD(void,
+              OpenUrl,
+              (const GURL& url, OpenUrlFrom from, Disposition disposition),
+              (override));
 };
 
 class MockFrontendAPI : public PrivacyHubDelegate {
@@ -48,6 +84,11 @@
  public:
   PrivacyHubMicrophoneControllerTest() {
     scoped_feature_list_.InitAndEnableFeature(ash::features::kCrosPrivacyHub);
+
+    auto delegate = std::make_unique<MockNewWindowDelegate>();
+    new_window_delegate_ = delegate.get();
+    window_delegate_provider_ =
+        std::make_unique<TestNewWindowDelegateProvider>(std::move(delegate));
   }
   ~PrivacyHubMicrophoneControllerTest() override = default;
 
@@ -57,10 +98,14 @@
 
     // This makes sure a global instance of SensorDisabledNotificationDelegate
     // is created before running tests.
-    delegate_ = std::make_unique<FakeSensorDisabledNotificationDelegate>();
     Shell::Get()->privacy_hub_controller()->set_frontend(&mock_frontend_);
   }
 
+  void TearDown() override {
+    SetMicrophoneMuteSwitchState(/*muted=*/false);
+    AshTestBase::TearDown();
+  }
+
  protected:
   void SetUserPref(bool allowed) {
     Shell::Get()->session_controller()->GetActivePrefService()->SetBoolean(
@@ -74,10 +119,68 @@
         ->GetBoolean(prefs::kUserMicrophoneAllowed);
   }
 
+  message_center::Notification* GetNotification() {
+    return message_center::MessageCenter::Get()->FindNotificationById(
+        MicrophonePrivacySwitchController::kNotificationId);
+  }
+
+  message_center::Notification* GetPopupNotification() {
+    return message_center::MessageCenter::Get()->FindPopupNotificationById(
+        MicrophonePrivacySwitchController::kNotificationId);
+  }
+
+  void MarkPopupAsShown() {
+    message_center::MessageCenter::Get()->MarkSinglePopupAsShown(
+        MicrophonePrivacySwitchController::kNotificationId, true);
+  }
+
+  void ClickOnNotificationButton() {
+    message_center::MessageCenter::Get()->ClickOnNotificationButton(
+        MicrophonePrivacySwitchController::kNotificationId,
+        /*button_index=*/0);
+  }
+
+  void ClickOnNotificationBody() {
+    message_center::MessageCenter::Get()->ClickOnNotification(
+        MicrophonePrivacySwitchController::kNotificationId);
+  }
+
+  void SetMicrophoneMuteSwitchState(bool muted) {
+    ui::MicrophoneMuteSwitchMonitor::Get()->SetMicrophoneMuteSwitchValue(muted);
+  }
+
+  void MuteMicrophone() {
+    CrasAudioHandler::Get()->SetInputMute(
+        true, CrasAudioHandler::InputMuteChangeMethod::kOther);
+  }
+
+  void UnMuteMicrophone() {
+    CrasAudioHandler::Get()->SetInputMute(
+        false, CrasAudioHandler::InputMuteChangeMethod::kOther);
+  }
+
+  void SetNumberOfActiveInputStreams(int number_of_active_input_streams) {
+    FakeCrasAudioClient::Get()->SetActiveInputStreamsWithPermission(
+        {{"CRAS_CLIENT_TYPE_CHROME", number_of_active_input_streams}});
+  }
+
+  void LaunchApp(absl::optional<std::u16string> app_name) {
+    delegate_.LaunchAppAccessingMicrophone(app_name);
+  }
+
+  const base::HistogramTester& histogram_tester() const {
+    return histogram_tester_;
+  }
+
+  MockNewWindowDelegate& new_window_delegate() { return *new_window_delegate_; }
+
   ::testing::NiceMock<MockFrontendAPI> mock_frontend_;
 
  private:
-  std::unique_ptr<FakeSensorDisabledNotificationDelegate> delegate_;
+  const base::HistogramTester histogram_tester_;
+  MockNewWindowDelegate* new_window_delegate_ = nullptr;
+  std::unique_ptr<TestNewWindowDelegateProvider> window_delegate_provider_;
+  FakeSensorDisabledNotificationDelegate delegate_;
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
@@ -128,7 +231,401 @@
   Shell::Get()
       ->privacy_hub_controller()
       ->microphone_controller()
-      .OnMicrophoneMuteSwitchValueChanged(true);
+      .OnInputMutedByMicrophoneMuteSwitchChanged(true);
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, SimpleMuteUnMute) {
+  // No notification initially.
+  EXPECT_FALSE(GetNotification());
+
+  // Or when we mute.
+  MuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+
+  // Or when we unmute.
+  UnMuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, LaunchAppNotUsingMicrophone) {
+  // No notification initially.
+  EXPECT_FALSE(GetNotification());
+
+  // No notification when we unmute.
+  UnMuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+
+  // Launch an app that's not using the mic, should be no notification.
+  LaunchApp(absl::nullopt);
+  SetNumberOfActiveInputStreams(0);
+  EXPECT_FALSE(GetNotification());
+
+  // Mute the mic, still no notification because no app is using the mic.
+  MuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, LaunchAppUsingMicrophone) {
+  // No notification initially.
+  EXPECT_FALSE(GetNotification());
+
+  // No notification when we unmute.
+  UnMuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+
+  // Mute the mic, still no notification.
+  MuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+
+  // Launch an app that's using the mic. The microphone mute notification should
+  // show as a popup.
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+  // Notification should not be pinned.
+  EXPECT_FALSE(GetNotification()->rich_notification_data().pinned);
+
+  // Unmute again, notification goes down.
+  UnMuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest,
+       SilentNotificationOnMuteWhileMicInUse) {
+  // No notification initially.
+  EXPECT_FALSE(GetNotification());
+
+  // Launch an app that's using the mic, no notification because the microphone
+  // is not muted.
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+  EXPECT_FALSE(GetNotification());
+
+  // Mute the mic, a notification should be shown and also popup.
+  MuteMicrophone();
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest,
+       ShowPopupNotificationOnStreamAddition) {
+  // Launch an app while microphone is muted.
+  MuteMicrophone();
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+
+  ASSERT_TRUE(GetNotification());
+  ASSERT_TRUE(GetPopupNotification());
+
+  // Mark the notification as read.
+  MarkPopupAsShown();
+  ASSERT_FALSE(GetPopupNotification());
+
+  // Add an app, and verify the notification popup gets shown.
+  LaunchApp(u"rose");
+  SetNumberOfActiveInputStreams(2);
+
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, RemovingStreamDoesNotShowPopup) {
+  // Launch 2 apps while microphone is muted.
+  MuteMicrophone();
+  LaunchApp(u"junior");
+  LaunchApp(u"rose");
+  SetNumberOfActiveInputStreams(2);
+
+  ASSERT_TRUE(GetNotification());
+  ASSERT_TRUE(GetPopupNotification());
+
+  // Mark the notification as read.
+  MarkPopupAsShown();
+  ASSERT_FALSE(GetPopupNotification());
+
+  // Remove an active stream, and verify that the notification popup is not
+  // reshown.
+  SetNumberOfActiveInputStreams(1);
+
+  EXPECT_TRUE(GetNotification());
+  EXPECT_FALSE(GetPopupNotification());
+
+  // The notification should be removed if all input streams are removed.
+  LaunchApp(absl::nullopt);
+  SetNumberOfActiveInputStreams(0);
+
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, SwMuteNotificationActionButton) {
+  MuteMicrophone();
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+
+  // The mute notification should have an action button.
+  message_center::Notification* notification = GetNotification();
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(1u, notification->buttons().size());
+
+  EXPECT_EQ(histogram_tester().GetBucketCount(
+                privacy_hub_metrics::
+                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
+                true),
+            0);
+  // Clicking the action button should unmute device.
+  ClickOnNotificationButton();
+  EXPECT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
+
+  EXPECT_FALSE(GetNotification());
+  EXPECT_EQ(histogram_tester().GetBucketCount(
+                privacy_hub_metrics::
+                    kPrivacyHubMicrophoneEnabledFromNotificationHistogram,
+                true),
+            1);
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, SwMuteNotificationActionBody) {
+  MuteMicrophone();
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+
+  // The mute notification should have an action button.
+  message_center::Notification* notification = GetNotification();
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(1u, notification->buttons().size());
+
+  EXPECT_EQ(histogram_tester().GetBucketCount(
+                privacy_hub_metrics::kPrivacyHubOpenedHistogram,
+                privacy_hub_metrics::PrivacyHubNavigationOrigin::kNotification),
+            0);
+
+  // Clicking the action button should unmute device.
+  ClickOnNotificationBody();
+  EXPECT_EQ(GetSystemTrayClient()->show_os_settings_privacy_hub_count(), 1);
+  EXPECT_TRUE(CrasAudioHandler::Get()->IsInputMuted());
+
+  EXPECT_EQ(histogram_tester().GetBucketCount(
+                privacy_hub_metrics::kPrivacyHubOpenedHistogram,
+                privacy_hub_metrics::PrivacyHubNavigationOrigin::kNotification),
+            1);
+
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, HwMuteNotificationActionButton) {
+  SetMicrophoneMuteSwitchState(/*muted=*/true);
+
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+
+  // The mute notification should have a "Learn more" button.
+  message_center::Notification* notification = GetNotification();
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(1u, notification->buttons().size());
+
+  // Clicking the "Learn more" button should open a new Chrome tab with the
+  // support link.
+  EXPECT_CALL(new_window_delegate(), OpenUrl).Times(1);
+  ClickOnNotificationButton();
+
+  EXPECT_TRUE(CrasAudioHandler::Get()->IsInputMuted());
+
+  SetMicrophoneMuteSwitchState(/*muted=*/false);
+  ASSERT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, HwMuteNotificationActionBody) {
+  SetMicrophoneMuteSwitchState(/*muted=*/true);
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+
+  message_center::Notification* notification = GetNotification();
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(1u, notification->buttons().size());
+
+  ClickOnNotificationBody();
+
+  // Check that clicking the body has no effect and notification disappears.
+  EXPECT_TRUE(CrasAudioHandler::Get()->IsInputMuted());
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest,
+       TogglingMuteSwitchRemovesNotificationActionButton) {
+  // Mute microphone, and activate an audio input stream.
+  MuteMicrophone();
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+
+  // The mute notification should have an action button.
+  message_center::Notification* notification = GetNotification();
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(1u, notification->buttons().size());
+  EXPECT_EQ(l10n_util::GetStringUTF16(
+                IDS_MICROPHONE_MUTED_NOTIFICATION_ACTION_BUTTON),
+            notification->buttons()[0].title);
+
+  // Toggle microphone mute switch and verify that new notification appears with
+  // a "Learn more" button.
+  SetMicrophoneMuteSwitchState(/*muted=*/true);
+  notification = GetNotification();
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(1u, notification->buttons().size());
+  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_LEARN_MORE),
+            notification->buttons()[0].title);
+
+  SetMicrophoneMuteSwitchState(/*muted=*/false);
+  ASSERT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest,
+       TogglingMuteSwitchDoesNotHideNotificationPopup) {
+  // Mute microphone, and activate an audio input stream.
+  MuteMicrophone();
+
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+
+  // Verify the notification popup is shown.
+  ASSERT_TRUE(GetNotification());
+  ASSERT_TRUE(GetPopupNotification());
+
+  // Toggle microphone mute switch and verify that toggling mute switch alone
+  // does not hide the notification popup.
+  SetMicrophoneMuteSwitchState(/*muted=*/true);
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+
+  SetMicrophoneMuteSwitchState(/*muted=*/false);
+  ASSERT_FALSE(CrasAudioHandler::Get()->IsInputMuted());
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest,
+       RemovingAllInputStreamsWhileHwSwitchToggled) {
+  SetMicrophoneMuteSwitchState(/*muted=*/true);
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(2);
+
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+
+  SetNumberOfActiveInputStreams(0);
+
+  EXPECT_FALSE(GetNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest,
+       ToggleMicrophoneMuteSwitchWhileInputStreamActive) {
+  // Launch an app using microphone, and toggle mute switch.
+  LaunchApp(u"junior");
+  SetNumberOfActiveInputStreams(1);
+  SetMicrophoneMuteSwitchState(/*muted=*/true);
+
+  // Notification should be shown and also popup.
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+
+  // Add another audio input stream, and verify the notification popup shows.
+  LaunchApp(u"junior1");
+  SetNumberOfActiveInputStreams(2);
+
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+
+  // Mark notification as read, and then remove an audio input stream.
+  MarkPopupAsShown();
+  ASSERT_FALSE(GetPopupNotification());
+  SetNumberOfActiveInputStreams(1);
+
+  // Verify that notification popup is not reshown.
+  EXPECT_TRUE(GetNotification());
+  EXPECT_FALSE(GetPopupNotification());
+
+  // Adding another stream shows a popup again.
+  LaunchApp(u"rose");
+  SetNumberOfActiveInputStreams(2);
+
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+}
+
+TEST_F(PrivacyHubMicrophoneControllerTest, NotificationText) {
+  // No notification initially.
+  EXPECT_FALSE(GetNotification());
+
+  // Mute the mic using sw switch, still no notification.
+  MuteMicrophone();
+  EXPECT_FALSE(GetNotification());
+
+  // Launch an app that's not using the mic, should be no notification.
+  LaunchApp(absl::nullopt);
+  EXPECT_FALSE(GetNotification());
+
+  // Launch an app that's using the mic, but the name of the app can not be
+  // determined.
+  LaunchApp(absl::nullopt);
+  SetNumberOfActiveInputStreams(1);
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+  EXPECT_EQ(l10n_util::GetStringUTF16(
+                IDS_MICROPHONE_MUTED_BY_SW_SWITCH_NOTIFICATION_TITLE),
+            GetNotification()->title());
+  // The notification body should not contain any app name.
+  EXPECT_EQ(
+      l10n_util::GetStringUTF16(IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE),
+      GetNotification()->message());
+
+  // Launch an app that's using the mic, the name of the app can be determined.
+  LaunchApp(u"app1");
+  SetNumberOfActiveInputStreams(2);
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+  // The notification body should contain name of the app.
+  EXPECT_EQ(
+      l10n_util::GetStringFUTF16(
+          IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_ONE_APP_NAME, u"app1"),
+      GetNotification()->message());
+
+  // Launch another app that's using the mic, the name of the app can be
+  // determined.
+  LaunchApp(u"app2");
+  SetNumberOfActiveInputStreams(3);
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+  // The notification body should contain the two available app names in the
+  // order of most recently launched.
+  EXPECT_EQ(l10n_util::GetStringFUTF16(
+                IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_TWO_APP_NAMES,
+                u"app2", u"app1"),
+            GetNotification()->message());
+
+  // Launch yet another app that's using the mic, the name of the app can be
+  // determined.
+  LaunchApp(u"app3");
+  SetNumberOfActiveInputStreams(4);
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+  // As more that two apps are attempting to use the microphone, we fall back to
+  // displaying the generic message in the notification.
+  EXPECT_EQ(
+      l10n_util::GetStringUTF16(IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE),
+      GetNotification()->message());
+
+  EXPECT_FALSE(
+      ui::MicrophoneMuteSwitchMonitor::Get()->microphone_mute_switch_on());
+  // Toggle the hw switch.
+  SetMicrophoneMuteSwitchState(/*muted=*/true);
+  EXPECT_TRUE(GetNotification());
+  EXPECT_TRUE(GetPopupNotification());
+  // The title of the notification should be different when microphone is muted
+  // by the hw switch.
+  EXPECT_EQ(l10n_util::GetStringUTF16(
+                IDS_MICROPHONE_MUTED_BY_HW_SWITCH_NOTIFICATION_TITLE),
+            GetNotification()->title());
 }
 
 }  // namespace ash
diff --git a/ash/system/privacy_hub/privacy_hub_notification_controller.cc b/ash/system/privacy_hub/privacy_hub_notification_controller.cc
index ba58d86..281cb5a62 100644
--- a/ash/system/privacy_hub/privacy_hub_notification_controller.cc
+++ b/ash/system/privacy_hub/privacy_hub_notification_controller.cc
@@ -11,9 +11,9 @@
 #include "ash/public/cpp/system_tray_client.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
-#include "ash/system/microphone_mute/microphone_mute_notification_controller.h"
 #include "ash/system/model/system_tray_model.h"
 #include "ash/system/privacy_hub/camera_privacy_switch_controller.h"
+#include "ash/system/privacy_hub/microphone_privacy_switch_controller.h"
 #include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "ash/system/privacy_hub/privacy_hub_metrics.h"
 #include "components/vector_icons/vector_icons.h"
@@ -21,12 +21,30 @@
 #include "ui/message_center/message_center.h"
 
 namespace ash {
+namespace {
 
-PrivacyHubNotificationController::PrivacyHubNotificationController(
-    MicrophoneMuteNotificationController*
-        microphone_mute_notification_controller)
-    : microphone_mute_notification_controller_(
-          microphone_mute_notification_controller) {}
+void SetAndLogMicrophoneMute(const bool muted) {
+  CrasAudioHandler::Get()->SetInputMute(
+      muted, CrasAudioHandler::InputMuteChangeMethod::kOther);
+  privacy_hub_metrics::LogMicrophoneEnabledFromNotification(!muted);
+}
+
+}  // namespace
+
+PrivacyHubNotificationController::PrivacyHubNotificationController()
+    : microphone_notification_(std::make_unique<PrivacyHubNotification>(
+          MicrophonePrivacySwitchController::kNotificationId,
+          IDS_MICROPHONE_MUTED_BY_SW_SWITCH_NOTIFICATION_TITLE,
+          PrivacyHubNotification::MessageIds{
+              IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE,
+              IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_ONE_APP_NAME,
+              IDS_MICROPHONE_MUTED_NOTIFICATION_MESSAGE_WITH_TWO_APP_NAMES},
+          PrivacyHubNotification::SensorSet{
+              SensorDisabledNotificationDelegate::Sensor::kMicrophone},
+          base::MakeRefCounted<PrivacyHubNotificationClickDelegate>(
+              base::BindRepeating([]() { SetAndLogMicrophoneMute(false); })),
+          ash::NotificationCatalogName::kMicrophoneMute,
+          IDS_MICROPHONE_MUTED_NOTIFICATION_ACTION_BUTTON)) {}
 
 PrivacyHubNotificationController::~PrivacyHubNotificationController() = default;
 
@@ -64,11 +82,9 @@
 
 void PrivacyHubNotificationController::ShowMicrophoneDisabledNotification()
     const {
-  if (microphone_mute_notification_controller_) {
-    microphone_mute_notification_controller_->MaybeShowNotification(
-        message_center::NotificationPriority::DEFAULT_PRIORITY,
-        /*recreate=*/true);
-  }
+  // TODO(cschlosser) Clean this up in the follow up CL to be consistent across
+  // sensors.
+  microphone_notification_->Show();
 }
 
 void PrivacyHubNotificationController::ShowLocationDisabledNotification()
@@ -154,9 +170,7 @@
     if (sensors_.HasAll(combinable_sensors_)) {
       message_center->RemoveNotification(kPrivacyHubCameraOffNotificationId,
                                          /*by_user=*/false);
-      message_center->RemoveNotification(
-          MicrophoneMuteNotificationController::kNotificationId,
-          /*by_user=*/false);
+      microphone_notification_->Hide();
 
       ShowMicrophoneAndCameraDisabledNotification();
 
@@ -178,9 +192,7 @@
       // TODO(b/242684137) Remove location notification as well.
       break;
     case Sensor::kMicrophone:
-      message_center->RemoveNotification(
-          MicrophoneMuteNotificationController::kNotificationId,
-          /*by_user=*/false);
+      microphone_notification_->Hide();
       break;
   }
 
@@ -207,7 +219,7 @@
     return;
   }
 
-  MicrophoneMuteNotificationController::SetAndLogMicrophoneMute(false);
+  SetAndLogMicrophoneMute(false);
   CameraPrivacySwitchController::SetAndLogCameraPreferenceFromNotification(
       true);
 }
diff --git a/ash/system/privacy_hub/privacy_hub_notification_controller.h b/ash/system/privacy_hub/privacy_hub_notification_controller.h
index 5566d3c..61b5ca1 100644
--- a/ash/system/privacy_hub/privacy_hub_notification_controller.h
+++ b/ash/system/privacy_hub/privacy_hub_notification_controller.h
@@ -5,16 +5,16 @@
 #ifndef ASH_SYSTEM_PRIVACY_HUB_PRIVACY_HUB_NOTIFICATION_CONTROLLER_H_
 #define ASH_SYSTEM_PRIVACY_HUB_PRIVACY_HUB_NOTIFICATION_CONTROLLER_H_
 
+#include <memory>
+
 #include "ash/ash_export.h"
+#include "ash/system/privacy_hub/privacy_hub_notification.h"
 #include "base/containers/enum_set.h"
-#include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace ash {
 
-class MicrophoneMuteNotificationController;
-
 // A class managing when to show notifications for microphone, camera and
 // geolocation to the user or combining them if necessary.
 class ASH_EXPORT PrivacyHubNotificationController {
@@ -29,9 +29,7 @@
 
   using SensorEnumSet = base::EnumSet<Sensor, Sensor::kMin, Sensor::kMax>;
 
-  explicit PrivacyHubNotificationController(
-      MicrophoneMuteNotificationController*
-          microphone_mute_notification_controller);
+  PrivacyHubNotificationController();
 
   PrivacyHubNotificationController(const PrivacyHubNotificationController&) =
       delete;
@@ -89,9 +87,8 @@
   // them new notifications of sensors that can be combined or the combined
   // notification until the number of active uses falls to 0.
   bool ignore_new_combinable_notifications_{false};
-  const base::raw_ptr<MicrophoneMuteNotificationController>
-      microphone_mute_notification_controller_;
   SensorEnumSet sensors_;
+  std::unique_ptr<PrivacyHubNotification> microphone_notification_;
   base::WeakPtrFactory<PrivacyHubNotificationController> weak_ptr_factory_{
       this};
 };
diff --git a/ash/system/privacy_hub/privacy_hub_notification_controller_unittest.cc b/ash/system/privacy_hub/privacy_hub_notification_controller_unittest.cc
index b0e542b..cfdf0ffa 100644
--- a/ash/system/privacy_hub/privacy_hub_notification_controller_unittest.cc
+++ b/ash/system/privacy_hub/privacy_hub_notification_controller_unittest.cc
@@ -12,8 +12,8 @@
 #include "ash/public/cpp/test/test_system_tray_client.h"
 #include "ash/shelf/shelf.h"
 #include "ash/shell.h"
-#include "ash/system/microphone_mute/microphone_mute_notification_controller.h"
 #include "ash/system/privacy_hub/camera_privacy_switch_controller.h"
+#include "ash/system/privacy_hub/privacy_hub_controller.h"
 #include "ash/system/privacy_hub/privacy_hub_metrics.h"
 #include "ash/system/system_notification_controller.h"
 #include "ash/test/ash_test_base.h"
@@ -51,8 +51,6 @@
   // AshTestBase:
   void SetUp() override {
     AshTestBase::SetUp();
-    microphone_mute_controller_ =
-        Shell::Get()->system_notification_controller()->microphone_mute_.get();
     controller_ =
         Shell::Get()->system_notification_controller()->privacy_hub_.get();
   }
@@ -85,8 +83,11 @@
 
   void ShowNotification(Sensor sensor) {
     if (sensor == Sensor::kMicrophone) {
-      microphone_mute_controller()->OnInputMuteChanged(
-          true, CrasAudioHandler::InputMuteChangeMethod::kOther);
+      Shell::Get()
+          ->privacy_hub_controller()
+          ->microphone_controller()
+          .OnInputMuteChanged(true,
+                              CrasAudioHandler::InputMuteChangeMethod::kOther);
       FakeCrasAudioClient::Get()->SetActiveInputStreamsWithPermission(
           {{"CRAS_CLIENT_TYPE_CHROME", 1}});
     } else {
@@ -96,8 +97,11 @@
 
   void RemoveNotification(Sensor sensor) {
     if (sensor == Sensor::kMicrophone) {
-      microphone_mute_controller()->OnInputMuteChanged(
-          false, CrasAudioHandler::InputMuteChangeMethod::kOther);
+      Shell::Get()
+          ->privacy_hub_controller()
+          ->microphone_controller()
+          .OnInputMuteChanged(false,
+                              CrasAudioHandler::InputMuteChangeMethod::kOther);
       FakeCrasAudioClient::Get()->SetActiveInputStreamsWithPermission(
           {{"CRAS_CLIENT_TYPE_CHROME", 0}});
     } else {
@@ -110,15 +114,11 @@
     controller_->ShowSensorDisabledNotification(Sensor::kMicrophone);
   }
 
-  MicrophoneMuteNotificationController* microphone_mute_controller() const {
-    return microphone_mute_controller_;
-  }
-
   void ExpectNoNotificationActive() const {
     EXPECT_FALSE(GetNotification());
     EXPECT_FALSE(GetNotification(kPrivacyHubCameraOffNotificationId));
     EXPECT_FALSE(
-        GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+        GetNotification(MicrophonePrivacySwitchController::kNotificationId));
   }
 
   const base::HistogramTester& histogram_tester() const {
@@ -129,8 +129,6 @@
   base::raw_ptr<PrivacyHubNotificationController> controller_;
   const FakeSensorDisabledNotificationDelegate delegate_;
   const base::HistogramTester histogram_tester_;
-  base::raw_ptr<MicrophoneMuteNotificationController>
-      microphone_mute_controller_;
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
@@ -145,11 +143,11 @@
 
   ShowNotification(Sensor::kMicrophone);
   EXPECT_TRUE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 
   RemoveNotification(Sensor::kMicrophone);
   EXPECT_FALSE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 }
 
 TEST_F(PrivacyHubNotificationControllerTest, CombinedNotificationActive) {
@@ -159,7 +157,7 @@
   EXPECT_TRUE(GetNotification());
   EXPECT_FALSE(GetNotification(kPrivacyHubCameraOffNotificationId));
   EXPECT_FALSE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 }
 
 TEST_F(PrivacyHubNotificationControllerTest, CombinedNotificationBuilding) {
@@ -169,20 +167,20 @@
   EXPECT_FALSE(GetNotification());
   EXPECT_FALSE(GetNotification(kPrivacyHubCameraOffNotificationId));
   EXPECT_TRUE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 
   ShowNotification(Sensor::kCamera);
   EXPECT_TRUE(GetNotification());
   EXPECT_FALSE(GetNotification(kPrivacyHubCameraOffNotificationId));
   EXPECT_FALSE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 
   // Enable microphone from elsewhere.
   RemoveNotification(Sensor::kMicrophone);
   EXPECT_FALSE(GetNotification());
   EXPECT_TRUE(GetNotification(kPrivacyHubCameraOffNotificationId));
   EXPECT_FALSE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 
   // Remove the camera notification as well.
   RemoveNotification(Sensor::kCamera);
@@ -197,7 +195,7 @@
   EXPECT_TRUE(GetNotification());
   EXPECT_FALSE(GetNotification(kPrivacyHubCameraOffNotificationId));
   EXPECT_FALSE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 
   EXPECT_EQ(GetSystemTrayClient()->show_os_settings_privacy_hub_count(), 0);
   EXPECT_EQ(histogram_tester().GetBucketCount(
@@ -232,7 +230,7 @@
   EXPECT_TRUE(GetNotification());
   EXPECT_FALSE(GetNotification(kPrivacyHubCameraOffNotificationId));
   EXPECT_FALSE(
-      GetNotification(MicrophoneMuteNotificationController::kNotificationId));
+      GetNotification(MicrophonePrivacySwitchController::kNotificationId));
 }
 
 TEST_F(PrivacyHubNotificationControllerTest, ClickOnNotificationButton) {
diff --git a/ash/system/session/logout_confirmation_controller_unittest.cc b/ash/system/session/logout_confirmation_controller_unittest.cc
index a020df05..1ef2f26 100644
--- a/ash/system/session/logout_confirmation_controller_unittest.cc
+++ b/ash/system/session/logout_confirmation_controller_unittest.cc
@@ -14,8 +14,8 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/tick_clock.h"
 #include "components/prefs/pref_service.h"
 #include "components/session_manager/session_manager_types.h"
diff --git a/ash/system/system_notification_controller.cc b/ash/system/system_notification_controller.cc
index 29094fd..cf6c44d 100644
--- a/ash/system/system_notification_controller.cc
+++ b/ash/system/system_notification_controller.cc
@@ -9,7 +9,6 @@
 #include "ash/system/cast/cast_notification_controller.h"
 #include "ash/system/do_not_disturb_notification_controller.h"
 #include "ash/system/gesture_education/gesture_education_notification_controller.h"
-#include "ash/system/microphone_mute/microphone_mute_notification_controller.h"
 #include "ash/system/network/auto_connect_notifier.h"
 #include "ash/system/network/cellular_setup_notifier.h"
 #include "ash/system/network/managed_sim_lock_notifier.h"
@@ -49,17 +48,12 @@
       power_(std::make_unique<PowerNotificationController>(
           message_center::MessageCenter::Get())),
       power_sounds_(MaybeCreatePowerSoundsController()),
+      privacy_hub_(std::make_unique<PrivacyHubNotificationController>()),
       screen_security_(std::make_unique<ScreenSecurityController>()),
       session_limit_(std::make_unique<SessionLimitNotificationController>()),
       tracing_(std::make_unique<TracingNotificationController>()),
       update_(std::make_unique<UpdateNotificationController>()),
       wifi_toggle_(std::make_unique<WifiToggleNotificationController>()) {
-  if (features::IsMicMuteNotificationsEnabled()) {
-    microphone_mute_ = std::make_unique<MicrophoneMuteNotificationController>();
-  }
-  privacy_hub_ = std::make_unique<PrivacyHubNotificationController>(
-      microphone_mute_.get());
-
   if (features::IsSimLockPolicyEnabled()) {
     managed_sim_lock_notifier_ =
         std::make_unique<ash::ManagedSimLockNotifier>();
diff --git a/ash/system/system_notification_controller.h b/ash/system/system_notification_controller.h
index 60c37dae..3182afe 100644
--- a/ash/system/system_notification_controller.h
+++ b/ash/system/system_notification_controller.h
@@ -17,7 +17,6 @@
 class CellularSetupNotifier;
 class DoNotDisturbNotificationController;
 class ManagedSimLockNotifier;
-class MicrophoneMuteNotificationController;
 class PowerNotificationController;
 class PowerSoundsController;
 class PrivacyHubNotificationController;
@@ -58,7 +57,6 @@
       gesture_education_;
   // TODO(b/228093904): Make |managed_sim_lock_notifier_| const during cleanup.
   std::unique_ptr<ManagedSimLockNotifier> managed_sim_lock_notifier_;
-  std::unique_ptr<MicrophoneMuteNotificationController> microphone_mute_;
   const std::unique_ptr<PowerNotificationController> power_;
   const std::unique_ptr<PowerSoundsController> power_sounds_;
   std::unique_ptr<PrivacyHubNotificationController> privacy_hub_;
diff --git a/ash/system/time/calendar_unittest_utils.cc b/ash/system/time/calendar_unittest_utils.cc
index 0a07dac..eccc9a9 100644
--- a/ash/system/time/calendar_unittest_utils.cc
+++ b/ash/system/time/calendar_unittest_utils.cc
@@ -8,6 +8,7 @@
 
 #include "ash/ash_export.h"
 #include "base/i18n/time_formatting.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "google_apis/calendar/calendar_api_response_types.h"
 
diff --git a/ash/system/toast/toast_manager_impl.cc b/ash/system/toast/toast_manager_impl.cc
index d2314da..197b467 100644
--- a/ash/system/toast/toast_manager_impl.cc
+++ b/ash/system/toast/toast_manager_impl.cc
@@ -11,7 +11,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 
 namespace ash {
diff --git a/ash/system/toast/toast_manager_unittest.cc b/ash/system/toast/toast_manager_unittest.cc
index cd49241..b53de66 100644
--- a/ash/system/toast/toast_manager_unittest.cc
+++ b/ash/system/toast/toast_manager_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
diff --git a/ash/system/toast/toast_overlay.cc b/ash/system/toast/toast_overlay.cc
index 72ab886..4996da0a 100644
--- a/ash/system/toast/toast_overlay.cc
+++ b/ash/system/toast/toast_overlay.cc
@@ -21,7 +21,6 @@
 #include "base/functional/bind.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/aura/window.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc
index d41f53d..e62839d0 100644
--- a/ash/system/unified/unified_system_tray.cc
+++ b/ash/system/unified/unified_system_tray.cc
@@ -126,8 +126,11 @@
           std::make_unique<AshMessagePopupCollection>(owner->shelf())),
       owner_(owner) {
   if (features::IsNotificationsRefreshEnabled()) {
-    grouping_controller_ =
-        std::make_unique<NotificationGroupingController>(owner);
+    grouping_controller_ = std::make_unique<NotificationGroupingController>(
+        /*unified_system_tray=*/owner,
+        /*notification_center_tray=*/owner->shelf()
+            ->status_area_widget()
+            ->notification_center_tray());
   }
 
   ui_controller_->set_hide_on_last_notification(false);
@@ -150,8 +153,9 @@
 }
 
 bool UnifiedSystemTray::UiDelegate::ShowPopups() {
-  if (owner_->IsBubbleShown())
+  if (owner_->IsBubbleShown()) {
     return false;
+  }
   return true;
 }
 
@@ -160,8 +164,9 @@
 }
 
 bool UnifiedSystemTray::UiDelegate::ShowMessageCenter() {
-  if (owner_->IsBubbleShown())
+  if (owner_->IsBubbleShown()) {
     return false;
+  }
 
   owner_->ShowBubbleInternal();
   return true;
@@ -217,8 +222,9 @@
     tray_items_.push_back(notification_icons_controller_->quiet_mode_view());
   }
 
-  if (features::IsSnoopingProtectionEnabled())
+  if (features::IsSnoopingProtectionEnabled()) {
     AddTrayItemToContainer(std::make_unique<SnoopingProtectionView>(shelf));
+  }
 
   current_locale_view_ =
       AddTrayItemToContainer(std::make_unique<CurrentLocaleView>(shelf));
@@ -281,13 +287,15 @@
 }
 
 void UnifiedSystemTray::AddObserver(Observer* observer) {
-  if (observer)
+  if (observer) {
     observers_.AddObserver(observer);
+  }
 }
 
 void UnifiedSystemTray::RemoveObserver(Observer* observer) {
-  if (observer)
+  if (observer) {
     observers_.RemoveObserver(observer);
+  }
 }
 
 void UnifiedSystemTray::OnButtonPressed(const ui::Event& event) {
@@ -310,8 +318,9 @@
 }
 
 bool UnifiedSystemTray::IsMessageCenterBubbleShown() const {
-  if (message_center_bubble_)
+  if (message_center_bubble_) {
     return message_center_bubble_->IsMessageCenterVisible();
+  }
 
   return false;
 }
@@ -321,40 +330,47 @@
 }
 
 void UnifiedSystemTray::ActivateBubble() {
-  if (bubble_)
+  if (bubble_) {
     bubble_->GetBubbleWidget()->Activate();
+  }
 }
 
 void UnifiedSystemTray::CloseSecondaryBubbles() {
   slider_bubble_controller_->CloseBubble();
   privacy_screen_toast_controller_->HideToast();
-  if (autozoom_toast_controller_)
+  if (autozoom_toast_controller_) {
     autozoom_toast_controller_->HideToast();
+  }
 }
 
 void UnifiedSystemTray::CollapseMessageCenter() {
-  if (message_center_bubble_)
+  if (message_center_bubble_) {
     message_center_bubble_->CollapseMessageCenter();
+  }
 }
 
 void UnifiedSystemTray::ExpandMessageCenter() {
-  if (message_center_bubble_)
+  if (message_center_bubble_) {
     message_center_bubble_->ExpandMessageCenter();
+  }
 }
 
 void UnifiedSystemTray::EnsureQuickSettingsCollapsed(bool animate) {
-  if (!bubble_)
+  if (!bubble_) {
     return;
+  }
 
-  if (animate)
+  if (animate) {
     bubble_->EnsureCollapsed();
-  else
+  } else {
     bubble_->CollapseWithoutAnimating();
+  }
 }
 
 void UnifiedSystemTray::EnsureBubbleExpanded() {
-  if (bubble_)
+  if (bubble_) {
     bubble_->EnsureExpanded();
+  }
 }
 
 void UnifiedSystemTray::ShowVolumeSliderBubble() {
@@ -379,8 +395,9 @@
 
 bool UnifiedSystemTray::FocusMessageCenter(bool reverse,
                                            bool collapse_quick_settings) {
-  if (!IsMessageCenterBubbleShown())
+  if (!IsMessageCenterBubbleShown()) {
     return false;
+  }
 
   views::Widget* message_center_widget =
       message_center_bubble_->GetBubbleWidget();
@@ -390,15 +407,17 @@
 
   // Focus an individual element in the message center if chrome vox is
   // disabled.
-  if (!ShouldEnableExtraKeyboardAccessibility())
+  if (!ShouldEnableExtraKeyboardAccessibility()) {
     message_center_bubble_->FocusEntered(reverse);
+  }
 
   return true;
 }
 
 bool UnifiedSystemTray::FocusQuickSettings(bool reverse) {
-  if (!IsBubbleShown())
+  if (!IsBubbleShown()) {
     return false;
+  }
 
   views::Widget* quick_settings_widget = bubble_->GetBubbleWidget();
   quick_settings_widget->widget_delegate()->SetCanActivate(true);
@@ -407,15 +426,17 @@
 
   // Focus an individual element in quick settings if chrome vox is
   // disabled.
-  if (!ShouldEnableExtraKeyboardAccessibility())
+  if (!ShouldEnableExtraKeyboardAccessibility()) {
     bubble_->FocusEntered(reverse);
+  }
 
   return true;
 }
 
 void UnifiedSystemTray::NotifyLeavingCalendarView() {
-  for (auto& observer : observers_)
+  for (auto& observer : observers_) {
     observer.OnLeavingCalendarView();
+  }
 }
 
 bool UnifiedSystemTray::IsQuickSettingsExplicitlyExpanded() const {
@@ -427,8 +448,9 @@
 }
 
 void UnifiedSystemTray::MaybeRecordFirstInteraction(FirstInteractionType type) {
-  if (first_interaction_recorded_)
+  if (first_interaction_recorded_) {
     return;
+  }
   first_interaction_recorded_ = true;
 
   UMA_HISTOGRAM_ENUMERATION("ChromeOS.SystemTray.FirstInteraction", type,
@@ -460,14 +482,17 @@
 void UnifiedSystemTray::OnAnyBubbleVisibilityChanged(
     views::Widget* bubble_widget,
     bool visible) {
-  if (!features::IsQsRevampEnabled())
+  if (!features::IsQsRevampEnabled()) {
     return;
+  }
 
-  if (!IsBubbleShown())
+  if (!IsBubbleShown()) {
     return;
+  }
 
-  if (bubble_widget == GetBubbleWidget())
+  if (bubble_widget == GetBubbleWidget()) {
     return;
+  }
 
   if (visible) {
     // Another bubble is becoming visible while this bubble is being shown, so
@@ -487,14 +512,16 @@
 
 void UnifiedSystemTray::OnOpeningCalendarView() {
   SetIsActive(false);
-  for (auto& observer : observers_)
+  for (auto& observer : observers_) {
     observer.OnOpeningCalendarView();
+  }
 }
 
 void UnifiedSystemTray::OnTransitioningFromCalendarToMainView() {
   SetIsActive(true);
-  for (auto& observer : observers_)
+  for (auto& observer : observers_) {
     observer.OnLeavingCalendarView();
+  }
 }
 
 void UnifiedSystemTray::OnTabletModeStarted() {
@@ -512,15 +539,17 @@
 }
 
 void UnifiedSystemTray::OnDateTrayActionPerformed(const ui::Event& event) {
-  if (!bubble_)
+  if (!bubble_) {
     ShowBubble();
+  }
   bubble_->ShowCalendarView(calendar_metrics::CalendarViewShowSource::kTimeView,
                             calendar_metrics::GetEventType(event));
 }
 
 bool UnifiedSystemTray::IsShowingCalendarView() const {
-  if (!bubble_)
+  if (!bubble_) {
     return false;
+  }
 
   return bubble_->ShowingCalendarView();
 }
@@ -534,8 +563,9 @@
 void UnifiedSystemTray::SetTrayEnabled(bool enabled) {
   // We should close bubble at this point. If it remains opened and interactive,
   // it can be dangerous (http://crbug.com/497080).
-  if (!enabled && bubble_)
+  if (!enabled && bubble_) {
     CloseBubble();
+  }
 
   SetEnabled(enabled);
 }
@@ -550,10 +580,11 @@
   if (!bubble_) {
     time_opened_ = base::TimeTicks::Now();
 
-    if (features::IsQsRevampEnabled())
+    if (features::IsQsRevampEnabled()) {
       ShowBubbleInternal();
-    else
+    } else {
       ui_delegate_->ui_controller()->ShowMessageCenterBubble();
+    }
 
     Shell::Get()->system_tray_notifier()->NotifySystemTrayBubbleShown();
   }
@@ -569,31 +600,35 @@
 }
 
 std::u16string UnifiedSystemTray::GetAccessibleNameForBubble() {
-  if (IsBubbleShown())
+  if (IsBubbleShown()) {
     return GetAccessibleNameForQuickSettingsBubble();
-  else
+  } else {
     return GetAccessibleNameForTray();
+  }
 }
 
 std::u16string UnifiedSystemTray::GetAccessibleNameForQuickSettingsBubble() {
   if (features::IsQsRevampEnabled()) {
-    if (bubble_->quick_settings_view()->IsDetailedViewShown())
+    if (bubble_->quick_settings_view()->IsDetailedViewShown()) {
       return bubble_->quick_settings_view()->GetDetailedViewAccessibleName();
+    }
 
     return l10n_util::GetStringUTF16(
         IDS_ASH_QUICK_SETTINGS_BUBBLE_ACCESSIBLE_DESCRIPTION);
   }
 
-  if (bubble_->unified_view()->IsDetailedViewShown())
+  if (bubble_->unified_view()->IsDetailedViewShown()) {
     return bubble_->unified_view()->GetDetailedViewAccessibleName();
+  }
 
   return l10n_util::GetStringUTF16(
       IDS_ASH_QUICK_SETTINGS_BUBBLE_ACCESSIBLE_DESCRIPTION);
 }
 
 void UnifiedSystemTray::HandleLocaleChange() {
-  for (TrayItemView* item : tray_items_)
+  for (TrayItemView* item : tray_items_) {
     item->HandleLocaleChange();
+  }
 }
 
 std::u16string UnifiedSystemTray::GetAccessibleNameForTray() {
@@ -667,14 +702,16 @@
 void UnifiedSystemTray::UpdateLayout() {
   TrayBackgroundView::UpdateLayout();
   time_view_->UpdateAlignmentForShelf(shelf());
-  if (privacy_indicators_view_)
+  if (privacy_indicators_view_) {
     privacy_indicators_view_->UpdateAlignmentForShelf(shelf());
+  }
 }
 
 void UnifiedSystemTray::ShowBubbleInternal() {
   // Never show System Tray bubble in kiosk app mode.
-  if (Shell::Get()->session_controller()->IsRunningInAppMode())
+  if (Shell::Get()->session_controller()->IsRunningInAppMode()) {
     return;
+  }
 
   CloseSecondaryBubbles();
 
@@ -698,8 +735,9 @@
   // before their creation is complete resulting in crashes.
   bubble_->InitializeObservers();
 
-  if (Shell::Get()->accessibility_controller()->spoken_feedback().enabled())
+  if (Shell::Get()->accessibility_controller()->spoken_feedback().enabled()) {
     ActivateBubble();
+  }
 
   first_interaction_recorded_ = false;
 
@@ -730,8 +768,9 @@
 void UnifiedSystemTray::UpdateNotificationAfterDelay() {
   // Notification icons will be removed from system tray with the QsRevamp
   // feature.
-  if (!features::IsQsRevampEnabled())
+  if (!features::IsQsRevampEnabled()) {
     notification_icons_controller_->UpdateNotificationIndicators();
+  }
 }
 
 message_center::MessagePopupView*
@@ -744,8 +783,9 @@
   // We need a check here since this function might be called when UiDelegate's
   // dtor is triggered. In that case, the unique_ptr `ui_delegate_` is null even
   // though the UiDelegate object is still in the middle of dtor process.
-  if (!ui_delegate_)
+  if (!ui_delegate_) {
     return nullptr;
+  }
   return ui_delegate_->message_popup_collection();
 }
 
@@ -754,8 +794,9 @@
   // We need a check here since this function might be called when UiDelegate's
   // dtor is triggered. In that case, the unique_ptr `ui_delegate_` is null even
   // though the UiDelegate object is still in the middle of dtor process.
-  if (!ui_delegate_)
+  if (!ui_delegate_) {
     return nullptr;
+  }
   return ui_delegate_->grouping_controller();
 }
 
@@ -770,8 +811,9 @@
 
 void UnifiedSystemTray::DestroyBubbles() {
   message_center_bubble_.reset();
-  if (bubble_)
+  if (bubble_) {
     bubble_->unified_system_tray_controller()->RemoveObserver(this);
+  }
   bubble_.reset();
 }
 
diff --git a/ash/system/unified/unified_system_tray_controller.cc b/ash/system/unified/unified_system_tray_controller.cc
index 71c38c4..bcd8e02f6 100644
--- a/ash/system/unified/unified_system_tray_controller.cc
+++ b/ash/system/unified/unified_system_tray_controller.cc
@@ -682,6 +682,10 @@
               feature_pod_controllers_, tiles);
   create_tile(std::make_unique<LocaleFeaturePodController>(this),
               feature_pod_controllers_, tiles);
+  if (base::FeatureList::IsEnabled(features::kShelfParty)) {
+    create_tile(std::make_unique<ShelfPartyFeaturePodController>(),
+                feature_pod_controllers_, tiles);
+  }
 
   // More placeholder tiles.
   while (tiles.size() < 10) {
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc
index 3d97c0c..a931a9a 100644
--- a/ash/test/ash_test_base.cc
+++ b/ash/test/ash_test_base.cc
@@ -171,6 +171,11 @@
 }
 
 // static
+NotificationCenterTray* AshTestBase::GetPrimaryNotificationCenterTray() {
+  return GetPrimaryShelf()->GetStatusAreaWidget()->notification_center_tray();
+}
+
+// static
 Shelf* AshTestBase::GetPrimaryShelf() {
   return Shell::GetPrimaryRootWindowController()->shelf();
 }
diff --git a/ash/test/ash_test_base.h b/ash/test/ash_test_base.h
index 0b5641e..5a1d03a7 100644
--- a/ash/test/ash_test_base.h
+++ b/ash/test/ash_test_base.h
@@ -71,6 +71,7 @@
 class AppListTestHelper;
 class AshPixelDiffer;
 class AshTestHelper;
+class NotificationCenterTray;
 class Shelf;
 class TestAppListClient;
 class TestShellDelegate;
@@ -107,6 +108,9 @@
   void SetUp(std::unique_ptr<TestShellDelegate> delegate);
   void TearDown() override;
 
+  // Returns the notification center tray on the primary display.
+  static NotificationCenterTray* GetPrimaryNotificationCenterTray();
+
   // Returns the Shelf for the primary display.
   static Shelf* GetPrimaryShelf();
 
diff --git a/ash/test/ash_test_util.cc b/ash/test/ash_test_util.cc
index f528aab5..9a6ad92 100644
--- a/ash/test/ash_test_util.cc
+++ b/ash/test/ash_test_util.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_util.h"
 #include "base/functional/callback.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ui/aura/window.h"
 #include "ui/gfx/image/image.h"
 #include "ui/snapshot/snapshot_aura.h"
diff --git a/ash/test/ash_test_views_delegate.cc b/ash/test/ash_test_views_delegate.cc
index da45c193..147edea 100644
--- a/ash/test/ash_test_views_delegate.cc
+++ b/ash/test/ash_test_views_delegate.cc
@@ -6,6 +6,7 @@
 
 #include "ash/accelerators/accelerator_controller_impl.h"
 #include "ash/shell.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ui/frame/frame_utils.h"
 
 namespace ash {
diff --git a/ash/test/pixel/ash_pixel_test_helper.cc b/ash/test/pixel/ash_pixel_test_helper.cc
index 8c6f2bc..99e44479 100644
--- a/ash/test/pixel/ash_pixel_test_helper.cc
+++ b/ash/test/pixel/ash_pixel_test_helper.cc
@@ -7,12 +7,12 @@
 #include "ash/constants/ash_features.h"
 #include "ash/shell.h"
 #include "ash/style/dark_light_mode_controller_impl.h"
+#include "ash/test/ash_test_util.h"
 #include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "base/command_line.h"
 #include "base/i18n/base_i18n_switches.h"
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
-#include "ui/gfx/image/image_skia.h"
 
 namespace ash {
 
@@ -25,15 +25,6 @@
 constexpr char kLocale[] = "en_US";
 constexpr char kTimeZone[] = "America/Chicago";
 
-// Creates a pure color image of the specified size.
-gfx::ImageSkia CreateImage(const gfx::Size& image_size, SkColor color) {
-  SkBitmap bitmap;
-  bitmap.allocN32Pixels(image_size.width(), image_size.height());
-  bitmap.eraseColor(color);
-  gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
-  return image;
-}
-
 }  // namespace
 
 AshPixelTestHelper::AshPixelTestHelper(pixel_test::InitParams params)
@@ -72,7 +63,7 @@
   switch (params_.wallpaper_init_type) {
     case pixel_test::WallpaperInitType::kRegular: {
       gfx::ImageSkia wallpaper_image =
-          CreateImage(wallpaper_size, kWallPaperColor);
+          CreateSolidColorTestImage(wallpaper_size, kWallPaperColor);
       controller->set_allow_blur_or_shield_for_testing();
 
       // Use the one shot wallpaper to ensure that the custom wallpaper set by
diff --git a/ash/wallpaper/wallpaper_utils/wallpaper_color_calculator_unittest.cc b/ash/wallpaper/wallpaper_utils/wallpaper_color_calculator_unittest.cc
index f17977e..d37a400 100644
--- a/ash/wallpaper/wallpaper_utils/wallpaper_color_calculator_unittest.cc
+++ b/ash/wallpaper/wallpaper_utils/wallpaper_color_calculator_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/null_task_runner.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "skia/ext/platform_canvas.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ash/webui/camera_app_ui/document_scanner_service_client.cc b/ash/webui/camera_app_ui/document_scanner_service_client.cc
index f275896..d8ded66f 100644
--- a/ash/webui/camera_app_ui/document_scanner_service_client.cc
+++ b/ash/webui/camera_app_ui/document_scanner_service_client.cc
@@ -9,7 +9,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/services/machine_learning/public/cpp/service_connection.h"
 #include "components/device_event_log/device_event_log.h"
 
diff --git a/ash/webui/common/resources/BUILD.gn b/ash/webui/common/resources/BUILD.gn
index 4bdade8..8c8790c 100644
--- a/ash/webui/common/resources/BUILD.gn
+++ b/ash/webui/common/resources/BUILD.gn
@@ -208,6 +208,7 @@
     "hotspot/fake_hotspot_config.js",
     "hotspot/cros_hotspot_config.mojom-webui.js",
     "typescript_utils/strict_query.js",
+    "typescript_utils/strict_query_mixin.js",
   ]
 }
 
@@ -223,7 +224,10 @@
 
 copy("copy_generated_dts_files_typescript_utils") {
   deps = [ "typescript_utils:build_ts" ]
-  sources = [ "$target_gen_dir/typescript_utils/strict_query.d.ts" ]
+  sources = [
+    "$target_gen_dir/typescript_utils/strict_query.d.ts",
+    "$target_gen_dir/typescript_utils/strict_query_mixin.d.ts",
+  ]
   outputs = [
     "$target_gen_dir/$preprocessed_dir/typescript_utils/{{source_file_part}}",
   ]
diff --git a/ash/webui/common/resources/typescript_utils/BUILD.gn b/ash/webui/common/resources/typescript_utils/BUILD.gn
index ffefbc2..02fb6405 100644
--- a/ash/webui/common/resources/typescript_utils/BUILD.gn
+++ b/ash/webui/common/resources/typescript_utils/BUILD.gn
@@ -10,7 +10,10 @@
 
 preprocessed_dir = "preprocessed"
 
-ts_files = [ "strict_query.ts" ]
+ts_files = [
+  "strict_query.ts",
+  "strict_query_mixin.ts",
+]
 
 preprocess_if_expr("preprocess") {
   in_folder = "."
diff --git a/ash/webui/common/resources/typescript_utils/strict_query_mixin.ts b/ash/webui/common/resources/typescript_utils/strict_query_mixin.ts
new file mode 100644
index 0000000..fad9173
--- /dev/null
+++ b/ash/webui/common/resources/typescript_utils/strict_query_mixin.ts
@@ -0,0 +1,55 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview
+ * 'StrictQueryMixin' is a mixin that adds the function strictQuery, which is
+ * used to query the Shadow DOM for elements that are known to exist.
+ */
+
+import {dedupingMixin, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {strictQuery} from './strict_query.js';
+
+type Constructor<T> = new (...args: any[]) => T;
+
+export const StrictQueryMixin = dedupingMixin(
+    <T extends Constructor<PolymerElement>>(superClass: T): T&
+    Constructor<StrictQueryMixinInterface> => {
+      class StrictQueryMixin extends superClass implements
+          StrictQueryMixinInterface {
+        /**
+         * Queries |selector| on the element's shadowRoot and returns the first
+         * matching element. Throws an exception if there is no resulting
+         * element or if element is not of type |type|.
+         */
+        strictQuery<T>(selector: string, type: Constructor<T>): T {
+          return strictQuery(selector, this.shadowRoot, type);
+        }
+
+        /**
+         * Convenience wrapper around `strictQuery` that queries for
+         * div elements.
+         */
+        strictQueryDiv(selector: string): HTMLDivElement {
+          return this.strictQuery(selector, HTMLDivElement);
+        }
+
+        /**
+         * Convenience wrapper around `strictQuery` that queries for
+         * span elements.
+         */
+        strictQuerySpan(selector: string): HTMLSpanElement {
+          return this.strictQuery(selector, HTMLSpanElement);
+        }
+      }
+
+      return StrictQueryMixin;
+    });
+
+export interface StrictQueryMixinInterface {
+  strictQuery<T>(selector: string, type: Constructor<T>): T;
+  strictQueryDiv(selector: string): HTMLDivElement;
+  strictQuerySpan(selector: string): HTMLSpanElement;
+}
diff --git a/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc b/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc
index 6b08e8fa..5cf2115 100644
--- a/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc
+++ b/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc
@@ -12,7 +12,6 @@
 #include "base/base64url.h"
 #include "base/functional/bind.h"
 #include "base/i18n/time_formatting.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
 #include "base/values.h"
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
index 31d6688..fcb8b87 100644
--- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
+++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
@@ -325,6 +325,9 @@
   // Observe keyboard input method changes.
   input_method::InputMethodManager::Get()->AddObserver(this);
 
+  // Observe top row keys are f-keys preference changes.
+  Shell::Get()->keyboard_capability()->AddObserver(this);
+
   ash_accelerator_configuration_->AddAcceleratorsUpdatedCallback(
       base::BindRepeating(
           &AcceleratorConfigurationProvider::OnAcceleratorsUpdated,
@@ -346,6 +349,7 @@
 
   ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
   input_method::InputMethodManager::Get()->RemoveObserver(this);
+  Shell::Get()->keyboard_capability()->RemoveObserver(this);
 }
 
 void AcceleratorConfigurationProvider::IsMutable(
@@ -390,6 +394,10 @@
   NotifyAcceleratorsUpdated();
 }
 
+void AcceleratorConfigurationProvider::OnTopRowKeysAreFKeysChanged() {
+  NotifyAcceleratorsUpdated();
+}
+
 void AcceleratorConfigurationProvider::GetAcceleratorLayoutInfos(
     GetAcceleratorLayoutInfosCallback callback) {
   std::move(callback).Run(mojo::Clone(layout_infos_));
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h
index f1d13bd..307ea9ab 100644
--- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h
+++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h
@@ -17,6 +17,7 @@
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "ui/base/ime/ash/input_method_manager.h"
+#include "ui/chromeos/events/keyboard_capability.h"
 #include "ui/events/devices/input_device.h"
 #include "ui/events/devices/input_device_event_observer.h"
 
@@ -42,7 +43,8 @@
 class AcceleratorConfigurationProvider
     : public shortcut_customization::mojom::AcceleratorConfigurationProvider,
       public ui::InputDeviceEventObserver,
-      public input_method::InputMethodManager::Observer {
+      public input_method::InputMethodManager::Observer,
+      public ui::KeyboardCapability::Observer {
  public:
   using ActionIdToAcceleratorsInfoMap =
       base::flat_map<AcceleratorActionId,
@@ -78,6 +80,9 @@
                           Profile* profile,
                           bool show_message) override;
 
+  // ui::KeyboardCapability::Observer:
+  void OnTopRowKeysAreFKeysChanged() override;
+
   void BindInterface(
       mojo::PendingReceiver<
           shortcut_customization::mojom::AcceleratorConfigurationProvider>
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc
index 026a9d2b..1ccd01f2 100644
--- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc
+++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc
@@ -12,12 +12,14 @@
 
 #include "ash/accelerators/accelerator_layout_table.h"
 #include "ash/accelerators/ash_accelerator_configuration.h"
+#include "ash/constants/ash_pref_names.h"
 #include "ash/public/cpp/accelerator_configuration.h"
 #include "ash/public/cpp/accelerators.h"
 #include "ash/public/cpp/accelerators_util.h"
 #include "ash/public/mojom/accelerator_info.mojom-shared.h"
 #include "ash/public/mojom/accelerator_info.mojom.h"
 #include "ash/public/mojom/accelerator_keys.mojom.h"
+#include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/webui/shortcut_customization_ui/mojom/shortcut_customization.mojom.h"
@@ -228,9 +230,9 @@
   }
 
   void TearDown() override {
-    AshTestBase::TearDown();
     // `provider_` has a dependency on `input_method_manager_`.
     provider_.reset();
+    AshTestBase::TearDown();
     input_method::InputMethodManager::Shutdown();
     input_method_manager_ = nullptr;
   }
@@ -426,9 +428,12 @@
                                observer.config());
 
   // Enable TopRowKeysAreFKeys.
-  Shell::Get()->keyboard_capability()->SetTopRowKeysAsFKeysEnabledForTesting(
-      true);
+  Shell::Get()->session_controller()->GetActivePrefService()->SetBoolean(
+      prefs::kSendFunctionKeys, true);
+  base::RunLoop().RunUntilIdle();
+
   EXPECT_TRUE(Shell::Get()->keyboard_capability()->TopRowKeysAreFKeys());
+  EXPECT_EQ(2, observer.num_times_notified());
 
   // Initialize the same test_data again, but with
   // TopRowKeysAsFunctionKeysEnabled.
@@ -469,7 +474,7 @@
        TOGGLE_FULLSCREEN},
   };
 
-  EXPECT_EQ(2, observer.num_times_notified());
+  EXPECT_EQ(3, observer.num_times_notified());
   // Verify observer received the top-row-remapped accelerators.
   ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh,
                                expected_test_data, observer.config());
diff --git a/ash/wm/desks/desk_drag_proxy.cc b/ash/wm/desks/desk_drag_proxy.cc
index b220db68..f06e38c 100644
--- a/ash/wm/desks/desk_drag_proxy.cc
+++ b/ash/wm/desks/desk_drag_proxy.cc
@@ -4,6 +4,7 @@
 
 #include "ash/wm/desks/desk_drag_proxy.h"
 
+#include "ash/constants/ash_features.h"
 #include "ash/drag_drop/drag_image_view.h"
 #include "ash/style/system_shadow.h"
 #include "ash/wm/desks/desk_mini_view.h"
@@ -91,7 +92,9 @@
       scale_transform));
 
   // When being dragged, the shadow elevation will be increased.
-  drag_preview_->shadow()->SetType(DeskPreviewView::kDraggedShadowType);
+  if (!features::IsJellyrollEnabled()) {
+    drag_preview_->shadow()->SetType(DeskPreviewView::kDraggedShadowType);
+  }
 
   // Perform Moving.
   DragToX(location_screen_x);
@@ -128,7 +131,9 @@
   layer->SetTransform(gfx::Transform());
 
   // Reset the shadow elevation when drag ends.
-  drag_preview_->shadow()->SetType(DeskPreviewView::kDefaultShadowType);
+  if (!features::IsJellyrollEnabled()) {
+    drag_preview_->shadow()->SetType(DeskPreviewView::kDefaultShadowType);
+  }
 
   state_ = State::kSnappingBack;
 }
diff --git a/ash/wm/desks/desks_controller.cc b/ash/wm/desks/desks_controller.cc
index f7c98c6..fb3b701 100644
--- a/ash/wm/desks/desks_controller.cc
+++ b/ash/wm/desks/desks_controller.cc
@@ -63,6 +63,7 @@
 #include "base/notreached.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chromeos/ui/wm/features.h"
diff --git a/ash/wm/desks/desks_test_api.cc b/ash/wm/desks/desks_test_api.cc
index 296b91b2..5b57a70 100644
--- a/ash/wm/desks/desks_test_api.cc
+++ b/ash/wm/desks/desks_test_api.cc
@@ -4,8 +4,10 @@
 
 #include "ash/wm/desks/desks_test_api.h"
 
+#include "ash/constants/ash_features.h"
 #include "ash/shell.h"
 #include "ash/system/toast/toast_manager_impl.h"
+#include "ash/wm/desks/cros_next_desk_button.h"
 #include "ash/wm/desks/desk.h"
 #include "ash/wm/desks/desk_action_context_menu.h"
 #include "ash/wm/desks/desk_mini_view.h"
@@ -20,6 +22,7 @@
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/overview/overview_grid.h"
 #include "ash/wm/overview/overview_test_util.h"
+#include "ui/views/background.h"
 #include "ui/views/controls/menu/menu_runner.h"
 
 namespace ash {
@@ -71,10 +74,12 @@
 
 // static
 SkColor DesksTestApi::GetNewDeskButtonBackgroundColor() {
-  return GetDesksBarView()
-      ->expanded_state_new_desk_button()
-      ->GetInnerButton()
-      ->background_color_;
+  return features::IsJellyrollEnabled()
+             ? GetDesksBarView()->new_desk_button()->background()->get_color()
+             : GetDesksBarView()
+                   ->expanded_state_new_desk_button()
+                   ->GetInnerButton()
+                   ->background_color_;
 }
 
 // static
diff --git a/ash/wm/desks/desks_test_util.cc b/ash/wm/desks/desks_test_util.cc
index 8d2c7db..b0382ac 100644
--- a/ash/wm/desks/desks_test_util.cc
+++ b/ash/wm/desks/desks_test_util.cc
@@ -17,6 +17,7 @@
 #include "ash/wm/gestures/wm_gesture_handler.h"
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/overview/overview_grid.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/events/base_event_utils.h"
diff --git a/ash/wm/desks/desks_textfield.cc b/ash/wm/desks/desks_textfield.cc
index cb2577dc..25e8aed 100644
--- a/ash/wm/desks/desks_textfield.cc
+++ b/ash/wm/desks/desks_textfield.cc
@@ -10,6 +10,7 @@
 #include "ash/wm/overview/overview_constants.h"
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/overview/overview_grid.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/cursor/cursor.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
diff --git a/ash/wm/desks/desks_unittests.cc b/ash/wm/desks/desks_unittests.cc
index 1423701..5c8fc5a 100644
--- a/ash/wm/desks/desks_unittests.cc
+++ b/ash/wm/desks/desks_unittests.cc
@@ -40,6 +40,8 @@
 #include "ash/style/color_util.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/ash_test_util.h"
+#include "ash/wm/desks/cros_next_desk_button.h"
+#include "ash/wm/desks/cros_next_desk_button_base.h"
 #include "ash/wm/desks/desk.h"
 #include "ash/wm/desks/desk_action_context_menu.h"
 #include "ash/wm/desks/desk_action_view.h"
@@ -60,6 +62,7 @@
 #include "ash/wm/desks/persistent_desks_bar/persistent_desks_bar_view.h"
 #include "ash/wm/desks/root_window_desk_switch_animator_test_api.h"
 #include "ash/wm/desks/scroll_arrow_button.h"
+#include "ash/wm/desks/templates/saved_desk_test_util.h"
 #include "ash/wm/desks/zero_state_button.h"
 #include "ash/wm/mru_window_tracker.h"
 #include "ash/wm/overview/overview_controller.h"
@@ -90,7 +93,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_clock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/ui/frame/desks/move_to_desks_menu_delegate.h"
 #include "chromeos/ui/frame/desks/move_to_desks_menu_model.h"
@@ -128,6 +130,7 @@
 #include "ui/gfx/geometry/transform.h"
 #include "ui/views/background.h"
 #include "ui/views/controls/button/button.h"
+#include "ui/views/controls/button/label_button.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_delegate.h"
 #include "ui/views/window/client_view.h"
@@ -369,6 +372,7 @@
 struct DesksTestParams {
   bool use_touch_gestures = false;
   bool use_16_desks = false;
+  bool enable_jellyroll = false;
 };
 
 // Defines a parameterized test fixture to test Virtual Desks behavior.
@@ -389,8 +393,20 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         ::switches::kUseFirstDisplayAsInternal);
 
-    scoped_feature_list_.InitWithFeatureState(features::kEnable16Desks,
-                                              GetParam().use_16_desks);
+    std::vector<base::test::FeatureRef> enabled_features;
+    std::vector<base::test::FeatureRef> disabled_features;
+    if (GetParam().use_16_desks) {
+      enabled_features.push_back(features::kEnable16Desks);
+    } else {
+      disabled_features.push_back(features::kEnable16Desks);
+    }
+
+    if (GetParam().enable_jellyroll) {
+      enabled_features.push_back(features::kJellyroll);
+    } else {
+      disabled_features.push_back(features::kJellyroll);
+    }
+    scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features);
 
     AshTestBase::SetUp();
     SetVirtualKeyboardEnabled(true);
@@ -401,6 +417,82 @@
     scoped_feature_list_.Reset();
   }
 
+  views::LabelButton* GetDefaultDeskButton(const DesksBarView* bar_view) {
+    if (GetParam().enable_jellyroll) {
+      return bar_view->default_desk_button();
+    }
+
+    return bar_view->zero_state_default_desk_button();
+  }
+
+  views::LabelButton* GetZeroStateNewDeskButton(const DesksBarView* bar_view) {
+    if (GetParam().enable_jellyroll) {
+      return bar_view->new_desk_button();
+    }
+
+    return bar_view->zero_state_new_desk_button();
+  }
+
+  views::View* GetExpandedStateNewDeskButton(const DesksBarView* bar_view) {
+    if (GetParam().enable_jellyroll) {
+      return bar_view->new_desk_button();
+    }
+
+    return bar_view->expanded_state_new_desk_button();
+  }
+
+  views::LabelButton* GetExpandedStateInnerNewDeskButton(
+      const DesksBarView* bar_view) {
+    if (GetParam().enable_jellyroll) {
+      return bar_view->new_desk_button();
+    }
+
+    return bar_view->expanded_state_new_desk_button()->GetInnerButton();
+  }
+
+  views::LabelButton* GetExpandedStateLibraryButton(
+      const DesksBarView* bar_view) {
+    if (GetParam().enable_jellyroll) {
+      return bar_view->library_button();
+    }
+
+    return bar_view->expanded_state_library_button()->GetInnerButton();
+  }
+
+  void VerifyZeroStateNewDeskButtonVisibility(const DesksBarView* bar_view,
+                                              bool expected_visibility) {
+    // If `Jellyroll` is enabled, new desk button is always visible no matter
+    // what's the current desks bar's state. Thus check the button's state
+    // instead of the visibility.
+    if (GetParam().enable_jellyroll) {
+      const auto state = bar_view->new_desk_button()->state();
+      EXPECT_TRUE(expected_visibility
+                      ? state == CrOSNextDeskIconButton::State::kZero
+                      : state != CrOSNextDeskIconButton::State::kZero);
+      return;
+    }
+
+    EXPECT_EQ(expected_visibility,
+              bar_view->zero_state_new_desk_button()->GetVisible());
+  }
+
+  void VerifyExpandedStateNewDeskButtonVisibility(const DesksBarView* bar_view,
+                                                  bool expected_visibility) {
+    // If `Jellyroll` is enabled, new desk button is always visible no matter
+    // what's the current desks bar's state. Thus verify the button's state
+    // instead of the visibility.
+    if (GetParam().enable_jellyroll) {
+      const auto state = bar_view->new_desk_button()->state();
+      EXPECT_TRUE(expected_visibility
+                      ? state == CrOSNextDeskIconButton::State::kExpanded
+                      : state != CrOSNextDeskIconButton::State::kExpanded);
+      return;
+    }
+
+    EXPECT_EQ(expected_visibility,
+              bar_view->expanded_state_new_desk_button()->GetVisible());
+  }
+
   void SendKey(ui::KeyboardCode key_code, int flags = ui::EF_NONE) {
     PressAndReleaseKey(key_code, flags);
   }
@@ -534,12 +626,10 @@
   EXPECT_TRUE(desks_bar_view->mini_views().empty());
 
   auto* event_generator = GetEventGenerator();
-  ClickOnView(desks_bar_view->zero_state_default_desk_button(),
-              event_generator);
+  ClickOnView(GetDefaultDeskButton(desks_bar_view), event_generator);
   EXPECT_FALSE(desks_bar_view->IsZeroState());
 
-  auto* new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button()->GetInnerButton();
+  auto* new_desk_button = GetExpandedStateInnerNewDeskButton(desks_bar_view);
   EXPECT_TRUE(new_desk_button->GetEnabled());
 
   auto* scroll_right_button = DesksTestApi::GetDesksBarRightScrollButton();
@@ -595,9 +685,7 @@
 
   DCHECK(desks_bar_view);
   EXPECT_EQ(controller->desks().size(), desks_bar_view->mini_views().size());
-  EXPECT_TRUE(desks_bar_view->expanded_state_new_desk_button()
-                  ->GetInnerButton()
-                  ->GetEnabled());
+  EXPECT_TRUE(GetExpandedStateNewDeskButton(desks_bar_view)->GetEnabled());
 }
 
 TEST_P(DesksTest, RemoveDeskWithEmptyName) {
@@ -708,10 +796,8 @@
   const auto* desks_bar_view = overview_grid->desks_bar_view();
   auto* event_generator = GetEventGenerator();
   DCHECK(desks_bar_view);
-  ClickOnView(desks_bar_view->zero_state_default_desk_button(),
-              event_generator);
-  auto* new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button()->GetInnerButton();
+  ClickOnView(GetDefaultDeskButton(desks_bar_view), event_generator);
+  auto* new_desk_button = GetExpandedStateInnerNewDeskButton(desks_bar_view);
   EXPECT_TRUE(new_desk_button->GetEnabled());
 
   auto* scroll_right_button = DesksTestApi::GetDesksBarRightScrollButton();
@@ -1548,6 +1634,12 @@
 }
 
 TEST_P(DesksTest, DragWindowToDesk) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   auto* controller = DesksController::Get();
   NewDesk();
   ASSERT_EQ(2u, controller->desks().size());
@@ -1634,6 +1726,12 @@
 }
 
 TEST_P(DesksTest, DragMinimizedWindowToDesk) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   auto* controller = DesksController::Get();
   NewDesk();
   ASSERT_EQ(2u, controller->desks().size());
@@ -1685,6 +1783,12 @@
 }
 
 TEST_P(DesksTest, DragAllOverviewWindowsToOtherDesksNotEndOverview) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   NewDesk();
   ASSERT_EQ(2u, DesksController::Get()->desks().size());
   auto win = CreateAppWindow(gfx::Rect(0, 0, 250, 100));
@@ -1704,6 +1808,12 @@
 }
 
 TEST_P(DesksTest, DragWindowToNonMiniViewPoints) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   auto* controller = DesksController::Get();
   NewDesk();
   ASSERT_EQ(2u, controller->desks().size());
@@ -1928,14 +2038,17 @@
   const auto* desks_bar_view = overview_grid->desks_bar_view();
   ASSERT_TRUE(desks_bar_view);
   const auto* new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button()->GetInnerButton();
+      GetExpandedStateInnerNewDeskButton(desks_bar_view);
   auto* scroll_right_button = DesksTestApi::GetDesksBarRightScrollButton();
 
   // Tests that with one or two desks, the new desk button has an enabled state
   // and color.
-  const SkColor background_color =
-      AshColorProvider::Get()->GetControlsLayerColor(
-          AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive);
+  auto* color_provider = new_desk_button->GetColorProvider();
+  SkColor background_color =
+      features::IsJellyrollEnabled()
+          ? color_provider->GetColor(cros_tokens::kCrosSysPrimary)
+          : color_provider->GetColor(kColorAshControlBackgroundColorInactive);
+
   const SkColor disabled_background_color =
       ColorUtil::GetDisabledColor(background_color);
   EXPECT_TRUE(new_desk_button->GetEnabled());
@@ -2479,8 +2592,7 @@
   EXPECT_TRUE(desk_name_view->HasFocus());
 
   // Creating a new desk commits the changes.
-  auto* new_desk_button =
-      desks_bar_view()->expanded_state_new_desk_button()->GetInnerButton();
+  auto* new_desk_button = GetExpandedStateNewDeskButton(desks_bar_view());
   auto* event_generator = GetEventGenerator();
   ClickOnView(new_desk_button, event_generator);
   ASSERT_EQ(3u, controller()->desks().size());
@@ -3444,6 +3556,12 @@
 }
 
 TEST_P(DesksTest, SuccessfulDragToDeskRemovesSplitViewIndicators) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   auto* controller = DesksController::Get();
   NewDesk();
   ASSERT_EQ(2u, controller->desks().size());
@@ -3494,6 +3612,12 @@
 }
 
 TEST_P(DesksTest, DragAllOverviewWindowsToOtherDesksNotEndClamshellSplitView) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   // Two virtual desks.
   NewDesk();
   ASSERT_EQ(2u, DesksController::Get()->desks().size());
@@ -4940,12 +5064,10 @@
   ASSERT_TRUE(desks_bar_view->IsZeroState());
 
   auto* event_generator = GetEventGenerator();
-  ClickOnView(desks_bar_view->zero_state_default_desk_button(),
-              event_generator);
+  ClickOnView(GetDefaultDeskButton(desks_bar_view), event_generator);
   EXPECT_EQ(1u, desks_bar_view->mini_views().size());
 
-  auto* new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button()->GetInnerButton();
+  auto* new_desk_button = GetExpandedStateNewDeskButton(desks_bar_view);
   EXPECT_TRUE(new_desk_button->GetEnabled());
 
   // As desks are added, we will scroll the desks bar to keep the "new desk"
@@ -4992,7 +5114,7 @@
 
   // Click on the zero state default desk button for the second root window.
   auto* zero_state_default_desk_button_2 =
-      desks_bar_view_2->zero_state_default_desk_button();
+      GetDefaultDeskButton(desks_bar_view_2);
   EXPECT_TRUE(zero_state_default_desk_button_2->GetEnabled());
   auto* event_generator = GetEventGenerator();
   ClickOnView(zero_state_default_desk_button_2, event_generator);
@@ -5015,7 +5137,7 @@
   ASSERT_TRUE(desks_bar_view_2->IsZeroState());
 
   // Click on the new desk button on the first root window.
-  auto* new_desk_button_1 = desks_bar_view_1->zero_state_new_desk_button();
+  auto* new_desk_button_1 = GetZeroStateNewDeskButton(desks_bar_view_1);
   EXPECT_TRUE(new_desk_button_1->GetEnabled());
   ClickOnView(new_desk_button_1, event_generator);
 
@@ -5031,7 +5153,7 @@
   EXPECT_EQ(std::u16string(), desk_name_view_2->GetText());
 
   // Tap on the new desk button on the second root window.
-  auto* new_desk_button_2 = desks_bar_view_2->expanded_state_new_desk_button();
+  auto* new_desk_button_2 = GetExpandedStateNewDeskButton(desks_bar_view_2);
   EXPECT_TRUE(new_desk_button_2->GetEnabled());
   GestureTapOnView(new_desk_button_2, event_generator);
 
@@ -5087,12 +5209,10 @@
       GetOverviewGridForRoot(root_window)->desks_bar_view();
   ASSERT_TRUE(desks_bar_view->IsZeroState());
   auto* event_generator = GetEventGenerator();
-  ClickOnView(desks_bar_view->zero_state_default_desk_button(),
-              event_generator);
+  ClickOnView(GetDefaultDeskButton(desks_bar_view), event_generator);
   EXPECT_EQ(1u, desks_bar_view->mini_views().size());
 
-  auto* new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button()->GetInnerButton();
+  auto* new_desk_button = GetExpandedStateNewDeskButton(desks_bar_view);
 
   // Set the scroll delta large enough to make sure the desks bar can be
   // scrolled to the end each time.
@@ -5311,8 +5431,18 @@
   // Wait for 1s, there will be another scroll.
   WaitForMilliseconds(1000);
   current_index += desks_in_one_page;
-  EXPECT_EQ(scroll_view->GetVisibleRect().x() + focus_ring_width_and_padding,
-            mini_views[current_index]->bounds().x());
+
+  // When `Jellyroll` is enabled and the maximum number of desks is 8, the new
+  // desk button and library button are smaller, two scrolls will reach the end
+  // of the desks bar view, thus we verify the right of the visible scroll view.
+  if (features::IsJellyrollEnabled() && !features::Is16DesksEnabled()) {
+    EXPECT_EQ(
+        scroll_view->GetVisibleRect().right() - focus_ring_width_and_padding,
+        GetExpandedStateLibraryButton(desks_bar)->bounds().right());
+  } else {
+    EXPECT_EQ(scroll_view->GetVisibleRect().x() + focus_ring_width_and_padding,
+              mini_views[current_index]->bounds().x());
+  }
 
   // Release and click a few times to make sure we end up at the maximum offset.
   event_generator->ReleaseLeftButton();
@@ -5336,7 +5466,15 @@
   // previous page to make sure the desk preview will not be cropped.
   event_generator->MoveTouch(left_button->GetBoundsInScreen().CenterPoint());
   event_generator->PressTouch();
-  current_index -= desks_in_one_page;
+  // When the feature flag `Jellyroll` is enabled, the new desk button and the
+  // library button become smaller, thus when scroll to the left from the right
+  // mode, the index of desk mini view on the left is smaller than it when
+  // `Jellyroll` is not enabled.
+  if (features::IsJellyrollEnabled()) {
+    current_index -= (desks_in_one_page + 1);
+  } else {
+    current_index -= desks_in_one_page;
+  }
   EXPECT_EQ(scroll_view->GetVisibleRect().x() + focus_ring_width_and_padding,
             mini_views[current_index]->bounds().x());
 
@@ -5662,8 +5800,7 @@
   EXPECT_TRUE(desks_bar_view->mini_views().empty());
 
   // Click new desk button in the zero state bar to create a new desk.
-  ClickOnView(desks_bar_view->zero_state_new_desk_button(),
-              GetEventGenerator());
+  ClickOnView(GetZeroStateNewDeskButton(desks_bar_view), GetEventGenerator());
   ExitOverview();
 
   // Desks bar should not stay in zero state if there are more than one desks.
@@ -5684,10 +5821,8 @@
   ASSERT_TRUE(desks_bar_view->mini_views().empty());
 
   auto* event_generator = GetEventGenerator();
-  auto* zero_state_default_desk_button =
-      desks_bar_view->zero_state_default_desk_button();
-  auto* zero_state_new_desk_button =
-      desks_bar_view->zero_state_new_desk_button();
+  auto* zero_state_default_desk_button = GetDefaultDeskButton(desks_bar_view);
+  auto* zero_state_new_desk_button = GetZeroStateNewDeskButton(desks_bar_view);
   ClickOnView(zero_state_default_desk_button, event_generator);
   // Click the zero state default desk button should switch to expanded desks
   // bar and focus on the default desk's name view. The two buttons in zero
@@ -5696,16 +5831,15 @@
   EXPECT_EQ(1u, desks_bar_view->mini_views().size());
   EXPECT_TRUE(desks_bar_view->mini_views()[0]->desk_name_view()->HasFocus());
   EXPECT_FALSE(zero_state_default_desk_button->GetVisible());
-  EXPECT_FALSE(zero_state_new_desk_button->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, false);
 
   ExitOverview();
   EnterOverview();
   desks_bar_view = GetOverviewGridForRoot(root_window)->desks_bar_view();
   ASSERT_TRUE(desks_bar_view->IsZeroState());
 
-  zero_state_default_desk_button =
-      desks_bar_view->zero_state_default_desk_button();
-  zero_state_new_desk_button = desks_bar_view->zero_state_new_desk_button();
+  zero_state_default_desk_button = GetDefaultDeskButton(desks_bar_view);
+  zero_state_new_desk_button = GetZeroStateNewDeskButton(desks_bar_view);
   ClickOnView(zero_state_new_desk_button, event_generator);
   // Click the zero state new desk button should switch to expand desks bar,
   // create a new desk and focus on the new created desk's name view. The two
@@ -5714,12 +5848,12 @@
   EXPECT_EQ(2u, desks_bar_view->mini_views().size());
   EXPECT_TRUE(desks_bar_view->mini_views()[1]->desk_name_view()->HasFocus());
   EXPECT_FALSE(zero_state_default_desk_button->GetVisible());
-  EXPECT_FALSE(zero_state_new_desk_button->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, false);
 
   // Should switch to zero state if there is only one desk after removing.
   CloseDeskFromMiniView(desks_bar_view->mini_views()[0], event_generator);
   EXPECT_TRUE(zero_state_default_desk_button->GetVisible());
-  EXPECT_TRUE(zero_state_new_desk_button->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, true);
 }
 
 // Tests that buttons in the desk bar are shown and hidden correctly when
@@ -5744,14 +5878,9 @@
 
   // Verify that the expanded state button is visible, while the zero state
   // buttons are not visible.
-  auto* expanded_state_new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button();
-  auto* zero_state_new_desk_button =
-      desks_bar_view->zero_state_new_desk_button();
-  auto* zero_state_default_desk_button =
-      desks_bar_view->zero_state_default_desk_button();
-  EXPECT_TRUE(expanded_state_new_desk_button->GetVisible());
-  EXPECT_FALSE(zero_state_new_desk_button->GetVisible());
+  auto* zero_state_default_desk_button = GetDefaultDeskButton(desks_bar_view);
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, true);
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, false);
   EXPECT_FALSE(zero_state_default_desk_button->GetVisible());
 
   // Close a desk and check that the desks bar switches into zero state.
@@ -5762,8 +5891,8 @@
 
   // Verify that the expanded state button is not visible, while the zero state
   // buttons are visible.
-  EXPECT_FALSE(expanded_state_new_desk_button->GetVisible());
-  EXPECT_TRUE(zero_state_new_desk_button->GetVisible());
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, false);
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, true);
   EXPECT_TRUE(zero_state_default_desk_button->GetVisible());
 }
 
@@ -5777,10 +5906,8 @@
   // Click the default desk button in the zero state bar to switch to expanded
   // desks bar.
   auto* event_generator = GetEventGenerator();
-  ClickOnView(desks_bar_view->zero_state_default_desk_button(),
-              event_generator);
-  auto* new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button()->GetInnerButton();
+  ClickOnView(GetDefaultDeskButton(desks_bar_view), event_generator);
+  auto* new_desk_button = GetExpandedStateInnerNewDeskButton(desks_bar_view);
   EXPECT_TRUE(new_desk_button->GetVisible());
   EXPECT_TRUE(new_desk_button->GetEnabled());
 
@@ -5813,12 +5940,10 @@
   ASSERT_TRUE(desks_bar_view->IsZeroState());
   // Show the default name "Desk 1" while initializing the desks bar at the
   // first time.
-  EXPECT_EQ(u"Desk 1",
-            desks_bar_view->zero_state_default_desk_button()->GetText());
+  EXPECT_EQ(u"Desk 1", GetDefaultDeskButton(desks_bar_view)->GetText());
 
   auto* event_generator = GetEventGenerator();
-  ClickOnView(desks_bar_view->zero_state_default_desk_button(),
-              event_generator);
+  ClickOnView(GetDefaultDeskButton(desks_bar_view), event_generator);
   EXPECT_TRUE(desks_bar_view->mini_views()[0]->desk_name_view()->HasFocus());
 
   // Change the desk name to "test".
@@ -5833,11 +5958,10 @@
   desks_bar_view = GetOverviewGridForRoot(root_window)->desks_bar_view();
   EXPECT_TRUE(desks_bar_view->IsZeroState());
   // Should show the desk's current name "test" instead of the default name.
-  EXPECT_EQ(u"test",
-            desks_bar_view->zero_state_default_desk_button()->GetText());
+  EXPECT_EQ(u"test", GetDefaultDeskButton(desks_bar_view)->GetText());
 
   // Create 'Desk 2'.
-  ClickOnView(desks_bar_view->zero_state_new_desk_button(), event_generator);
+  ClickOnView(GetZeroStateNewDeskButton(desks_bar_view), event_generator);
   EXPECT_FALSE(desks_bar_view->IsZeroState());
   SendKey(ui::VKEY_RETURN);
   EXPECT_EQ(u"Desk 2", DesksController::Get()->desks()[1].get()->name());
@@ -5846,12 +5970,10 @@
   // desk button should show current desk's name, which is 'Desk 1'.
   CloseDeskFromMiniView(desks_bar_view->mini_views()[0], event_generator);
   EXPECT_TRUE(desks_bar_view->IsZeroState());
-  EXPECT_EQ(u"Desk 1",
-            desks_bar_view->zero_state_default_desk_button()->GetText());
+  EXPECT_EQ(u"Desk 1", GetDefaultDeskButton(desks_bar_view)->GetText());
 
   // Set a super long desk name.
-  ClickOnView(desks_bar_view->zero_state_default_desk_button(),
-              event_generator);
+  ClickOnView(GetDefaultDeskButton(desks_bar_view), event_generator);
   for (size_t i = 0; i < DesksTextfield::kMaxLength + 5; i++)
     SendKey(ui::VKEY_A);
   SendKey(ui::VKEY_RETURN);
@@ -5859,8 +5981,7 @@
   EnterOverview();
 
   desks_bar_view = GetOverviewGridForRoot(root_window)->desks_bar_view();
-  auto* zero_state_default_desk_button =
-      desks_bar_view->zero_state_default_desk_button();
+  auto* zero_state_default_desk_button = GetDefaultDeskButton(desks_bar_view);
   std::u16string desk_button_text = zero_state_default_desk_button->GetText();
   std::u16string expected_desk_name(DesksTextfield::kMaxLength, L'a');
   // Zero state desk button should show the elided name as the DeskNameView.
@@ -6267,8 +6388,18 @@
   // Wait for 1s, there will be another scroll.
   WaitForMilliseconds(1000);
   current_index += desks_in_one_page;
-  EXPECT_EQ(scroll_view->GetVisibleRect().x() + focus_ring_width_and_padding,
-            mini_views[current_index]->bounds().x());
+
+  // When `Jellyroll` is enabled and the maximum number of desks is 8, the new
+  // desk button and library button are smaller, two scrolls will reach the end
+  // of the desks bar view, thus we verify the right of the visible scroll view.
+  if (features::IsJellyrollEnabled() && !features::Is16DesksEnabled()) {
+    EXPECT_EQ(
+        scroll_view->GetVisibleRect().right() - focus_ring_width_and_padding,
+        GetExpandedStateLibraryButton(desks_bar)->bounds().right());
+  } else {
+    EXPECT_EQ(scroll_view->GetVisibleRect().x() + focus_ring_width_and_padding,
+              mini_views[current_index]->bounds().x());
+  }
 
   // While scrolling, the desk cannot be reordered.
   EXPECT_EQ(0, desks_controller->GetDeskIndex(desk_0));
@@ -6301,7 +6432,15 @@
   mini_views = desks_bar->mini_views();
   StartDragDeskPreview(mini_views[max_desks_size - 1], event_generator);
   event_generator->MoveMouseTo(left_button->GetBoundsInScreen().CenterPoint());
-  current_index -= desks_in_one_page;
+  // When the feature flag `Jellyroll` is enabled, the new desk button and the
+  // library button become smaller, thus when scroll to the left from the right
+  // most, the index of desk mini view on the left is smaller than it when
+  // `Jellyroll` is not enabled.
+  if (features::IsJellyrollEnabled()) {
+    current_index -= (desks_in_one_page + 1);
+  } else {
+    current_index -= desks_in_one_page;
+  }
   EXPECT_EQ(scroll_view->GetVisibleRect().x() + focus_ring_width_and_padding,
             mini_views[current_index]->bounds().x());
 
@@ -6316,6 +6455,10 @@
 
   // Drop the desk. Desks bar will scroll to show the desk's target position.
   event_generator->ReleaseLeftButton();
+  // Wait 100ms for the animation of the scrollable bar to end. Otherwise, the
+  // test could be flaky, i.e, the visible bounds of the scroll bar is not
+  // updated yet if we get its bounds immediately after the desk is dropped.
+  WaitForMilliseconds(100);
   gfx::Rect bounds_0 = mini_view_0->bounds();
   gfx::Rect bounds_visible = scroll_view->GetVisibleRect();
   EXPECT_LE(bounds_visible.x(), bounds_0.x());
@@ -6559,7 +6702,7 @@
   auto* event_generator = GetEventGenerator();
   const auto* desks_bar_view =
       GetOverviewGridForRoot(Shell::GetPrimaryRootWindow())->desks_bar_view();
-  GestureTapOnView(desks_bar_view->expanded_state_new_desk_button(),
+  GestureTapOnView(GetExpandedStateNewDeskButton(desks_bar_view),
                    event_generator);
   EXPECT_FALSE(keyboard::KeyboardUIController::Get()->IsKeyboardVisible());
   EXPECT_EQ(3u, desks_bar_view->mini_views().size());
@@ -6578,7 +6721,7 @@
   // Tap the new desk button again. There should be a new DeskNameView that is
   // created and the virtual keyboard should be shown.
   ui::DeviceDataManagerTestApi().SetKeyboardDevices({});
-  GestureTapOnView(desks_bar_view->expanded_state_new_desk_button(),
+  GestureTapOnView(GetExpandedStateNewDeskButton(desks_bar_view),
                    event_generator);
   ASSERT_TRUE(keyboard::WaitUntilShown());
   EXPECT_TRUE(keyboard::KeyboardUIController::Get()->IsKeyboardVisible());
@@ -7474,6 +7617,12 @@
 // Tests that dragging and dropping window to new desk while desks bar view is
 // at zero state.
 TEST_P(DragWindowToNewDeskTest, DragWindowAtZeroState) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   auto* controller = DesksController::Get();
   auto win1 = CreateAppWindow(gfx::Rect(0, 0, 250, 100));
 
@@ -7489,13 +7638,11 @@
   // Since we only have one desk, there should be 0 desk mini view and the zero
   // state default desk button and new desk button should be visible.
   ASSERT_EQ(0u, desks_bar_view->mini_views().size());
-  auto* zero_state_default_desk_button =
-      desks_bar_view->zero_state_default_desk_button();
-  auto* zero_state_new_desk_button =
-      desks_bar_view->zero_state_new_desk_button();
+  auto* zero_state_default_desk_button = GetDefaultDeskButton(desks_bar_view);
+  auto* zero_state_new_desk_button = GetZeroStateNewDeskButton(desks_bar_view);
   EXPECT_TRUE(zero_state_default_desk_button->GetVisible());
-  EXPECT_TRUE(zero_state_new_desk_button->GetVisible());
-  EXPECT_FALSE(desks_bar_view->expanded_state_new_desk_button()->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, true);
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, false);
 
   auto* overview_item1 = overview_grid->GetOverviewItemContaining(win1.get());
   auto* event_generator = GetEventGenerator();
@@ -7511,8 +7658,8 @@
       event_generator,
       /*by_touch_gestures=*/false, /*drop=*/false);
   EXPECT_TRUE(zero_state_default_desk_button->GetVisible());
-  EXPECT_TRUE(zero_state_new_desk_button->GetVisible());
-  EXPECT_FALSE(desks_bar_view->expanded_state_new_desk_button()->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, true);
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, false);
 
   // Now keep dragging `overview_item1` and make it close enough to the center
   // point of `zero_state_new_desk_button`. Verify that desks bar is transformed
@@ -7524,8 +7671,8 @@
                              new_desk_button_center_point.y() + 10),
                   event_generator, /*by_touch_gestures=*/false, /*drop=*/false);
   EXPECT_FALSE(zero_state_default_desk_button->GetVisible());
-  EXPECT_FALSE(zero_state_new_desk_button->GetVisible());
-  EXPECT_TRUE(desks_bar_view->expanded_state_new_desk_button()->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, false);
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, true);
 
   // Now drop |overview_item1|, a new desk which contains |win1| will be
   // created.
@@ -7549,6 +7696,11 @@
 // desk bar will be transformed back to zero state once the drag is completed.
 TEST_P(DragWindowToNewDeskTest,
        DragWindowAtZeroStateWithoutDroppingItOnTheNewDesk) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
   auto* controller = DesksController::Get();
   auto win1 = CreateAppWindow(gfx::Rect(0, 0, 250, 100));
 
@@ -7562,15 +7714,13 @@
   ASSERT_TRUE(desks_bar_view);
 
   // Make sure the desks bar is at zero state in the beginning.
-  auto* zero_state_default_desk_button =
-      desks_bar_view->zero_state_default_desk_button();
-  auto* zero_state_new_desk_button =
-      desks_bar_view->zero_state_new_desk_button();
+  auto* zero_state_default_desk_button = GetDefaultDeskButton(desks_bar_view);
+  auto* zero_state_new_desk_button = GetZeroStateNewDeskButton(desks_bar_view);
   auto* expanded_state_new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button();
+      GetExpandedStateNewDeskButton(desks_bar_view);
   EXPECT_TRUE(zero_state_default_desk_button->GetVisible());
-  EXPECT_TRUE(zero_state_new_desk_button->GetVisible());
-  EXPECT_FALSE(expanded_state_new_desk_button->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, true);
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, false);
 
   auto* overview_item1 = overview_grid->GetOverviewItemContaining(win1.get());
   auto* event_generator = GetEventGenerator();
@@ -7585,8 +7735,8 @@
                              new_desk_button_center_point.y() + 10),
                   event_generator, /*by_touch_gestures=*/false, /*drop=*/false);
   EXPECT_FALSE(zero_state_default_desk_button->GetVisible());
-  EXPECT_FALSE(zero_state_new_desk_button->GetVisible());
-  EXPECT_TRUE(expanded_state_new_desk_button->GetVisible());
+  VerifyZeroStateNewDeskButtonVisibility(desks_bar_view, false);
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, true);
 
   // Now keep dragging `overview_item1` and make it not able to be dropped on
   // the new desk, then drop it. Check that `overview_item1` is dropped back to
@@ -7606,6 +7756,12 @@
 // Tests that dragging and dropping window to new desk while desks bar view is
 // at expanded state.
 TEST_P(DragWindowToNewDeskTest, DragWindowAtExpandedState) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   auto* controller = DesksController::Get();
   auto win1 = CreateAppWindow(gfx::Rect(0, 0, 250, 100));
   NewDesk();
@@ -7621,8 +7777,8 @@
 
   ASSERT_EQ(2u, desks_bar_view->mini_views().size());
   auto* expanded_state_new_desk_button =
-      desks_bar_view->expanded_state_new_desk_button();
-  EXPECT_TRUE(expanded_state_new_desk_button->GetVisible());
+      GetExpandedStateNewDeskButton(desks_bar_view);
+  VerifyExpandedStateNewDeskButtonVisibility(desks_bar_view, true);
 
   // Drag and drop |overview_item1| on |expanded_state_new_desk_button|. A new
   // desk which contains |win1| will be created.
@@ -7641,6 +7797,12 @@
 // Tests that dragging and dropping a window on the new desk button does not
 // create a new desk if we are already at the maximum number of desks.
 TEST_P(DragWindowToNewDeskTest, DragWindowAtMaximumDesksState) {
+  // TODO(b/264895043): Remove this if block after the implementation of drag
+  // and drop window on new desk is done when `Jellyroll` is enabled.
+  if (GetParam().enable_jellyroll) {
+    return;
+  }
+
   // Set a display mode that forces vertical layout of split view drag
   // indicators. This is so that we are able to drop an overview item on the
   // "new desk" button even if it's right up to the edge.
@@ -7684,7 +7846,7 @@
   event_generator->MoveMouseBy(20, 0);
 
   // Move the item to the new desk button and drop it.
-  event_generator->MoveMouseTo(desks_bar_view->expanded_state_new_desk_button()
+  event_generator->MoveMouseTo(GetExpandedStateNewDeskButton(desks_bar_view)
                                    ->GetBoundsInScreen()
                                    .CenterPoint());
   event_generator->ReleaseLeftButton();
@@ -8638,9 +8800,8 @@
   ASSERT_TRUE(DesksTestApi::DesksControllerCanUndoDeskRemoval());
 
   // The new desk button should be enabled at this point.
-  auto* new_desk_button = GetPrimaryRootDesksBarView()
-                              ->expanded_state_new_desk_button()
-                              ->GetInnerButton();
+  auto* new_desk_button =
+      GetExpandedStateNewDeskButton(GetPrimaryRootDesksBarView());
   ASSERT_TRUE(new_desk_button->GetEnabled());
 
   // Scroll all the way to the right to ensure that the new button is visible.
@@ -8755,13 +8916,33 @@
 
 // Instantiate the parametrized tests.
 
-// This is used for tests that test all combinations of 8/16 desks as well as
-// clicks/touch.
+// This is used for tests that test all combinations of 8/16 desks, enabled /
+// disabled feature flag `Jellyroll` as well as clicks/touch.
 constexpr DesksTestParams kAllCombinations[] = {
-    {.use_touch_gestures = false, .use_16_desks = false},
-    {.use_touch_gestures = false, .use_16_desks = true},
-    {.use_touch_gestures = true, .use_16_desks = false},
-    {.use_touch_gestures = true, .use_16_desks = true},
+    {.use_touch_gestures = false,
+     .use_16_desks = false,
+     .enable_jellyroll = false},
+    {.use_touch_gestures = false,
+     .use_16_desks = false,
+     .enable_jellyroll = true},
+    {.use_touch_gestures = false,
+     .use_16_desks = true,
+     .enable_jellyroll = false},
+    {.use_touch_gestures = false,
+     .use_16_desks = true,
+     .enable_jellyroll = true},
+    {.use_touch_gestures = true,
+     .use_16_desks = false,
+     .enable_jellyroll = false},
+    {.use_touch_gestures = true,
+     .use_16_desks = false,
+     .enable_jellyroll = true},
+    {.use_touch_gestures = true,
+     .use_16_desks = true,
+     .enable_jellyroll = false},
+    {.use_touch_gestures = true,
+     .use_16_desks = true,
+     .enable_jellyroll = true},
 };
 
 // This is used for tests that only want to test 8/16 desks.
diff --git a/ash/wm/desks/templates/saved_desk_item_view.cc b/ash/wm/desks/templates/saved_desk_item_view.cc
index d47eb39..195e90b 100644
--- a/ash/wm/desks/templates/saved_desk_item_view.cc
+++ b/ash/wm/desks/templates/saved_desk_item_view.cc
@@ -33,6 +33,7 @@
 #include "ash/wm/overview/overview_session.h"
 #include "ash/wm/overview/overview_utils.h"
 #include "base/i18n/time_formatting.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chromeos/ui/vector_icons/vector_icons.h"
 #include "ui/accessibility/ax_enums.mojom-shared.h"
diff --git a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc
index cdb64ed..8f6c449 100644
--- a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc
+++ b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl_unittest.cc
@@ -15,6 +15,7 @@
 #include "ash/wm/gestures/back_gesture/back_gesture_event_handler.h"
 #include "ash/wm/gestures/back_gesture/test_back_gesture_contextual_nudge_delegate.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller_test_api.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_clock.h"
 #include "build/build_config.h"
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc
index e88a1c68..01ec021b 100644
--- a/ash/wm/overview/overview_session_unittest.cc
+++ b/ash/wm/overview/overview_session_unittest.cc
@@ -80,6 +80,7 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/user_action_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
diff --git a/ash/wm/video_detector.cc b/ash/wm/video_detector.cc
index 1ad452b..305518c 100644
--- a/ash/wm/video_detector.cc
+++ b/ash/wm/video_detector.cc
@@ -8,6 +8,7 @@
 #include "ash/shell.h"
 #include "ash/wm/window_state.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/viz/host/host_frame_sink_manager.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "ui/aura/env.h"
diff --git a/ash/wm/window_animations_unittest.cc b/ash/wm/window_animations_unittest.cc
index 4701d7c..0506a89 100644
--- a/ash/wm/window_animations_unittest.cc
+++ b/ash/wm/window_animations_unittest.cc
@@ -14,6 +14,7 @@
 #include "ash/wm/wm_event.h"
 #include "ash/wm/workspace_controller.h"
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "ui/aura/test/test_windows.h"
 #include "ui/aura/window.h"
diff --git a/ash/wm/window_cycle/window_cycle_event_filter.cc b/ash/wm/window_cycle/window_cycle_event_filter.cc
index 7f96bb4..69787e3 100644
--- a/ash/wm/window_cycle/window_cycle_event_filter.cc
+++ b/ash/wm/window_cycle/window_cycle_event_filter.cc
@@ -19,6 +19,7 @@
 #include "ui/wm/core/coordinate_conversion.h"
 
 namespace ash {
+namespace {
 
 // The distance a user has to move their mouse from |initial_mouse_location_|
 // before this stops filtering mouse events.
@@ -39,6 +40,33 @@
   return pref->GetBoolean(prefs::kMouseReverseScroll);
 }
 
+// Returns whether `event` is a trigger key (tab, left, right, w (when
+// debugging)).
+bool IsTriggerKey(ui::KeyEvent* event) {
+  const ui::KeyboardCode key_code = event->key_code();
+  const bool interactive_trigger_key =
+      (key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT);
+
+  const bool nav_trigger_key =
+      Shell::Get()
+          ->window_cycle_controller()
+          ->IsInteractiveAltTabModeAllowed() &&
+      (key_code == ui::VKEY_UP || key_code == ui::VKEY_DOWN ||
+       key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT);
+
+  return key_code == ui::VKEY_TAB ||
+         (debug::DeveloperAcceleratorsEnabled() && key_code == ui::VKEY_W) ||
+         interactive_trigger_key || nav_trigger_key;
+}
+
+// Returns whether `event` is an exit key (return, space).
+bool IsExitKey(ui::KeyEvent* event) {
+  return event->key_code() == ui::VKEY_RETURN ||
+         event->key_code() == ui::VKEY_SPACE;
+}
+
+}  // namespace
+
 WindowCycleEventFilter::WindowCycleEventFilter()
     : initial_mouse_location_(
           display::Screen::GetScreen()->GetCursorScreenPoint()) {
@@ -153,28 +181,6 @@
   }
 }
 
-bool WindowCycleEventFilter::IsTriggerKey(ui::KeyEvent* event) const {
-  const ui::KeyboardCode key_code = event->key_code();
-  const bool interactive_trigger_key =
-      (key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT);
-
-  const bool nav_trigger_key =
-      Shell::Get()
-          ->window_cycle_controller()
-          ->IsInteractiveAltTabModeAllowed() &&
-      (key_code == ui::VKEY_UP || key_code == ui::VKEY_DOWN ||
-       key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT);
-
-  return key_code == ui::VKEY_TAB ||
-         (debug::DeveloperAcceleratorsEnabled() && key_code == ui::VKEY_W) ||
-         interactive_trigger_key || nav_trigger_key;
-}
-
-bool WindowCycleEventFilter::IsExitKey(ui::KeyEvent* event) const {
-  return event->key_code() == ui::VKEY_RETURN ||
-         event->key_code() == ui::VKEY_SPACE;
-}
-
 bool WindowCycleEventFilter::ShouldRepeatKey(ui::KeyEvent* event) const {
   return event->type() == ui::ET_KEY_PRESSED && event->is_repeat() &&
          !repeat_timer_.IsRunning();
diff --git a/ash/wm/window_cycle/window_cycle_event_filter.h b/ash/wm/window_cycle/window_cycle_event_filter.h
index eff2bd1..35a66d54 100644
--- a/ash/wm/window_cycle/window_cycle_event_filter.h
+++ b/ash/wm/window_cycle/window_cycle_event_filter.h
@@ -71,13 +71,6 @@
   // stop repeatedly cycling through windows, or cycle once.
   void HandleTriggerKey(ui::KeyEvent* event);
 
-  // Returns whether |event| is a trigger key (tab, left, right, w (when
-  // debugging)).
-  bool IsTriggerKey(ui::KeyEvent* event) const;
-
-  // Returns whether |event| is an exit key (return, space).
-  bool IsExitKey(ui::KeyEvent* event) const;
-
   // Returns whether the window cycle should repeatedly cycle in the
   // direction given by |event|.
   bool ShouldRepeatKey(ui::KeyEvent* event) const;
diff --git a/ash/wm/window_cycle/window_cycle_list.h b/ash/wm/window_cycle/window_cycle_list.h
index cd2dc30ca..0e154c5 100644
--- a/ash/wm/window_cycle/window_cycle_list.h
+++ b/ash/wm/window_cycle/window_cycle_list.h
@@ -42,10 +42,14 @@
   WindowCycleList& operator=(const WindowCycleList&) = delete;
   ~WindowCycleList() override;
 
-  const WindowCycleView* cycle_view() const { return cycle_view_; }
+  void set_user_did_accept(bool user_did_accept) {
+    user_did_accept_ = user_did_accept;
+  }
 
   bool same_app_only() const { return same_app_only_; }
 
+  const WindowCycleView* cycle_view() const { return cycle_view_; }
+
   // Returns the |target_window_| from |cycle_view_|.
   aura::Window* GetTargetWindow();
 
@@ -98,10 +102,6 @@
   // Updates the tab slider mode UI when alt-tab mode in user prefs changes.
   void OnModePrefsChanged();
 
-  void set_user_did_accept(bool user_did_accept) {
-    user_did_accept_ = user_did_accept;
-  }
-
   static void SetDisableInitialDelayForTesting(bool disabled);
 
  private:
diff --git a/ash/wm/window_cycle/window_cycle_tab_slider.cc b/ash/wm/window_cycle/window_cycle_tab_slider.cc
index 1ec9e566..0ba5a69 100644
--- a/ash/wm/window_cycle/window_cycle_tab_slider.cc
+++ b/ash/wm/window_cycle/window_cycle_tab_slider.cc
@@ -7,6 +7,7 @@
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/style/ash_color_provider.h"
+#include "ash/style/style_util.h"
 #include "ash/wm/window_cycle/window_cycle_controller.h"
 #include "base/functional/bind.h"
 #include "base/strings/utf_string_conversions.h"
@@ -31,7 +32,7 @@
 constexpr auto kToggleSlideDuration = base::Milliseconds(150);
 
 // The insets of the focus ring of the tab slider button.
-constexpr int kTabSliderButtonFocusInsets = 4;
+constexpr int kTabSliderButtonFocusRingHaloInset = -4;
 
 }  // namespace
 
@@ -65,23 +66,21 @@
   current_desk_tab_slider_button_->SetPreferredSize(button_size);
 
   // Setup an active button selector.
-  active_button_selector_->SetPreferredSize(
-      gfx::Size(button_size.width() + 2 * kTabSliderButtonFocusInsets,
-                button_size.height() + 2 * kTabSliderButtonFocusInsets));
+  active_button_selector_->SetPreferredSize(button_size);
   active_button_selector_->SetPaintToLayer();
   active_button_selector_->layer()->SetFillsBoundsOpaquely(false);
   const int active_button_selector_round_radius =
       int{active_button_selector_->GetPreferredSize().height() / 2};
 
-  // Create highlight border for the selector to be displayed during keyboard
+  // Create the focus ring for the selector to be displayed during keyboard
   // navigation.
-  auto border = std::make_unique<WmHighlightItemBorder>(
-      active_button_selector_round_radius, gfx::Insets());
-  highlight_border_ = border.get();
-  active_button_selector_->SetBorder(std::move(border));
   views::InstallRoundRectHighlightPathGenerator(
       active_button_selector_, gfx::Insets(),
       active_button_selector_round_radius);
+  views::FocusRing* focus_ring = StyleUtil::SetUpFocusRingForView(
+      active_button_selector_, kTabSliderButtonFocusRingHaloInset);
+  focus_ring->SetHasFocusPredicate(
+      [&](views::View* view) { return is_focused(); });
 
   // Create background for the selector to show an active button.
   auto* active_button_selector_background =
@@ -112,8 +111,7 @@
   if (is_focused_ == focus)
     return;
   is_focused_ = focus;
-  highlight_border_->SetFocused(is_focused_);
-  active_button_selector_->SchedulePaint();
+  views::FocusRing::Get(active_button_selector_)->SchedulePaint();
 }
 
 void WindowCycleTabSlider::OnModePrefsChanged() {
@@ -132,11 +130,9 @@
 
   active_button_selector_->SetBounds(
       Shell::Get()->window_cycle_controller()->IsAltTabPerActiveDesk()
-          ? button_size.width() - kTabSliderButtonFocusInsets
-          : -kTabSliderButtonFocusInsets,
-      -kTabSliderButtonFocusInsets,
-      button_size.width() + 2 * kTabSliderButtonFocusInsets,
-      button_size.height() + 2 * kTabSliderButtonFocusInsets);
+          ? button_size.width()
+          : 0,
+      0, button_size.width(), button_size.height());
 }
 
 gfx::Size WindowCycleTabSlider::CalculatePreferredSize() const {
@@ -144,24 +140,19 @@
 }
 
 void WindowCycleTabSlider::UpdateActiveButtonSelector(bool per_desk) {
-  const gfx::Rect active_button_selector_bounds =
-      active_button_selector_->bounds();
+  const gfx::RectF active_button_selector_bounds(
+      active_button_selector_->bounds());
   // `OnModePrefsChanged()` is called in the ctor so the
   // `active_button_selector_` has not been laid out yet.
-  if (active_button_selector_bounds.IsEmpty())
+  if (active_button_selector_bounds.IsEmpty()) {
     return;
+  }
 
-  const gfx::Size button_size = GetPreferredSizeForButtons();
-  const gfx::Rect new_selector_bounds =
-      gfx::Rect(per_desk ? button_size.width() - kTabSliderButtonFocusInsets
-                         : -kTabSliderButtonFocusInsets,
-                -kTabSliderButtonFocusInsets,
-                button_size.width() + 2 * kTabSliderButtonFocusInsets,
-                button_size.height() + 2 * kTabSliderButtonFocusInsets);
-
-  const gfx::Transform transform =
-      gfx::TransformBetweenRects(gfx::RectF(active_button_selector_bounds),
-                                 gfx::RectF(new_selector_bounds));
+  const gfx::SizeF button_size(GetPreferredSizeForButtons());
+  const gfx::RectF new_selector_bounds(
+      gfx::PointF(per_desk ? button_size.width() : 0.f, 0.f), button_size);
+  const gfx::Transform transform = gfx::TransformBetweenRects(
+      active_button_selector_bounds, new_selector_bounds);
   views::AnimationBuilder()
       .SetPreemptionStrategy(
           ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET)
diff --git a/ash/wm/window_cycle/window_cycle_tab_slider.h b/ash/wm/window_cycle/window_cycle_tab_slider.h
index f868716..352fe176 100644
--- a/ash/wm/window_cycle/window_cycle_tab_slider.h
+++ b/ash/wm/window_cycle/window_cycle_tab_slider.h
@@ -7,7 +7,6 @@
 
 #include "ash/ash_export.h"
 #include "ash/wm/window_cycle/window_cycle_tab_slider_button.h"
-#include "ash/wm/wm_highlight_item_border.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 
 namespace gfx {
@@ -31,7 +30,9 @@
   WindowCycleTabSlider& operator=(const WindowCycleTabSlider&) = delete;
   ~WindowCycleTabSlider() override = default;
 
-  // Sets |is_focused_| to |focus| and displays or hides the highlight on the
+  bool is_focused() const { return is_focused_; }
+
+  // Sets `is_focused_` to `focus` and displays or hides the focus ring on the
   // active button selector during keyboard navigation.
   void SetFocus(bool focus);
 
@@ -42,8 +43,6 @@
   void Layout() override;
   gfx::Size CalculatePreferredSize() const override;
 
-  bool is_focused() const { return is_focused_; }
-
  private:
   friend class WindowCycleListTestApi;
 
@@ -57,15 +56,10 @@
   gfx::Size GetPreferredSizeForButtons() const;
 
   // The view that acts as an active button selector to show the active button
-  // background and the highlight border if applicable. It is animated during
-  // mode change.
+  // background and the focus ring if applicable. It is animated during mode
+  // change.
   views::BoxLayoutView* active_button_selector_;
 
-  // The highlight border, the focus ring, of the active button selector.
-  // The border shows up when the tab slider is focused during keyboard
-  // navigation.
-  WmHighlightItemBorder* highlight_border_;
-
   // The view that contains the tab slider buttons.
   views::BoxLayoutView* buttons_container_;
 
diff --git a/base/allocator/partition_allocator/BUILD.gn b/base/allocator/partition_allocator/BUILD.gn
index 47c3576f..c38d654a 100644
--- a/base/allocator/partition_allocator/BUILD.gn
+++ b/base/allocator/partition_allocator/BUILD.gn
@@ -394,6 +394,7 @@
     "PUT_REF_COUNT_IN_PREVIOUS_SLOT=$put_ref_count_in_previous_slot",
     "USE_ASAN_BACKUP_REF_PTR=$use_asan_backup_ref_ptr",
     "USE_ASAN_UNOWNED_PTR=$use_asan_unowned_ptr",
+    "USE_HOOKABLE_RAW_PTR=$use_hookable_raw_ptr",
     "ENABLE_GWP_ASAN_SUPPORT=$_enable_gwp_asan_support",
 
     # Not to be used directly - instead use
diff --git a/base/allocator/partition_allocator/partition_alloc.gni b/base/allocator/partition_allocator/partition_alloc.gni
index 31442a0..e1adaa9 100644
--- a/base/allocator/partition_allocator/partition_alloc.gni
+++ b/base/allocator/partition_allocator/partition_alloc.gni
@@ -90,6 +90,10 @@
 
   # Use probe-on-destruct unowned ptr detection with ASAN.
   use_asan_unowned_ptr = false
+
+  # Use the version of raw_ptr<T> that allows the embedder to implement custom
+  # logic.
+  use_hookable_raw_ptr = false
 }
 
 declare_args() {
@@ -145,6 +149,7 @@
   enable_mte_checked_ptr_support = false
   use_asan_backup_ref_ptr = false
   use_asan_unowned_ptr = false
+  use_hookable_raw_ptr = false
   put_ref_count_in_previous_slot = false
   enable_backup_ref_ptr_slow_checks = false
   enable_dangling_raw_ptr_checks = false
@@ -195,6 +200,21 @@
 assert(!enable_backup_ref_ptr_support || !use_asan_unowned_ptr,
        "Both BackupRefPtr and AsanUnownedPtr can't be enabled at the same time")
 
+# HookableRawPtrImpl and BackupRefPtr are mutually exclusive variants of raw_ptr.
+assert(
+    !use_hookable_raw_ptr || !enable_backup_ref_ptr_support,
+    "Both HookableRawPtrImpl and BackupRefPtr can't be enabled at the same time")
+
+# HookableRawPtrImpl and AsanBackupRefPtr are mutually exclusive variants of raw_ptr.
+assert(
+    !use_hookable_raw_ptr || !use_asan_backup_ref_ptr,
+    "Both HookableRawPtrImpl and AsanBackupRefPtr can't be enabled at the same time")
+
+# HookableRawPtrImpl and AsanUnownedPtr are mutually exclusive variants of raw_ptr.
+assert(
+    !use_hookable_raw_ptr || !use_asan_unowned_ptr,
+    "Both HookableRawPtrImpl and AsanUnownedPtr can't be enabled at the same time")
+
 assert(!use_asan_backup_ref_ptr || is_asan,
        "AsanBackupRefPtr requires AddressSanitizer")
 
diff --git a/base/allocator/partition_allocator/shim/allocator_interception_mac.mm b/base/allocator/partition_allocator/shim/allocator_interception_mac.mm
index 1c9f135c..d476296 100644
--- a/base/allocator/partition_allocator/shim/allocator_interception_mac.mm
+++ b/base/allocator/partition_allocator/shim/allocator_interception_mac.mm
@@ -34,6 +34,7 @@
 #include "base/logging.h"
 #include "base/mac/mach_logging.h"
 #include "base/process/memory.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/base/android/java_handler_thread.h b/base/android/java_handler_thread.h
index 94cecdc..4c24a0d2 100644
--- a/base/android/java_handler_thread.h
+++ b/base/android/java_handler_thread.h
@@ -15,7 +15,6 @@
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace base {
 
diff --git a/base/debug/task_trace_unittest.cc b/base/debug/task_trace_unittest.cc
index a394d4c..76596ca 100644
--- a/base/debug/task_trace_unittest.cc
+++ b/base/debug/task_trace_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/raw_ref.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/base/files/file_descriptor_watcher_posix_unittest.cc b/base/files/file_descriptor_watcher_posix_unittest.cc
index c4162a0..5645d7c 100644
--- a/base/files/file_descriptor_watcher_posix_unittest.cc
+++ b/base/files/file_descriptor_watcher_posix_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker_impl.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/base/files/important_file_writer_cleaner_unittest.cc b/base/files/important_file_writer_cleaner_unittest.cc
index 8da3388..11c0bfa 100644
--- a/base/files/important_file_writer_cleaner_unittest.cc
+++ b/base/files/important_file_writer_cleaner_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_waitable_event.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/base/memory/raw_ptr.cc b/base/memory/raw_ptr.cc
index 338cad9e..5ca1e2a 100644
--- a/base/memory/raw_ptr.cc
+++ b/base/memory/raw_ptr.cc
@@ -262,3 +262,48 @@
 }  // namespace base::internal
 
 #endif  // BUILDFLAG(USE_ASAN_UNOWNED_PTR)
+
+#if BUILDFLAG(USE_HOOKABLE_RAW_PTR)
+#include <atomic>
+
+namespace base::internal {
+
+namespace {
+
+void DefaultWrapPtrHook(uintptr_t address) {}
+void DefaultReleaseWrappedPtrHook(uintptr_t address) {}
+void DefaultUnwrapForDereferenceHook(uintptr_t address) {}
+void DefaultUnwrapForExtractionHook(uintptr_t address) {}
+void DefaultUnwrapForComparisonHook(uintptr_t address) {}
+void DefaultAdvanceHook(uintptr_t old_address, uintptr_t new_address) {}
+void DefaultDuplicateHook(uintptr_t address) {}
+
+constexpr RawPtrHooks default_hooks = {
+    DefaultWrapPtrHook,
+    DefaultReleaseWrappedPtrHook,
+    DefaultUnwrapForDereferenceHook,
+    DefaultUnwrapForExtractionHook,
+    DefaultUnwrapForComparisonHook,
+    DefaultAdvanceHook,
+    DefaultDuplicateHook,
+};
+
+}  // namespace
+
+std::atomic<const RawPtrHooks*> g_hooks{&default_hooks};
+
+const RawPtrHooks* GetRawPtrHooks() {
+  return g_hooks.load(std::memory_order_relaxed);
+}
+
+void InstallRawPtrHooks(const RawPtrHooks* hooks) {
+  g_hooks.store(hooks, std::memory_order_relaxed);
+}
+
+void ResetRawPtrHooks() {
+  InstallRawPtrHooks(&default_hooks);
+}
+
+}  // namespace base::internal
+
+#endif  // BUILDFLAG(USE_HOOKABLE_RAW_PTR)
diff --git a/base/memory/raw_ptr.h b/base/memory/raw_ptr.h
index aebaba3..3d8edbf 100644
--- a/base/memory/raw_ptr.h
+++ b/base/memory/raw_ptr.h
@@ -938,6 +938,114 @@
 
 #endif  // BUILDFLAG(USE_ASAN_UNOWNED_PTR)
 
+#if BUILDFLAG(USE_HOOKABLE_RAW_PTR)
+
+struct RawPtrHooks {
+  using WrapPtr = void(uintptr_t address);
+  using ReleaseWrappedPtr = void(uintptr_t address);
+  using SafelyUnwrapForDereference = void(uintptr_t address);
+  using SafelyUnwrapForExtraction = void(uintptr_t address);
+  using UnsafelyUnwrapForComparison = void(uintptr_t address);
+  using Advance = void(uintptr_t old_address, uintptr_t new_address);
+  using Duplicate = void(uintptr_t address);
+
+  WrapPtr* wrap_ptr;
+  ReleaseWrappedPtr* release_wrapped_ptr;
+  SafelyUnwrapForDereference* safely_unwrap_for_dereference;
+  SafelyUnwrapForExtraction* safely_unwrap_for_extraction;
+  UnsafelyUnwrapForComparison* unsafely_unwrap_for_comparison;
+  Advance* advance;
+  Duplicate* duplicate;
+};
+
+const RawPtrHooks* GetRawPtrHooks();
+void InstallRawPtrHooks(const RawPtrHooks*);
+void ResetRawPtrHooks();
+
+struct RawPtrHookableImpl {
+  // Wraps a pointer.
+  template <typename T>
+  static PA_ALWAYS_INLINE T* WrapRawPtr(T* ptr) {
+    GetRawPtrHooks()->wrap_ptr(reinterpret_cast<uintptr_t>(ptr));
+    return ptr;
+  }
+
+  // Notifies the allocator when a wrapped pointer is being removed or replaced.
+  template <typename T>
+  static PA_ALWAYS_INLINE void ReleaseWrappedPtr(T* ptr) {
+    GetRawPtrHooks()->release_wrapped_ptr(reinterpret_cast<uintptr_t>(ptr));
+  }
+
+  // Unwraps the pointer, while asserting that memory hasn't been freed. The
+  // function is allowed to crash on nullptr.
+  template <typename T>
+  static PA_ALWAYS_INLINE T* SafelyUnwrapPtrForDereference(T* wrapped_ptr) {
+    GetRawPtrHooks()->safely_unwrap_for_dereference(
+        reinterpret_cast<uintptr_t>(wrapped_ptr));
+    return wrapped_ptr;
+  }
+
+  // Unwraps the pointer, while asserting that memory hasn't been freed. The
+  // function must handle nullptr gracefully.
+  template <typename T>
+  static PA_ALWAYS_INLINE T* SafelyUnwrapPtrForExtraction(T* wrapped_ptr) {
+    GetRawPtrHooks()->safely_unwrap_for_extraction(
+        reinterpret_cast<uintptr_t>(wrapped_ptr));
+    return wrapped_ptr;
+  }
+
+  // Unwraps the pointer, without making an assertion on whether memory was
+  // freed or not.
+  template <typename T>
+  static PA_ALWAYS_INLINE T* UnsafelyUnwrapPtrForComparison(T* wrapped_ptr) {
+    GetRawPtrHooks()->unsafely_unwrap_for_comparison(
+        reinterpret_cast<uintptr_t>(wrapped_ptr));
+    return wrapped_ptr;
+  }
+
+  // Upcasts the wrapped pointer.
+  template <typename To, typename From>
+  static PA_ALWAYS_INLINE constexpr To* Upcast(From* wrapped_ptr) {
+    static_assert(std::is_convertible<From*, To*>::value,
+                  "From must be convertible to To.");
+    // Note, this cast may change the address if upcasting to base that lies in
+    // the middle of the derived object.
+    return wrapped_ptr;
+  }
+
+  // Advance the wrapped pointer by `delta_elems`.
+  template <typename T,
+            typename Z,
+            typename = std::enable_if_t<offset_type<Z>, void>>
+  static PA_ALWAYS_INLINE T* Advance(T* wrapped_ptr, Z delta_elems) {
+    GetRawPtrHooks()->advance(
+        reinterpret_cast<uintptr_t>(wrapped_ptr),
+        reinterpret_cast<uintptr_t>(wrapped_ptr + delta_elems));
+    return wrapped_ptr + delta_elems;
+  }
+
+  template <typename T>
+  static PA_ALWAYS_INLINE ptrdiff_t GetDeltaElems(T* wrapped_ptr1,
+                                                  T* wrapped_ptr2) {
+    return wrapped_ptr1 - wrapped_ptr2;
+  }
+
+  // Returns a copy of a wrapped pointer, without making an assertion on whether
+  // memory was freed or not.
+  template <typename T>
+  static PA_ALWAYS_INLINE T* Duplicate(T* wrapped_ptr) {
+    GetRawPtrHooks()->duplicate(reinterpret_cast<uintptr_t>(wrapped_ptr));
+    return wrapped_ptr;
+  }
+
+  // This is for accounting only, used by unit tests.
+  static PA_ALWAYS_INLINE void IncrementSwapCountForTest() {}
+  static PA_ALWAYS_INLINE void IncrementLessCountForTest() {}
+  static PA_ALWAYS_INLINE void IncrementPointerToMemberOperatorCountForTest() {}
+};
+
+#endif  // BUILDFLAG(USE_HOOKABLE_RAW_PTR)
+
 template <class Super>
 struct RawPtrCountingImplWrapperForTest
     : public raw_ptr_traits::RawPtrTypeToImpl<Super>::Impl {
@@ -1113,6 +1221,8 @@
 #elif defined(PA_ENABLE_MTE_CHECKED_PTR_SUPPORT_WITH_64_BITS_POINTERS)
   using Impl = internal::MTECheckedPtrImpl<
       internal::MTECheckedPtrImplPartitionAllocSupport>;
+#elif BUILDFLAG(USE_HOOKABLE_RAW_PTR)
+  using Impl = internal::RawPtrHookableImpl;
 #else
   using Impl = internal::RawPtrNoOpImpl;
 #endif
@@ -1134,6 +1244,8 @@
 #elif defined(PA_ENABLE_MTE_CHECKED_PTR_SUPPORT_WITH_64_BITS_POINTERS)
   using Impl = internal::MTECheckedPtrImpl<
       internal::MTECheckedPtrImplPartitionAllocSupport>;
+#elif BUILDFLAG(USE_HOOKABLE_RAW_PTR)
+  using Impl = internal::RawPtrHookableImpl;
 #else
   using Impl = internal::RawPtrNoOpImpl;
 #endif
@@ -1192,7 +1304,8 @@
   static_assert(raw_ptr_traits::IsSupportedType<T>::value,
                 "raw_ptr<T> doesn't work with this kind of pointee type T");
 
-#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || BUILDFLAG(USE_ASAN_UNOWNED_PTR)
+#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || \
+    BUILDFLAG(USE_ASAN_UNOWNED_PTR) || BUILDFLAG(USE_HOOKABLE_RAW_PTR)
   // BackupRefPtr requires a non-trivial default constructor, destructor, etc.
   constexpr PA_ALWAYS_INLINE raw_ptr() noexcept : wrapped_ptr_(nullptr) {}
 
@@ -1236,7 +1349,7 @@
   }
 
 #else  // BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) ||
-       // BUILDFLAG(USE_ASAN_UNOWNED_PTR)
+       // BUILDFLAG(USE_ASAN_UNOWNED_PTR) || BUILDFLAG(USE_HOOKABLE_RAW_PTR)
 
   // raw_ptr can be trivially default constructed (leaving |wrapped_ptr_|
   // uninitialized).  This is needed for compatibility with raw pointers.
diff --git a/base/memory/raw_ptr_unittest.cc b/base/memory/raw_ptr_unittest.cc
index 6b524eb..2ccd5fc 100644
--- a/base/memory/raw_ptr_unittest.cc
+++ b/base/memory/raw_ptr_unittest.cc
@@ -58,7 +58,7 @@
               "raw_ptr shouldn't add memory overhead");
 
 #if !BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) && \
-    !BUILDFLAG(USE_ASAN_UNOWNED_PTR)
+    !BUILDFLAG(USE_ASAN_UNOWNED_PTR) && !BUILDFLAG(USE_HOOKABLE_RAW_PTR)
 // |is_trivially_copyable| assertion means that arrays/vectors of raw_ptr can
 // be copied by memcpy.
 static_assert(std::is_trivially_copyable<raw_ptr<void>>::value,
@@ -87,7 +87,8 @@
 static_assert(
     std::is_trivially_default_constructible<raw_ptr<std::string>>::value,
     "raw_ptr should be trivially default constructible");
-#endif  // !BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT)
+#endif  // !BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) &&
+        // !BUILDFLAG(USE_ASAN_UNOWNED_PTR) && !BUILDFLAG(USE_HOOKABLE_RAW_PTR)
 
 // Don't use base::internal for testing raw_ptr API, to test if code outside
 // this namespace calls the correct functions from this namespace.
@@ -1246,7 +1247,8 @@
       vector.emplace_back(&x);
     number_of_capacity_changes++;
   } while (number_of_capacity_changes < 10);
-#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || BUILDFLAG(USE_ASAN_UNOWNED_PTR)
+#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || \
+    BUILDFLAG(USE_ASAN_UNOWNED_PTR) || BUILDFLAG(USE_HOOKABLE_RAW_PTR)
   // TODO(lukasza): In the future (once C++ language and std library
   // support custom trivially relocatable objects) this #if branch can
   // be removed (keeping only the right long-term expectation from the
@@ -1276,7 +1278,8 @@
   RawPtrCountingImpl::ClearCounters();
   size_t number_of_cleared_elements = vector.size();
   vector.clear();
-#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || BUILDFLAG(USE_ASAN_UNOWNED_PTR)
+#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || \
+    BUILDFLAG(USE_ASAN_UNOWNED_PTR) || BUILDFLAG(USE_HOOKABLE_RAW_PTR)
 
   EXPECT_EQ((int)number_of_cleared_elements,
             RawPtrCountingImpl::release_wrapped_ptr_cnt);
@@ -2659,5 +2662,134 @@
 
 #endif  // defined(PA_ENABLE_MTE_CHECKED_PTR_SUPPORT_WITH_64_BITS_POINTERS)
 
+#if BUILDFLAG(USE_HOOKABLE_RAW_PTR)
+class CountingHooks {
+ public:
+  MOCK_METHOD(void, WrapPtr, ());
+  MOCK_METHOD(void, ReleaseWrappedPtr, ());
+  MOCK_METHOD(void, SafelyUnwrapForDereference, ());
+  MOCK_METHOD(void, SafelyUnwrapForExtraction, ());
+  MOCK_METHOD(void, UnsafelyUnwrapForComparison, ());
+  MOCK_METHOD(void, Advance, ());
+  MOCK_METHOD(void, Duplicate, ());
+};
+
+CountingHooks* g_counting_hooks = nullptr;
+constexpr RawPtrHooks raw_ptr_hooks{
+    .wrap_ptr =
+        [](uintptr_t) {
+          if (g_counting_hooks) {
+            g_counting_hooks->WrapPtr();
+          }
+        },
+    .release_wrapped_ptr =
+        [](uintptr_t) {
+          if (g_counting_hooks) {
+            g_counting_hooks->ReleaseWrappedPtr();
+          }
+        },
+    .safely_unwrap_for_dereference =
+        [](uintptr_t) {
+          if (g_counting_hooks) {
+            g_counting_hooks->SafelyUnwrapForDereference();
+          }
+        },
+    .safely_unwrap_for_extraction =
+        [](uintptr_t) {
+          if (g_counting_hooks) {
+            g_counting_hooks->SafelyUnwrapForExtraction();
+          }
+        },
+    .unsafely_unwrap_for_comparison =
+        [](uintptr_t) {
+          if (g_counting_hooks) {
+            g_counting_hooks->UnsafelyUnwrapForComparison();
+          }
+        },
+    .advance =
+        [](uintptr_t, uintptr_t) {
+          if (g_counting_hooks) {
+            g_counting_hooks->Advance();
+          }
+        },
+    .duplicate =
+        [](uintptr_t) {
+          if (g_counting_hooks) {
+            g_counting_hooks->Duplicate();
+          }
+        },
+};
+
+class HookableRawPtrImplTest : public testing::Test {
+ protected:
+  void SetUp() override {
+    g_counting_hooks = &hooks_;
+    InstallRawPtrHooks(&raw_ptr_hooks);
+  }
+
+  void TearDown() override {
+    ResetRawPtrHooks();
+    g_counting_hooks = nullptr;
+  }
+
+  testing::NiceMock<CountingHooks> hooks_;
+};
+
+TEST_F(HookableRawPtrImplTest, WrapPtr) {
+  EXPECT_CALL(hooks_, WrapPtr).Times(1);
+  int* ptr = new int;
+  [[maybe_unused]] raw_ptr<int> interesting_ptr = ptr;
+  delete ptr;
+}
+
+TEST_F(HookableRawPtrImplTest, ReleaseWrappedPtr) {
+  EXPECT_CALL(hooks_, ReleaseWrappedPtr).Times(1);
+  int* ptr = new int;
+  [[maybe_unused]] raw_ptr<int> interesting_ptr = ptr;
+  delete ptr;
+}
+
+TEST_F(HookableRawPtrImplTest, SafelyUnwrapForDereference) {
+  EXPECT_CALL(hooks_, SafelyUnwrapForDereference).Times(1);
+  int* ptr = new int;
+  raw_ptr<int> interesting_ptr = ptr;
+  *interesting_ptr = 1;
+  delete ptr;
+}
+
+TEST_F(HookableRawPtrImplTest, SafelyUnwrapForExtraction) {
+  EXPECT_CALL(hooks_, SafelyUnwrapForExtraction).Times(1);
+  int* ptr = new int;
+  raw_ptr<int> interesting_ptr = ptr;
+  ptr = interesting_ptr;
+  delete ptr;
+}
+
+TEST_F(HookableRawPtrImplTest, UnsafelyUnwrapForComparison) {
+  EXPECT_CALL(hooks_, UnsafelyUnwrapForComparison).Times(1);
+  int* ptr = new int;
+  raw_ptr<int> interesting_ptr = ptr;
+  EXPECT_EQ(interesting_ptr, ptr);
+  delete ptr;
+}
+
+TEST_F(HookableRawPtrImplTest, Advance) {
+  EXPECT_CALL(hooks_, Advance).Times(1);
+  int* ptr = new int[10];
+  raw_ptr<int> interesting_ptr = ptr;
+  interesting_ptr += 1;
+  delete[] ptr;
+}
+
+TEST_F(HookableRawPtrImplTest, Duplicate) {
+  EXPECT_CALL(hooks_, Duplicate).Times(1);
+  int* ptr = new int;
+  raw_ptr<int> interesting_ptr = ptr;
+  raw_ptr<int> interesting_ptr2 = interesting_ptr;
+  delete ptr;
+}
+
+#endif  // BUILDFLAG(USE_HOOKABLE_RAW_PTR)
+
 }  // namespace internal
 }  // namespace base
diff --git a/base/observer_list_threadsafe.h b/base/observer_list_threadsafe.h
index fdbd323b..412a7e2 100644
--- a/base/observer_list_threadsafe.h
+++ b/base/observer_list_threadsafe.h
@@ -21,6 +21,7 @@
 #include "base/observer_list.h"
 #include "base/synchronization/lock.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_local.h"
 #include "build/build_config.h"
 
diff --git a/base/profiler/stack_sampling_profiler.cc b/base/profiler/stack_sampling_profiler.cc
index 8cef744..3d57031 100644
--- a/base/profiler/stack_sampling_profiler.cc
+++ b/base/profiler/stack_sampling_profiler.cc
@@ -27,7 +27,6 @@
 #include "base/thread_annotations.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/base_tracing.h"
 #include "build/build_config.h"
diff --git a/base/run_loop.h b/base/run_loop.h
index 3a83afd3..2a7e8ae 100644
--- a/base/run_loop.h
+++ b/base/run_loop.h
@@ -326,8 +326,8 @@
   // not be accessed from any other sequence than the thread it was constructed
   // on. Exception: RunLoop can be safely accessed from one other sequence (or
   // single parallel task) during Run() -- e.g. to Quit() without having to
-  // plumb ThreatTaskRunnerHandle::Get() throughout a test to repost QuitClosure
-  // to origin thread.
+  // plumb SingleThreadTaskRunner::GetCurrentDefault() throughout a test to
+  // repost QuitClosure to origin thread.
   SEQUENCE_CHECKER(sequence_checker_);
 
   const scoped_refptr<SingleThreadTaskRunner> origin_task_runner_;
diff --git a/base/strings/safe_sprintf.cc b/base/strings/safe_sprintf.cc
index 6fc1ebff..bf90737 100644
--- a/base/strings/safe_sprintf.cc
+++ b/base/strings/safe_sprintf.cc
@@ -418,18 +418,19 @@
     }
   } while (num || padding || (reverse_prefix > prefix));
 
-  // Conversion to ASCII actually resulted in the digits being in reverse
-  // order. We can't easily generate them in forward order, as we can't tell
-  // the number of characters needed until we are done converting.
-  // So, now, we reverse the string (except for the possible '-' sign).
-  char* front = buffer_ + start;
-  char* back = GetInsertionPoint();
-  while (--back > front) {
-    char ch = *back;
-    *back = *front;
-    *front++ = ch;
+  if (start < size_) {
+    // Conversion to ASCII actually resulted in the digits being in reverse
+    // order. We can't easily generate them in forward order, as we can't tell
+    // the number of characters needed until we are done converting.
+    // So, now, we reverse the string (except for the possible '-' sign).
+    char* front = buffer_ + start;
+    char* back = GetInsertionPoint();
+    while (--back > front) {
+      char ch = *back;
+      *back = *front;
+      *front++ = ch;
+    }
   }
-
   IncrementCount(discarded);
   return !discarded;
 }
diff --git a/base/strings/safe_sprintf_unittest.cc b/base/strings/safe_sprintf_unittest.cc
index df0a4e0..9b94a999 100644
--- a/base/strings/safe_sprintf_unittest.cc
+++ b/base/strings/safe_sprintf_unittest.cc
@@ -483,14 +483,7 @@
 
 }  // anonymous namespace
 
-// TODO(crbug.com/1369007): Fails when OOB protection is turned on.
-#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || \
-    BUILDFLAG(ENABLE_MTE_CHECKED_PTR_SUPPORT)
-#define MAYBE_Truncation DISABLED_Truncation
-#else
-#define MAYBE_Truncation Truncation
-#endif
-TEST(SafeSPrintfTest, MAYBE_Truncation) {
+TEST(SafeSPrintfTest, Truncation) {
   // We use PrintLongString() to print a complex long string and then
   // truncate to all possible lengths. This ends up exercising a lot of
   // different code paths in SafeSPrintf() and IToASCII(), as truncation can
diff --git a/base/synchronization/waitable_event_watcher_mac.cc b/base/synchronization/waitable_event_watcher_mac.cc
index 2a9b820..f7a20f1 100644
--- a/base/synchronization/waitable_event_watcher_mac.cc
+++ b/base/synchronization/waitable_event_watcher_mac.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 
 namespace base {
 
diff --git a/base/synchronization/waitable_event_watcher_posix.cc b/base/synchronization/waitable_event_watcher_posix.cc
index 979b243..b22f390 100644
--- a/base/synchronization/waitable_event_watcher_posix.cc
+++ b/base/synchronization/waitable_event_watcher_posix.cc
@@ -10,7 +10,6 @@
 #include "base/check.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 
 namespace base {
 
diff --git a/base/system/sys_info.cc b/base/system/sys_info.cc
index 84f29a8..c4e96dd 100644
--- a/base/system/sys_info.cc
+++ b/base/system/sys_info.cc
@@ -15,7 +15,6 @@
 #include "base/system/sys_info_internal.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 
diff --git a/base/task/current_thread.cc b/base/task/current_thread.cc
index 857b1dce..89e1232 100644
--- a/base/task/current_thread.cc
+++ b/base/task/current_thread.cc
@@ -11,7 +11,6 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/task/sequence_manager/sequence_manager_impl.h"
 #include "base/threading/thread_local.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/base_tracing.h"
 #include "build/build_config.h"
 
diff --git a/base/task/sequence_manager/sequence_manager_perftest.cc b/base/task/sequence_manager/sequence_manager_perftest.cc
index 989f1349..f8da3be4 100644
--- a/base/task/sequence_manager/sequence_manager_perftest.cc
+++ b/base/task/sequence_manager/sequence_manager_perftest.cc
@@ -27,7 +27,6 @@
 #include "base/task/thread_pool/thread_pool_impl.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "build/build_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc b/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc
index 768f9d4..a0127811 100644
--- a/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc
+++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc
@@ -21,7 +21,6 @@
 #include "base/task/sequence_manager/tasks.h"
 #include "base/task/task_features.h"
 #include "base/threading/hang_watcher.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "base/trace_event/base_tracing.h"
diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl.h b/base/task/sequence_manager/thread_controller_with_message_pump_impl.h
index d53e11b..f1641eeb6 100644
--- a/base/task/sequence_manager/thread_controller_with_message_pump_impl.h
+++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl.h
@@ -23,7 +23,6 @@
 #include "base/threading/hang_watcher.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/sequence_local_storage_map.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc
index 11adbd1..125470c 100644
--- a/base/test/launcher/test_launcher.cc
+++ b/base/test/launcher/test_launcher.cc
@@ -58,6 +58,7 @@
 #include "base/test/test_file_util.h"
 #include "base/test/test_switches.h"
 #include "base/test/test_timeouts.h"
+#include "base/threading/platform_thread.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
@@ -1064,6 +1065,8 @@
 }
 
 bool TestLauncher::Run(CommandLine* command_line) {
+  base::PlatformThread::SetName("TestLauncherMain");
+
   if (!Init((command_line == nullptr) ? CommandLine::ForCurrentProcess()
                                       : command_line))
     return false;
diff --git a/base/test/launcher/test_launcher_unittest.cc b/base/test/launcher/test_launcher_unittest.cc
index 8378a700..e534155 100644
--- a/base/test/launcher/test_launcher_unittest.cc
+++ b/base/test/launcher/test_launcher_unittest.cc
@@ -25,7 +25,6 @@
 #include "base/test/scoped_logging_settings.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time_to_iso8601.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/base/test/launcher/unit_test_launcher.cc b/base/test/launcher/unit_test_launcher.cc
index 1abe459..343a948e 100644
--- a/base/test/launcher/unit_test_launcher.cc
+++ b/base/test/launcher/unit_test_launcher.cc
@@ -31,7 +31,6 @@
 #include "base/test/test_switches.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/base/test/task_environment.h b/base/test/task_environment.h
index 50f584b..9cacf2c 100644
--- a/base/test/task_environment.h
+++ b/base/test/task_environment.h
@@ -35,7 +35,8 @@
 // This header exposes SingleThreadTaskEnvironment and TaskEnvironment.
 //
 // SingleThreadTaskEnvironment enables the following APIs within its scope:
-//  - (Thread|Sequenced)TaskRunnerHandle on the main thread
+//  - (SingleThread|Sequenced)TaskRunner::CurrentDefaultHandle on the main
+//    thread
 //  - RunLoop on the main thread
 //
 // TaskEnvironment additionally enables:
@@ -46,9 +47,9 @@
 // Tests should prefer SingleThreadTaskEnvironment over TaskEnvironment when the
 // former is sufficient.
 //
-// Tasks posted to the (Thread|Sequenced)TaskRunnerHandle run synchronously when
-// RunLoop::Run(UntilIdle) or TaskEnvironment::RunUntilIdle is called on the
-// main thread.
+// Tasks posted to the (SingleThread|Sequenced)TaskRunner::CurrentDefaultHandle
+// run synchronously when RunLoop::Run(UntilIdle) or
+// TaskEnvironment::RunUntilIdle is called on the main thread.
 //
 // The TaskEnvironment requires TestTimeouts::Initialize() to be called in order
 // to run posted tasks, so that it can watch for problematic long-running tasks.
@@ -218,7 +219,8 @@
   TaskEnvironment& operator=(const TaskEnvironment&) = delete;
 
   // Waits until no undelayed ThreadPool tasks remain. Then, unregisters the
-  // ThreadPoolInstance and the (Thread|Sequenced)TaskRunnerHandle.
+  // ThreadPoolInstance and the
+  // (SingleThread|Sequenced)TaskRunner::CurrentDefaultHandle.
   virtual ~TaskEnvironment();
 
   // Returns a TaskRunner that schedules tasks on the main thread.
@@ -228,11 +230,12 @@
   // always return true if called right after RunUntilIdle.
   bool MainThreadIsIdle() const;
 
-  // Runs tasks until both the (Thread|Sequenced)TaskRunnerHandle and the
-  // ThreadPool's non-delayed queues are empty.
-  // While RunUntilIdle() is quite practical and sometimes even necessary -- for
-  // example, to flush all tasks bound to Unretained() state before destroying
-  // test members -- it should be used with caution per the following warnings:
+  // Runs tasks until both the
+  // (SingleThread|Sequenced)TaskRunner::CurrentDefaultHandle and the
+  // ThreadPool's non-delayed queues are empty.  While RunUntilIdle() is quite
+  // practical and sometimes even necessary -- for example, to flush all tasks
+  // bound to Unretained() state before destroying test members -- it should be
+  // used with caution per the following warnings:
   //
   // WARNING #1: This may run long (flakily timeout) and even never return! Do
   //             not use this when repeating tasks such as animated web pages
diff --git a/base/test/trace_test_utils.cc b/base/test/trace_test_utils.cc
index f390561..3475525 100644
--- a/base/test/trace_test_utils.cc
+++ b/base/test/trace_test_utils.cc
@@ -5,7 +5,6 @@
 
 #include "base/no_destructor.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/tracing/perfetto_platform.h"
 #include "third_party/perfetto/include/perfetto/tracing.h"
 
diff --git a/base/threading/post_task_and_reply_impl.cc b/base/threading/post_task_and_reply_impl.cc
index e389113a..88e8cff 100644
--- a/base/threading/post_task_and_reply_impl.cc
+++ b/base/threading/post_task_and_reply_impl.cc
@@ -12,7 +12,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 
 namespace base {
 
diff --git a/base/threading/thread_checker_unittest.cc b/base/threading/thread_checker_unittest.cc
index fad2959..38a0eab 100644
--- a/base/threading/thread_checker_unittest.cc
+++ b/base/threading/thread_checker_unittest.cc
@@ -10,12 +10,12 @@
 #include "base/callback_helpers.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_token.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gtest_util.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/threading/simple_thread.h"
 #include "base/threading/thread_local.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
@@ -64,8 +64,9 @@
 void ExpectNotCalledOnValidThreadWithSequenceTokenAndThreadTaskRunnerHandle(
     ThreadCheckerImpl* thread_checker,
     SequenceToken sequence_token) {
-  ThreadTaskRunnerHandle thread_task_runner_handle(
-      MakeRefCounted<TestSimpleTaskRunner>());
+  SingleThreadTaskRunner::CurrentDefaultHandle
+      single_thread_task_runner_current_default_handle(
+          MakeRefCounted<TestSimpleTaskRunner>());
   ScopedSetSequenceTokenForCurrentThread
       scoped_set_sequence_token_for_current_thread(sequence_token);
   ExpectNotCalledOnValidThread(thread_checker);
@@ -80,8 +81,9 @@
 
 TEST(ThreadCheckerTest,
      AllowedSameThreadAndSequenceDifferentTasksWithThreadTaskRunnerHandle) {
-  ThreadTaskRunnerHandle thread_task_runner_handle(
-      MakeRefCounted<TestSimpleTaskRunner>());
+  SingleThreadTaskRunner::CurrentDefaultHandle
+      single_thread_task_runner_current_default_handle(
+          MakeRefCounted<TestSimpleTaskRunner>());
 
   std::unique_ptr<ThreadCheckerImpl> thread_checker;
   const SequenceToken sequence_token = SequenceToken::Create();
@@ -131,8 +133,9 @@
 }
 
 TEST(ThreadCheckerTest, DisallowedDifferentThreadsSameSequence) {
-  ThreadTaskRunnerHandle thread_task_runner_handle(
-      MakeRefCounted<TestSimpleTaskRunner>());
+  SingleThreadTaskRunner::CurrentDefaultHandle
+      single_thread_task_runner_current_default_handle(
+          MakeRefCounted<TestSimpleTaskRunner>());
   const SequenceToken sequence_token(SequenceToken::Create());
 
   ScopedSetSequenceTokenForCurrentThread
@@ -148,8 +151,9 @@
 TEST(ThreadCheckerTest, DisallowedSameThreadDifferentSequence) {
   std::unique_ptr<ThreadCheckerImpl> thread_checker;
 
-  ThreadTaskRunnerHandle thread_task_runner_handle(
-      MakeRefCounted<TestSimpleTaskRunner>());
+  SingleThreadTaskRunner::CurrentDefaultHandle
+      single_thread_task_runner_current_default_handle(
+          MakeRefCounted<TestSimpleTaskRunner>());
 
   {
     ScopedSetSequenceTokenForCurrentThread
@@ -181,8 +185,9 @@
 }
 
 TEST(ThreadCheckerTest, DetachFromThreadWithSequenceToken) {
-  ThreadTaskRunnerHandle thread_task_runner_handle(
-      MakeRefCounted<TestSimpleTaskRunner>());
+  SingleThreadTaskRunner::CurrentDefaultHandle
+      single_thread_task_runner_current_default_handle(
+          MakeRefCounted<TestSimpleTaskRunner>());
   ScopedSetSequenceTokenForCurrentThread
       scoped_set_sequence_token_for_current_thread(SequenceToken::Create());
   ThreadCheckerImpl thread_checker;
diff --git a/base/tracing/perfetto_task_runner.cc b/base/tracing/perfetto_task_runner.cc
index d1ee41f..5ac8b3b0 100644
--- a/base/tracing/perfetto_task_runner.cc
+++ b/base/tracing/perfetto_task_runner.cc
@@ -12,9 +12,9 @@
 #include "base/notreached.h"
 #include "base/task/common/checked_lock_impl.h"
 #include "base/task/common/scoped_defer_task_posting.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_local.h"
 #include "base/threading/thread_local_storage.h"
 #include "base/tracing/tracing_tls.h"
diff --git a/base/tracing/perfetto_task_runner_unittest.cc b/base/tracing/perfetto_task_runner_unittest.cc
index 3a36df9d..668380e 100644
--- a/base/tracing/perfetto_task_runner_unittest.cc
+++ b/base/tracing/perfetto_task_runner_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/files/scoped_file.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index 8679c88..9bd228a4 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-11.20230109.1.1
+11.20230109.2.2
diff --git a/build/install-build-deps.sh b/build/install-build-deps.sh
index a16efc4..e29ca3f 100755
--- a/build/install-build-deps.sh
+++ b/build/install-build-deps.sh
@@ -247,7 +247,6 @@
   libcups2
   libdrm2
   libegl1
-  libegl1:i386
   libevdev2
   libexpat1
   libfontconfig1
@@ -255,12 +254,10 @@
   libgbm1
   libglib2.0-0
   libgl1
-  libgl1:i386
   libgtk-3-0
   libpam0g
   libpango-1.0-0
   libpangocairo-1.0-0
-  libpangocairo-1.0-0:i386
   libpci3
   libpcre3
   libpixman-1-0
@@ -269,7 +266,6 @@
   libsqlite3-0
   libuuid1
   libwayland-egl1
-  libwayland-egl1:i386
   libwayland-egl1-mesa
   libx11-6
   libx11-xcb1
@@ -317,11 +313,15 @@
   libatk1.0-0:i386
   libatspi2.0-0:i386
   libdbus-1-3:i386
+  libegl1:i386
+  libgl1:i386
   libglib2.0-0:i386
   libncurses5:i386
   libnss3:i386
   libpango-1.0-0:i386
+  libpangocairo-1.0-0:i386
   libstdc++6:i386
+  libwayland-egl1:i386
   libx11-xcb1:i386
   libxcomposite1:i386
   libxdamage1:i386
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 30e89fd..18a09f3 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -563,6 +563,7 @@
     "test/mock_layer_tree_mutator.cc",
     "test/mock_layer_tree_mutator.h",
     "test/mock_occlusion_tracker.h",
+    "test/paint_image_matchers.h",
     "test/paint_op_helper.h",
     "test/paint_op_matchers.h",
     "test/pixel_comparator.cc",
diff --git a/cc/base/delayed_unique_notifier_unittest.cc b/cc/base/delayed_unique_notifier_unittest.cc
index 0b0514a..c75daf53 100644
--- a/cc/base/delayed_unique_notifier_unittest.cc
+++ b/cc/base/delayed_unique_notifier_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/test_pending_task.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/time/time.h"
diff --git a/cc/benchmarks/micro_benchmark_controller_unittest.cc b/cc/benchmarks/micro_benchmark_controller_unittest.cc
index 728d315..f0430e1 100644
--- a/cc/benchmarks/micro_benchmark_controller_unittest.cc
+++ b/cc/benchmarks/micro_benchmark_controller_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/animation/animation_host.h"
 #include "cc/benchmarks/micro_benchmark.h"
 #include "cc/layers/layer.h"
diff --git a/cc/benchmarks/rasterize_and_record_benchmark.cc b/cc/benchmarks/rasterize_and_record_benchmark.cc
index 5e4de2c..1c499e0 100644
--- a/cc/benchmarks/rasterize_and_record_benchmark.cc
+++ b/cc/benchmarks/rasterize_and_record_benchmark.cc
@@ -12,6 +12,7 @@
 
 #include "base/functional/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/benchmarks/rasterize_and_record_benchmark_impl.h"
 #include "cc/layers/content_layer_client.h"
 #include "cc/layers/layer.h"
diff --git a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
index d79504fb..4cf836cf 100644
--- a/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
+++ b/cc/benchmarks/rasterize_and_record_benchmark_impl.cc
@@ -12,6 +12,7 @@
 #include <utility>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/lap_timer.h"
 #include "base/values.h"
 #include "cc/layers/layer_impl.h"
diff --git a/cc/layers/picture_layer_impl_perftest.cc b/cc/layers/picture_layer_impl_perftest.cc
index 0cfa4f3e..046bd8be 100644
--- a/cc/layers/picture_layer_impl_perftest.cc
+++ b/cc/layers/picture_layer_impl_perftest.cc
@@ -6,7 +6,6 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/ranges/algorithm.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/lap_timer.h"
 #include "cc/test/fake_picture_layer_impl.h"
 #include "cc/test/fake_raster_source.h"
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 498d306..2af3390 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "cc/animation/animation_host.h"
 #include "cc/base/math_util.h"
 #include "cc/layers/append_quads_data.h"
@@ -6220,7 +6219,7 @@
   EXPECT_EQ(active_layer()->GetPaintWorkletRecordMap().size(), 2u);
   auto it = active_layer()->GetPaintWorkletRecordMap().find(input1);
   ASSERT_NE(it, active_layer()->GetPaintWorkletRecordMap().end());
-  EXPECT_EQ(it->second.second, record1);
+  EXPECT_TRUE(it->second.second->EqualsForTesting(record1));
   EXPECT_TRUE(active_layer()->GetPaintWorkletRecordMap().contains(input2));
 
   // Committing new PaintWorkletInputs (in a new raster source) should replace
diff --git a/cc/layers/recording_source_unittest.cc b/cc/layers/recording_source_unittest.cc
index 46683334..82dc907e 100644
--- a/cc/layers/recording_source_unittest.cc
+++ b/cc/layers/recording_source_unittest.cc
@@ -61,8 +61,10 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128),
                                               &images);
     EXPECT_EQ(2u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[0][0]);
-    EXPECT_TRUE(images[1]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[0][0]));
+    EXPECT_TRUE(
+        images[1]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
 
   // Shifted tile sized iterators. These should find only one pixel ref.
@@ -71,7 +73,8 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 140, 128, 128),
                                               &images);
     EXPECT_EQ(1u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
 
   // The rotated bitmap would still be in the top right tile.
@@ -80,7 +83,8 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 0, 128, 128),
                                               &images);
     EXPECT_EQ(1u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
 
   // Layer sized iterators. These should find all pixel refs.
@@ -90,9 +94,12 @@
                                               &images);
     EXPECT_EQ(3u, images.size());
     // Top left tile with bitmap[0][0] and bitmap[1][1].
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[0][0]);
-    EXPECT_TRUE(images[1]->paint_image() == discardable_image[1][0]);
-    EXPECT_TRUE(images[2]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[0][0]));
+    EXPECT_TRUE(
+        images[1]->paint_image().IsSameForTesting(discardable_image[1][0]));
+    EXPECT_TRUE(
+        images[2]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
 
   // Verify different raster scales
@@ -223,7 +230,8 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128),
                                               &images);
     EXPECT_EQ(1u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[0][0]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[0][0]));
   }
 
   // Shifted tile sized iterators. These should find only one image.
@@ -232,7 +240,8 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128),
                                               &images);
     EXPECT_EQ(1u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
 
   // Ensure there's no discardable images in the empty cell
@@ -249,9 +258,12 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256),
                                               &images);
     EXPECT_EQ(3u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[0][0]);
-    EXPECT_TRUE(images[1]->paint_image() == discardable_image[1][0]);
-    EXPECT_TRUE(images[2]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[0][0]));
+    EXPECT_TRUE(
+        images[1]->paint_image().IsSameForTesting(discardable_image[1][0]));
+    EXPECT_TRUE(
+        images[2]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
 }
 
@@ -291,7 +303,8 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256),
                                               &images);
     EXPECT_EQ(1u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[0][0]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[0][0]));
   }
   // Shifted tile sized iterators. These should find only one image.
   {
@@ -299,7 +312,8 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(260, 260, 256, 256),
                                               &images);
     EXPECT_EQ(1u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
   // Ensure there's no discardable images in the empty cell
   {
@@ -314,9 +328,12 @@
     raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 512, 512),
                                               &images);
     EXPECT_EQ(3u, images.size());
-    EXPECT_TRUE(images[0]->paint_image() == discardable_image[0][0]);
-    EXPECT_TRUE(images[1]->paint_image() == discardable_image[0][1]);
-    EXPECT_TRUE(images[2]->paint_image() == discardable_image[1][1]);
+    EXPECT_TRUE(
+        images[0]->paint_image().IsSameForTesting(discardable_image[0][0]));
+    EXPECT_TRUE(
+        images[1]->paint_image().IsSameForTesting(discardable_image[0][1]));
+    EXPECT_TRUE(
+        images[2]->paint_image().IsSameForTesting(discardable_image[1][1]));
   }
 }
 
diff --git a/cc/layers/surface_layer_unittest.cc b/cc/layers/surface_layer_unittest.cc
index ce88184..10ec323 100644
--- a/cc/layers/surface_layer_unittest.cc
+++ b/cc/layers/surface_layer_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "cc/animation/animation_host.h"
 #include "cc/layers/solid_color_layer.h"
diff --git a/cc/layers/texture_layer.h b/cc/layers/texture_layer.h
index 51b6e3bb..a53478d 100644
--- a/cc/layers/texture_layer.h
+++ b/cc/layers/texture_layer.h
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "cc/cc_export.h"
 #include "cc/layers/layer.h"
diff --git a/cc/layers/ui_resource_layer_unittest.cc b/cc/layers/ui_resource_layer_unittest.cc
index cb90d943..bf50fd0 100644
--- a/cc/layers/ui_resource_layer_unittest.cc
+++ b/cc/layers/ui_resource_layer_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "cc/layers/ui_resource_layer.h"
 
-#include "base/threading/thread_task_runner_handle.h"
 #include "cc/animation/animation_host.h"
 #include "cc/resources/scoped_ui_resource.h"
 #include "cc/resources/ui_resource_manager.h"
diff --git a/cc/metrics/average_lag_tracker.cc b/cc/metrics/average_lag_tracker.cc
index a5e4968..5fe6855 100644
--- a/cc/metrics/average_lag_tracker.cc
+++ b/cc/metrics/average_lag_tracker.cc
@@ -165,16 +165,23 @@
 }
 
 void AverageLagTracker::CalculateAndReportAverageLagUma(bool send_anyway) {
-  DCHECK(!frame_lag_infos_.empty());
+  // TODO(crbug.com/1356794): re-enable DCHECK and remove early-out
+  // once bugs are fixed.
+  // DCHECK(!frame_lag_infos_.empty());
+  if (frame_lag_infos_.empty()) {
+    return;
+  }
   const LagAreaInFrame& frame_lag = frame_lag_infos_.front();
 
-  DCHECK_GE(frame_lag.lag_area, 0.f);
-  DCHECK_GE(frame_lag.lag_area_no_prediction, 0.f);
+  // TODO(crbug.com/1356794): re-enable DCHECKs once bugs are fixed.
+  // DCHECK_GE(frame_lag.lag_area, 0.f);
+  // DCHECK_GE(frame_lag.lag_area_no_prediction, 0.f);
   accumulated_lag_ += frame_lag.lag_area;
   accumulated_lag_no_prediction_ += frame_lag.lag_area_no_prediction;
 
   if (is_begin_) {
-    DCHECK_EQ(accumulated_lag_, accumulated_lag_no_prediction_);
+    // TODO(crbug.com/1356794): re-enable DCHECK once bugs are fixed.
+    // DCHECK_EQ(accumulated_lag_, accumulated_lag_no_prediction_);
   }
 
   // |send_anyway| is true when we are flush all remaining frames on next
diff --git a/cc/metrics/compositor_frame_reporting_controller.cc b/cc/metrics/compositor_frame_reporting_controller.cc
index 85eeed8..b14a9e9 100644
--- a/cc/metrics/compositor_frame_reporting_controller.cc
+++ b/cc/metrics/compositor_frame_reporting_controller.cc
@@ -64,6 +64,20 @@
   }
 }
 
+void CompositorFrameReportingController::SetVisible(bool visible) {
+  if (visible_ == visible) {
+    return;
+  }
+
+  visible_ = visible;
+  if (visible_) {
+    // Note:`waiting_for_did_present_after_visible_` will be set to false
+    // inside `CompositorFrameReportingController::DidPresentCompositorFrame`
+    // after `events_metrics_from_dropped_frames_` is clear
+    waiting_for_did_present_after_visible_ = true;
+  }
+}
+
 CompositorFrameReportingController::SubmittedCompositorFrame::
     SubmittedCompositorFrame() = default;
 CompositorFrameReportingController::SubmittedCompositorFrame::
@@ -501,6 +515,21 @@
         break;
     }
 
+    // If the page was transitioned from invisible to visible, need to throw
+    // away EventsMetrics from `events_metrics_from_dropped_frames_` because
+    // these measurement would be invalid due to the duration of page being
+    // invisible.
+    if (waiting_for_did_present_after_visible_) {
+      waiting_for_did_present_after_visible_ = false;
+      // The implicit assumption is that reporter->frame_id will never be
+      // equal to it->first
+      for (auto it = events_metrics_from_dropped_frames_.begin();
+           it != events_metrics_from_dropped_frames_.end() &&
+           (it->first < reporter->frame_id());
+           it = events_metrics_from_dropped_frames_.erase(it)) {
+      }
+    }
+
     if (termination_status == FrameTerminationStatus::kPresentedFrame) {
       // If there are outstanding metrics from dropped frames older than this
       // frame, this frame would be the first frame presented after those
diff --git a/cc/metrics/compositor_frame_reporting_controller.h b/cc/metrics/compositor_frame_reporting_controller.h
index f2054061..e62a40c 100644
--- a/cc/metrics/compositor_frame_reporting_controller.h
+++ b/cc/metrics/compositor_frame_reporting_controller.h
@@ -121,6 +121,8 @@
 
   bool HasReporterAt(PipelineStage stage) const;
 
+  void SetVisible(bool visible);
+
  protected:
   struct SubmittedCompositorFrame {
     uint32_t frame_token;
@@ -247,6 +249,12 @@
   // Container that stores the EventLatency stage latency predictions based on
   // previous event traces.
   CompositorFrameReporter::EventLatencyInfo event_latency_predictions_;
+
+  // Reporting controller needs to track transition of the page from invisible
+  // to visible in order to discard EventsMetrics impacted by duration of page
+  // being invisible
+  bool visible_ = true;
+  bool waiting_for_did_present_after_visible_ = false;
 };
 
 }  // namespace cc
diff --git a/cc/metrics/jank_injector.cc b/cc/metrics/jank_injector.cc
index 7409c6a..659a8707 100644
--- a/cc/metrics/jank_injector.cc
+++ b/cc/metrics/jank_injector.cc
@@ -16,6 +16,7 @@
 #include "base/no_destructor.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_split.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/base/features.h"
diff --git a/cc/paint/BUILD.gn b/cc/paint/BUILD.gn
index ca082143..04d7e4b 100644
--- a/cc/paint/BUILD.gn
+++ b/cc/paint/BUILD.gn
@@ -87,7 +87,6 @@
     "skia_paint_image_generator.cc",
     "skia_paint_image_generator.h",
     "skottie_color_map.h",
-    "skottie_frame_data.cc",
     "skottie_frame_data.h",
     "skottie_frame_data_provider.h",
     "skottie_marker.h",
diff --git a/cc/paint/discardable_image_map_unittest.cc b/cc/paint/discardable_image_map_unittest.cc
index 696effa..4fa9f424 100644
--- a/cc/paint/discardable_image_map_unittest.cc
+++ b/cc/paint/discardable_image_map_unittest.cc
@@ -23,6 +23,7 @@
 #include "cc/test/fake_content_layer_client.h"
 #include "cc/test/fake_recording_source.h"
 #include "cc/test/lottie_test_data.h"
+#include "cc/test/paint_image_matchers.h"
 #include "cc/test/skia_common.h"
 #include "cc/test/test_paint_worklet_input.h"
 #include "skia/buildflags.h"
@@ -94,8 +95,8 @@
 
     EXPECT_EQ(draw_images.size(), position_draw_images.size());
     for (size_t i = 0; i < draw_images.size(); ++i) {
-      EXPECT_TRUE(draw_images[i].paint_image() ==
-                  position_draw_images[i].image);
+      EXPECT_TRUE(draw_images[i].paint_image().IsSameForTesting(
+          position_draw_images[i].image));
       EXPECT_EQ(draw_images[i].target_color_space(),
                 target_color_params.color_space);
     }
@@ -154,7 +155,7 @@
       std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
       if ((x + y) & 1) {
         EXPECT_EQ(1u, images.size()) << x << " " << y;
-        EXPECT_TRUE(images[0].image == discardable_image[y][x])
+        EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image[y][x]))
             << x << " " << y;
         EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500),
                   inset_rects[0]);
@@ -170,16 +171,16 @@
   std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
   EXPECT_EQ(4u, images.size());
 
-  EXPECT_TRUE(images[0].image == discardable_image[1][2]);
+  EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image[1][2]));
   EXPECT_EQ(gfx::Rect(2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]);
 
-  EXPECT_TRUE(images[1].image == discardable_image[2][1]);
+  EXPECT_TRUE(images[1].image.IsSameForTesting(discardable_image[2][1]));
   EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]);
 
-  EXPECT_TRUE(images[2].image == discardable_image[2][3]);
+  EXPECT_TRUE(images[2].image.IsSameForTesting(discardable_image[2][3]));
   EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[2]);
 
-  EXPECT_TRUE(images[3].image == discardable_image[3][2]);
+  EXPECT_TRUE(images[3].image.IsSameForTesting(discardable_image[3][2]));
   EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), inset_rects[3]);
 }
 
@@ -225,7 +226,7 @@
       std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
       if ((x + y) & 1) {
         EXPECT_EQ(1u, images.size()) << x << " " << y;
-        EXPECT_TRUE(images[0].image == discardable_image[y][x])
+        EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image[y][x]))
             << x << " " << y;
         EXPECT_EQ(gfx::Rect(1024 + x * 512 + 6, y * 512 + 6, 500, 500),
                   inset_rects[0]);
@@ -241,17 +242,17 @@
     std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
     EXPECT_EQ(4u, images.size());
 
-    EXPECT_TRUE(images[0].image == discardable_image[1][2]);
+    EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image[1][2]));
     EXPECT_EQ(gfx::Rect(1024 + 2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]);
 
-    EXPECT_TRUE(images[1].image == discardable_image[2][1]);
+    EXPECT_TRUE(images[1].image.IsSameForTesting(discardable_image[2][1]));
     EXPECT_EQ(gfx::Rect(1024 + 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]);
 
-    EXPECT_TRUE(images[2].image == discardable_image[2][3]);
+    EXPECT_TRUE(images[2].image.IsSameForTesting(discardable_image[2][3]));
     EXPECT_EQ(gfx::Rect(1024 + 3 * 512 + 6, 2 * 512 + 6, 500, 500),
               inset_rects[2]);
 
-    EXPECT_TRUE(images[3].image == discardable_image[3][2]);
+    EXPECT_TRUE(images[3].image.IsSameForTesting(discardable_image[3][2]));
     EXPECT_EQ(gfx::Rect(1024 + 2 * 512 + 6, 3 * 512 + 6, 500, 500),
               inset_rects[3]);
   }
@@ -324,7 +325,7 @@
       std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
       if ((x + y) & 1) {
         EXPECT_EQ(1u, images.size()) << x << " " << y;
-        EXPECT_TRUE(images[0].image == discardable_image[y][x])
+        EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image[y][x]))
             << x << " " << y;
         EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500),
                   inset_rects[0]);
@@ -354,7 +355,7 @@
       GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
   std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
   EXPECT_EQ(1u, images.size());
-  EXPECT_TRUE(images[0].image == discardable_image);
+  EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image));
   EXPECT_EQ(gfx::Rect(0, 0, 2048, 2048), inset_rects[0]);
 }
 
@@ -380,7 +381,7 @@
   std::vector<PositionScaleDrawImage> images =
       GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
   EXPECT_EQ(1u, images.size());
-  EXPECT_TRUE(images[0].image == discardable_image);
+  EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image));
 }
 
 // Check if SkNoDrawCanvas does not crash for large layers.
@@ -465,7 +466,7 @@
   std::vector<PositionScaleDrawImage> images =
       GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
   EXPECT_EQ(1u, images.size());
-  EXPECT_TRUE(images[0].image == discardable_image);
+  EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image));
 }
 
 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) {
@@ -489,7 +490,7 @@
       GetDiscardableImagesInRect(image_map, gfx::Rect(42, 42, 1, 1));
   std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
   EXPECT_EQ(1u, images.size());
-  EXPECT_TRUE(images[0].image == discardable_image);
+  EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image));
   EXPECT_EQ(gfx::Rect(42, 42, 2006, 2006), inset_rects[0]);
 }
 
@@ -644,7 +645,8 @@
           gfx::Rect(x * 512, y * 512, 500, 500), &draw_images);
       if ((x + y) & 1) {
         EXPECT_EQ(1u, draw_images.size()) << x << " " << y;
-        EXPECT_TRUE(draw_images[0]->paint_image() == discardable_image[y][x])
+        EXPECT_TRUE(draw_images[0]->paint_image().IsSameForTesting(
+            discardable_image[y][x]))
             << x << " " << y;
         EXPECT_EQ(std::max(x * 0.5f, kMinScale),
                   draw_images[0]->scale().fWidth);
@@ -661,10 +663,14 @@
   image_map.GetDiscardableImagesInRect(gfx::Rect(512, 512, 2048, 2048),
                                        &draw_images);
   EXPECT_EQ(4u, draw_images.size());
-  EXPECT_TRUE(draw_images[0]->paint_image() == discardable_image[1][2]);
-  EXPECT_TRUE(draw_images[1]->paint_image() == discardable_image[2][1]);
-  EXPECT_TRUE(draw_images[2]->paint_image() == discardable_image[2][3]);
-  EXPECT_TRUE(draw_images[3]->paint_image() == discardable_image[3][2]);
+  EXPECT_TRUE(
+      draw_images[0]->paint_image().IsSameForTesting(discardable_image[1][2]));
+  EXPECT_TRUE(
+      draw_images[1]->paint_image().IsSameForTesting(discardable_image[2][1]));
+  EXPECT_TRUE(
+      draw_images[2]->paint_image().IsSameForTesting(discardable_image[2][3]));
+  EXPECT_TRUE(
+      draw_images[3]->paint_image().IsSameForTesting(discardable_image[3][2]));
 }
 
 TEST_F(DiscardableImageMapTest, ClipsImageRects) {
@@ -690,7 +696,7 @@
       GetDiscardableImagesInRect(image_map, visible_rect);
   std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
   EXPECT_EQ(1u, images.size());
-  EXPECT_TRUE(images[0].image == discardable_image);
+  EXPECT_TRUE(images[0].image.IsSameForTesting(discardable_image));
   EXPECT_EQ(gfx::Rect(250, 250), inset_rects[0]);
 }
 
@@ -719,12 +725,12 @@
   std::vector<const DrawImage*> images;
   image_map.GetDiscardableImagesInRect(gfx::Rect(0, 0, 5, 95), &images);
   EXPECT_EQ(1u, images.size());
-  EXPECT_TRUE(discardable_image == images[0]->paint_image());
+  EXPECT_TRUE(discardable_image.IsSameForTesting(images[0]->paint_image()));
 
   images.clear();
   image_map.GetDiscardableImagesInRect(gfx::Rect(105, 105, 5, 95), &images);
   EXPECT_EQ(1u, images.size());
-  EXPECT_TRUE(discardable_image2 == images[0]->paint_image());
+  EXPECT_TRUE(discardable_image2.IsSameForTesting(images[0]->paint_image()));
 }
 
 TEST_F(DiscardableImageMapTest, GathersAnimatedImages) {
@@ -768,11 +774,12 @@
   display_list->discardable_image_map().GetDiscardableImagesInRect(visible_rect,
                                                                    &images);
   ASSERT_EQ(images.size(), 3u);
-  EXPECT_EQ(images[0]->paint_image(), static_image);
+  EXPECT_TRUE(images[0]->paint_image().IsSameForTesting(static_image));
   EXPECT_DCHECK_DEATH(images[0]->frame_index());
-  EXPECT_EQ(images[1]->paint_image(), animated_loop_none);
+  EXPECT_TRUE(images[1]->paint_image().IsSameForTesting(animated_loop_none));
   EXPECT_DCHECK_DEATH(images[1]->frame_index());
-  EXPECT_EQ(images[2]->paint_image(), animation_loop_infinite);
+  EXPECT_TRUE(
+      images[2]->paint_image().IsSameForTesting(animation_loop_infinite));
   EXPECT_DCHECK_DEATH(images[2]->frame_index());
 }
 
@@ -804,7 +811,7 @@
   std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
       display_list->discardable_image_map(), visible_rect);
   ASSERT_EQ(images.size(), 1u);
-  EXPECT_EQ(images[0].image, static_image);
+  EXPECT_TRUE(images[0].image.IsSameForTesting(static_image));
 }
 
 TEST_F(DiscardableImageMapTest, CapturesImagesInPaintRecordShaders) {
@@ -847,7 +854,7 @@
       GetDiscardableImagesInRect(image_map, visible_rect);
   std::vector<gfx::Rect> inset_rects = InsetImageRects(draw_images);
   ASSERT_EQ(draw_images.size(), 1u);
-  EXPECT_EQ(draw_images[0].image, animated_image);
+  EXPECT_TRUE(draw_images[0].image.IsSameForTesting(animated_image));
   // The position of the image is the position of the DrawRectOp that uses the
   // shader.
   EXPECT_EQ(gfx::Rect(400, 400), inset_rects[0]);
@@ -892,7 +899,7 @@
       GetDiscardableImagesInRect(image_map, visible_rect);
   std::vector<gfx::Rect> inset_rects = InsetImageRects(draw_images);
   ASSERT_EQ(draw_images.size(), 1u);
-  EXPECT_EQ(draw_images[0].image, animated_image);
+  EXPECT_TRUE(draw_images[0].image.IsSameForTesting(animated_image));
   // The position of the image is the position of the DrawRectOp that uses the
   // filter. Since the bounds of the filter does not depend on the source/input,
   // the resulting bounds is that of the RecordPaintFilter.
@@ -921,7 +928,7 @@
       GetDiscardableImagesInRect(image_map, visible_rect);
   std::vector<gfx::Rect> inset_rects = InsetImageRects(draw_images);
   ASSERT_EQ(draw_images.size(), 1u);
-  EXPECT_EQ(draw_images[0].image, image);
+  EXPECT_TRUE(draw_images[0].image.IsSameForTesting(image));
   EXPECT_EQ(gfx::Rect(500, 500), inset_rects[0]);
   EXPECT_EQ(SkSize::Make(1.f, 1.f), draw_images[0].scale);
 }
@@ -1227,10 +1234,10 @@
   std::vector<PositionScaleDrawImage> images_out =
       GetDiscardableImagesInRect(image_map, gfx::Rect(1024, 0, 1024, 2048));
   ASSERT_THAT(images_out, SizeIs(2));
-  EXPECT_THAT(images_out,
-              Contains(Field(&PositionScaleDrawImage::image, Eq(image_0))));
-  EXPECT_THAT(images_out,
-              Contains(Field(&PositionScaleDrawImage::image, Eq(image_1))));
+  EXPECT_THAT(images_out, Contains(Field(&PositionScaleDrawImage::image,
+                                         ImageIsSame(image_0))));
+  EXPECT_THAT(images_out, Contains(Field(&PositionScaleDrawImage::image,
+                                         ImageIsSame(image_1))));
 }
 
 TEST_F(DiscardableImageMapTest,
diff --git a/cc/paint/draw_image.cc b/cc/paint/draw_image.cc
index 63947b21d..875fc5e 100644
--- a/cc/paint/draw_image.cc
+++ b/cc/paint/draw_image.cc
@@ -94,8 +94,8 @@
 DrawImage& DrawImage::operator=(DrawImage&& other) = default;
 DrawImage& DrawImage::operator=(const DrawImage& other) = default;
 
-bool DrawImage::operator==(const DrawImage& other) const {
-  return paint_image_ == other.paint_image_ &&
+bool DrawImage::IsSameForTesting(const DrawImage& other) const {
+  return paint_image_.IsSameForTesting(other.paint_image_) &&  // IN-TEST
          use_dark_mode_ == other.use_dark_mode_ &&
          src_rect_ == other.src_rect_ &&
          filter_quality_ == other.filter_quality_ && scale_ == other.scale_ &&
diff --git a/cc/paint/draw_image.h b/cc/paint/draw_image.h
index 9d397fa..bafbc2ef 100644
--- a/cc/paint/draw_image.h
+++ b/cc/paint/draw_image.h
@@ -53,7 +53,10 @@
   DrawImage& operator=(DrawImage&& other);
   DrawImage& operator=(const DrawImage& other);
 
-  bool operator==(const DrawImage& other) const;
+  // For testing only. Checks if `this` and `other` are the same image, i.e.
+  // share the same underlying image. `a.IsSameForTesting(b)` will be true after
+  // `DrawImage b = a;`.
+  bool IsSameForTesting(const DrawImage& other) const;
 
   const PaintImage& paint_image() const { return paint_image_; }
   bool use_dark_mode() const { return use_dark_mode_; }
diff --git a/cc/paint/oop_pixeltest.cc b/cc/paint/oop_pixeltest.cc
index 87eb25a..a166d127 100644
--- a/cc/paint/oop_pixeltest.cc
+++ b/cc/paint/oop_pixeltest.cc
@@ -12,7 +12,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
 #include "base/test/test_switches.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/base/completion_event.h"
 #include "cc/paint/display_item_list.h"
diff --git a/cc/paint/paint_canvas.h b/cc/paint/paint_canvas.h
index 7a76d09..66e2624 100644
--- a/cc/paint/paint_canvas.h
+++ b/cc/paint/paint_canvas.h
@@ -126,9 +126,7 @@
              UsePaintCache::kEnabled);
   }
 
-  virtual SkRect getLocalClipBounds() const = 0;
   virtual bool getLocalClipBounds(SkRect* bounds) const = 0;
-  virtual SkIRect getDeviceClipBounds() const = 0;
   virtual bool getDeviceClipBounds(SkIRect* bounds) const = 0;
   virtual void drawColor(SkColor4f color, SkBlendMode mode) = 0;
   void drawColor(SkColor4f color) { drawColor(color, SkBlendMode::kSrcOver); }
@@ -207,7 +205,6 @@
   // not add an additional clip.  This is closer to SkPicture::playback.
   virtual void drawPicture(PaintRecord record) = 0;
 
-  virtual bool isClipEmpty() const = 0;
   virtual SkM44 getLocalToDevice() const = 0;
 
   virtual bool NeedsFlush() const = 0;
diff --git a/cc/paint/paint_filter.cc b/cc/paint/paint_filter.cc
index 4f2ce29..f107e17 100644
--- a/cc/paint/paint_filter.cc
+++ b/cc/paint/paint_filter.cc
@@ -33,8 +33,17 @@
 namespace {
 const bool kHasNoDiscardableImages = false;
 
-bool AreScalarsEqual(SkScalar one, SkScalar two) {
-  return PaintOp::AreEqualEvenIfNaN(one, two);
+template <typename T>
+bool AreValuesEqualForTesting(const sk_sp<T>& a, const sk_sp<T>& b) {
+  return base::ValuesEquivalent(a, b, [](const T& x, const T& y) {
+    return x.EqualsForTesting(y);  // IN-TEST
+  });
+}
+
+template <typename T>
+bool AreEqualForTesting(const PaintFilter& a, const PaintFilter& b) {
+  return static_cast<const T&>(a).EqualsForTesting(  // IN-TEST
+      static_cast<const T&>(b));
 }
 
 bool HasDiscardableImages(const sk_sp<PaintFilter>& filter) {
@@ -153,86 +162,61 @@
   return SnapshotWithImagesInternal(image_provider);
 }
 
-bool PaintFilter::operator==(const PaintFilter& other) const {
-  if (type_ != other.type_)
+bool PaintFilter::EqualsForTesting(const PaintFilter& other) const {
+  if (type_ != other.type_) {
     return false;
-  if (!!crop_rect_ != !!other.crop_rect_)
+  }
+  if (crop_rect_ != other.crop_rect_) {
     return false;
-  if (crop_rect_) {
-    if (!PaintOp::AreSkRectsEqual(*crop_rect_, *other.crop_rect_)) {
-      return false;
-    }
   }
 
   switch (type_) {
     case Type::kNullFilter:
       return true;
     case Type::kColorFilter:
-      return *static_cast<const ColorFilterPaintFilter*>(this) ==
-             static_cast<const ColorFilterPaintFilter&>(other);
+      return AreEqualForTesting<ColorFilterPaintFilter>(*this, other);
     case Type::kBlur:
-      return *static_cast<const BlurPaintFilter*>(this) ==
-             static_cast<const BlurPaintFilter&>(other);
+      return AreEqualForTesting<BlurPaintFilter>(*this, other);
     case Type::kDropShadow:
-      return *static_cast<const DropShadowPaintFilter*>(this) ==
-             static_cast<const DropShadowPaintFilter&>(other);
+      return AreEqualForTesting<DropShadowPaintFilter>(*this, other);
     case Type::kMagnifier:
-      return *static_cast<const MagnifierPaintFilter*>(this) ==
-             static_cast<const MagnifierPaintFilter&>(other);
+      return AreEqualForTesting<MagnifierPaintFilter>(*this, other);
     case Type::kCompose:
-      return *static_cast<const ComposePaintFilter*>(this) ==
-             static_cast<const ComposePaintFilter&>(other);
+      return AreEqualForTesting<ComposePaintFilter>(*this, other);
     case Type::kAlphaThreshold:
-      return *static_cast<const AlphaThresholdPaintFilter*>(this) ==
-             static_cast<const AlphaThresholdPaintFilter&>(other);
+      return AreEqualForTesting<AlphaThresholdPaintFilter>(*this, other);
     case Type::kXfermode:
-      return *static_cast<const XfermodePaintFilter*>(this) ==
-             static_cast<const XfermodePaintFilter&>(other);
+      return AreEqualForTesting<XfermodePaintFilter>(*this, other);
     case Type::kArithmetic:
-      return *static_cast<const ArithmeticPaintFilter*>(this) ==
-             static_cast<const ArithmeticPaintFilter&>(other);
+      return AreEqualForTesting<ArithmeticPaintFilter>(*this, other);
     case Type::kMatrixConvolution:
-      return *static_cast<const MatrixConvolutionPaintFilter*>(this) ==
-             static_cast<const MatrixConvolutionPaintFilter&>(other);
+      return AreEqualForTesting<MatrixConvolutionPaintFilter>(*this, other);
     case Type::kDisplacementMapEffect:
-      return *static_cast<const DisplacementMapEffectPaintFilter*>(this) ==
-             static_cast<const DisplacementMapEffectPaintFilter&>(other);
+      return AreEqualForTesting<DisplacementMapEffectPaintFilter>(*this, other);
     case Type::kImage:
-      return *static_cast<const ImagePaintFilter*>(this) ==
-             static_cast<const ImagePaintFilter&>(other);
+      return AreEqualForTesting<ImagePaintFilter>(*this, other);
     case Type::kPaintRecord:
-      return *static_cast<const RecordPaintFilter*>(this) ==
-             static_cast<const RecordPaintFilter&>(other);
+      return AreEqualForTesting<RecordPaintFilter>(*this, other);
     case Type::kMerge:
-      return *static_cast<const MergePaintFilter*>(this) ==
-             static_cast<const MergePaintFilter&>(other);
+      return AreEqualForTesting<MergePaintFilter>(*this, other);
     case Type::kMorphology:
-      return *static_cast<const MorphologyPaintFilter*>(this) ==
-             static_cast<const MorphologyPaintFilter&>(other);
+      return AreEqualForTesting<MorphologyPaintFilter>(*this, other);
     case Type::kOffset:
-      return *static_cast<const OffsetPaintFilter*>(this) ==
-             static_cast<const OffsetPaintFilter&>(other);
+      return AreEqualForTesting<OffsetPaintFilter>(*this, other);
     case Type::kTile:
-      return *static_cast<const TilePaintFilter*>(this) ==
-             static_cast<const TilePaintFilter&>(other);
+      return AreEqualForTesting<TilePaintFilter>(*this, other);
     case Type::kTurbulence:
-      return *static_cast<const TurbulencePaintFilter*>(this) ==
-             static_cast<const TurbulencePaintFilter&>(other);
+      return AreEqualForTesting<TurbulencePaintFilter>(*this, other);
     case Type::kShader:
-      return *static_cast<const ShaderPaintFilter*>(this) ==
-             static_cast<const ShaderPaintFilter&>(other);
+      return AreEqualForTesting<ShaderPaintFilter>(*this, other);
     case Type::kMatrix:
-      return *static_cast<const MatrixPaintFilter*>(this) ==
-             static_cast<const MatrixPaintFilter&>(other);
+      return AreEqualForTesting<MatrixPaintFilter>(*this, other);
     case Type::kLightingDistant:
-      return *static_cast<const LightingDistantPaintFilter*>(this) ==
-             static_cast<const LightingDistantPaintFilter&>(other);
+      return AreEqualForTesting<LightingDistantPaintFilter>(*this, other);
     case Type::kLightingPoint:
-      return *static_cast<const LightingPointPaintFilter*>(this) ==
-             static_cast<const LightingPointPaintFilter&>(other);
+      return AreEqualForTesting<LightingPointPaintFilter>(*this, other);
     case Type::kLightingSpot:
-      return *static_cast<const LightingSpotPaintFilter*>(this) ==
-             static_cast<const LightingSpotPaintFilter&>(other);
+      return AreEqualForTesting<LightingSpotPaintFilter>(*this, other);
   }
   NOTREACHED();
   return true;
@@ -266,11 +250,14 @@
       color_filter_, Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool ColorFilterPaintFilter::operator==(
+bool ColorFilterPaintFilter::EqualsForTesting(
     const ColorFilterPaintFilter& other) const {
-  return PaintOp::AreSkFlattenablesEqual(color_filter_.get(),
-                                         other.color_filter_.get()) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+  return base::ValuesEquivalent(
+             color_filter_, other.color_filter_,
+             [](const auto& a, const auto& b) {
+               return a.serialize()->equals(b.serialize().get());
+             }) &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 BlurPaintFilter::BlurPaintFilter(SkScalar sigma_x,
@@ -304,11 +291,10 @@
                                      GetCropRect());
 }
 
-bool BlurPaintFilter::operator==(const BlurPaintFilter& other) const {
-  return PaintOp::AreEqualEvenIfNaN(sigma_x_, other.sigma_x_) &&
-         PaintOp::AreEqualEvenIfNaN(sigma_y_, other.sigma_y_) &&
+bool BlurPaintFilter::EqualsForTesting(const BlurPaintFilter& other) const {
+  return sigma_x_ == other.sigma_x_ && sigma_y_ == other.sigma_y_ &&
          tile_mode_ == other.tile_mode_ &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 DropShadowPaintFilter::DropShadowPaintFilter(SkScalar dx,
@@ -357,14 +343,12 @@
       Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool DropShadowPaintFilter::operator==(
+bool DropShadowPaintFilter::EqualsForTesting(
     const DropShadowPaintFilter& other) const {
-  return PaintOp::AreEqualEvenIfNaN(dx_, other.dx_) &&
-         PaintOp::AreEqualEvenIfNaN(dy_, other.dy_) &&
-         PaintOp::AreEqualEvenIfNaN(sigma_x_, other.sigma_x_) &&
-         PaintOp::AreEqualEvenIfNaN(sigma_y_, other.sigma_y_) &&
-         color_ == other.color_ && shadow_mode_ == other.shadow_mode_ &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+  return dx_ == other.dx_ && dy_ == other.dy_ && sigma_x_ == other.sigma_x_ &&
+         sigma_y_ == other.sigma_y_ && color_ == other.color_ &&
+         shadow_mode_ == other.shadow_mode_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 MagnifierPaintFilter::MagnifierPaintFilter(const SkRect& src_rect,
@@ -394,10 +378,10 @@
       src_rect_, inset_, Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool MagnifierPaintFilter::operator==(const MagnifierPaintFilter& other) const {
-  return PaintOp::AreSkRectsEqual(src_rect_, other.src_rect_) &&
-         PaintOp::AreEqualEvenIfNaN(inset_, other.inset_) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+bool MagnifierPaintFilter::EqualsForTesting(
+    const MagnifierPaintFilter& other) const {
+  return src_rect_ == other.src_rect_ && inset_ == other.inset_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 ComposePaintFilter::ComposePaintFilter(sk_sp<PaintFilter> outer,
@@ -426,9 +410,10 @@
                                         Snapshot(inner_, image_provider));
 }
 
-bool ComposePaintFilter::operator==(const ComposePaintFilter& other) const {
-  return base::ValuesEquivalent(outer_.get(), other.outer_.get()) &&
-         base::ValuesEquivalent(inner_.get(), other.inner_.get());
+bool ComposePaintFilter::EqualsForTesting(
+    const ComposePaintFilter& other) const {
+  return AreValuesEqualForTesting(outer_, other.outer_) &&  // IN-TEST
+         AreValuesEqualForTesting(inner_, other.inner_);    // IN-TEST
 }
 
 AlphaThresholdPaintFilter::AlphaThresholdPaintFilter(const SkRegion& region,
@@ -464,12 +449,11 @@
                                                GetCropRect());
 }
 
-bool AlphaThresholdPaintFilter::operator==(
+bool AlphaThresholdPaintFilter::EqualsForTesting(
     const AlphaThresholdPaintFilter& other) const {
-  return region_ == other.region_ &&
-         PaintOp::AreEqualEvenIfNaN(inner_min_, other.inner_min_) &&
-         PaintOp::AreEqualEvenIfNaN(outer_max_, other.outer_max_) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+  return region_ == other.region_ && inner_min_ == other.inner_min_ &&
+         outer_max_ == other.outer_max_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 XfermodePaintFilter::XfermodePaintFilter(SkBlendMode blend_mode,
@@ -505,10 +489,11 @@
       Snapshot(foreground_, image_provider), GetCropRect());
 }
 
-bool XfermodePaintFilter::operator==(const XfermodePaintFilter& other) const {
+bool XfermodePaintFilter::EqualsForTesting(
+    const XfermodePaintFilter& other) const {
   return blend_mode_ == other.blend_mode_ &&
-         base::ValuesEquivalent(background_.get(), other.background_.get()) &&
-         base::ValuesEquivalent(foreground_.get(), other.foreground_.get());
+         AreValuesEqualForTesting(background_, other.background_) &&  // IN-TEST
+         AreValuesEqualForTesting(foreground_, other.foreground_);    // IN-TEST
 }
 
 ArithmeticPaintFilter::ArithmeticPaintFilter(float k1,
@@ -554,15 +539,12 @@
       Snapshot(foreground_, image_provider), GetCropRect());
 }
 
-bool ArithmeticPaintFilter::operator==(
+bool ArithmeticPaintFilter::EqualsForTesting(
     const ArithmeticPaintFilter& other) const {
-  return PaintOp::AreEqualEvenIfNaN(k1_, other.k1_) &&
-         PaintOp::AreEqualEvenIfNaN(k2_, other.k2_) &&
-         PaintOp::AreEqualEvenIfNaN(k3_, other.k3_) &&
-         PaintOp::AreEqualEvenIfNaN(k4_, other.k4_) &&
-         enforce_pm_color_ == other.enforce_pm_color_ &&
-         base::ValuesEquivalent(background_.get(), other.background_.get()) &&
-         base::ValuesEquivalent(foreground_.get(), other.foreground_.get());
+  return k1_ == other.k1_ && k2_ == other.k2_ && k3_ == other.k3_ &&
+         k4_ == other.k4_ && enforce_pm_color_ == other.enforce_pm_color_ &&
+         AreValuesEqualForTesting(background_, other.background_) &&  // IN-TEST
+         AreValuesEqualForTesting(foreground_, other.foreground_);    // IN-TEST
 }
 
 MatrixConvolutionPaintFilter::MatrixConvolutionPaintFilter(
@@ -612,17 +594,15 @@
       convolve_alpha_, Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool MatrixConvolutionPaintFilter::operator==(
+bool MatrixConvolutionPaintFilter::EqualsForTesting(
     const MatrixConvolutionPaintFilter& other) const {
   return kernel_size_ == other.kernel_size_ &&
-         base::ranges::equal(kernel_.container(), other.kernel_.container(),
-                             AreScalarsEqual) &&
-         PaintOp::AreEqualEvenIfNaN(gain_, other.gain_) &&
-         PaintOp::AreEqualEvenIfNaN(bias_, other.bias_) &&
+         base::ranges::equal(kernel_.container(), other.kernel_.container()) &&
+         gain_ == other.gain_ && bias_ == other.bias_ &&
          kernel_offset_ == other.kernel_offset_ &&
          tile_mode_ == other.tile_mode_ &&
          convolve_alpha_ == other.convolve_alpha_ &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 DisplacementMapEffectPaintFilter::DisplacementMapEffectPaintFilter(
@@ -664,13 +644,13 @@
       Snapshot(color_, image_provider), GetCropRect());
 }
 
-bool DisplacementMapEffectPaintFilter::operator==(
+bool DisplacementMapEffectPaintFilter::EqualsForTesting(
     const DisplacementMapEffectPaintFilter& other) const {
   return channel_x_ == other.channel_x_ && channel_y_ == other.channel_y_ &&
-         PaintOp::AreEqualEvenIfNaN(scale_, other.scale_) &&
-         base::ValuesEquivalent(displacement_.get(),
-                                other.displacement_.get()) &&
-         base::ValuesEquivalent(color_.get(), other.color_.get());
+         scale_ == other.scale_ &&
+         AreValuesEqualForTesting(displacement_,  // IN-TEST
+                                  other.displacement_) &&
+         AreValuesEqualForTesting(color_, other.color_);  // IN-TEST
 }
 
 ImagePaintFilter::ImagePaintFilter(PaintImage image,
@@ -719,10 +699,9 @@
                                       dst_rect_, filter_quality_);
 }
 
-bool ImagePaintFilter::operator==(const ImagePaintFilter& other) const {
-  return !!image_ == !!other.image_ &&
-         PaintOp::AreSkRectsEqual(src_rect_, other.src_rect_) &&
-         PaintOp::AreSkRectsEqual(dst_rect_, other.dst_rect_) &&
+bool ImagePaintFilter::EqualsForTesting(const ImagePaintFilter& other) const {
+  return !!image_ == !!other.image_ && src_rect_ == other.src_rect_ &&
+         dst_rect_ == other.dst_rect_ &&
          filter_quality_ == other.filter_quality_;
 }
 
@@ -827,11 +806,11 @@
                             scaling_behavior_, image_provider));
 }
 
-bool RecordPaintFilter::operator==(const RecordPaintFilter& other) const {
-  return record_.empty() == other.record_.empty() &&
+bool RecordPaintFilter::EqualsForTesting(const RecordPaintFilter& other) const {
+  return record_.EqualsForTesting(other.record_) &&  // IN-TEST
          scaling_behavior_ == other.scaling_behavior_ &&
          raster_scale_ == other.raster_scale_ &&
-         PaintOp::AreSkRectsEqual(record_bounds_, other.record_bounds_);
+         record_bounds_ == other.record_bounds_;
 }
 
 MergePaintFilter::MergePaintFilter(const sk_sp<PaintFilter>* const filters,
@@ -875,14 +854,11 @@
       &inputs_[0], inputs_->size(), GetCropRect(), image_provider));
 }
 
-bool MergePaintFilter::operator==(const MergePaintFilter& other) const {
-  if (inputs_->size() != other.inputs_->size())
-    return false;
-  for (size_t i = 0; i < inputs_->size(); ++i) {
-    if (!base::ValuesEquivalent(inputs_[i].get(), other.inputs_[i].get()))
-      return false;
-  }
-  return true;
+bool MergePaintFilter::EqualsForTesting(const MergePaintFilter& other) const {
+  return base::ranges::equal(
+      inputs_, other.inputs_, [](const auto& a, const auto& b) {
+        return AreValuesEqualForTesting(a, b);  // IN-TEST
+      });
 }
 
 MorphologyPaintFilter::MorphologyPaintFilter(MorphType morph_type,
@@ -924,11 +900,11 @@
                                            GetCropRect());
 }
 
-bool MorphologyPaintFilter::operator==(
+bool MorphologyPaintFilter::EqualsForTesting(
     const MorphologyPaintFilter& other) const {
   return morph_type_ == other.morph_type_ && radius_x_ == other.radius_x_ &&
          radius_y_ == other.radius_y_ &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 OffsetPaintFilter::OffsetPaintFilter(SkScalar dx,
@@ -958,10 +934,9 @@
       dx_, dy_, Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool OffsetPaintFilter::operator==(const OffsetPaintFilter& other) const {
-  return PaintOp::AreEqualEvenIfNaN(dx_, other.dx_) &&
-         PaintOp::AreEqualEvenIfNaN(dy_, other.dy_) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+bool OffsetPaintFilter::EqualsForTesting(const OffsetPaintFilter& other) const {
+  return dx_ == other.dx_ && dy_ == other.dy_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 TilePaintFilter::TilePaintFilter(const SkRect& src,
@@ -990,10 +965,9 @@
                                      Snapshot(input_, image_provider));
 }
 
-bool TilePaintFilter::operator==(const TilePaintFilter& other) const {
-  return PaintOp::AreSkRectsEqual(src_, other.src_) &&
-         PaintOp::AreSkRectsEqual(dst_, other.dst_) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+bool TilePaintFilter::EqualsForTesting(const TilePaintFilter& other) const {
+  return src_ == other.src_ && dst_ == other.dst_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 TurbulencePaintFilter::TurbulencePaintFilter(TurbulenceType turbulence_type,
@@ -1042,15 +1016,12 @@
                                            seed_, &tile_size_, GetCropRect());
 }
 
-bool TurbulencePaintFilter::operator==(
+bool TurbulencePaintFilter::EqualsForTesting(
     const TurbulencePaintFilter& other) const {
   return turbulence_type_ == other.turbulence_type_ &&
-         PaintOp::AreEqualEvenIfNaN(base_frequency_x_,
-                                    other.base_frequency_x_) &&
-         PaintOp::AreEqualEvenIfNaN(base_frequency_y_,
-                                    other.base_frequency_y_) &&
-         num_octaves_ == other.num_octaves_ &&
-         PaintOp::AreEqualEvenIfNaN(seed_, other.seed_) &&
+         base_frequency_x_ == other.base_frequency_x_ &&
+         base_frequency_y_ == other.base_frequency_y_ &&
+         num_octaves_ == other.num_octaves_ && seed_ == other.seed_ &&
          tile_size_ == other.tile_size_;
 }
 
@@ -1114,10 +1085,11 @@
   }
 }
 
-bool ShaderPaintFilter::operator==(const ShaderPaintFilter& other) const {
+bool ShaderPaintFilter::EqualsForTesting(const ShaderPaintFilter& other) const {
   DCHECK(shader_ && other.shader_);
   return alpha_ == other.alpha_ && filter_quality_ == other.filter_quality_ &&
-         dither_ == other.dither_ && *shader_ == *other.shader_;
+         dither_ == other.dither_ &&
+         shader_->EqualsForTesting(*other.shader_);  // IN-TEST
 }
 
 MatrixPaintFilter::MatrixPaintFilter(const SkMatrix& matrix,
@@ -1147,10 +1119,9 @@
                                        Snapshot(input_, image_provider));
 }
 
-bool MatrixPaintFilter::operator==(const MatrixPaintFilter& other) const {
-  return PaintOp::AreSkMatricesEqual(matrix_, other.matrix_) &&
-         filter_quality_ == other.filter_quality_ &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+bool MatrixPaintFilter::EqualsForTesting(const MatrixPaintFilter& other) const {
+  return matrix_ == other.matrix_ && filter_quality_ == other.filter_quality_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 LightingDistantPaintFilter::LightingDistantPaintFilter(
@@ -1204,15 +1175,13 @@
       shininess_, Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool LightingDistantPaintFilter::operator==(
+bool LightingDistantPaintFilter::EqualsForTesting(
     const LightingDistantPaintFilter& other) const {
   return lighting_type_ == other.lighting_type_ &&
-         PaintOp::AreSkPoint3sEqual(direction_, other.direction_) &&
-         light_color_ == other.light_color_ &&
-         PaintOp::AreEqualEvenIfNaN(surface_scale_, other.surface_scale_) &&
-         PaintOp::AreEqualEvenIfNaN(kconstant_, other.kconstant_) &&
-         PaintOp::AreEqualEvenIfNaN(shininess_, other.shininess_) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+         direction_ == other.direction_ && light_color_ == other.light_color_ &&
+         surface_scale_ == other.surface_scale_ &&
+         kconstant_ == other.kconstant_ && shininess_ == other.shininess_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 LightingPointPaintFilter::LightingPointPaintFilter(LightingType lighting_type,
@@ -1265,15 +1234,13 @@
       shininess_, Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool LightingPointPaintFilter::operator==(
+bool LightingPointPaintFilter::EqualsForTesting(
     const LightingPointPaintFilter& other) const {
   return lighting_type_ == other.lighting_type_ &&
-         PaintOp::AreSkPoint3sEqual(location_, other.location_) &&
-         light_color_ == other.light_color_ &&
-         PaintOp::AreEqualEvenIfNaN(surface_scale_, other.surface_scale_) &&
-         PaintOp::AreEqualEvenIfNaN(kconstant_, other.kconstant_) &&
-         PaintOp::AreEqualEvenIfNaN(shininess_, other.shininess_) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+         location_ == other.location_ && light_color_ == other.light_color_ &&
+         surface_scale_ == other.surface_scale_ &&
+         kconstant_ == other.kconstant_ && shininess_ == other.shininess_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 LightingSpotPaintFilter::LightingSpotPaintFilter(LightingType lighting_type,
@@ -1336,19 +1303,16 @@
       Snapshot(input_, image_provider), GetCropRect());
 }
 
-bool LightingSpotPaintFilter::operator==(
+bool LightingSpotPaintFilter::EqualsForTesting(
     const LightingSpotPaintFilter& other) const {
   return lighting_type_ == other.lighting_type_ &&
-         PaintOp::AreSkPoint3sEqual(location_, other.location_) &&
-         PaintOp::AreSkPoint3sEqual(target_, other.target_) &&
-         PaintOp::AreEqualEvenIfNaN(specular_exponent_,
-                                    other.specular_exponent_) &&
-         PaintOp::AreEqualEvenIfNaN(cutoff_angle_, other.cutoff_angle_) &&
+         location_ == other.location_ && target_ == other.target_ &&
+         specular_exponent_ == other.specular_exponent_ &&
+         cutoff_angle_ == other.cutoff_angle_ &&
          light_color_ == other.light_color_ &&
-         PaintOp::AreEqualEvenIfNaN(surface_scale_, other.surface_scale_) &&
-         PaintOp::AreEqualEvenIfNaN(kconstant_, other.kconstant_) &&
-         PaintOp::AreEqualEvenIfNaN(shininess_, other.shininess_) &&
-         base::ValuesEquivalent(input_.get(), other.input_.get());
+         surface_scale_ == other.surface_scale_ &&
+         kconstant_ == other.kconstant_ && shininess_ == other.shininess_ &&
+         AreValuesEqualForTesting(input_, other.input_);  // IN-TEST
 }
 
 }  // namespace cc
diff --git a/cc/paint/paint_filter.h b/cc/paint/paint_filter.h
index e194cbcb..1aa6a76 100644
--- a/cc/paint/paint_filter.h
+++ b/cc/paint/paint_filter.h
@@ -115,10 +115,7 @@
   // that are easy to compare. As an example, it doesn't compare equality of
   // images, rather only its existence. This is meant to be used only by tests
   // and fuzzers.
-  // TODO(vmpstr): Rename this and places that its used to something like
-  // EqualsForTesting.
-  bool operator==(const PaintFilter& other) const;
-  bool operator!=(const PaintFilter& other) const { return !(*this == other); }
+  bool EqualsForTesting(const PaintFilter& other) const;
 
  protected:
   PaintFilter(Type type,
@@ -166,7 +163,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const ColorFilterPaintFilter& other) const;
+  bool EqualsForTesting(const ColorFilterPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -194,7 +191,7 @@
   SkTileMode tile_mode() const { return tile_mode_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const BlurPaintFilter& other) const;
+  bool EqualsForTesting(const BlurPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -234,7 +231,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const DropShadowPaintFilter& other) const;
+  bool EqualsForTesting(const DropShadowPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -264,7 +261,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const MagnifierPaintFilter& other) const;
+  bool EqualsForTesting(const MagnifierPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -286,7 +283,7 @@
   const sk_sp<PaintFilter>& inner() const { return inner_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const ComposePaintFilter& other) const;
+  bool EqualsForTesting(const ComposePaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -313,7 +310,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const AlphaThresholdPaintFilter& other) const;
+  bool EqualsForTesting(const AlphaThresholdPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -340,7 +337,7 @@
   const sk_sp<PaintFilter>& foreground() const { return foreground_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const XfermodePaintFilter& other) const;
+  bool EqualsForTesting(const XfermodePaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -374,7 +371,7 @@
   const sk_sp<PaintFilter>& foreground() const { return foreground_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const ArithmeticPaintFilter& other) const;
+  bool EqualsForTesting(const ArithmeticPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -414,7 +411,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const MatrixConvolutionPaintFilter& other) const;
+  bool EqualsForTesting(const MatrixConvolutionPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -450,7 +447,7 @@
   const sk_sp<PaintFilter>& color() const { return color_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const DisplacementMapEffectPaintFilter& other) const;
+  bool EqualsForTesting(const DisplacementMapEffectPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -479,7 +476,7 @@
   PaintFlags::FilterQuality filter_quality() const { return filter_quality_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const ImagePaintFilter& other) const;
+  bool EqualsForTesting(const ImagePaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -518,7 +515,7 @@
   ScalingBehavior scaling_behavior() const { return scaling_behavior_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const RecordPaintFilter& other) const;
+  bool EqualsForTesting(const RecordPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -552,7 +549,7 @@
   }
 
   size_t SerializedSize() const override;
-  bool operator==(const MergePaintFilter& other) const;
+  bool EqualsForTesting(const MergePaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -583,7 +580,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const MorphologyPaintFilter& other) const;
+  bool EqualsForTesting(const MorphologyPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -610,7 +607,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const OffsetPaintFilter& other) const;
+  bool EqualsForTesting(const OffsetPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -635,7 +632,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const TilePaintFilter& other) const;
+  bool EqualsForTesting(const TilePaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -672,7 +669,7 @@
   SkISize tile_size() const { return tile_size_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const TurbulencePaintFilter& other) const;
+  bool EqualsForTesting(const TurbulencePaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -707,7 +704,7 @@
   SkImageFilters::Dither dither() const { return dither_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const ShaderPaintFilter& other) const;
+  bool EqualsForTesting(const ShaderPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -733,7 +730,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const MatrixPaintFilter& other) const;
+  bool EqualsForTesting(const MatrixPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -770,7 +767,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const LightingDistantPaintFilter& other) const;
+  bool EqualsForTesting(const LightingDistantPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -811,7 +808,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const LightingPointPaintFilter& other) const;
+  bool EqualsForTesting(const LightingPointPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
@@ -858,7 +855,7 @@
   const sk_sp<PaintFilter>& input() const { return input_; }
 
   size_t SerializedSize() const override;
-  bool operator==(const LightingSpotPaintFilter& other) const;
+  bool EqualsForTesting(const LightingSpotPaintFilter& other) const;
 
  protected:
   sk_sp<PaintFilter> SnapshotWithImagesInternal(
diff --git a/cc/paint/paint_filter_unittest.cc b/cc/paint/paint_filter_unittest.cc
index 35de027..cfd23b0c 100644
--- a/cc/paint/paint_filter_unittest.cc
+++ b/cc/paint/paint_filter_unittest.cc
@@ -178,7 +178,7 @@
     EXPECT_GT(image_provider.image_count_, 0)
         << PaintFilter::TypeToString(GetParamType());
   }
-  EXPECT_EQ(*filter, *snapshot_filter)
+  EXPECT_TRUE(filter->EqualsForTesting(*snapshot_filter))
       << PaintFilter::TypeToString(GetParamType());
 }
 
diff --git a/cc/paint/paint_flags.cc b/cc/paint/paint_flags.cc
index 7949d4e..20e7f9a 100644
--- a/cc/paint/paint_flags.cc
+++ b/cc/paint/paint_flags.cc
@@ -2,10 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <utility>
-
 #include "cc/paint/paint_flags.h"
 
+#include <utility>
+
+#include "base/memory/values_equivalent.h"
 #include "base/notreached.h"
 #include "cc/paint/paint_filter.h"
 #include "cc/paint/paint_op_buffer.h"
@@ -15,10 +16,25 @@
 
 namespace {
 
-static bool affects_alpha(const SkColorFilter* cf) {
+bool affects_alpha(const SkColorFilter* cf) {
   return cf && !cf->isAlphaUnchanged();
 }
 
+template <typename T>
+bool AreValuesEqualForTesting(const sk_sp<T>& a, const sk_sp<T>& b) {
+  return base::ValuesEquivalent(a, b, [](const T& x, const T& y) {
+    return x.EqualsForTesting(y);  // IN-TEST
+  });
+}
+
+bool AreSkFlattenablesEqualForTesting(const sk_sp<SkFlattenable> a,  // IN-TEST
+                                      const sk_sp<SkFlattenable> b) {
+  return base::ValuesEquivalent(
+      a, b, [](const SkFlattenable& x, const SkFlattenable& y) {
+        return x.serialize()->equals(y.serialize().get());
+      });
+}
+
 }  // namespace
 
 namespace cc {
@@ -156,54 +172,29 @@
   return PaintOp::IsValidPaintFlagsSkBlendMode(getBlendMode());
 }
 
-bool PaintFlags::operator==(const PaintFlags& other) const {
+bool PaintFlags::EqualsForTesting(const PaintFlags& other) const {
   // Can't just ToSkPaint and operator== here as SkPaint does pointer
   // comparisons on all the ref'd skia objects on the SkPaint, which
   // is not true after serialization.
-  if (getColor() != other.getColor())
-    return false;
-  if (!PaintOp::AreEqualEvenIfNaN(getStrokeWidth(), other.getStrokeWidth()))
-    return false;
-  if (!PaintOp::AreEqualEvenIfNaN(getStrokeMiter(), other.getStrokeMiter()))
-    return false;
-  if (getBlendMode() != other.getBlendMode())
-    return false;
-  if (getStrokeCap() != other.getStrokeCap())
-    return false;
-  if (getStrokeJoin() != other.getStrokeJoin())
-    return false;
-  if (getStyle() != other.getStyle())
-    return false;
-  if (getFilterQuality() != other.getFilterQuality())
-    return false;
-
-  if (!PaintOp::AreSkFlattenablesEqual(getPathEffect().get(),
-                                       other.getPathEffect().get())) {
-    return false;
-  }
-  if (!PaintOp::AreSkFlattenablesEqual(getMaskFilter().get(),
-                                       other.getMaskFilter().get())) {
-    return false;
-  }
-  if (!PaintOp::AreSkFlattenablesEqual(getColorFilter().get(),
-                                       other.getColorFilter().get())) {
-    return false;
-  }
-  if (!PaintOp::AreSkFlattenablesEqual(getLooper().get(),
-                                       other.getLooper().get())) {
-    return false;
-  }
-
-  if (!getImageFilter() != !other.getImageFilter())
-    return false;
-  if (getImageFilter() && *getImageFilter() != *other.getImageFilter())
-    return false;
-
-  if (!getShader() != !other.getShader())
-    return false;
-  if (getShader() && *getShader() != *other.getShader())
-    return false;
-  return true;
+  return getColor() == other.getColor() &&
+         getStrokeWidth() == getStrokeWidth() &&
+         getStrokeMiter() == other.getStrokeMiter() &&
+         getBlendMode() == other.getBlendMode() &&
+         getStrokeCap() == other.getStrokeCap() &&
+         getStrokeJoin() == other.getStrokeJoin() &&
+         getStyle() == other.getStyle() &&
+         getFilterQuality() == other.getFilterQuality() &&
+         AreSkFlattenablesEqualForTesting(path_effect_,  // IN-TEST
+                                          other.path_effect_) &&
+         AreSkFlattenablesEqualForTesting(mask_filter_,  // IN-TEST
+                                          other.mask_filter_) &&
+         AreSkFlattenablesEqualForTesting(color_filter_,  // IN-TEST
+                                          other.color_filter_) &&
+         AreSkFlattenablesEqualForTesting(draw_looper_,  // IN-TEST
+                                          other.draw_looper_) &&
+         AreValuesEqualForTesting(image_filter_,  // IN-TEST
+                                  other.image_filter_) &&
+         AreValuesEqualForTesting(shader_, other.shader_);  // IN-TEST
 }
 
 bool PaintFlags::HasDiscardableImages() const {
diff --git a/cc/paint/paint_flags.h b/cc/paint/paint_flags.h
index fe7b927..23e9db0 100644
--- a/cc/paint/paint_flags.h
+++ b/cc/paint/paint_flags.h
@@ -187,8 +187,7 @@
       FilterQuality filter_quality);
 
   bool IsValid() const;
-  bool operator==(const PaintFlags& other) const;
-  bool operator!=(const PaintFlags& other) const { return !(*this == other); }
+  bool EqualsForTesting(const PaintFlags& other) const;
 
   bool HasDiscardableImages() const;
 
diff --git a/cc/paint/paint_image.cc b/cc/paint/paint_image.cc
index 8da77457..fdba1d7 100644
--- a/cc/paint/paint_image.cc
+++ b/cc/paint/paint_image.cc
@@ -49,32 +49,21 @@
 PaintImage& PaintImage::operator=(const PaintImage& other) = default;
 PaintImage& PaintImage::operator=(PaintImage&& other) = default;
 
-bool PaintImage::operator==(const PaintImage& other) const {
-  if (sk_image_ != other.sk_image_)
-    return false;
-  if (paint_record_ != other.paint_record_)
-    return false;
-  if (paint_record_rect_ != other.paint_record_rect_)
-    return false;
-  if (content_id_ != other.content_id_)
-    return false;
-  if (paint_image_generator_ != other.paint_image_generator_)
-    return false;
-  if (id_ != other.id_)
-    return false;
-  if (animation_type_ != other.animation_type_)
-    return false;
-  if (completion_state_ != other.completion_state_)
-    return false;
-  if (is_multipart_ != other.is_multipart_)
-    return false;
-  if (texture_backing_ != other.texture_backing_)
-    return false;
-  if (paint_worklet_input_ != other.paint_worklet_input_)
-    return false;
+bool PaintImage::IsSameForTesting(const PaintImage& other) const {
+  return sk_image_ == other.sk_image_ &&
+         !!paint_record_ == !!other.paint_record_ &&
+         (!paint_record_ ||
+          &paint_record_->GetFirstOp() == &other.paint_record_->GetFirstOp()) &&
+         paint_record_rect_ == other.paint_record_rect_ &&
+         content_id_ == other.content_id_ &&
+         paint_image_generator_ == other.paint_image_generator_ &&
+         id_ == other.id_ && animation_type_ == other.animation_type_ &&
+         completion_state_ == other.completion_state_ &&
+         is_multipart_ == other.is_multipart_ &&
+         texture_backing_ == other.texture_backing_ &&
+         paint_worklet_input_ == other.paint_worklet_input_;
   // Do not check may_be_lcp_candidate_ as it should not affect any rendering
   // operation, only metrics collection.
-  return true;
 }
 
 // static
diff --git a/cc/paint/paint_image.h b/cc/paint/paint_image.h
index 09a14ee..d338a40 100644
--- a/cc/paint/paint_image.h
+++ b/cc/paint/paint_image.h
@@ -198,8 +198,10 @@
   PaintImage& operator=(const PaintImage& other);
   PaintImage& operator=(PaintImage&& other);
 
-  bool operator==(const PaintImage& other) const;
-  bool operator!=(const PaintImage& other) const { return !(*this == other); }
+  // For testing only. Checks if `this` and `other` are the same image, i.e.
+  // share the same underlying image. `a.IsSameForTesting(b)` will be true after
+  // `PaintImage b = a;`.
+  bool IsSameForTesting(const PaintImage& other) const;
 
   // Returns the smallest size that is at least as big as the requested_size
   // such that we can decode to exactly that scale. If the requested size is
diff --git a/cc/paint/paint_op.cc b/cc/paint/paint_op.cc
index f1348698..97b1ef8 100644
--- a/cc/paint/paint_op.cc
+++ b/cc/paint/paint_op.cc
@@ -106,20 +106,6 @@
   canvas->drawImageRect(image, src, dst, options, paint, constraint);
 }
 
-bool GrSlugAreEqual(sk_sp<GrSlug> left, sk_sp<GrSlug> right) {
-  if (!left && !right) {
-    return true;
-  }
-  if (left && right) {
-    auto left_data = left->serialize();
-    auto right_data = right->serialize();
-    return left_data->equals(right_data.get());
-  }
-  return false;
-}
-
-}  // namespace
-
 #define TYPES(M)      \
   M(AnnotateOp)       \
   M(ClipPathOp)       \
@@ -278,8 +264,12 @@
     TYPES(M)};
 #undef M
 
-using EqualsFunction = bool (*)(const PaintOp* left, const PaintOp* right);
-#define M(T) &T::AreEqual,
+using EqualsFunction = bool (*)(const PaintOp& left, const PaintOp& right);
+#define M(T)                                             \
+  [](const PaintOp& left, const PaintOp& right) {        \
+    return static_cast<const T&>(left).EqualsForTesting( \
+        static_cast<const T&>(right));                   \
+  },
 static const EqualsFunction g_equals_operator[kNumOpTypes] = {TYPES(M)};
 #undef M
 
@@ -324,6 +314,8 @@
 
 #undef TYPES
 
+}  // namespace
+
 const SkRect PaintOp::kUnsetRect = {SK_ScalarInfinity, 0, 0, 0};
 const size_t PaintOp::kMaxSkip;
 
@@ -1460,478 +1452,154 @@
   canvas->translate(op->dx, op->dy);
 }
 
-// static
-bool PaintOp::AreSkPointsEqual(const SkPoint& left, const SkPoint& right) {
-  if (!AreEqualEvenIfNaN(left.fX, right.fX))
-    return false;
-  if (!AreEqualEvenIfNaN(left.fY, right.fY))
-    return false;
-  return true;
+bool AnnotateOp::EqualsForTesting(const AnnotateOp& other) const {
+  return annotation_type == other.annotation_type && rect == other.rect &&
+         !data == !other.data && (!data || data->equals(other.data.get()));
 }
 
-// static
-bool PaintOp::AreSkPoint3sEqual(const SkPoint3& left, const SkPoint3& right) {
-  if (!AreEqualEvenIfNaN(left.fX, right.fX))
-    return false;
-  if (!AreEqualEvenIfNaN(left.fY, right.fY))
-    return false;
-  if (!AreEqualEvenIfNaN(left.fZ, right.fZ))
-    return false;
-  return true;
+bool ClipPathOp::EqualsForTesting(const ClipPathOp& other) const {
+  return path == other.path && op == other.op && antialias == other.antialias;
 }
 
-// static
-bool PaintOp::AreSkRectsEqual(const SkRect& left, const SkRect& right) {
-  if (!AreEqualEvenIfNaN(left.fLeft, right.fLeft))
-    return false;
-  if (!AreEqualEvenIfNaN(left.fTop, right.fTop))
-    return false;
-  if (!AreEqualEvenIfNaN(left.fRight, right.fRight))
-    return false;
-  if (!AreEqualEvenIfNaN(left.fBottom, right.fBottom))
-    return false;
-  return true;
+bool ClipRectOp::EqualsForTesting(const ClipRectOp& other) const {
+  return rect == other.rect && op == other.op && antialias == other.antialias;
 }
 
-// static
-bool PaintOp::AreSkRRectsEqual(const SkRRect& left, const SkRRect& right) {
-  char left_buffer[SkRRect::kSizeInMemory];
-  left.writeToMemory(left_buffer);
-  char right_buffer[SkRRect::kSizeInMemory];
-  right.writeToMemory(right_buffer);
-  return !memcmp(left_buffer, right_buffer, SkRRect::kSizeInMemory);
+bool ClipRRectOp::EqualsForTesting(const ClipRRectOp& other) const {
+  return rrect == other.rrect && op == other.op && antialias == other.antialias;
 }
 
-// static
-bool PaintOp::AreSkMatricesEqual(const SkMatrix& left, const SkMatrix& right) {
-  for (int i = 0; i < 9; ++i) {
-    if (!AreEqualEvenIfNaN(left.get(i), right.get(i)))
-      return false;
-  }
-
-  // If a serialized matrix says it is identity, then the original must have
-  // those values, as the serialization process clobbers the matrix values.
-  if (left.isIdentity()) {
-    if (SkMatrix::I() != left)
-      return false;
-    if (SkMatrix::I() != right)
-      return false;
-  }
-
-  if (left.getType() != right.getType())
-    return false;
-
-  return true;
+bool ConcatOp::EqualsForTesting(const ConcatOp& other) const {
+  return matrix == other.matrix;
 }
 
-// static
-bool PaintOp::AreSkM44sEqual(const SkM44& left, const SkM44& right) {
-  for (int r = 0; r < 4; ++r) {
-    for (int c = 0; c < 4; ++c) {
-      if (!AreEqualEvenIfNaN(left.rc(r, c), right.rc(r, c)))
-        return false;
-    }
-  }
-
-  return true;
+bool CustomDataOp::EqualsForTesting(const CustomDataOp& other) const {
+  return id == other.id;
 }
 
-// static
-bool PaintOp::AreSkFlattenablesEqual(SkFlattenable* left,
-                                     SkFlattenable* right) {
-  if (!right || !left)
-    return !right && !left;
-
-  sk_sp<SkData> left_data = left->serialize();
-  sk_sp<SkData> right_data = right->serialize();
-  if (left_data->size() != right_data->size())
-    return false;
-  if (!left_data->equals(right_data.get()))
-    return false;
-  return true;
+bool DrawColorOp::EqualsForTesting(const DrawColorOp& other) const {
+  return color == other.color;
 }
 
-bool AnnotateOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const AnnotateOp*>(base_left);
-  auto* right = static_cast<const AnnotateOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->annotation_type != right->annotation_type)
-    return false;
-  if (!AreSkRectsEqual(left->rect, right->rect))
-    return false;
-  if (!left->data != !right->data)
-    return false;
-  if (left->data) {
-    if (left->data->size() != right->data->size())
-      return false;
-    if (0 !=
-        memcmp(left->data->data(), right->data->data(), right->data->size()))
-      return false;
-  }
-  return true;
+bool DrawDRRectOp::EqualsForTesting(const DrawDRRectOp& other) const {
+  return flags.EqualsForTesting(other.flags) &&  // IN-TEST
+         outer == other.outer && inner == other.inner;
 }
 
-bool ClipPathOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const ClipPathOp*>(base_left);
-  auto* right = static_cast<const ClipPathOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->path != right->path)
-    return false;
-  if (left->op != right->op)
-    return false;
-  if (left->antialias != right->antialias)
-    return false;
-  return true;
-}
-
-bool ClipRectOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const ClipRectOp*>(base_left);
-  auto* right = static_cast<const ClipRectOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (!AreSkRectsEqual(left->rect, right->rect))
-    return false;
-  if (left->op != right->op)
-    return false;
-  if (left->antialias != right->antialias)
-    return false;
-  return true;
-}
-
-bool ClipRRectOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const ClipRRectOp*>(base_left);
-  auto* right = static_cast<const ClipRRectOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (!AreSkRRectsEqual(left->rrect, right->rrect))
-    return false;
-  if (left->op != right->op)
-    return false;
-  if (left->antialias != right->antialias)
-    return false;
-  return true;
-}
-
-bool ConcatOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const ConcatOp*>(base_left);
-  auto* right = static_cast<const ConcatOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  return AreSkM44sEqual(left->matrix, right->matrix);
-}
-
-bool CustomDataOp::AreEqual(const PaintOp* base_left,
-                            const PaintOp* base_right) {
-  auto* left = static_cast<const CustomDataOp*>(base_left);
-  auto* right = static_cast<const CustomDataOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  return left->id == right->id;
-}
-
-bool DrawColorOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const DrawColorOp*>(base_left);
-  auto* right = static_cast<const DrawColorOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  return left->color == right->color;
-}
-
-bool DrawDRRectOp::AreEqual(const PaintOp* base_left,
-                            const PaintOp* base_right) {
-  auto* left = static_cast<const DrawDRRectOp*>(base_left);
-  auto* right = static_cast<const DrawDRRectOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (!AreSkRRectsEqual(left->outer, right->outer))
-    return false;
-  if (!AreSkRRectsEqual(left->inner, right->inner))
-    return false;
-  return true;
-}
-
-bool DrawImageOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const DrawImageOp*>(base_left);
-  auto* right = static_cast<const DrawImageOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  // TODO(enne): Test PaintImage equality once implemented
-  if (!AreEqualEvenIfNaN(left->left, right->left))
-    return false;
-  if (!AreEqualEvenIfNaN(left->top, right->top))
-    return false;
-
+bool DrawImageOp::EqualsForTesting(const DrawImageOp& other) const {
+  // For now image, sampling and constraint are not compared.
   // scale_adjustment intentionally omitted because it is added during
   // serialization based on raster scale.
-  return true;
+  return flags.EqualsForTesting(other.flags) &&  // IN-TEST
+         top == other.top && left == other.left;
 }
 
-bool DrawImageRectOp::AreEqual(const PaintOp* base_left,
-                               const PaintOp* base_right) {
-  auto* left = static_cast<const DrawImageRectOp*>(base_left);
-  auto* right = static_cast<const DrawImageRectOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  // TODO(enne): Test PaintImage equality once implemented
-  if (!AreSkRectsEqual(left->src, right->src))
-    return false;
-  if (!AreSkRectsEqual(left->dst, right->dst))
-    return false;
-
+bool DrawImageRectOp::EqualsForTesting(const DrawImageRectOp& other) const {
+  // For now image, sampling and constraint are not compared.
   // scale_adjustment intentionally omitted because it is added during
   // serialization based on raster scale.
-  return true;
+  return flags.EqualsForTesting(other.flags) &&  // IN-TEST
+         src == other.src && dst == other.dst;
 }
 
-bool DrawIRectOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const DrawIRectOp*>(base_left);
-  auto* right = static_cast<const DrawIRectOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (left->rect != right->rect)
-    return false;
-  return true;
+bool DrawIRectOp::EqualsForTesting(const DrawIRectOp& other) const {
+  return flags.EqualsForTesting(other.flags) && rect == other.rect;  // IN-TEST
 }
 
-bool DrawLineOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const DrawLineOp*>(base_left);
-  auto* right = static_cast<const DrawLineOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (!AreEqualEvenIfNaN(left->x0, right->x0))
-    return false;
-  if (!AreEqualEvenIfNaN(left->y0, right->y0))
-    return false;
-  if (!AreEqualEvenIfNaN(left->x1, right->x1))
-    return false;
-  if (!AreEqualEvenIfNaN(left->y1, right->y1))
-    return false;
-  return true;
+bool DrawLineOp::EqualsForTesting(const DrawLineOp& other) const {
+  return flags.EqualsForTesting(other.flags) &&  // IN-TEST
+         x0 == other.x0 && y0 == other.y0 && x1 == other.x1 && y1 == other.y1;
 }
 
-bool DrawOvalOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const DrawOvalOp*>(base_left);
-  auto* right = static_cast<const DrawOvalOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (!AreSkRectsEqual(left->oval, right->oval))
-    return false;
-  return true;
+bool DrawOvalOp::EqualsForTesting(const DrawOvalOp& other) const {
+  return flags.EqualsForTesting(other.flags) && oval == other.oval;  // IN-TEST
 }
 
-bool DrawPathOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const DrawPathOp*>(base_left);
-  auto* right = static_cast<const DrawPathOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (left->path != right->path)
-    return false;
-  return true;
+bool DrawPathOp::EqualsForTesting(const DrawPathOp& other) const {
+  return flags.EqualsForTesting(other.flags) && path == other.path;  // IN-TEST
 }
 
-bool DrawRecordOp::AreEqual(const PaintOp* base_left,
-                            const PaintOp* base_right) {
-  auto* left = static_cast<const DrawRecordOp*>(base_left);
-  auto* right = static_cast<const DrawRecordOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  return left->record == right->record;
+bool DrawRecordOp::EqualsForTesting(const DrawRecordOp& other) const {
+  return record.EqualsForTesting(other.record);  // IN-TEST
 }
 
-bool DrawRectOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const DrawRectOp*>(base_left);
-  auto* right = static_cast<const DrawRectOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (!AreSkRectsEqual(left->rect, right->rect))
-    return false;
-  return true;
+bool DrawRectOp::EqualsForTesting(const DrawRectOp& other) const {
+  return flags.EqualsForTesting(other.flags) && rect == other.rect;  // IN-TEST
 }
 
-bool DrawRRectOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const DrawRRectOp*>(base_left);
-  auto* right = static_cast<const DrawRRectOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (!AreSkRRectsEqual(left->rrect, right->rrect))
-    return false;
-  return true;
+bool DrawRRectOp::EqualsForTesting(const DrawRRectOp& other) const {
+  return flags.EqualsForTesting(other.flags) &&  // IN-TEST
+         rrect == other.rrect;
 }
 
-bool DrawSkottieOp::AreEqual(const PaintOp* base_left,
-                             const PaintOp* base_right) {
-  auto* left = static_cast<const DrawSkottieOp*>(base_left);
-  auto* right = static_cast<const DrawSkottieOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
+bool DrawSkottieOp::EqualsForTesting(const DrawSkottieOp& other) const {
   // TODO(malaykeshav): Verify the skottie objects of each PaintOb are equal
-  // based on the serialized bytes.
-  if (left->t != right->t)
+  // bsed on the serialized bytes.
+  if (t != other.t || dst != other.dst || color_map != other.color_map ||
+      text_map != other.text_map) {
     return false;
-  if (!AreSkRectsEqual(left->dst, right->dst))
-    return false;
-  if (left->images.size() != right->images.size())
-    return false;
-
-  auto left_iter = left->images.begin();
-  auto right_iter = right->images.begin();
-  for (; left_iter != left->images.end(); ++left_iter, ++right_iter) {
-    if (left_iter->first != right_iter->first ||
-        // PaintImage's comparison operator compares the underlying SkImage's
-        // pointer address. This does not necessarily hold in cases where the
-        // image's content may be the same, but it got realloacted to a
-        // different spot somewhere in memory via the transfer cache. The next
-        // best thing is to just compare the dimensions of the PaintImage.
-        left_iter->second.image.width() != right_iter->second.image.width() ||
-        left_iter->second.image.height() != right_iter->second.image.height() ||
-        left_iter->second.quality != right_iter->second.quality) {
-      return false;
-    }
   }
+  return base::ranges::equal(
+      images, other.images, [](const auto& a, const auto& b) {
+        return a.first == b.first &&
+               // PaintImage::IsSameForTesting() returns false in cases where
+               // the
+               // image's content may be the same, but it got realloacted to a
+               // different spot somewhere in memory via the transfer cache. The
+               // next best thing is to just compare the dimensions of the
+               // PaintImage.
+               a.second.image.width() == b.second.image.width() &&
+               a.second.image.height() == b.second.image.height() &&
+               a.second.quality == b.second.quality;
+      });
+}
 
-  if (left->color_map != right->color_map)
-    return false;
+bool DrawTextBlobOp::EqualsForTesting(const DrawTextBlobOp& other) const {
+  return flags.EqualsForTesting(other.flags) &&  // IN-TEST
+         x == other.x && y == other.y && node_id == other.node_id &&
+         !slug == !other.slug &&
+         (!slug || slug->serialize()->equals(other.slug->serialize().get()));
+}
 
-  if (left->text_map != right->text_map)
-    return false;
-
+bool NoopOp::EqualsForTesting(const NoopOp& other) const {
   return true;
 }
 
-bool DrawTextBlobOp::AreEqual(const PaintOp* base_left,
-                              const PaintOp* base_right) {
-  auto* left = static_cast<const DrawTextBlobOp*>(base_left);
-  auto* right = static_cast<const DrawTextBlobOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (!AreEqualEvenIfNaN(left->x, right->x))
-    return false;
-  if (!AreEqualEvenIfNaN(left->y, right->y))
-    return false;
-  if (left->node_id != right->node_id)
-    return false;
-  return GrSlugAreEqual(left->slug, right->slug);
-}
-
-bool NoopOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
+bool RestoreOp::EqualsForTesting(const RestoreOp& other) const {
   return true;
 }
 
-bool RestoreOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
+bool RotateOp::EqualsForTesting(const RotateOp& other) const {
+  return degrees == other.degrees;
+}
+
+bool SaveOp::EqualsForTesting(const SaveOp& other) const {
   return true;
 }
 
-bool RotateOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const RotateOp*>(base_left);
-  auto* right = static_cast<const RotateOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (!AreEqualEvenIfNaN(left->degrees, right->degrees))
-    return false;
-  return true;
+bool SaveLayerOp::EqualsForTesting(const SaveLayerOp& other) const {
+  return flags.EqualsForTesting(other.flags) &&  // IN-TEST
+         bounds == other.bounds;
 }
 
-bool SaveOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  return true;
+bool SaveLayerAlphaOp::EqualsForTesting(const SaveLayerAlphaOp& other) const {
+  return bounds == other.bounds && alpha == other.alpha;
 }
 
-bool SaveLayerOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const SaveLayerOp*>(base_left);
-  auto* right = static_cast<const SaveLayerOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (left->flags != right->flags)
-    return false;
-  if (!AreSkRectsEqual(left->bounds, right->bounds))
-    return false;
-  return true;
+bool ScaleOp::EqualsForTesting(const ScaleOp& other) const {
+  return sx == other.sx && sy == other.sy;
 }
 
-bool SaveLayerAlphaOp::AreEqual(const PaintOp* base_left,
-                                const PaintOp* base_right) {
-  auto* left = static_cast<const SaveLayerAlphaOp*>(base_left);
-  auto* right = static_cast<const SaveLayerAlphaOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (!AreSkRectsEqual(left->bounds, right->bounds))
-    return false;
-  if (left->alpha != right->alpha)
-    return false;
-  return true;
+bool SetMatrixOp::EqualsForTesting(const SetMatrixOp& other) const {
+  return matrix == other.matrix;
 }
 
-bool ScaleOp::AreEqual(const PaintOp* base_left, const PaintOp* base_right) {
-  auto* left = static_cast<const ScaleOp*>(base_left);
-  auto* right = static_cast<const ScaleOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (!AreEqualEvenIfNaN(left->sx, right->sx))
-    return false;
-  if (!AreEqualEvenIfNaN(left->sy, right->sy))
-    return false;
-  return true;
+bool SetNodeIdOp::EqualsForTesting(const SetNodeIdOp& other) const {
+  return node_id == other.node_id;
 }
 
-bool SetMatrixOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const SetMatrixOp*>(base_left);
-  auto* right = static_cast<const SetMatrixOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (!AreSkM44sEqual(left->matrix, right->matrix))
-    return false;
-  return true;
-}
-
-bool SetNodeIdOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const SetNodeIdOp*>(base_left);
-  auto* right = static_cast<const SetNodeIdOp*>(base_right);
-
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  return left->node_id == right->node_id;
-}
-
-bool TranslateOp::AreEqual(const PaintOp* base_left,
-                           const PaintOp* base_right) {
-  auto* left = static_cast<const TranslateOp*>(base_left);
-  auto* right = static_cast<const TranslateOp*>(base_right);
-  DCHECK(left->IsValid());
-  DCHECK(right->IsValid());
-  if (!AreEqualEvenIfNaN(left->dx, right->dx))
-    return false;
-  if (!AreEqualEvenIfNaN(left->dy, right->dy))
-    return false;
-  return true;
+bool TranslateOp::EqualsForTesting(const TranslateOp& other) const {
+  return dx == other.dx && dy == other.dy;
 }
 
 bool PaintOp::IsDrawOp() const {
@@ -1942,10 +1610,10 @@
   return g_has_paint_flags[type];
 }
 
-bool PaintOp::operator==(const PaintOp& other) const {
+bool PaintOp::EqualsForTesting(const PaintOp& other) const {
   if (GetType() != other.GetType())
     return false;
-  return g_equals_operator[type](this, &other);
+  return g_equals_operator[type](*this, other);
 }
 
 // static
diff --git a/cc/paint/paint_op.h b/cc/paint/paint_op.h
index 19958d3..2d5ed88 100644
--- a/cc/paint/paint_op.h
+++ b/cc/paint/paint_op.h
@@ -32,8 +32,6 @@
 #include "cc/paint/skottie_resource_metadata.h"
 #include "cc/paint/skottie_text_property_value.h"
 #include "cc/paint/skottie_wrapper.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/abseil-cpp/absl/types/variant.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkPath.h"
 #include "third_party/skia/include/core/SkRRect.h"
@@ -122,8 +120,7 @@
   bool IsDrawOp() const;
   bool IsPaintOpWithFlags() const;
 
-  bool operator==(const PaintOp& other) const;
-  bool operator!=(const PaintOp& other) const { return !(*this == other); }
+  bool EqualsForTesting(const PaintOp& other) const;
 
   // Indicates how PaintImages are serialized.
   enum class SerializedImageType : uint8_t {
@@ -242,22 +239,6 @@
     return IsUnsetRect(rect) || rect.isFinite();
   }
 
-  // PaintOp supports having nans, but some tests want to make sure
-  // that operator== is true on two objects.  These helpers compare
-  // various types in a way where nan == nan is true.
-  static bool AreEqualEvenIfNaN(float left, float right) {
-    if (std::isnan(left) && std::isnan(right))
-      return true;
-    return left == right;
-  }
-  static bool AreSkPointsEqual(const SkPoint& left, const SkPoint& right);
-  static bool AreSkPoint3sEqual(const SkPoint3& left, const SkPoint3& right);
-  static bool AreSkRectsEqual(const SkRect& left, const SkRect& right);
-  static bool AreSkRRectsEqual(const SkRRect& left, const SkRRect& right);
-  static bool AreSkMatricesEqual(const SkMatrix& left, const SkMatrix& right);
-  static bool AreSkM44sEqual(const SkM44& left, const SkM44& right);
-  static bool AreSkFlattenablesEqual(SkFlattenable* left, SkFlattenable* right);
-
   static constexpr bool kIsDrawOp = false;
   static constexpr bool kHasPaintFlags = false;
   // Since skip and type fit in a uint32_t, this is the max size of skip.
@@ -313,7 +294,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return rect.isFinite(); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const AnnotateOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   PaintCanvas::AnnotationType annotation_type;
@@ -342,7 +323,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return IsValidSkClipOp(op) && IsValidPath(path); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const ClipPathOp& other) const;
   int CountSlowPaths() const;
   bool HasNonAAPaint() const { return !antialias; }
   HAS_SERIALIZATION_FUNCTIONS();
@@ -367,7 +348,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return IsValidSkClipOp(op) && rect.isFinite(); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const ClipRectOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkRect rect;
@@ -389,7 +370,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return IsValidSkClipOp(op) && rrect.isValid(); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const ClipRRectOp& other) const;
   bool HasNonAAPaint() const { return !antialias; }
   HAS_SERIALIZATION_FUNCTIONS();
 
@@ -411,7 +392,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const ConcatOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkM44 matrix;
@@ -430,7 +411,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const CustomDataOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   // Stores user defined id as a placeholder op.
@@ -452,7 +433,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return IsValidDrawColorSkBlendMode(mode); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawColorOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkColor4f color;
@@ -479,7 +460,7 @@
   bool IsValid() const {
     return flags.IsValid() && outer.isValid() && inner.isValid();
   }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawDRRectOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkRRect outer;
@@ -510,7 +491,7 @@
     return flags.IsValid() && SkScalarIsFinite(scale_adjustment.width()) &&
            SkScalarIsFinite(scale_adjustment.height());
   }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawImageOp& other) const;
   bool HasDiscardableImages() const;
   bool HasNonAAPaint() const { return false; }
   HAS_SERIALIZATION_FUNCTIONS();
@@ -554,7 +535,7 @@
            SkScalarIsFinite(scale_adjustment.width()) &&
            SkScalarIsFinite(scale_adjustment.height());
   }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawImageRectOp& other) const;
   bool HasDiscardableImages() const;
   HAS_SERIALIZATION_FUNCTIONS();
 
@@ -585,7 +566,7 @@
                               SkCanvas* canvas,
                               const PlaybackParams& params);
   bool IsValid() const { return flags.IsValid(); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawIRectOp& other) const;
   bool HasNonAAPaint() const { return false; }
   HAS_SERIALIZATION_FUNCTIONS();
 
@@ -612,7 +593,7 @@
                               SkCanvas* canvas,
                               const PlaybackParams& params);
   bool IsValid() const { return flags.IsValid(); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawLineOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   int CountSlowPaths() const;
@@ -642,7 +623,7 @@
     // Reproduce SkRRect::isValid without converting.
     return flags.IsValid() && oval.isFinite() && oval.isSorted();
   }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawOvalOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkRect oval;
@@ -669,7 +650,7 @@
                               SkCanvas* canvas,
                               const PlaybackParams& params);
   bool IsValid() const { return flags.IsValid() && IsValidPath(path); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawPathOp& other) const;
   int CountSlowPaths() const;
   HAS_SERIALIZATION_FUNCTIONS();
 
@@ -698,7 +679,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawRecordOp& other) const;
   size_t AdditionalBytesUsed() const;
   size_t AdditionalOpCount() const;
   bool HasDiscardableImages() const;
@@ -726,7 +707,7 @@
                               SkCanvas* canvas,
                               const PlaybackParams& params);
   bool IsValid() const { return flags.IsValid() && rect.isFinite(); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawRectOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkRect rect;
@@ -748,7 +729,7 @@
                               SkCanvas* canvas,
                               const PlaybackParams& params);
   bool IsValid() const { return flags.IsValid() && rrect.isValid(); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawRRectOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkRRect rrect;
@@ -777,7 +758,7 @@
     return skottie && skottie->is_valid() && !dst.isEmpty() && t >= 0 &&
            t <= 1.f;
   }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawSkottieOp& other) const;
   bool HasDiscardableImages() const;
   HAS_SERIALIZATION_FUNCTIONS();
 
@@ -830,7 +811,7 @@
                               const PlaybackParams& params);
   bool IsValid() const { return flags.IsValid(); }
   bool HasDrawTextOps() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const DrawTextBlobOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   sk_sp<SkTextBlob> blob;
@@ -855,7 +836,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params) {}
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const NoopOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 };
 
@@ -869,7 +850,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const RestoreOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 };
 
@@ -883,7 +864,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const RotateOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkScalar degrees;
@@ -902,7 +883,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const SaveOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 };
 
@@ -920,7 +901,7 @@
                               SkCanvas* canvas,
                               const PlaybackParams& params);
   bool IsValid() const { return flags.IsValid() && IsValidOrUnsetRect(bounds); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const SaveLayerOp& other) const;
   bool HasNonAAPaint() const { return false; }
   // We simply assume any effects (or even no effects -- just starting an empty
   // transparent layer) would break LCD text or be broken by the flags for
@@ -950,7 +931,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return IsValidOrUnsetRect(bounds); }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const SaveLayerAlphaOp& other) const;
   bool HasSaveLayerOps() const { return true; }
   bool HasSaveLayerAlphaOps() const { return true; }
   HAS_SERIALIZATION_FUNCTIONS();
@@ -972,7 +953,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const ScaleOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkScalar sx;
@@ -998,7 +979,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const SetMatrixOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkM44 matrix;
@@ -1017,7 +998,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const SetNodeIdOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   int node_id;
@@ -1036,7 +1017,7 @@
                      SkCanvas* canvas,
                      const PlaybackParams& params);
   bool IsValid() const { return true; }
-  static bool AreEqual(const PaintOp* left, const PaintOp* right);
+  bool EqualsForTesting(const TranslateOp& other) const;
   HAS_SERIALIZATION_FUNCTIONS();
 
   SkScalar dx;
diff --git a/cc/paint/paint_op_buffer.cc b/cc/paint/paint_op_buffer.cc
index 6e3454d..8c3ee05f 100644
--- a/cc/paint/paint_op_buffer.cc
+++ b/cc/paint/paint_op_buffer.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/notreached.h"
+#include "base/ranges/algorithm.h"
 #include "base/types/optional_util.h"
 #include "cc/paint/paint_flags.h"
 #include "cc/paint/paint_image_builder.h"
@@ -374,7 +375,7 @@
   return ReallocBuffer(used_);
 }
 
-bool PaintOpBuffer::operator==(const PaintOpBuffer& other) const {
+bool PaintOpBuffer::EqualsForTesting(const PaintOpBuffer& other) const {
   // Check status fields first, which is faster than checking equality of
   // paint operations. This doesn't need to be complete, and should not check
   // data buffer capacity related fields because they don't affect equality.
@@ -391,17 +392,10 @@
     return false;
   }
 
-  Iterator left_iter(*this);
-  Iterator right_iter(other);
-
-  for (; left_iter != left_iter.end(); ++left_iter, ++right_iter) {
-    if (*left_iter != *right_iter)
-      return false;
-  }
-
-  DCHECK(left_iter == left_iter.end());
-  DCHECK(right_iter == right_iter.end());
-  return true;
+  return base::ranges::equal(*this, other,
+                             [](const PaintOp& a, const PaintOp& b) {
+                               return a.EqualsForTesting(b);  // IN-TEST
+                             });
 }
 
 bool PaintOpBuffer::NeedsAdditionalInvalidationForLCDText(
diff --git a/cc/paint/paint_op_buffer.h b/cc/paint/paint_op_buffer.h
index 4a3f01648..8e5758a9 100644
--- a/cc/paint/paint_op_buffer.h
+++ b/cc/paint/paint_op_buffer.h
@@ -238,10 +238,7 @@
   // retains the original data buffer for future use.
   PaintRecord ReleaseAsRecord();
 
-  bool operator==(const PaintOpBuffer& other) const;
-  bool operator!=(const PaintOpBuffer& other) const {
-    return !(*this == other);
-  }
+  bool EqualsForTesting(const PaintOpBuffer& other) const;
 
   const PaintOp& GetFirstOp() const {
     DCHECK(!empty());
diff --git a/cc/paint/paint_op_buffer_iterator.cc b/cc/paint/paint_op_buffer_iterator.cc
index 0bf9eaa..c677840 100644
--- a/cc/paint/paint_op_buffer_iterator.cc
+++ b/cc/paint/paint_op_buffer_iterator.cc
@@ -59,6 +59,9 @@
   FindNextOp();
 }
 
+PaintOpBuffer::PlaybackFoldingIterator::PlaybackFoldingIterator(
+    const PlaybackFoldingIterator&) = default;
+
 PaintOpBuffer::PlaybackFoldingIterator::~PlaybackFoldingIterator() = default;
 
 void PaintOpBuffer::PlaybackFoldingIterator::FindNextOp() {
diff --git a/cc/paint/paint_op_buffer_iterator.h b/cc/paint/paint_op_buffer_iterator.h
index 11ee659..750e78c 100644
--- a/cc/paint/paint_op_buffer_iterator.h
+++ b/cc/paint/paint_op_buffer_iterator.h
@@ -5,6 +5,7 @@
 #ifndef CC_PAINT_PAINT_OP_BUFFER_ITERATOR_H_
 #define CC_PAINT_PAINT_OP_BUFFER_ITERATOR_H_
 
+#include <iterator>
 #include <utility>
 #include <vector>
 
@@ -13,9 +14,18 @@
 
 namespace cc {
 
-class CC_PAINT_EXPORT PaintOpBuffer::Iterator {
+class PaintOpBufferIteratorBase {
  public:
   using value_type = PaintOp;
+  using difference_type = std::ptrdiff_t;
+  using pointer = value_type*;
+  using reference = value_type&;
+  using iterator_category = std::forward_iterator_tag;
+};
+
+class CC_PAINT_EXPORT PaintOpBuffer::Iterator
+    : public PaintOpBufferIteratorBase {
+ public:
   explicit Iterator(const PaintOpBuffer& buffer)
       : Iterator(buffer, buffer.data_.get(), 0u) {}
 
@@ -42,6 +52,11 @@
     CHECK_LE(op_offset_, buffer_->used_);
     return *this;
   }
+  Iterator operator++(int) {
+    Iterator original = *this;
+    operator++();
+    return original;
+  }
   explicit operator bool() const { return op_offset_ < buffer_->used_; }
 
  private:
@@ -56,9 +71,9 @@
   size_t op_offset_ = 0;
 };
 
-class CC_PAINT_EXPORT PaintOpBuffer::OffsetIterator {
+class CC_PAINT_EXPORT PaintOpBuffer::OffsetIterator
+    : public PaintOpBufferIteratorBase {
  public:
-  using value_type = PaintOp;
   // Offsets and paint op buffer must come from the same DisplayItemList.
   OffsetIterator(const PaintOpBuffer& buffer,
                  const std::vector<size_t>& offsets)
@@ -108,6 +123,11 @@
                          static_cast<uint32_t>(PaintOpType::LastPaintOpType));
     return *this;
   }
+  OffsetIterator operator++(int) {
+    OffsetIterator original = *this;
+    operator++();
+    return original;
+  }
 
   explicit operator bool() const { return op_offset_ < buffer_->used_; }
 
@@ -132,9 +152,9 @@
   size_t offsets_index_ = 0;
 };
 
-class CC_PAINT_EXPORT PaintOpBuffer::CompositeIterator {
+class CC_PAINT_EXPORT PaintOpBuffer::CompositeIterator
+    : public PaintOpBufferIteratorBase {
  public:
-  using value_type = PaintOp;
   // Offsets and paint op buffer must come from the same DisplayItemList.
   CompositeIterator(const PaintOpBuffer& buffer,
                     const std::vector<size_t>* offsets);
@@ -166,6 +186,11 @@
     absl::visit([](auto& iter) { ++iter; }, iter_);
     return *this;
   }
+  CompositeIterator operator++(int) {
+    CompositeIterator original = *this;
+    operator++();
+    return original;
+  }
   explicit operator bool() const {
     return absl::visit([](const auto& iter) { return !!iter; }, iter_);
   }
@@ -177,10 +202,12 @@
   absl::variant<Iterator, OffsetIterator> iter_;
 };
 
-class CC_PAINT_EXPORT PaintOpBuffer::PlaybackFoldingIterator {
+class CC_PAINT_EXPORT PaintOpBuffer::PlaybackFoldingIterator
+    : public PaintOpBufferIteratorBase {
  public:
   PlaybackFoldingIterator(const PaintOpBuffer& buffer,
                           const std::vector<size_t>* offsets);
+  PlaybackFoldingIterator(const PlaybackFoldingIterator& other);
   ~PlaybackFoldingIterator();
 
   const PaintOp* get() const { return current_op_; }
@@ -191,6 +218,11 @@
     FindNextOp();
     return *this;
   }
+  PlaybackFoldingIterator operator++(int) {
+    PlaybackFoldingIterator original = *this;
+    operator++();
+    return original;
+  }
 
   explicit operator bool() const { return !!current_op_; }
 
diff --git a/cc/paint/paint_op_buffer_unittest.cc b/cc/paint/paint_op_buffer_unittest.cc
index 5c1724c..d918a784 100644
--- a/cc/paint/paint_op_buffer_unittest.cc
+++ b/cc/paint/paint_op_buffer_unittest.cc
@@ -218,7 +218,7 @@
   // Should be possible to reappend to the original and get the same result.
   PushOps(&original);
   VerifyOps(&original);
-  EXPECT_EQ(original, destination);
+  EXPECT_TRUE(original.EqualsForTesting(destination));
 }
 
 TEST_F(PaintOpAppendTest, MoveThenReappendOperatorEq) {
@@ -231,7 +231,7 @@
   // Should be possible to reappend to the original and get the same result.
   PushOps(&original);
   VerifyOps(&original);
-  EXPECT_EQ(original, destination);
+  EXPECT_TRUE(original.EqualsForTesting(destination));
 }
 
 // Verify that a SaveLayerAlpha / Draw / Restore can be optimized to just
@@ -1938,10 +1938,8 @@
   for (const PaintOp& base_written : DeserializerIterator(
            output_.get(), serializer.TotalBytesWritten(),
            serializer.options_provider()->deserialize_options())) {
-    SCOPED_TRACE(base::StringPrintf(
-        "%s #%zu", PaintOpTypeToString(GetParamType()).c_str(), i));
     ASSERT_TRUE(iter);
-    EXPECT_EQ(*iter, base_written);
+    EXPECT_THAT(base_written, PaintOpEq(std::ref(*iter))) << "i: " << i;
     ++iter;
     ++i;
   }
@@ -2109,7 +2107,7 @@
         output_.get(), bytes_written, deserialized.get(), deserialized_size,
         &bytes_read, options_provider.deserialize_options());
     ASSERT_TRUE(written) << PaintOpTypeToString(GetParamType());
-    EXPECT_EQ(op, *written);
+    EXPECT_THAT(op, PaintOpEq<const PaintOp&>(*written));
     written->DestroyThis();
     written = nullptr;
 
@@ -2719,7 +2717,7 @@
 }
 
 MATCHER_P(MatchesPaintImage, paint_image, "") {
-  return arg.paint_image() == paint_image;
+  return arg.paint_image().IsSameForTesting(paint_image);
 }
 
 MATCHER_P2(MatchesRect, rect, scale, "") {
@@ -3207,7 +3205,7 @@
         EXPECT_THAT(actual.record(), PaintOpsAreEq(ScaleOp(scale_x, scale_y)));
       }
     } else {
-      EXPECT_TRUE(*filter == *deserialized_filter);
+      EXPECT_TRUE(filter->EqualsForTesting(*deserialized_filter));
     }
   }
 }
@@ -3479,7 +3477,8 @@
 
     PaintOpBuffer buffer2;
     buffer2.push<CustomDataOp>(1234u);
-    EXPECT_EQ(new_buffer.GetFirstOp(), buffer2.GetFirstOp());
+    EXPECT_THAT(new_buffer.GetFirstOp(),
+                PaintOpEq(std::ref(buffer2.GetFirstOp())));
   }
 
   // Push and verify.
@@ -3525,7 +3524,7 @@
                        options_provider.deserialize_options(),
                        enable_security_constraints);
   reader.Read(&out_filter);
-  EXPECT_TRUE(*filter == *out_filter);
+  EXPECT_TRUE(filter->EqualsForTesting(*out_filter));
 }
 
 TEST(PaintOpBufferTest, DrawImageRectSerializeScaledImages) {
@@ -3910,9 +3909,7 @@
       PlaybackParams params(nullptr, original_ctm);
       SetMatrixOp op(matrix);
       SetMatrixOp::Raster(&op, canvas, params);
-
-      EXPECT_TRUE(AnnotateOp::AreSkM44sEqual(canvas->getLocalToDevice(),
-                                             SkM44(original_ctm, matrix)));
+      EXPECT_TRUE(canvas->getLocalToDevice() == SkM44(original_ctm, matrix));
     }
   }
 }
diff --git a/cc/paint/paint_op_helper_unittest.cc b/cc/paint/paint_op_helper_unittest.cc
index da02eaeb..262d6b4 100644
--- a/cc/paint/paint_op_helper_unittest.cc
+++ b/cc/paint/paint_op_helper_unittest.cc
@@ -14,7 +14,7 @@
 TEST(PaintOpHelper, AnnotateToString) {
   AnnotateOp op(PaintCanvas::AnnotationType::URL, SkRect::MakeXYWH(1, 2, 3, 4),
                 nullptr);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "AnnotateOp(type=URL, rect=[1.000,2.000 3.000x4.000], data=(nil))");
 }
@@ -22,7 +22,7 @@
 TEST(PaintOpHelper, ClipPathToString) {
   ClipPathOp op(SkPath(), SkClipOp::kDifference, true,
                 UsePaintCache::kDisabled);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "ClipPathOp(path=<SkPath>, op=kDifference, antialias=true, "
             "use_cache=false)");
@@ -31,7 +31,7 @@
 TEST(PaintOpHelper, ClipRectToString) {
   ClipRectOp op(SkRect::MakeXYWH(10.1f, 20.2f, 30.3f, 40.4f),
                 SkClipOp::kIntersect, false);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "ClipRectOp(rect=[10.100,20.200 30.300x40.400], op=kIntersect, "
             "antialias=false)");
@@ -40,7 +40,7 @@
 TEST(PaintOpHelper, ClipRRectToString) {
   ClipRRectOp op(SkRRect::MakeRect(SkRect::MakeXYWH(1, 2, 3, 4)),
                  SkClipOp::kDifference, false);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "ClipRRectOp(rrect=[bounded by 1.000,2.000 3.000x4.000], "
             "op=kDifference, antialias=false)");
@@ -48,7 +48,7 @@
 
 TEST(PaintOpHelper, ConcatToString) {
   ConcatOp op(SkM44(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16));
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "ConcatOp(matrix=[  1.0000   2.0000   3.0000   4.0000][  5.0000   "
             "6.0000   7.0000   8.0000][  9.0000  10.0000  11.0000  12.0000][ "
@@ -57,7 +57,7 @@
 
 TEST(PaintOpHelper, DrawColorToString) {
   DrawColorOp op({0.1, 0.2, 0.3, 0.4}, SkBlendMode::kSrc);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "DrawColorOp(color=rgba(0.100000, 0.200000, 0.300000, 0.400000), "
             "mode=kSrc)");
@@ -67,7 +67,7 @@
   DrawDRRectOp op(SkRRect::MakeRect(SkRect::MakeXYWH(1, 2, 3, 4)),
                   SkRRect::MakeRect(SkRect::MakeXYWH(5, 6, 7, 8)),
                   PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawDRRectOp(outer=[bounded by 1.000,2.000 3.000x4.000], inner=[bounded "
@@ -83,7 +83,7 @@
 
 TEST(PaintOpHelper, DrawImageToString) {
   DrawImageOp op(PaintImage(), 10.5f, 20.3f);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawImageOp(image=<paint image>, left=10.500, top=20.300, "
@@ -100,7 +100,7 @@
   DrawImageRectOp op(PaintImage(), SkRect::MakeXYWH(1, 2, 3, 4),
                      SkRect::MakeXYWH(5, 6, 7, 8),
                      SkCanvas::kStrict_SrcRectConstraint);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawImageRectOp(image=<paint image>, src=[1.000,2.000 3.000x4.000], "
@@ -116,7 +116,7 @@
 
 TEST(PaintOpHelper, DrawIRectToString) {
   DrawIRectOp op(SkIRect::MakeXYWH(1, 2, 3, 4), PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "DrawIRectOp(rect=[1,2 3x4], flags=[color=rgba(0, 0, 0, 255), "
             "blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
@@ -131,7 +131,7 @@
 
 TEST(PaintOpHelper, DrawLineToString) {
   DrawLineOp op(1.1f, 2.2f, 3.3f, 4.4f, PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawLineOp(x0=1.100, y0=2.200, x1=3.300, y1=4.400, flags=[color=rgba(0, "
@@ -146,7 +146,7 @@
 
 TEST(PaintOpHelper, DrawOvalToString) {
   DrawOvalOp op(SkRect::MakeXYWH(100, 200, 300, 400), PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawOvalOp(oval=[100.000,200.000 300.000x400.000], flags=[color=rgba(0, "
@@ -162,7 +162,7 @@
 TEST(PaintOpHelper, DrawPathToString) {
   SkPath path;
   DrawPathOp op(path, PaintFlags(), UsePaintCache::kDisabled);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "DrawPathOp(path=<SkPath>, flags=[color=rgba(0, 0, 0, 255), "
             "blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
@@ -177,13 +177,13 @@
 
 TEST(PaintOpHelper, DrawRecordToString) {
   DrawRecordOp op((PaintRecord()));
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str, "DrawRecordOp(record=(empty))");
 }
 
 TEST(PaintOpHelper, DrawRectToString) {
   DrawRectOp op(SkRect::MakeXYWH(-1, -2, -3, -4), PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawRectOp(rect=[-1.000,-2.000 -3.000x-4.000], flags=[color=rgba(0, 0, "
@@ -199,7 +199,7 @@
 TEST(PaintOpHelper, DrawRRectToString) {
   DrawRRectOp op(SkRRect::MakeRect(SkRect::MakeXYWH(-1, -2, 3, 4)),
                  PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawRRectOp(rrect=[bounded by -1.000,-2.000 3.000x4.000], "
@@ -214,7 +214,7 @@
 
 TEST(PaintOpHelper, DrawTextBlobToString) {
   DrawTextBlobOp op(nullptr, 100, -222, PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "DrawTextBlobOp(blob=(nil), x=100.000, y=-222.000, flags=[color=rgba(0, "
@@ -229,31 +229,31 @@
 
 TEST(PaintOpHelper, NoopToString) {
   NoopOp op;
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str, "NoopOp()");
 }
 
 TEST(PaintOpHelper, RestoreToString) {
   RestoreOp op;
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str, "RestoreOp()");
 }
 
 TEST(PaintOpHelper, RotateToString) {
   RotateOp op(360);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str, "RotateOp(degrees=360.000)");
 }
 
 TEST(PaintOpHelper, SaveToString) {
   SaveOp op;
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str, "SaveOp()");
 }
 
 TEST(PaintOpHelper, SaveLayerToString) {
   SaveLayerOp op(SkRect::MakeXYWH(1, 2, 3, 4), PaintFlags());
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(
       str,
       "SaveLayerOp(bounds=[1.000,2.000 3.000x4.000], flags=[color=rgba(0, 0, "
@@ -268,20 +268,20 @@
 
 TEST(PaintOpHelper, SaveLayerAlphaToString) {
   SaveLayerAlphaOp op(SkRect::MakeXYWH(1, 2, 3, 4), 1.0f);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "SaveLayerAlphaOp(bounds=[1.000,2.000 3.000x4.000], alpha=255)");
 }
 
 TEST(PaintOpHelper, ScaleToString) {
   ScaleOp op(12, 13.9f);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str, "ScaleOp(sx=12.000, sy=13.900)");
 }
 
 TEST(PaintOpHelper, SetMatrixToString) {
   SetMatrixOp op(SkM44(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16));
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str,
             "SetMatrixOp(matrix=[  1.0000   2.0000   3.0000   4.0000][  5.0000 "
             "  6.0000   7.0000   8.0000][  9.0000  10.0000  11.0000  12.0000][ "
@@ -290,7 +290,7 @@
 
 TEST(PaintOpHelper, TranslateToString) {
   TranslateOp op(0, 0);
-  std::string str = PaintOpHelper::ToString(&op);
+  std::string str = PaintOpHelper::ToString(op);
   EXPECT_EQ(str, "TranslateOp(dx=0.000, dy=0.000)");
 }
 
diff --git a/cc/paint/paint_record.h b/cc/paint/paint_record.h
index b4d7b31..0722197 100644
--- a/cc/paint/paint_record.h
+++ b/cc/paint/paint_record.h
@@ -30,11 +30,9 @@
   PaintRecord(const PaintRecord&);
   PaintRecord& operator=(const PaintRecord&);
 
-  bool operator==(const PaintRecord& other) const {
-    return buffer_ == other.buffer_ ||
-           (buffer_ && other.buffer_ && *buffer_ == *other.buffer_);
+  bool EqualsForTesting(const PaintRecord& other) const {
+    return buffer_->EqualsForTesting(*other.buffer_);
   }
-  bool operator!=(const PaintRecord& other) const { return !(*this == other); }
 
   const PaintOpBuffer& buffer() const { return *buffer_; }
 
diff --git a/cc/paint/paint_shader.cc b/cc/paint/paint_shader.cc
index d1a5d9a..94416bb6 100644
--- a/cc/paint/paint_shader.cc
+++ b/cc/paint/paint_shader.cc
@@ -35,23 +35,25 @@
   return recorder.finishRecordingAsPicture();
 }
 
-bool CompareMatrices(const SkMatrix& a,
-                     const SkMatrix& b,
-                     bool ignore_scaling_differences) {
-  if (!ignore_scaling_differences)
-    return PaintOp::AreSkMatricesEqual(a, b);
+bool CompareMatricesForTesting(const SkMatrix& a,  // IN-TEST
+                               const SkMatrix& b,
+                               bool ignore_scaling_differences) {
+  if (!ignore_scaling_differences) {
+    return a == b;
+  }
 
   SkSize scale;
   SkMatrix a_without_scale;
   SkMatrix b_without_scale;
 
   const bool decomposes = a.decomposeScale(&scale, &a_without_scale);
-  if (decomposes != b.decomposeScale(&scale, &b_without_scale))
+  if (decomposes != b.decomposeScale(&scale, &b_without_scale)) {
     return false;
-
-  if (!decomposes)
+  }
+  if (!decomposes) {
     return true;
-  return PaintOp::AreSkMatricesEqual(a_without_scale, b_without_scale);
+  }
+  return a_without_scale == b_without_scale;
 }
 
 }  // namespace
@@ -583,7 +585,7 @@
   return false;
 }
 
-bool PaintShader::operator==(const PaintShader& other) const {
+bool PaintShader::EqualsForTesting(const PaintShader& other) const {
   if (shader_type_ != other.shader_type_)
     return false;
 
@@ -596,23 +598,19 @@
   const SkMatrix& local_matrix = local_matrix_ ? *local_matrix_ : SkMatrix::I();
   const SkMatrix& other_local_matrix =
       other.local_matrix_ ? *other.local_matrix_ : SkMatrix::I();
-  if (!CompareMatrices(local_matrix, other_local_matrix,
-                       ignore_scaling_differences)) {
+  if (!CompareMatricesForTesting(local_matrix, other_local_matrix,  // IN-TEST
+                                 ignore_scaling_differences)) {
     return false;
   }
 
-  if (fallback_color_ != other.fallback_color_)
+  if (fallback_color_ != other.fallback_color_ || flags_ != other.flags_ ||
+      tx_ != other.tx_ || ty_ != other.ty_) {
     return false;
-  if (flags_ != other.flags_)
-    return false;
-  if (tx_ != other.tx_)
-    return false;
-  if (ty_ != other.ty_)
-    return false;
-
+  }
   if (!ignore_scaling_differences &&
-      scaling_behavior_ != other.scaling_behavior_)
+      scaling_behavior_ != other.scaling_behavior_) {
     return false;
+  }
 
   // Variables that only some shaders use.
   switch (shader_type_) {
@@ -620,31 +618,20 @@
     case Type::kColor:
       break;
     case Type::kSweepGradient:
-      if (!PaintOp::AreEqualEvenIfNaN(start_degrees_, other.start_degrees_))
+      if (start_degrees_ != other.start_degrees_ ||
+          end_degrees_ != other.end_degrees_) {
         return false;
-      if (!PaintOp::AreEqualEvenIfNaN(end_degrees_, other.end_degrees_))
-        return false;
+      }
       [[fallthrough]];
     case Type::kLinearGradient:
     case Type::kRadialGradient:
     case Type::kTwoPointConicalGradient:
-      if (!PaintOp::AreEqualEvenIfNaN(start_radius_, other.start_radius_))
+      if (start_radius_ != other.start_radius_ ||
+          end_radius_ != other.end_radius_ || center_ != other.center_ ||
+          start_point_ != other.start_point_ ||
+          end_point_ != other.end_point_ || colors_ != other.colors_ ||
+          positions_ != other.positions_) {
         return false;
-      if (!PaintOp::AreEqualEvenIfNaN(end_radius_, other.end_radius_))
-        return false;
-      if (!PaintOp::AreSkPointsEqual(center_, other.center_))
-        return false;
-      if (!PaintOp::AreSkPointsEqual(start_point_, other.start_point_))
-        return false;
-      if (!PaintOp::AreSkPointsEqual(end_point_, other.end_point_))
-        return false;
-      if (colors_ != other.colors_)
-        return false;
-      if (positions_.size() != other.positions_.size())
-        return false;
-      for (size_t i = 0; i < positions_.size(); ++i) {
-        if (!PaintOp::AreEqualEvenIfNaN(positions_[i], other.positions_[i]))
-          return false;
       }
       break;
     case Type::kImage:
diff --git a/cc/paint/paint_shader.h b/cc/paint/paint_shader.h
index 14c53afd..8b0fbfc 100644
--- a/cc/paint/paint_shader.h
+++ b/cc/paint/paint_shader.h
@@ -170,8 +170,7 @@
   // shader is correct is hard.
   bool IsValid() const;
 
-  bool operator==(const PaintShader& other) const;
-  bool operator!=(const PaintShader& other) const { return !(*this == other); }
+  bool EqualsForTesting(const PaintShader& other) const;
 
   RecordShaderId paint_record_shader_id() const {
     DCHECK(id_ == kInvalidRecordShaderId || shader_type_ == Type::kPaintRecord);
diff --git a/cc/paint/paint_shader_unittest.cc b/cc/paint/paint_shader_unittest.cc
index cddbe2c..3a9fbd2 100644
--- a/cc/paint/paint_shader_unittest.cc
+++ b/cc/paint/paint_shader_unittest.cc
@@ -113,7 +113,8 @@
   surface->getCanvas()->drawPaint(canvas.paint_);
 
   // Using the shader requests decode for images at the correct scale.
-  EXPECT_EQ(image_provider.draw_image().paint_image(), paint_image);
+  EXPECT_TRUE(
+      image_provider.draw_image().paint_image().IsSameForTesting(paint_image));
   EXPECT_EQ(image_provider.draw_image().scale().width(), 0.25f);
   EXPECT_EQ(image_provider.draw_image().scale().height(), 0.25f);
 }
diff --git a/cc/paint/record_paint_canvas.cc b/cc/paint/record_paint_canvas.cc
index 66d5782..bfbbbf2 100644
--- a/cc/paint/record_paint_canvas.cc
+++ b/cc/paint/record_paint_canvas.cc
@@ -189,31 +189,16 @@
   return SkImageInfo();
 }
 
-SkRect RecordPaintCanvas::getLocalClipBounds() const {
-  NOTREACHED();
-  return SkRect();
-}
-
 bool RecordPaintCanvas::getLocalClipBounds(SkRect* bounds) const {
   NOTREACHED();
   return false;
 }
 
-SkIRect RecordPaintCanvas::getDeviceClipBounds() const {
-  NOTREACHED();
-  return SkIRect();
-}
-
 bool RecordPaintCanvas::getDeviceClipBounds(SkIRect* bounds) const {
   NOTREACHED();
   return false;
 }
 
-bool RecordPaintCanvas::isClipEmpty() const {
-  NOTREACHED();
-  return true;
-}
-
 SkM44 RecordPaintCanvas::getLocalToDevice() const {
   NOTREACHED();
   return SkM44();
@@ -445,26 +430,14 @@
   return canvas_.imageInfo();
 }
 
-SkRect InspectableRecordPaintCanvas::getLocalClipBounds() const {
-  return canvas_.getLocalClipBounds();
-}
-
 bool InspectableRecordPaintCanvas::getLocalClipBounds(SkRect* bounds) const {
   return canvas_.getLocalClipBounds(bounds);
 }
 
-SkIRect InspectableRecordPaintCanvas::getDeviceClipBounds() const {
-  return canvas_.getDeviceClipBounds();
-}
-
 bool InspectableRecordPaintCanvas::getDeviceClipBounds(SkIRect* bounds) const {
   return canvas_.getDeviceClipBounds(bounds);
 }
 
-bool InspectableRecordPaintCanvas::isClipEmpty() const {
-  return canvas_.isClipEmpty();
-}
-
 SkM44 InspectableRecordPaintCanvas::getLocalToDevice() const {
   return canvas_.getLocalToDevice();
 }
diff --git a/cc/paint/record_paint_canvas.h b/cc/paint/record_paint_canvas.h
index 0cfa0b3f..97db043b 100644
--- a/cc/paint/record_paint_canvas.h
+++ b/cc/paint/record_paint_canvas.h
@@ -69,11 +69,8 @@
   // the constructor. With this restriction, we don't need to create
   // SkNoDrawCanvas for clients that only need recording.
   SkImageInfo imageInfo() const override;
-  SkRect getLocalClipBounds() const override;
   bool getLocalClipBounds(SkRect* bounds) const override;
-  SkIRect getDeviceClipBounds() const override;
   bool getDeviceClipBounds(SkIRect* bounds) const override;
-  bool isClipEmpty() const override;
   SkM44 getLocalToDevice() const override;
 
   void drawColor(SkColor4f color, SkBlendMode mode) override;
@@ -221,11 +218,8 @@
   void clipRect(const SkRect& rect, SkClipOp op, bool antialias) override;
 
   SkImageInfo imageInfo() const override;
-  SkRect getLocalClipBounds() const override;
   bool getLocalClipBounds(SkRect* bounds) const override;
-  SkIRect getDeviceClipBounds() const override;
   bool getDeviceClipBounds(SkIRect* bounds) const override;
-  bool isClipEmpty() const override;
   SkM44 getLocalToDevice() const override;
 
   // Don't shadow non-virtual helper functions.
diff --git a/cc/paint/skia_paint_canvas.cc b/cc/paint/skia_paint_canvas.cc
index ec3bf64..accfce5 100644
--- a/cc/paint/skia_paint_canvas.cc
+++ b/cc/paint/skia_paint_canvas.cc
@@ -142,18 +142,10 @@
   canvas_->clipPath(path, op, do_anti_alias);
 }
 
-SkRect SkiaPaintCanvas::getLocalClipBounds() const {
-  return canvas_->getLocalClipBounds();
-}
-
 bool SkiaPaintCanvas::getLocalClipBounds(SkRect* bounds) const {
   return canvas_->getLocalClipBounds(bounds);
 }
 
-SkIRect SkiaPaintCanvas::getDeviceClipBounds() const {
-  return canvas_->getDeviceClipBounds();
-}
-
 bool SkiaPaintCanvas::getDeviceClipBounds(SkIRect* bounds) const {
   return canvas_->getDeviceClipBounds(bounds);
 }
@@ -371,10 +363,6 @@
   drawPicture(record, PlaybackParams::CustomDataRasterCallback());
 }
 
-bool SkiaPaintCanvas::isClipEmpty() const {
-  return canvas_->isClipEmpty();
-}
-
 SkM44 SkiaPaintCanvas::getLocalToDevice() const {
   return canvas_->getLocalToDevice();
 }
diff --git a/cc/paint/skia_paint_canvas.h b/cc/paint/skia_paint_canvas.h
index fe578e1..0098bf4d 100644
--- a/cc/paint/skia_paint_canvas.h
+++ b/cc/paint/skia_paint_canvas.h
@@ -93,9 +93,7 @@
                 SkClipOp op,
                 bool do_anti_alias,
                 UsePaintCache) override;
-  SkRect getLocalClipBounds() const override;
   bool getLocalClipBounds(SkRect* bounds) const override;
-  SkIRect getDeviceClipBounds() const override;
   bool getDeviceClipBounds(SkIRect* bounds) const override;
   void drawColor(SkColor4f color, SkBlendMode mode) override;
   void clear(SkColor4f color) override;
@@ -148,7 +146,6 @@
 
   void drawPicture(PaintRecord record) override;
 
-  bool isClipEmpty() const override;
   SkM44 getLocalToDevice() const override;
 
   bool NeedsFlush() const override;
diff --git a/cc/paint/skottie_frame_data.cc b/cc/paint/skottie_frame_data.cc
deleted file mode 100644
index 087805b..0000000
--- a/cc/paint/skottie_frame_data.cc
+++ /dev/null
@@ -1,14 +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 "cc/paint/skottie_frame_data.h"
-
-namespace cc {
-
-bool operator==(const SkottieFrameData& frame_l,
-                const SkottieFrameData& frame_r) {
-  return frame_l.image == frame_r.image && frame_l.quality == frame_r.quality;
-}
-
-}  // namespace cc
diff --git a/cc/paint/skottie_frame_data.h b/cc/paint/skottie_frame_data.h
index 295e2c8a8..ca8300e 100644
--- a/cc/paint/skottie_frame_data.h
+++ b/cc/paint/skottie_frame_data.h
@@ -31,9 +31,6 @@
   PaintFlags::FilterQuality quality = PaintFlags::FilterQuality::kLow;
 };
 
-CC_PAINT_EXPORT bool operator==(const SkottieFrameData& frame_l,
-                                const SkottieFrameData& frame_r);
-
 // Map from asset id to the image to use for that asset.
 using SkottieFrameDataMap =
     base::flat_map<SkottieResourceIdHash, SkottieFrameData>;
diff --git a/cc/paint/skottie_serialization_history_unittest.cc b/cc/paint/skottie_serialization_history_unittest.cc
index 6aa58ef4..2f3f59e 100644
--- a/cc/paint/skottie_serialization_history_unittest.cc
+++ b/cc/paint/skottie_serialization_history_unittest.cc
@@ -12,6 +12,7 @@
 #include "cc/paint/skottie_text_property_value.h"
 #include "cc/paint/skottie_wrapper.h"
 #include "cc/test/lottie_test_data.h"
+#include "cc/test/paint_image_matchers.h"
 #include "cc/test/skia_common.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -52,14 +53,11 @@
        {image_2, PaintFlags::FilterQuality::kMedium}},
   };
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
-  EXPECT_THAT(
-      images,
-      UnorderedElementsAre(
-          Pair(HashSkottieResourceId("asset_a"),
-               SkottieFrameData({image_1, PaintFlags::FilterQuality::kMedium})),
-          Pair(HashSkottieResourceId("asset_b"),
-               SkottieFrameData(
-                   {image_2, PaintFlags::FilterQuality::kMedium}))));
+  EXPECT_THAT(images, UnorderedElementsAre(
+                          SkottieImageIs("asset_a", image_1,
+                                         PaintFlags::FilterQuality::kMedium),
+                          SkottieImageIs("asset_b", image_2,
+                                         PaintFlags::FilterQuality::kMedium)));
 
   images = {
       {HashSkottieResourceId("asset_a"),
@@ -68,11 +66,9 @@
        {image_2, PaintFlags::FilterQuality::kMedium}},
   };
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
-  EXPECT_THAT(
-      images,
-      UnorderedElementsAre(Pair(
-          HashSkottieResourceId("asset_a"),
-          SkottieFrameData({image_3, PaintFlags::FilterQuality::kMedium}))));
+  EXPECT_THAT(images,
+              UnorderedElementsAre(SkottieImageIs(
+                  "asset_a", image_3, PaintFlags::FilterQuality::kMedium)));
 
   images = {
       {HashSkottieResourceId("asset_a"),
@@ -81,11 +77,9 @@
        {image_4, PaintFlags::FilterQuality::kMedium}},
   };
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
-  EXPECT_THAT(
-      images,
-      UnorderedElementsAre(Pair(
-          HashSkottieResourceId("asset_b"),
-          SkottieFrameData({image_4, PaintFlags::FilterQuality::kMedium}))));
+  EXPECT_THAT(images,
+              UnorderedElementsAre(SkottieImageIs(
+                  "asset_b", image_4, PaintFlags::FilterQuality::kMedium)));
 
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
   EXPECT_THAT(images, IsEmpty());
@@ -106,29 +100,23 @@
        {image_2, PaintFlags::FilterQuality::kMedium}},
   };
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
-  EXPECT_THAT(
-      images,
-      Contains(Pair(HashSkottieResourceId("asset_a"),
-                    SkottieFrameData(
-                        {blank_image, PaintFlags::FilterQuality::kMedium}))));
+  EXPECT_THAT(images,
+              Contains(SkottieImageIs("asset_a", blank_image,
+                                      PaintFlags::FilterQuality::kMedium)));
 
   images = {{HashSkottieResourceId("asset_a"),
              {image_1, PaintFlags::FilterQuality::kMedium}}};
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
-  EXPECT_THAT(
-      images,
-      Contains(Pair(
-          HashSkottieResourceId("asset_a"),
-          SkottieFrameData({image_1, PaintFlags::FilterQuality::kMedium}))));
+  EXPECT_THAT(images,
+              Contains(SkottieImageIs("asset_a", image_1,
+                                      PaintFlags::FilterQuality::kMedium)));
 
   images = {{HashSkottieResourceId("asset_a"),
              {blank_image, PaintFlags::FilterQuality::kMedium}}};
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
-  EXPECT_THAT(
-      images,
-      Contains(Pair(HashSkottieResourceId("asset_a"),
-                    SkottieFrameData(
-                        {blank_image, PaintFlags::FilterQuality::kMedium}))));
+  EXPECT_THAT(images,
+              Contains(SkottieImageIs("asset_a", blank_image,
+                                      PaintFlags::FilterQuality::kMedium)));
 
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
   EXPECT_THAT(images, IsEmpty());
@@ -144,13 +132,10 @@
        SkottieTextPropertyValue("test_1b", gfx::RectF(2, 2, 2, 2))},
   };
   history_.FilterNewSkottieFrameState(*skottie, empty_images, text_map);
-  EXPECT_THAT(
-      text_map,
-      UnorderedElementsAre(
-          Pair(HashSkottieResourceId("node_a"),
-               SkottieTextPropertyValue("test_1a", gfx::RectF(1, 1, 1, 1))),
-          Pair(HashSkottieResourceId("node_b"),
-               SkottieTextPropertyValue("test_1b", gfx::RectF(2, 2, 2, 2)))));
+  EXPECT_THAT(text_map,
+              UnorderedElementsAre(
+                  SkottieTextIs("node_a", "test_1a", gfx::RectF(1, 1, 1, 1)),
+                  SkottieTextIs("node_b", "test_1b", gfx::RectF(2, 2, 2, 2))));
 
   text_map = {
       {HashSkottieResourceId("node_a"),
@@ -159,11 +144,8 @@
        SkottieTextPropertyValue("test_1b", gfx::RectF(2, 2, 2, 2))},
   };
   history_.FilterNewSkottieFrameState(*skottie, empty_images, text_map);
-  EXPECT_THAT(
-      text_map,
-      UnorderedElementsAre(
-          Pair(HashSkottieResourceId("node_a"),
-               SkottieTextPropertyValue("test_2a", gfx::RectF(1, 1, 1, 1)))));
+  EXPECT_THAT(text_map, UnorderedElementsAre(SkottieTextIs(
+                            "node_a", "test_2a", gfx::RectF(1, 1, 1, 1))));
 
   text_map = {
       {HashSkottieResourceId("node_a"),
@@ -172,11 +154,8 @@
        SkottieTextPropertyValue("test_1b", gfx::RectF(2, 2, 2, 2))},
   };
   history_.FilterNewSkottieFrameState(*skottie, empty_images, text_map);
-  EXPECT_THAT(
-      text_map,
-      UnorderedElementsAre(
-          Pair(HashSkottieResourceId("node_a"),
-               SkottieTextPropertyValue("test_2a", gfx::RectF(3, 3, 3, 3)))));
+  EXPECT_THAT(text_map, UnorderedElementsAre(SkottieTextIs(
+                            "node_a", "test_2a", gfx::RectF(3, 3, 3, 3))));
 
   history_.FilterNewSkottieFrameState(*skottie, empty_images, text_map);
   EXPECT_THAT(text_map, IsEmpty());
@@ -204,11 +183,9 @@
        {image_2, PaintFlags::FilterQuality::kMedium}},
   };
   history_.FilterNewSkottieFrameState(*skottie, images, empty_text_map);
-  EXPECT_THAT(
-      images,
-      UnorderedElementsAre(
-          Pair(HashSkottieResourceId("asset_a"),
-               SkottieFrameData({image_1, PaintFlags::FilterQuality::kHigh}))));
+  EXPECT_THAT(images,
+              UnorderedElementsAre(SkottieImageIs(
+                  "asset_a", image_1, PaintFlags::FilterQuality::kHigh)));
 }
 
 TEST_F(SkottieSerializationHistoryTest,
@@ -238,12 +215,10 @@
   history_.FilterNewSkottieFrameState(*skottie_2, images_2, empty_text_map);
   EXPECT_THAT(
       images_2,
-      UnorderedElementsAre(
-          Pair(HashSkottieResourceId("asset_2a"),
-               SkottieFrameData({image_1, PaintFlags::FilterQuality::kMedium})),
-          Pair(HashSkottieResourceId("asset_2b"),
-               SkottieFrameData(
-                   {image_2, PaintFlags::FilterQuality::kMedium}))));
+      UnorderedElementsAre(SkottieImageIs("asset_2a", image_1,
+                                          PaintFlags::FilterQuality::kMedium),
+                           SkottieImageIs("asset_2b", image_2,
+                                          PaintFlags::FilterQuality::kMedium)));
 
   images_1 = {
       {HashSkottieResourceId("asset_1a"),
@@ -259,11 +234,9 @@
   };
   history_.FilterNewSkottieFrameState(*skottie_1, images_1, empty_text_map);
   history_.FilterNewSkottieFrameState(*skottie_2, images_2, empty_text_map);
-  EXPECT_THAT(
-      images_2,
-      UnorderedElementsAre(Pair(
-          HashSkottieResourceId("asset_2a"),
-          SkottieFrameData({image_4, PaintFlags::FilterQuality::kMedium}))));
+  EXPECT_THAT(images_2,
+              UnorderedElementsAre(SkottieImageIs(
+                  "asset_2a", image_4, PaintFlags::FilterQuality::kMedium)));
 }
 
 TEST_F(SkottieSerializationHistoryTest, RequestInactiveAnimationsPurge) {
@@ -302,12 +275,10 @@
   // History for |skottie_2| should start again.
   EXPECT_THAT(
       images_2,
-      UnorderedElementsAre(
-          Pair(HashSkottieResourceId("asset_2a"),
-               SkottieFrameData({image_1, PaintFlags::FilterQuality::kMedium})),
-          Pair(HashSkottieResourceId("asset_2b"),
-               SkottieFrameData(
-                   {image_2, PaintFlags::FilterQuality::kMedium}))));
+      UnorderedElementsAre(SkottieImageIs("asset_2a", image_1,
+                                          PaintFlags::FilterQuality::kMedium),
+                           SkottieImageIs("asset_2b", image_2,
+                                          PaintFlags::FilterQuality::kMedium)));
 }
 
 }  // namespace
diff --git a/cc/paint/transfer_cache_unittest.cc b/cc/paint/transfer_cache_unittest.cc
index 1b33fab..0558321 100644
--- a/cc/paint/transfer_cache_unittest.cc
+++ b/cc/paint/transfer_cache_unittest.cc
@@ -5,7 +5,6 @@
 #include <vector>
 
 #include "base/command_line.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/paint/image_transfer_cache_entry.h"
 #include "cc/paint/raw_memory_transfer_cache_entry.h"
diff --git a/cc/raster/one_copy_raster_buffer_provider.cc b/cc/raster/one_copy_raster_buffer_provider.cc
index db23ada..9ee47098f 100644
--- a/cc/raster/one_copy_raster_buffer_provider.cc
+++ b/cc/raster/one_copy_raster_buffer_provider.cc
@@ -14,6 +14,7 @@
 #include "base/feature_list.h"
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/process_memory_dump.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
diff --git a/cc/raster/playback_image_provider_unittest.cc b/cc/raster/playback_image_provider_unittest.cc
index a5e99eb..0250036a 100644
--- a/cc/raster/playback_image_provider_unittest.cc
+++ b/cc/raster/playback_image_provider_unittest.cc
@@ -150,7 +150,7 @@
                        matrix);
   provider.GetRasterContent(draw_image);
   ASSERT_TRUE(cache.last_image().paint_image());
-  ASSERT_EQ(cache.last_image().paint_image(), image);
+  ASSERT_TRUE(cache.last_image().paint_image().IsSameForTesting(image));
   ASSERT_EQ(cache.last_image().frame_index(), 1u);
 }
 
diff --git a/cc/raster/raster_source_unittest.cc b/cc/raster/raster_source_unittest.cc
index b3491f6..cfb38d2 100644
--- a/cc/raster/raster_source_unittest.cc
+++ b/cc/raster/raster_source_unittest.cc
@@ -226,10 +226,11 @@
     TargetColorParams target_color_params;
     std::vector<const DrawImage*> images;
     raster->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), &images);
-    EXPECT_EQ(1u, images.size());
+    ASSERT_EQ(1u, images.size());
     DrawImage image(*images[0], 1.f, PaintImage::kDefaultFrameIndex,
                     target_color_params);
-    EXPECT_EQ(discardable_image[0][0], images[0]->paint_image());
+    EXPECT_TRUE(
+        discardable_image[0][0].IsSameForTesting(images[0]->paint_image()));
     EXPECT_EQ(target_color_params.color_space, image.target_color_space());
   }
   // Shifted tile sized iterators. These should find only one pixel ref.
@@ -238,10 +239,11 @@
     target_color_params.color_space = gfx::ColorSpace::CreateXYZD50();
     std::vector<const DrawImage*> images;
     raster->GetDiscardableImagesInRect(gfx::Rect(260, 260, 256, 256), &images);
-    EXPECT_EQ(1u, images.size());
+    ASSERT_EQ(1u, images.size());
     DrawImage image(*images[0], 1.f, PaintImage::kDefaultFrameIndex,
                     target_color_params);
-    EXPECT_EQ(discardable_image[1][1], images[0]->paint_image());
+    EXPECT_TRUE(
+        discardable_image[1][1].IsSameForTesting(images[0]->paint_image()));
     EXPECT_EQ(target_color_params.color_space, image.target_color_space());
   }
   // Ensure there's no discardable pixel refs in the empty cell
@@ -254,10 +256,13 @@
   {
     std::vector<const DrawImage*> images;
     raster->GetDiscardableImagesInRect(gfx::Rect(0, 0, 512, 512), &images);
-    EXPECT_EQ(3u, images.size());
-    EXPECT_EQ(discardable_image[0][0], images[0]->paint_image());
-    EXPECT_EQ(discardable_image[0][1], images[1]->paint_image());
-    EXPECT_EQ(discardable_image[1][1], images[2]->paint_image());
+    ASSERT_EQ(3u, images.size());
+    EXPECT_TRUE(
+        discardable_image[0][0].IsSameForTesting(images[0]->paint_image()));
+    EXPECT_TRUE(
+        discardable_image[0][1].IsSameForTesting(images[1]->paint_image()));
+    EXPECT_TRUE(
+        discardable_image[1][1].IsSameForTesting(images[2]->paint_image()));
   }
 }
 
diff --git a/cc/raster/staging_buffer_pool.cc b/cc/raster/staging_buffer_pool.cc
index 1b7de8c..d30dca7 100644
--- a/cc/raster/staging_buffer_pool.cc
+++ b/cc/raster/staging_buffer_pool.cc
@@ -12,6 +12,7 @@
 #include "base/functional/bind.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "cc/base/container_util.h"
diff --git a/cc/resources/resource_pool.cc b/cc/resources/resource_pool.cc
index 57297ae..b54c25b 100644
--- a/cc/resources/resource_pool.cc
+++ b/cc/resources/resource_pool.cc
@@ -20,7 +20,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "build/build_config.h"
diff --git a/cc/resources/resource_pool_unittest.cc b/cc/resources/resource_pool_unittest.cc
index 87e99b2..c391101c 100644
--- a/cc/resources/resource_pool_unittest.cc
+++ b/cc/resources/resource_pool_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/viz/client/client_resource_provider.h"
 #include "components/viz/common/resources/resource_sizes.h"
diff --git a/cc/test/fake_layer_tree_host.cc b/cc/test/fake_layer_tree_host.cc
index 15b09366..7c3c646 100644
--- a/cc/test/fake_layer_tree_host.cc
+++ b/cc/test/fake_layer_tree_host.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "cc/animation/animation_host.h"
 #include "cc/layers/layer.h"
diff --git a/cc/test/fake_layer_tree_host.h b/cc/test/fake_layer_tree_host.h
index 11249ff6..34c64cf 100644
--- a/cc/test/fake_layer_tree_host.h
+++ b/cc/test/fake_layer_tree_host.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "cc/benchmarks/micro_benchmark_controller.h"
 #include "cc/test/fake_impl_task_runner_provider.h"
 #include "cc/test/fake_layer_tree_host_client.h"
diff --git a/cc/test/fake_layer_tree_host_impl.cc b/cc/test/fake_layer_tree_host_impl.cc
index 899467cb..111d0d0 100644
--- a/cc/test/fake_layer_tree_host_impl.cc
+++ b/cc/test/fake_layer_tree_host_impl.cc
@@ -8,6 +8,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "cc/animation/animation_host.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "components/viz/test/begin_frame_args_test.h"
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index 2c87c59..f09d985 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -14,6 +14,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/cc/test/layer_tree_test.h b/cc/test/layer_tree_test.h
index 1a858df..47ed374 100644
--- a/cc/test/layer_tree_test.h
+++ b/cc/test/layer_tree_test.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
diff --git a/cc/test/paint_image_matchers.h b/cc/test/paint_image_matchers.h
new file mode 100644
index 0000000..b775fde9a
--- /dev/null
+++ b/cc/test/paint_image_matchers.h
@@ -0,0 +1,63 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_TEST_PAINT_IMAGE_MATCHERS_H_
+#define CC_TEST_PAINT_IMAGE_MATCHERS_H_
+
+#include "cc/paint/paint_image.h"
+#include "cc/paint/skottie_frame_data.h"
+#include "cc/paint/skottie_resource_metadata.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace cc {
+
+// Checks `arg.IsSameForTesting(image)`.
+// Mainly used in container matchers:
+//    std::vector<PaintImage> images;
+//    PaintImage image;
+//    EXPECT_THAT(images, Contains(ImageIsSame(image)));
+MATCHER_P(ImageIsSame, image, "") {
+  return arg.IsSameForTesting(image);
+}
+
+// Checks the values of `arg` (a 2-tuple) are the same image. Used by
+// ImagesAreSame().
+MATCHER(TwoImagesAreSame, "") {
+  return std::get<0>(arg).IsSameForTesting(std::get<1>(arg));
+}
+
+// Checks two containers contain the same images (PaintImage or DrawImage) in
+// the same order.
+// Example use:
+//    std::vector<PaintImage> images1, images2;
+//    EXPECT_THAT(images1, ImagesAreSame(images2));
+template <typename Images>
+auto ImagesAreSame(const Images& images) {
+  return ::testing::Pointwise(TwoImagesAreSame(), images);
+}
+template <typename Image>
+auto ImagesAreSame(std::initializer_list<Image> list) {
+  return ::testing::Pointwise(TwoImagesAreSame(), list);
+}
+
+MATCHER_P2(SkottieImageIs, resource_id, frame_data, "") {
+  return arg.first == HashSkottieResourceId(resource_id) &&
+         arg.second.image.IsSameForTesting(frame_data.image) &&
+         arg.second.quality == frame_data.quality;
+}
+
+MATCHER_P3(SkottieImageIs, resource_id, image, quality, "") {
+  return arg.first == HashSkottieResourceId(resource_id) &&
+         arg.second.image.IsSameForTesting(image) &&
+         arg.second.quality == quality;
+}
+
+MATCHER_P3(SkottieTextIs, resource_id, text, box, "") {
+  return arg.first == HashSkottieResourceId(resource_id) &&
+         arg.second == SkottieTextPropertyValue(text, box);
+}
+
+}  // namespace cc
+
+#endif  // CC_TEST_PAINT_IMAGE_MATCHERS_H_
diff --git a/cc/test/paint_op_helper.h b/cc/test/paint_op_helper.h
index e4cbd2d..7b35dd75 100644
--- a/cc/test/paint_op_helper.h
+++ b/cc/test/paint_op_helper.h
@@ -21,150 +21,147 @@
 // implementation should be limited ot the header.
 class PaintOpHelper {
  public:
-  static std::string ToString(const PaintOp* base_op) {
+  static std::string ToString(const PaintOp& base_op) {
     std::ostringstream str;
     str << std::boolalpha;
-    switch (base_op->GetType()) {
+    switch (base_op.GetType()) {
       case PaintOpType::Annotate: {
-        const auto* op = static_cast<const AnnotateOp*>(base_op);
+        const auto& op = static_cast<const AnnotateOp&>(base_op);
         str << "AnnotateOp(type="
-            << PaintOpHelper::EnumToString(op->annotation_type)
-            << ", rect=" << PaintOpHelper::SkiaTypeToString(op->rect)
-            << ", data=" << PaintOpHelper::SkiaTypeToString(op->data) << ")";
+            << PaintOpHelper::EnumToString(op.annotation_type)
+            << ", rect=" << PaintOpHelper::SkiaTypeToString(op.rect)
+            << ", data=" << PaintOpHelper::SkiaTypeToString(op.data) << ")";
         break;
       }
       case PaintOpType::ClipPath: {
-        const auto* op = static_cast<const ClipPathOp*>(base_op);
-        str << "ClipPathOp(path=" << PaintOpHelper::SkiaTypeToString(op->path)
-            << ", op=" << PaintOpHelper::SkiaTypeToString(op->op)
-            << ", antialias=" << op->antialias
-            << ", use_cache=" << (op->use_cache == UsePaintCache::kEnabled)
+        const auto& op = static_cast<const ClipPathOp&>(base_op);
+        str << "ClipPathOp(path=" << PaintOpHelper::SkiaTypeToString(op.path)
+            << ", op=" << PaintOpHelper::SkiaTypeToString(op.op)
+            << ", antialias=" << op.antialias
+            << ", use_cache=" << (op.use_cache == UsePaintCache::kEnabled)
             << ")";
         break;
       }
       case PaintOpType::ClipRect: {
-        const auto* op = static_cast<const ClipRectOp*>(base_op);
-        str << "ClipRectOp(rect=" << PaintOpHelper::SkiaTypeToString(op->rect)
-            << ", op=" << PaintOpHelper::SkiaTypeToString(op->op)
-            << ", antialias=" << op->antialias << ")";
+        const auto& op = static_cast<const ClipRectOp&>(base_op);
+        str << "ClipRectOp(rect=" << PaintOpHelper::SkiaTypeToString(op.rect)
+            << ", op=" << PaintOpHelper::SkiaTypeToString(op.op)
+            << ", antialias=" << op.antialias << ")";
         break;
       }
       case PaintOpType::ClipRRect: {
-        const auto* op = static_cast<const ClipRRectOp*>(base_op);
-        str << "ClipRRectOp(rrect="
-            << PaintOpHelper::SkiaTypeToString(op->rrect)
-            << ", op=" << PaintOpHelper::SkiaTypeToString(op->op)
-            << ", antialias=" << op->antialias << ")";
+        const auto& op = static_cast<const ClipRRectOp&>(base_op);
+        str << "ClipRRectOp(rrect=" << PaintOpHelper::SkiaTypeToString(op.rrect)
+            << ", op=" << PaintOpHelper::SkiaTypeToString(op.op)
+            << ", antialias=" << op.antialias << ")";
         break;
       }
       case PaintOpType::Concat: {
-        const auto* op = static_cast<const ConcatOp*>(base_op);
-        str << "ConcatOp(matrix=" << PaintOpHelper::SkiaTypeToString(op->matrix)
+        const auto& op = static_cast<const ConcatOp&>(base_op);
+        str << "ConcatOp(matrix=" << PaintOpHelper::SkiaTypeToString(op.matrix)
             << ")";
         break;
       }
       case PaintOpType::CustomData: {
-        const auto* op = static_cast<const CustomDataOp*>(base_op);
-        str << "CustomDataOp(id=" << PaintOpHelper::SkiaTypeToString(op->id)
+        const auto& op = static_cast<const CustomDataOp&>(base_op);
+        str << "CustomDataOp(id=" << PaintOpHelper::SkiaTypeToString(op.id)
             << ")";
         break;
       }
       case PaintOpType::DrawColor: {
-        const auto* op = static_cast<const DrawColorOp*>(base_op);
-        str << "DrawColorOp(color="
-            << PaintOpHelper::SkiaTypeToString(op->color)
-            << ", mode=" << PaintOpHelper::SkiaTypeToString(op->mode) << ")";
+        const auto& op = static_cast<const DrawColorOp&>(base_op);
+        str << "DrawColorOp(color=" << PaintOpHelper::SkiaTypeToString(op.color)
+            << ", mode=" << PaintOpHelper::SkiaTypeToString(op.mode) << ")";
         break;
       }
       case PaintOpType::DrawDRRect: {
-        const auto* op = static_cast<const DrawDRRectOp*>(base_op);
+        const auto& op = static_cast<const DrawDRRectOp&>(base_op);
         str << "DrawDRRectOp(outer="
-            << PaintOpHelper::SkiaTypeToString(op->outer)
-            << ", inner=" << PaintOpHelper::SkiaTypeToString(op->inner)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+            << PaintOpHelper::SkiaTypeToString(op.outer)
+            << ", inner=" << PaintOpHelper::SkiaTypeToString(op.inner)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawImage: {
-        const auto* op = static_cast<const DrawImageOp*>(base_op);
-        str << "DrawImageOp(image=" << PaintOpHelper::ImageToString(op->image)
-            << ", left=" << PaintOpHelper::SkiaTypeToString(op->left)
-            << ", top=" << PaintOpHelper::SkiaTypeToString(op->top)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+        const auto& op = static_cast<const DrawImageOp&>(base_op);
+        str << "DrawImageOp(image=" << PaintOpHelper::ImageToString(op.image)
+            << ", left=" << PaintOpHelper::SkiaTypeToString(op.left)
+            << ", top=" << PaintOpHelper::SkiaTypeToString(op.top)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawImageRect: {
-        const auto* op = static_cast<const DrawImageRectOp*>(base_op);
+        const auto& op = static_cast<const DrawImageRectOp&>(base_op);
         str << "DrawImageRectOp(image="
-            << PaintOpHelper::ImageToString(op->image)
-            << ", src=" << PaintOpHelper::SkiaTypeToString(op->src)
-            << ", dst=" << PaintOpHelper::SkiaTypeToString(op->dst)
-            << ", constraint=" << PaintOpHelper::EnumToString(op->constraint)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+            << PaintOpHelper::ImageToString(op.image)
+            << ", src=" << PaintOpHelper::SkiaTypeToString(op.src)
+            << ", dst=" << PaintOpHelper::SkiaTypeToString(op.dst)
+            << ", constraint=" << PaintOpHelper::EnumToString(op.constraint)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawIRect: {
-        const auto* op = static_cast<const DrawIRectOp*>(base_op);
-        str << "DrawIRectOp(rect=" << PaintOpHelper::SkiaTypeToString(op->rect)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+        const auto& op = static_cast<const DrawIRectOp&>(base_op);
+        str << "DrawIRectOp(rect=" << PaintOpHelper::SkiaTypeToString(op.rect)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawLine: {
-        const auto* op = static_cast<const DrawLineOp*>(base_op);
-        str << "DrawLineOp(x0=" << PaintOpHelper::SkiaTypeToString(op->x0)
-            << ", y0=" << PaintOpHelper::SkiaTypeToString(op->y0)
-            << ", x1=" << PaintOpHelper::SkiaTypeToString(op->x1)
-            << ", y1=" << PaintOpHelper::SkiaTypeToString(op->y1)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+        const auto& op = static_cast<const DrawLineOp&>(base_op);
+        str << "DrawLineOp(x0=" << PaintOpHelper::SkiaTypeToString(op.x0)
+            << ", y0=" << PaintOpHelper::SkiaTypeToString(op.y0)
+            << ", x1=" << PaintOpHelper::SkiaTypeToString(op.x1)
+            << ", y1=" << PaintOpHelper::SkiaTypeToString(op.y1)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawOval: {
-        const auto* op = static_cast<const DrawOvalOp*>(base_op);
-        str << "DrawOvalOp(oval=" << PaintOpHelper::SkiaTypeToString(op->oval)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+        const auto& op = static_cast<const DrawOvalOp&>(base_op);
+        str << "DrawOvalOp(oval=" << PaintOpHelper::SkiaTypeToString(op.oval)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawPath: {
-        const auto* op = static_cast<const DrawPathOp*>(base_op);
-        str << "DrawPathOp(path=" << PaintOpHelper::SkiaTypeToString(op->path)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags)
-            << ", use_cache=" << (op->use_cache == UsePaintCache::kEnabled)
+        const auto& op = static_cast<const DrawPathOp&>(base_op);
+        str << "DrawPathOp(path=" << PaintOpHelper::SkiaTypeToString(op.path)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags)
+            << ", use_cache=" << (op.use_cache == UsePaintCache::kEnabled)
             << ")";
         break;
       }
       case PaintOpType::DrawRecord: {
-        const auto* op = static_cast<const DrawRecordOp*>(base_op);
+        const auto& op = static_cast<const DrawRecordOp&>(base_op);
         str << "DrawRecordOp(record="
-            << PaintOpHelper::RecordToString(op->record) << ")";
+            << PaintOpHelper::RecordToString(op.record) << ")";
         break;
       }
       case PaintOpType::DrawRect: {
-        const auto* op = static_cast<const DrawRectOp*>(base_op);
-        str << "DrawRectOp(rect=" << PaintOpHelper::SkiaTypeToString(op->rect)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+        const auto& op = static_cast<const DrawRectOp&>(base_op);
+        str << "DrawRectOp(rect=" << PaintOpHelper::SkiaTypeToString(op.rect)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawRRect: {
-        const auto* op = static_cast<const DrawRRectOp*>(base_op);
-        str << "DrawRRectOp(rrect="
-            << PaintOpHelper::SkiaTypeToString(op->rrect)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+        const auto& op = static_cast<const DrawRRectOp&>(base_op);
+        str << "DrawRRectOp(rrect=" << PaintOpHelper::SkiaTypeToString(op.rrect)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::DrawSkottie: {
-        const auto* op = static_cast<const DrawSkottieOp*>(base_op);
+        const auto& op = static_cast<const DrawSkottieOp&>(base_op);
         str << "DrawSkottieOp("
-            << "skottie=" << PaintOpHelper::SkottieToString(op->skottie)
-            << ", dst=" << PaintOpHelper::SkiaTypeToString(op->dst)
-            << ", t=" << op->t << ")";
+            << "skottie=" << PaintOpHelper::SkottieToString(op.skottie)
+            << ", dst=" << PaintOpHelper::SkiaTypeToString(op.dst)
+            << ", t=" << op.t << ")";
         break;
       }
       case PaintOpType::DrawTextBlob: {
-        const auto* op = static_cast<const DrawTextBlobOp*>(base_op);
+        const auto& op = static_cast<const DrawTextBlobOp&>(base_op);
         str << "DrawTextBlobOp(blob="
-            << PaintOpHelper::TextBlobToString(op->blob)
-            << ", x=" << PaintOpHelper::SkiaTypeToString(op->x)
-            << ", y=" << PaintOpHelper::SkiaTypeToString(op->y)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+            << PaintOpHelper::TextBlobToString(op.blob)
+            << ", x=" << PaintOpHelper::SkiaTypeToString(op.x)
+            << ", y=" << PaintOpHelper::SkiaTypeToString(op.y)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::Noop: {
@@ -176,9 +173,9 @@
         break;
       }
       case PaintOpType::Rotate: {
-        const auto* op = static_cast<const RotateOp*>(base_op);
+        const auto& op = static_cast<const RotateOp&>(base_op);
         str << "RotateOp(degrees="
-            << PaintOpHelper::SkiaTypeToString(op->degrees) << ")";
+            << PaintOpHelper::SkiaTypeToString(op.degrees) << ")";
         break;
       }
       case PaintOpType::Save: {
@@ -186,40 +183,40 @@
         break;
       }
       case PaintOpType::SaveLayer: {
-        const auto* op = static_cast<const SaveLayerOp*>(base_op);
+        const auto& op = static_cast<const SaveLayerOp&>(base_op);
         str << "SaveLayerOp(bounds="
-            << PaintOpHelper::SkiaTypeToString(op->bounds)
-            << ", flags=" << PaintOpHelper::FlagsToString(op->flags) << ")";
+            << PaintOpHelper::SkiaTypeToString(op.bounds)
+            << ", flags=" << PaintOpHelper::FlagsToString(op.flags) << ")";
         break;
       }
       case PaintOpType::SaveLayerAlpha: {
-        const auto* op = static_cast<const SaveLayerAlphaOp*>(base_op);
+        const auto& op = static_cast<const SaveLayerAlphaOp&>(base_op);
         str << "SaveLayerAlphaOp(bounds="
-            << PaintOpHelper::SkiaTypeToString(op->bounds)
-            << ", alpha=" << static_cast<uint32_t>(op->alpha * 255) << ")";
+            << PaintOpHelper::SkiaTypeToString(op.bounds)
+            << ", alpha=" << static_cast<uint32_t>(op.alpha * 255) << ")";
         break;
       }
       case PaintOpType::Scale: {
-        const auto* op = static_cast<const ScaleOp*>(base_op);
-        str << "ScaleOp(sx=" << PaintOpHelper::SkiaTypeToString(op->sx)
-            << ", sy=" << PaintOpHelper::SkiaTypeToString(op->sy) << ")";
+        const auto& op = static_cast<const ScaleOp&>(base_op);
+        str << "ScaleOp(sx=" << PaintOpHelper::SkiaTypeToString(op.sx)
+            << ", sy=" << PaintOpHelper::SkiaTypeToString(op.sy) << ")";
         break;
       }
       case PaintOpType::SetMatrix: {
-        const auto* op = static_cast<const SetMatrixOp*>(base_op);
+        const auto& op = static_cast<const SetMatrixOp&>(base_op);
         str << "SetMatrixOp(matrix="
-            << PaintOpHelper::SkiaTypeToString(op->matrix) << ")";
+            << PaintOpHelper::SkiaTypeToString(op.matrix) << ")";
         break;
       }
       case PaintOpType::Translate: {
-        const auto* op = static_cast<const TranslateOp*>(base_op);
-        str << "TranslateOp(dx=" << PaintOpHelper::SkiaTypeToString(op->dx)
-            << ", dy=" << PaintOpHelper::SkiaTypeToString(op->dy) << ")";
+        const auto& op = static_cast<const TranslateOp&>(base_op);
+        str << "TranslateOp(dx=" << PaintOpHelper::SkiaTypeToString(op.dx)
+            << ", dy=" << PaintOpHelper::SkiaTypeToString(op.dy) << ")";
         break;
       }
       case PaintOpType::SetNodeId: {
-        const auto* op = static_cast<const SetNodeIdOp*>(base_op);
-        str << "SetNodeIdOp(id=" << op->node_id << ")";
+        const auto& op = static_cast<const SetNodeIdOp&>(base_op);
+        str << "SetNodeIdOp(id=" << op.node_id << ")";
         break;
       }
     }
diff --git a/cc/test/paint_op_matchers.h b/cc/test/paint_op_matchers.h
index 58ab4d5..b8e22d8 100644
--- a/cc/test/paint_op_matchers.h
+++ b/cc/test/paint_op_matchers.h
@@ -27,11 +27,11 @@
           op,
           base::StringPrintf("%s equal to %s",
                              negation ? "isn't" : "is",
-                             PaintOpHelper::ToString(&op).c_str())) {
-  *result_listener << "\n    Expected: " << PaintOpHelper::ToString(&op)
-                   << "\n    Actual: " << PaintOpHelper::ToString(&arg);
+                             PaintOpHelper::ToString(op).c_str())) {
+  *result_listener << "\n    Expected: " << PaintOpHelper::ToString(op)
+                   << "\n    Actual: " << PaintOpHelper::ToString(arg);
   const PaintOp& op_ref = op;  // To unpack std::reference_wrapper, if needed.
-  return op_ref == arg;
+  return op_ref.EqualsForTesting(arg);
 }
 
 // Matcher checking that a PaintOpBuffer contains the specified PaintOps.
@@ -54,7 +54,7 @@
 // Example use:
 //   PaintOpBuffer buffer = ...;
 //   EXPECT_THAT(buffer,
-//               ElementsAre(PaintOpIs<SaveOp>(), PaintOpIs<SetMatrixOp()));
+//               ElementsAre(PaintOpIs<SaveOp>(), PaintOpIs<SetMatrixOp>()));
 template <typename OpT>
 class PaintOpIs {
  public:
diff --git a/cc/test/pixel_test.cc b/cc/test/pixel_test.cc
index ea04b88..8ffb0ae 100644
--- a/cc/test/pixel_test.cc
+++ b/cc/test/pixel_test.cc
@@ -15,7 +15,6 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/test/test_switches.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/raster/raster_buffer_provider.h"
 #include "cc/test/fake_output_surface_client.h"
diff --git a/cc/test/scheduler_test_common.cc b/cc/test/scheduler_test_common.cc
index 6a9843c49..cc9455f 100644
--- a/cc/test/scheduler_test_common.cc
+++ b/cc/test/scheduler_test_common.cc
@@ -10,6 +10,7 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "cc/debug/rendering_stats_instrumentation.h"
 
diff --git a/cc/test/scheduler_test_common.h b/cc/test/scheduler_test_common.h
index 8d34c54..d07717c 100644
--- a/cc/test/scheduler_test_common.h
+++ b/cc/test/scheduler_test_common.h
@@ -11,6 +11,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "cc/metrics/compositor_timing_history.h"
 #include "cc/metrics/dropped_frame_counter.h"
diff --git a/cc/tiles/checker_image_tracker_unittest.cc b/cc/tiles/checker_image_tracker_unittest.cc
index f43905f..e970f41 100644
--- a/cc/tiles/checker_image_tracker_unittest.cc
+++ b/cc/tiles/checker_image_tracker_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "cc/paint/paint_image_builder.h"
+#include "cc/test/paint_image_matchers.h"
 #include "cc/test/skia_common.h"
 #include "cc/tiles/image_controller.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -192,8 +193,10 @@
       BuildImageDecodeQueue(draw_images, WhichTree::PENDING_TREE);
 
   ASSERT_EQ(2u, image_decode_queue.size());
-  EXPECT_EQ(checkerable_image.paint_image(), image_decode_queue[0].paint_image);
-  EXPECT_EQ(checkerable_image.paint_image(), image_decode_queue[1].paint_image);
+  EXPECT_TRUE(checkerable_image.paint_image().IsSameForTesting(
+      image_decode_queue[0].paint_image));
+  EXPECT_TRUE(checkerable_image.paint_image().IsSameForTesting(
+      image_decode_queue[1].paint_image));
 
   checker_image_tracker_->ScheduleImageDecodeQueue(image_decode_queue);
   EXPECT_EQ(image_controller_.num_of_locked_images(), 1);
@@ -432,7 +435,8 @@
   CheckerImageTracker::ImageDecodeQueue image_decode_queue =
       BuildImageDecodeQueue(draw_images, WhichTree::PENDING_TREE);
   EXPECT_EQ(image_decode_queue.size(), 1U);
-  EXPECT_EQ(image_decode_queue[0].paint_image, static_image.paint_image());
+  EXPECT_TRUE(image_decode_queue[0].paint_image.IsSameForTesting(
+      static_image.paint_image()));
 
   // Change the partial image to complete and try again. It should sstill not
   // be checkered.
@@ -530,18 +534,15 @@
   checker_image_tracker_->SetMaxDecodePriorityAllowed(
       CheckerImageTracker::DecodeType::kRaster);
   base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(image_controller_.decoded_images().size(), 2u);
-  EXPECT_EQ(image_controller_.decoded_images()[0], image1);
-  EXPECT_EQ(image_controller_.decoded_images()[1], image2);
+  EXPECT_THAT(image_controller_.decoded_images(),
+              ImagesAreSame({image1, image2}));
 
   // All decodes allowed. The complete queue should be flushed.
   checker_image_tracker_->SetMaxDecodePriorityAllowed(
       CheckerImageTracker::DecodeType::kPreDecode);
   base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(image_controller_.decoded_images()[0], image1);
-  EXPECT_EQ(image_controller_.decoded_images()[1], image2);
-  EXPECT_EQ(image_controller_.decoded_images()[2], image3);
-  EXPECT_EQ(image_controller_.decoded_images()[3], image4);
+  EXPECT_THAT(image_controller_.decoded_images(),
+              ImagesAreSame({image1, image2, image3, image4}));
 }
 
 TEST_F(CheckerImageTrackerTest, UseSrcRectForSize) {
diff --git a/cc/tiles/decoded_image_tracker.cc b/cc/tiles/decoded_image_tracker.cc
index 06704097..26183da 100644
--- a/cc/tiles/decoded_image_tracker.cc
+++ b/cc/tiles/decoded_image_tracker.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "cc/tiles/decoded_image_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/trace_event.h"
 
diff --git a/cc/tiles/decoded_image_tracker.h b/cc/tiles/decoded_image_tracker.h
index 958ead1..4db4947f 100644
--- a/cc/tiles/decoded_image_tracker.h
+++ b/cc/tiles/decoded_image_tracker.h
@@ -11,6 +11,7 @@
 
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "cc/cc_export.h"
diff --git a/cc/tiles/image_controller.cc b/cc/tiles/image_controller.cc
index 7ee975d6..f415afb 100644
--- a/cc/tiles/image_controller.cc
+++ b/cc/tiles/image_controller.cc
@@ -9,6 +9,7 @@
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/base/completion_event.h"
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
index a39e057..6cb9f4e 100644
--- a/cc/tiles/tile_manager.cc
+++ b/cc/tiles/tile_manager.cc
@@ -20,6 +20,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/ranges/algorithm.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/traced_value.h"
 #include "cc/base/devtools_instrumentation.h"
diff --git a/cc/tiles/tile_manager_perftest.cc b/cc/tiles/tile_manager_perftest.cc
index a1300fb..e95057e 100644
--- a/cc/tiles/tile_manager_perftest.cc
+++ b/cc/tiles/tile_manager_perftest.cc
@@ -7,7 +7,6 @@
 
 #include "base/lazy_instance.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/lap_timer.h"
 #include "cc/raster/raster_buffer.h"
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc
index 0ad6e8367..a515f9f 100644
--- a/cc/tiles/tile_manager_unittest.cc
+++ b/cc/tiles/tile_manager_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/process_memory_dump.h"
 #include "cc/base/features.h"
 #include "cc/layers/recording_source.h"
diff --git a/cc/trees/frame_rate_estimator.cc b/cc/trees/frame_rate_estimator.cc
index 6d11cca3..717fe9e 100644
--- a/cc/trees/frame_rate_estimator.cc
+++ b/cc/trees/frame_rate_estimator.cc
@@ -4,6 +4,7 @@
 
 #include "cc/trees/frame_rate_estimator.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
 
 namespace cc {
diff --git a/cc/trees/frame_rate_estimator.h b/cc/trees/frame_rate_estimator.h
index 20c90e135..29cad71 100644
--- a/cc/trees/frame_rate_estimator.h
+++ b/cc/trees/frame_rate_estimator.h
@@ -5,6 +5,7 @@
 #ifndef CC_TREES_FRAME_RATE_ESTIMATOR_H_
 #define CC_TREES_FRAME_RATE_ESTIMATOR_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "cc/base/delayed_unique_notifier.h"
diff --git a/cc/trees/image_animation_controller.cc b/cc/trees/image_animation_controller.cc
index f53e48e1..4e87ba5 100644
--- a/cc/trees/image_animation_controller.cc
+++ b/cc/trees/image_animation_controller.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/base/features.h"
 #include "cc/paint/image_animation_count.h"
diff --git a/cc/trees/layer_tree_frame_sink.cc b/cc/trees/layer_tree_frame_sink.cc
index fbc38ccb..d9fdd43d8 100644
--- a/cc/trees/layer_tree_frame_sink.cc
+++ b/cc/trees/layer_tree_frame_sink.cc
@@ -9,7 +9,7 @@
 
 #include "base/functional/bind.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/trees/layer_tree_frame_sink_client.h"
 #include "components/viz/common/gpu/context_lost_observer.h"
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index ef29667..d9d4307 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -25,8 +25,8 @@
 #include "base/numerics/safe_math.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
@@ -790,6 +790,12 @@
   if (visible_ == visible)
     return;
   visible_ = visible;
+  // If the page becomes invisible, corresponding metrics will be discarded
+  // because they are invalid. The metrics will be measured when the page
+  // becomes visible again.
+  if (!visible_) {
+    ClearEventsMetrics();
+  }
   proxy_->SetVisible(visible);
 }
 
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index 0a24838..70c70c4 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -24,6 +24,7 @@
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "cc/base/completion_event.h"
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 5dce2b3f..de3d2dc4 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -34,6 +34,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/traced_value.h"
 #include "build/build_config.h"
@@ -3489,7 +3490,17 @@
     auto now = base::TimeTicks::Now();
     total_frame_counter_.OnHide(now);
     dropped_frame_counter_.ResetPendingFrames(now);
+
+    // When page is invisible, throw away corresponding EventsMetrics since
+    // these metrics will be incorrect due to duration of page being invisible.
+    active_tree()->TakeEventsMetrics();
+    events_metrics_manager_.TakeSavedEventsMetrics();
+    if (pending_tree()) {
+      pending_tree()->TakeEventsMetrics();
+    }
   }
+  // Notify reporting controller of transition between visible and invisible
+  compositor_frame_reporting_controller_->SetVisible(visible_);
   DidVisibilityChange(this, visible_);
   UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
 
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 52647d0a..de60eb2 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -22,6 +22,7 @@
 #include "base/memory/shared_memory_mapping.h"
 #include "base/rand_util.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "cc/benchmarks/micro_benchmark_controller_impl.h"
 #include "cc/cc_export.h"
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 3439776..0f39a04 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -17569,8 +17569,9 @@
   // Finally, 'paint' the content. This should unlock tile preparation and
   // update the PictureLayerImpl's map.
   std::move(painter->TakeDoneCallback()).Run(std::move(painted_job_map));
-  EXPECT_EQ(*root->GetPaintWorkletRecordMap().find(input)->second.second,
-            record);
+  EXPECT_TRUE(root->GetPaintWorkletRecordMap()
+                  .find(input)
+                  ->second.second->EqualsForTesting(record));
   EXPECT_TRUE(did_prepare_tiles_);
 }
 
@@ -17667,8 +17668,9 @@
   // updated, but since the tree was force activated there should be no tile
   // preparation.
   std::move(painter->TakeDoneCallback()).Run(std::move(painted_job_map));
-  EXPECT_EQ(root->GetPaintWorkletRecordMap().find(input)->second.second,
-            record);
+  EXPECT_TRUE(root->GetPaintWorkletRecordMap()
+                  .find(input)
+                  ->second.second->EqualsForTesting(record));
   EXPECT_FALSE(did_prepare_tiles_);
 }
 
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index e9615a1..d04d70e 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "cc/animation/animation_host.h"
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc
index 59d0401..83f41ca 100644
--- a/cc/trees/layer_tree_host_unittest_scroll.cc
+++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -9,7 +9,6 @@
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/animation/animation_host.h"
 #include "cc/base/completion_event.h"
diff --git a/cc/trees/proxy_impl.cc b/cc/trees/proxy_impl.cc
index bb24de5..1194b35a 100644
--- a/cc/trees/proxy_impl.cc
+++ b/cc/trees/proxy_impl.cc
@@ -17,6 +17,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
 #include "cc/base/devtools_instrumentation.h"
diff --git a/cc/trees/proxy_impl.h b/cc/trees/proxy_impl.h
index f642fc4..d1b085b 100644
--- a/cc/trees/proxy_impl.h
+++ b/cc/trees/proxy_impl.h
@@ -11,6 +11,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/base/completion_event.h"
 #include "cc/base/delayed_unique_notifier.h"
 #include "cc/input/browser_controls_state.h"
diff --git a/cc/trees/proxy_main.h b/cc/trees/proxy_main.h
index edc8875..9cd3c8fc 100644
--- a/cc/trees/proxy_main.h
+++ b/cc/trees/proxy_main.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "cc/cc_export.h"
 #include "cc/input/browser_controls_state.h"
diff --git a/chrome/VERSION b/chrome/VERSION
index 0be90ce..429b8548 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=111
 MINOR=0
-BUILD=5529
+BUILD=5530
 PATCH=0
diff --git a/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc b/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
index 9d85afb..3209072e 100644
--- a/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
+++ b/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
@@ -4,8 +4,8 @@
 
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_functions.h"
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
index 2cc9d26..eb3e534 100644
--- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
+++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
@@ -45,6 +45,7 @@
 import org.chromium.base.jank_tracker.JankMetricUMARecorder;
 import org.chromium.base.jank_tracker.JankMetricUMARecorderJni;
 import org.chromium.base.library_loader.LibraryLoader;
+import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
@@ -215,6 +216,9 @@
         Assert.assertFalse(LibraryLoader.getInstance().isInitialized());
         assertThat(cta.getLayoutManager()).isInstanceOf(LayoutManagerChromePhone.class);
         TabUiTestHelper.verifyTabSwitcherLayoutType(cta);
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramTotalCountForTesting(
+                        "Startup.Android.IsHomepagePolicyManagerInitialized"));
     }
 
     @Test
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 220e7ae..259d841 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -350,6 +350,11 @@
     private long mIntentHandlingTimeMs;
 
     /**
+     * Whether the Start surface should be shown when Chrome is launched.
+     */
+    private Boolean mShouldShowOverviewOnStart;
+
+    /**
      * Whether the StartSurface is shown when Chrome is launched.
      */
     private boolean mOverviewShownOnStart;
@@ -2883,10 +2888,15 @@
 
     @Override
     public boolean shouldShowOverviewPageOnStart() {
+        if (mShouldShowOverviewOnStart != null) {
+            return mShouldShowOverviewOnStart;
+        }
+
         assert mInactivityTracker != null;
         assert getTabModelSelector() != null;
-        return ReturnToChromeUtil.shouldShowOverviewPageOnStart(
+        mShouldShowOverviewOnStart = ReturnToChromeUtil.shouldShowOverviewPageOnStart(
                 this, getIntent(), getTabModelSelector(), mInactivityTracker, isTablet());
+        return mShouldShowOverviewOnStart;
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
index d71228a4..a9291545 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
@@ -27,7 +27,6 @@
 import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksReader;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.renderer_host.ChromeNavigationUIData;
-import org.chromium.chrome.browser.subscriptions.CommerceSubscriptionsServiceFactory;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabLaunchType;
 import org.chromium.chrome.browser.tabmodel.AsyncTabCreationParams;
@@ -212,13 +211,7 @@
         mBookmarkModel = BookmarkModel.getForProfile(profile);
         mMainView = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.bookmark_main, null);
 
-        // TODO(1293885): Remove this validator once we have an API on the backend that sends
-        //                success/failure information back.
         if (ShoppingFeatures.isShoppingListEnabled()) {
-            PowerBookmarkUtils.validateBookmarkedCommerceSubscriptions(mBookmarkModel,
-                    new CommerceSubscriptionsServiceFactory()
-                            .getForLastUsedProfile()
-                            .getSubscriptionsManager());
             ShoppingServiceFactory.getForProfile(profile).scheduleSavedProductUpdate();
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java
index ed95fb94..31fce5e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java
@@ -86,9 +86,10 @@
     public void destroy() {
         mDestroyChecker.checkNotDestroyed();
 
-        mDestroyChecker.destroy();
         mBookmarkModel.removeDeleteObserver(this);
         mSnackbarManager.dismissSnackbars(this);
+
+        mDestroyChecker.destroy();
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtils.java
index bb6bff6..1900499 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtils.java
@@ -7,18 +7,15 @@
 import android.content.res.Resources;
 import android.os.Build;
 
-import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.google.common.primitives.UnsignedLongs;
 
 import org.chromium.base.Callback;
-import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.commerce.PriceTrackingUtils;
 import org.chromium.chrome.browser.commerce.ShoppingServiceFactory;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.price_tracking.PriceDropNotificationManagerFactory;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.subscriptions.CommerceSubscription;
@@ -26,7 +23,6 @@
 import org.chromium.chrome.browser.subscriptions.CommerceSubscription.PriceTrackableOffer;
 import org.chromium.chrome.browser.subscriptions.CommerceSubscription.SubscriptionManagementType;
 import org.chromium.chrome.browser.subscriptions.CommerceSubscription.TrackingIdType;
-import org.chromium.chrome.browser.subscriptions.SubscriptionsManager;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
@@ -36,34 +32,13 @@
 import org.chromium.components.power_bookmarks.PowerBookmarkType;
 import org.chromium.components.power_bookmarks.ShoppingSpecifics;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 
 /** Utilities for use in power bookmarks. */
 // TODO(1351830): We should add a JNI layer for the native version of these utilities in
 //                price_tracking_utils and use those instead.
 public class PowerBookmarkUtils {
-    /**
-     * Possible results for the validation of client and server-side subscriptions. These need to
-     * stay in sync with CommerceSubscriptionValidationResult in enums.xml.
-     */
-    @IntDef({ValidationResult.CLEAN, ValidationResult.BOOKMARKS_FIXED,
-            ValidationResult.SUBSCRIPTIONS_FIXED,
-            ValidationResult.BOOKMARKS_AND_SUBSCRIPTIONS_FIXED})
-    @Retention(RetentionPolicy.SOURCE)
-    private @interface ValidationResult {
-        int CLEAN = 0;
-        int BOOKMARKS_FIXED = 1;
-        int SUBSCRIPTIONS_FIXED = 2;
-        int BOOKMARKS_AND_SUBSCRIPTIONS_FIXED = 3;
-
-        int MAX = BOOKMARKS_AND_SUBSCRIPTIONS_FIXED;
-    }
-
     private static Boolean sPriceTrackingEligibleForTesting;
     private static PowerBookmarkMeta sPowerBookmarkMetaForTesting;
 
@@ -224,143 +199,4 @@
     public static void setPowerBookmarkMetaForTesting(@Nullable PowerBookmarkMeta meta) {
         sPowerBookmarkMetaForTesting = meta;
     }
-
-    /**
-     * Perform a sanity check on the bookmarked products that are considered to be price tracked. We
-     * need this because we can't guarantee that the backend successfully completed the update --
-     * this is currently done asynchronously without a confirmation. This method gets the current
-     * list of subscriptions and compares them to the user's local collection. There are two
-     * possible scenarios:
-     *
-     * 1. The service is missing a subscription that the user has locally. In this case we mark the
-     *    local bookmark as not price tracked.
-     * 2. The service has a USER_MANAGED subscription that is not in the user's local bookmarks. In
-     *    this case we remove the subscription from the service.
-     *
-     * @param bookmarkModel A means of accessing the user's bookmarks.
-     * @param subscriptionsManager A handle to the subscriptions backend.
-     */
-    public static void validateBookmarkedCommerceSubscriptions(
-            BookmarkModel bookmarkModel, SubscriptionsManager subscriptionsManager) {
-        if (subscriptionsManager == null || bookmarkModel == null) return;
-
-        Runnable updater = () -> {
-            // At this point native should be ready since the bookmark model has loaded.
-            if (!ChromeFeatureList.isEnabled(
-                        ChromeFeatureList.SHOPPING_LIST_ENABLE_DESYNC_RESOLUTION)) {
-                return;
-            }
-
-            subscriptionsManager.getSubscriptions(
-                    CommerceSubscriptionType.PRICE_TRACK, true, (subscriptions) -> {
-                        doBookmarkedSubscriptionValidation(
-                                bookmarkModel, subscriptionsManager, subscriptions);
-                    });
-        };
-
-        // Make sure the bookmark model is loaded prior to attempting to operate on it. Otherwise
-        // wait and then execute.
-        if (bookmarkModel.isBookmarkModelLoaded()) {
-            updater.run();
-        } else {
-            bookmarkModel.addObserver(new BookmarkModelObserver() {
-                @Override
-                public void bookmarkModelLoaded() {
-                    updater.run();
-                    bookmarkModel.removeObserver(this);
-                }
-
-                @Override
-                public void bookmarkModelChanged() {}
-            });
-        }
-    }
-
-    /** @see #validateBookmarkedCommerceSubscriptions(BookmarkModel, SubscriptionsManager) */
-    private static void doBookmarkedSubscriptionValidation(BookmarkModel bookmarkModel,
-            SubscriptionsManager subscriptionsManager, List<CommerceSubscription> subscriptions) {
-        if (subscriptions == null) return;
-
-        List<BookmarkId> products =
-                bookmarkModel.searchBookmarks("", null, PowerBookmarkType.SHOPPING, -1);
-
-        // Even if we get nothing back from bookmarks, run through the process since we might need
-        // to unsubscribe from products on the backend.
-        if (products == null) products = new ArrayList<>();
-
-        // Keep two sets of IDs since ID:Bookmark is NOT 1:1. |unusedCusterIds| will be used to
-        // remove subscriptions for bookmarks not currently on (removed from) the client.
-        HashSet<Long> clusterIdSet = new HashSet<>();
-        HashMap<Long, CommerceSubscription> unusedClusterIds = new HashMap<>();
-
-        for (CommerceSubscription c : subscriptions) {
-            if (CommerceSubscription.SubscriptionManagementType.USER_MANAGED.equals(
-                        c.getManagementType())) {
-                long clusterId = UnsignedLongs.parseUnsignedLong(c.getTrackingId());
-                clusterIdSet.add(clusterId);
-                unusedClusterIds.put(clusterId, c);
-            }
-        }
-
-        int bookmarkFixCount = 0;
-        int subscriptionFixCount = 0;
-
-        // Iterate over all the bookmarked products and ensure the ones that are tracked agree
-        // with the ones that the subscription manager thinks are tracked.
-        for (BookmarkId product : products) {
-            PowerBookmarkMeta meta = bookmarkModel.getPowerBookmarkMeta(product);
-            if (!meta.hasShoppingSpecifics()) continue;
-
-            ShoppingSpecifics specifics = meta.getShoppingSpecifics();
-
-            if (!specifics.getIsPriceTracked()) continue;
-
-            if (clusterIdSet.contains(specifics.getProductClusterId())) {
-                // A cluster ID is only considered used if the user is still subscribed to it.
-                unusedClusterIds.remove(specifics.getProductClusterId());
-                continue;
-            }
-
-            // Reset the meta using a copy of the existing one, but set the price tracking flag
-            // to false.
-            ShoppingSpecifics newSpecifics =
-                    ShoppingSpecifics.newBuilder(specifics).setIsPriceTracked(false).build();
-            bookmarkModel.setPowerBookmarkMeta(product,
-                    PowerBookmarkMeta.newBuilder(meta).setShoppingSpecifics(newSpecifics).build());
-            bookmarkFixCount++;
-        }
-
-        // Finally, unsubscribe from active subscriptions if the bookmark either didn't exist or the
-        // bookmark wasn't flagged as being price tracked.
-        if (!unusedClusterIds.isEmpty()) {
-            ArrayList<CommerceSubscription> itemsToUnsubscribe =
-                    new ArrayList<>(unusedClusterIds.values());
-            subscriptionFixCount += itemsToUnsubscribe.size();
-            subscriptionsManager.unsubscribe(itemsToUnsubscribe, (id) -> {});
-        }
-
-        recordValidationResult(bookmarkFixCount, subscriptionFixCount);
-    }
-
-    /**
-     * Record the result of the subscriptions validation.
-     * @param bookmarkFixCount The number of bookmarks that needed updating.
-     * @param subscriptionFixCount The number of subscriptions that needed updating on the backend.
-     */
-    private static void recordValidationResult(int bookmarkFixCount, int subscriptionFixCount) {
-        @ValidationResult
-        int result = ValidationResult.CLEAN;
-
-        if (bookmarkFixCount > 0 && subscriptionFixCount > 0) {
-            result = ValidationResult.BOOKMARKS_AND_SUBSCRIPTIONS_FIXED;
-        } else if (bookmarkFixCount > 0) {
-            result = ValidationResult.BOOKMARKS_FIXED;
-        } else if (subscriptionFixCount > 0) {
-            result = ValidationResult.SUBSCRIPTIONS_FIXED;
-        }
-
-        RecordHistogram.recordEnumeratedHistogram(
-                "Commerce.PowerBookmarks.SubscriptionValidationResult", result,
-                ValidationResult.MAX);
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java
index ee772060c..7006b0bc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java
@@ -71,6 +71,13 @@
     }
 
     /**
+     * Returns whether the HomepagePolicyManager has been initialized with native. The
+     * HomepagePolicyManager can only return valid result after initialing with native.
+     */
+    public static boolean isInitializedWithNative() {
+        return getInstance().isInitialized();
+    }
+    /**
      * @return The homepage URL from the homepage preference.
      */
     @NonNull
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
index 3a95497..60629f35 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
@@ -28,6 +28,7 @@
 import org.chromium.chrome.browser.profiles.ProfileAccountManagementMetrics;
 import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
 import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
+import org.chromium.chrome.browser.signin.services.DisplayableProfileData;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.services.ProfileDataCache;
 import org.chromium.chrome.browser.signin.services.SigninManager;
@@ -171,9 +172,10 @@
             return;
         }
 
-        String fullName = mProfileDataCache.getProfileDataOrDefault(mSignedInAccountName)
-                                  .getFullNameOrEmail();
-        getActivity().setTitle(fullName);
+        DisplayableProfileData profileData =
+                mProfileDataCache.getProfileDataOrDefault(mSignedInAccountName);
+        getActivity().setTitle(SyncSettingsUtils.getDisplayableFullNameOrEmailWithPreference(
+                profileData, getContext(), SyncSettingsUtils.TitlePreference.FULL_NAME));
 
         if (ChromeFeatureList.isEnabled(
                     ChromeFeatureList.ADD_EDU_ACCOUNT_FROM_ACCOUNT_SETTINGS_FOR_SUPERVISED_USERS)) {
@@ -352,9 +354,12 @@
     private Preference createAccountPreference(Account account) {
         Preference accountPreference = new Preference(getStyledContext());
         accountPreference.setLayoutResource(R.layout.account_management_account_row);
-        accountPreference.setTitle(account.name);
-        accountPreference.setIcon(
-                mProfileDataCache.getProfileDataOrDefault(account.name).getImage());
+
+        DisplayableProfileData profileData =
+                mProfileDataCache.getProfileDataOrDefault(account.name);
+        accountPreference.setTitle(SyncSettingsUtils.getDisplayableFullNameOrEmailWithPreference(
+                profileData, getContext(), SyncSettingsUtils.TitlePreference.EMAIL));
+        accountPreference.setIcon(profileData.getImage());
 
         accountPreference.setOnPreferenceClickListener(SyncSettingsUtils.toOnClickListener(
                 this, () -> SigninUtils.openSettingsForAccount(getActivity(), account)));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
index 5112a89..881212c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
@@ -51,6 +51,10 @@
     private final ProfileDataCache mProfileDataCache;
     private final AccountManagerFacade mAccountManagerFacade;
 
+    public ProfileDataCache getProfileDataCache() {
+        return mProfileDataCache;
+    }
+
     /**
      * Constructor for inflating from XML.
      */
@@ -181,9 +185,12 @@
 
     private void setupSignedIn(String accountName) {
         DisplayableProfileData profileData = mProfileDataCache.getProfileDataOrDefault(accountName);
-
-        setTitle(profileData.getFullNameOrEmail());
-        setSummary(accountName);
+        final boolean canShowEmailAddress = profileData.hasDisplayableEmailAddress()
+                || !ChromeFeatureList.isEnabled(
+                        ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL);
+        setSummary(canShowEmailAddress ? accountName : "");
+        setTitle(SyncSettingsUtils.getDisplayableFullNameOrEmailWithPreference(
+                profileData, getContext(), SyncSettingsUtils.TitlePreference.FULL_NAME));
         setFragment(AccountManagementFragment.class.getName());
         setIcon(profileData.getImage());
         setViewEnabled(true);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
index c8f8ee91..7df35e82 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
@@ -13,6 +13,7 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.provider.Browser;
+import android.text.TextUtils;
 
 import androidx.annotation.IntDef;
 import androidx.annotation.Nullable;
@@ -33,6 +34,7 @@
 import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.signin.services.DisplayableProfileData;
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.sync.SyncService;
 import org.chromium.chrome.browser.sync.TrustedVaultClient;
@@ -53,6 +55,13 @@
     private static final String MY_ACCOUNT_URL = "https://myaccount.google.com/smartlink/home";
     private static final String TAG = "SyncSettingsUtils";
 
+    @IntDef({TitlePreference.FULL_NAME, TitlePreference.EMAIL})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface TitlePreference {
+        int FULL_NAME = 0;
+        int EMAIL = 1;
+    }
+
     @IntDef({SyncError.NO_ERROR, SyncError.AUTH_ERROR, SyncError.PASSPHRASE_REQUIRED,
             SyncError.TRUSTED_VAULT_KEY_REQUIRED_FOR_EVERYTHING,
             SyncError.TRUSTED_VAULT_KEY_REQUIRED_FOR_PASSWORDS,
@@ -483,4 +492,43 @@
                      Toast.LENGTH_LONG)
                 .show();
     }
+
+    /**
+     * Returns either the full name or the email address of a DisplayableProfileData according
+     * to preference. If the preferred string is not displayable, returns the other displayable
+     * string, or fallback to default string.
+     *
+     * This method is used by {@link Preference#setTitle(CharSequence)} callers.
+     *
+     * @param profileData DisplayableProfileData containing the user's full name and email address.
+     * @param context The context where the returned string is passed to setTitle(CharSequence).
+     * @param preference Whether the full name or the email is preferred.
+     */
+    public static String getDisplayableFullNameOrEmailWithPreference(
+            DisplayableProfileData profileData, Context context, @TitlePreference int preference) {
+        final String fullName = profileData.getFullName();
+        final String accountEmail = profileData.getAccountEmail();
+        final String defaultString = context.getString(R.string.default_google_account_username);
+        final boolean canShowFullName = !TextUtils.isEmpty(fullName);
+        final boolean canShowEmailAddress = profileData.hasDisplayableEmailAddress()
+                || !ChromeFeatureList.isEnabled(
+                        ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL);
+        // Both strings are not displayable, use generic string.
+        if (!canShowFullName && !canShowEmailAddress) {
+            return defaultString;
+        }
+        // Both strings are displayable, use the preferred one.
+        if (canShowFullName && canShowEmailAddress) {
+            switch (preference) {
+                case TitlePreference.FULL_NAME:
+                    return fullName;
+                case TitlePreference.EMAIL:
+                    return accountEmail;
+                default:
+                    return defaultString;
+            }
+        }
+        // The preference cannot be fulfilled, use the other displayable string.
+        return canShowFullName ? fullName : accountEmail;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
index c5a437d..711cb4c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
@@ -34,6 +34,7 @@
 import org.chromium.chrome.browser.feed.FeedFeatures;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.homepage.HomepageManager;
+import org.chromium.chrome.browser.homepage.HomepagePolicyManager;
 import org.chromium.chrome.browser.locale.LocaleManager;
 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
 import org.chromium.chrome.browser.preferences.Pref;
@@ -391,11 +392,13 @@
      * NTP or Start though. If checking whether to show Start as homepage, use
      * {@link ReturnToChromeUtil#shouldShowStartSurfaceAsTheHomePage(Context)} instead.
      */
-    private static boolean useChromeHomepage() {
+    @VisibleForTesting
+    public static boolean useChromeHomepage() {
         String homePageUrl = HomepageManager.getHomepageUri();
         return HomepageManager.isHomepageEnabled()
-                && (TextUtils.isEmpty(homePageUrl)
-                        || UrlUtilities.isCanonicalizedNTPUrl(homePageUrl));
+                && (HomepagePolicyManager.isInitializedWithNative()
+                        && (TextUtils.isEmpty(homePageUrl)
+                                || UrlUtilities.isCanonicalizedNTPUrl(homePageUrl)));
     }
 
     /**
@@ -499,9 +502,11 @@
         // However, if NTP is used as homepage, we show Start when there isn't any tab. See
         // https://crbug.com/1368224.
         if (IntentUtils.isMainIntentFromLauncher(intent)
-                && ReturnToChromeUtil.getTotalTabCount(tabModelSelector) <= 0
-                && useChromeHomepage()) {
-            return true;
+                && ReturnToChromeUtil.getTotalTabCount(tabModelSelector) <= 0) {
+            boolean initialized = HomepagePolicyManager.isInitializedWithNative();
+            RecordHistogram.recordBooleanHistogram(
+                    "Startup.Android.IsHomepagePolicyManagerInitialized", initialized);
+            if (initialized && useChromeHomepage()) return true;
         }
 
         // Checks whether to show the Start surface due to feature flag TAB_SWITCHER_ON_RETURN_MS.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
index a4a4b11..2c221ed3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -42,10 +42,8 @@
 import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController;
 import org.chromium.chrome.browser.back_press.BackPressManager;
 import org.chromium.chrome.browser.bookmarks.BookmarkModel;
-import org.chromium.chrome.browser.bookmarks.PowerBookmarkUtils;
 import org.chromium.chrome.browser.bookmarks.TabBookmarker;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
-import org.chromium.chrome.browser.commerce.ShoppingFeatures;
 import org.chromium.chrome.browser.commerce.ShoppingServiceFactory;
 import org.chromium.chrome.browser.compositor.CompositorViewHolder;
 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
@@ -105,7 +103,6 @@
 import org.chromium.chrome.browser.share.ShareUtils;
 import org.chromium.chrome.browser.share.qrcode.QrCodeDialog;
 import org.chromium.chrome.browser.share.scroll_capture.ScrollCaptureManager;
-import org.chromium.chrome.browser.subscriptions.CommerceSubscriptionsServiceFactory;
 import org.chromium.chrome.browser.tab.AccessibilityVisibilityHandler;
 import org.chromium.chrome.browser.tab.AutofillSessionLifetimeController;
 import org.chromium.chrome.browser.tab.RequestDesktopUtils;
@@ -776,17 +773,6 @@
         initMerchantTrustSignals();
         initScrollCapture();
 
-        // TODO(1293885): Remove this validator once we have an API on the backend that sends
-        //                success/failure information back.
-        if (ShoppingFeatures.isShoppingListEnabled()) {
-            mBookmarkModelSupplier.addObserver((bridge) -> {
-                PowerBookmarkUtils.validateBookmarkedCommerceSubscriptions(bridge,
-                        new CommerceSubscriptionsServiceFactory()
-                                .getForLastUsedProfile()
-                                .getSubscriptionsManager());
-            });
-        }
-
         new OneShotCallback<>(mProfileSupplier, this::initHistoryClustersCoordinator);
 
         if (DeviceFormFactor.isWindowOnTablet(mWindowAndroid)
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtilsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtilsTest.java
index 98cfa60..0192b51 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtilsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkUtilsTest.java
@@ -4,46 +4,28 @@
 
 package org.chromium.chrome.browser.bookmarks;
 
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyBoolean;
-import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.anyString;
-import static org.mockito.Mockito.eq;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import androidx.test.filters.SmallTest;
 
-import com.google.common.collect.ImmutableMap;
 import com.google.common.primitives.UnsignedLongs;
 
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import org.chromium.base.Callback;
-import org.chromium.base.FeatureList;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.util.Batch;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.subscriptions.CommerceSubscription;
-import org.chromium.chrome.browser.subscriptions.SubscriptionsManager;
 import org.chromium.components.bookmarks.BookmarkId;
 import org.chromium.components.bookmarks.BookmarkType;
 import org.chromium.components.power_bookmarks.PowerBookmarkMeta;
-import org.chromium.components.power_bookmarks.PowerBookmarkType;
 import org.chromium.components.power_bookmarks.ProductPrice;
 import org.chromium.components.power_bookmarks.ShoppingSpecifics;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /** Tests for PowerBookmarkUtils. */
 @RunWith(BaseJUnit4ClassRunner.class)
 @Batch(Batch.PER_CLASS)
@@ -51,15 +33,6 @@
     @Mock
     private BookmarkModel mMockBookmarkModel;
 
-    @Mock
-    private SubscriptionsManager mMockSubscriptionsManager;
-
-    @Captor
-    private ArgumentCaptor<Callback<List<CommerceSubscription>>> mGetSubscriptionsCallbackCaptor;
-
-    @Captor
-    private ArgumentCaptor<List<CommerceSubscription>> mUnsubscribeListCaptor;
-
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
@@ -67,143 +40,6 @@
         when(mMockBookmarkModel.isBookmarkModelLoaded()).thenReturn(true);
     }
 
-    // Ensure a product that is not tracked locally is unsubscribed on the backend.
-    @Test
-    @SmallTest
-    public void testNotTrackedLocally() {
-        FeatureList.setTestFeatures(
-                ImmutableMap.of(ChromeFeatureList.SHOPPING_LIST_ENABLE_DESYNC_RESOLUTION, true));
-        ArrayList<BookmarkId> searchIds = new ArrayList<>();
-        BookmarkId bookmark = setUpBookmarkWithMetaInModel(0, "1234", false);
-        searchIds.add(bookmark);
-
-        when(mMockBookmarkModel.searchBookmarks(
-                     anyString(), any(), eq(PowerBookmarkType.SHOPPING), anyInt()))
-                .thenReturn(searchIds);
-
-        PowerBookmarkUtils.validateBookmarkedCommerceSubscriptions(
-                mMockBookmarkModel, mMockSubscriptionsManager);
-
-        verify(mMockSubscriptionsManager)
-                .getSubscriptions(eq(CommerceSubscription.CommerceSubscriptionType.PRICE_TRACK),
-                        anyBoolean(), mGetSubscriptionsCallbackCaptor.capture());
-
-        ArrayList<CommerceSubscription> subscriptions = new ArrayList<>();
-        CommerceSubscription subscription = buildSubscription("1234");
-        subscriptions.add(subscription);
-
-        mGetSubscriptionsCallbackCaptor.getValue().onResult(subscriptions);
-
-        verify(mMockSubscriptionsManager).unsubscribe(mUnsubscribeListCaptor.capture(), any());
-
-        Assert.assertTrue(
-                "The list of unsibscribed items did not contain the correct subscription!",
-                mUnsubscribeListCaptor.getValue().contains(subscription));
-
-        // No bookmark meta updates should have occurred.
-        verify(mMockBookmarkModel, times(0)).setPowerBookmarkMeta(any(), any());
-    }
-
-    // If a subscription doesn't have a bookmark, the subscription should be removed.
-    @Test
-    @SmallTest
-    public void testNoBookmarks() {
-        FeatureList.setTestFeatures(
-                ImmutableMap.of(ChromeFeatureList.SHOPPING_LIST_ENABLE_DESYNC_RESOLUTION, true));
-        ArrayList<BookmarkId> searchIds = new ArrayList<>();
-
-        when(mMockBookmarkModel.searchBookmarks(
-                     anyString(), any(), eq(PowerBookmarkType.SHOPPING), anyInt()))
-                .thenReturn(searchIds);
-
-        PowerBookmarkUtils.validateBookmarkedCommerceSubscriptions(
-                mMockBookmarkModel, mMockSubscriptionsManager);
-
-        verify(mMockSubscriptionsManager)
-                .getSubscriptions(eq(CommerceSubscription.CommerceSubscriptionType.PRICE_TRACK),
-                        anyBoolean(), mGetSubscriptionsCallbackCaptor.capture());
-
-        ArrayList<CommerceSubscription> subscriptions = new ArrayList<>();
-        CommerceSubscription subscription = buildSubscription("1234");
-        subscriptions.add(subscription);
-
-        mGetSubscriptionsCallbackCaptor.getValue().onResult(subscriptions);
-
-        verify(mMockSubscriptionsManager).unsubscribe(mUnsubscribeListCaptor.capture(), any());
-
-        Assert.assertTrue(
-                "The list of unsibscribed items did not contain the correct subscription!",
-                mUnsubscribeListCaptor.getValue().contains(subscription));
-    }
-
-    // If a bookmark is tracked locally but there is no subscription, unset the flag in the
-    // bookmark.
-    @Test
-    @SmallTest
-    public void testNoSubscriptionForBookmark() {
-        FeatureList.setTestFeatures(
-                ImmutableMap.of(ChromeFeatureList.SHOPPING_LIST_ENABLE_DESYNC_RESOLUTION, true));
-        ArrayList<BookmarkId> searchIds = new ArrayList<>();
-        BookmarkId bookmark = setUpBookmarkWithMetaInModel(0, "1234", true);
-        searchIds.add(bookmark);
-
-        when(mMockBookmarkModel.searchBookmarks(
-                     anyString(), any(), eq(PowerBookmarkType.SHOPPING), anyInt()))
-                .thenReturn(searchIds);
-
-        PowerBookmarkUtils.validateBookmarkedCommerceSubscriptions(
-                mMockBookmarkModel, mMockSubscriptionsManager);
-
-        verify(mMockSubscriptionsManager)
-                .getSubscriptions(eq(CommerceSubscription.CommerceSubscriptionType.PRICE_TRACK),
-                        anyBoolean(), mGetSubscriptionsCallbackCaptor.capture());
-
-        ArrayList<CommerceSubscription> subscriptions = new ArrayList<>();
-
-        mGetSubscriptionsCallbackCaptor.getValue().onResult(subscriptions);
-
-        verify(mMockBookmarkModel).setPowerBookmarkMeta(eq(bookmark), any());
-
-        // Unsubscribe should have never been invoked.
-        verify(mMockSubscriptionsManager, times(0)).unsubscribe(any(List.class), any());
-    }
-
-    // Ensure no bookmark updates or unsubscribe events occur if everything is aligned.
-    @Test
-    @SmallTest
-    public void testBookmarksAndSubscriptionsAligned() {
-        FeatureList.setTestFeatures(
-                ImmutableMap.of(ChromeFeatureList.SHOPPING_LIST_ENABLE_DESYNC_RESOLUTION, true));
-        ArrayList<BookmarkId> searchIds = new ArrayList<>();
-        BookmarkId bookmark1 = setUpBookmarkWithMetaInModel(0, "1234", true);
-        searchIds.add(bookmark1);
-        BookmarkId bookmark2 = setUpBookmarkWithMetaInModel(1, "5678", false);
-        searchIds.add(bookmark2);
-
-        when(mMockBookmarkModel.searchBookmarks(
-                     anyString(), any(), eq(PowerBookmarkType.SHOPPING), anyInt()))
-                .thenReturn(searchIds);
-
-        PowerBookmarkUtils.validateBookmarkedCommerceSubscriptions(
-                mMockBookmarkModel, mMockSubscriptionsManager);
-
-        verify(mMockSubscriptionsManager)
-                .getSubscriptions(eq(CommerceSubscription.CommerceSubscriptionType.PRICE_TRACK),
-                        anyBoolean(), mGetSubscriptionsCallbackCaptor.capture());
-
-        ArrayList<CommerceSubscription> subscriptions = new ArrayList<>();
-        CommerceSubscription subscription = buildSubscription("1234");
-        subscriptions.add(subscription);
-
-        mGetSubscriptionsCallbackCaptor.getValue().onResult(subscriptions);
-
-        // Unsubscribe should have never been invoked.
-        verify(mMockSubscriptionsManager, times(0)).unsubscribe(any(List.class), any());
-
-        // No bookmark meta updates should have occurred.
-        verify(mMockBookmarkModel, times(0)).setPowerBookmarkMeta(any(), any());
-    }
-
     @Test
     @SmallTest
     public void testCreateCommerceSubscriptionForPowerBookmarkMeta() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
index 59c1803..1a1f674 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
@@ -13,6 +13,7 @@
 import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
 import static androidx.test.espresso.matcher.ViewMatchers.hasSibling;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.thatMatchesFirst;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
@@ -80,6 +81,7 @@
 import org.chromium.chrome.browser.sync.SyncService;
 import org.chromium.chrome.browser.sync.SyncTestRule;
 import org.chromium.chrome.browser.sync.settings.AccountManagementFragment;
+import org.chromium.chrome.browser.sync.settings.SignInPreference;
 import org.chromium.chrome.browser.sync.settings.SyncPromoPreference;
 import org.chromium.chrome.browser.sync.settings.SyncPromoPreference.State;
 import org.chromium.chrome.browser.tracing.settings.DeveloperSettings;
@@ -89,6 +91,8 @@
 import org.chromium.chrome.test.util.ChromeRenderTestRule;
 import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
 import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
+import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
+import org.chromium.chrome.test.util.browser.signin.SigninTestRule;
 import org.chromium.chrome.test.util.browser.signin.SigninTestUtil;
 import org.chromium.chrome.test.util.browser.sync.SyncTestUtil;
 import org.chromium.components.browser_ui.accessibility.AccessibilitySettings;
@@ -97,6 +101,7 @@
 import org.chromium.components.policy.test.annotations.Policies;
 import org.chromium.components.search_engines.TemplateUrl;
 import org.chromium.components.search_engines.TemplateUrlService;
+import org.chromium.components.signin.base.AccountInfo;
 import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
@@ -508,6 +513,68 @@
 
     @Test
     @SmallTest
+    @EnableFeatures(ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL)
+    public void testAccountManagementRowForChildAccountWithNonDisplayableAccountEmail()
+            throws InterruptedException {
+        launchSettingsActivity();
+
+        // Account set up.
+        final SigninTestRule signinTestRule = mSyncTestRule.getSigninTestRule();
+        AccountInfo accountInfo =
+                signinTestRule.addAccount(AccountManagerTestRule.CHILD_ACCOUNT_EMAIL,
+                        SigninTestRule.NON_DISPLAYABLE_EMAIL_ACCOUNT_CAPABILITIES);
+        signinTestRule.waitForSeeding();
+        signinTestRule.waitForSignin(accountInfo);
+
+        // Force update the preference so that NON_DISPLAYABLE_EMAIL_ACCOUNT_CAPABILITIES is
+        // actually utilized. This is to replicate downstream implementation behavior, where
+        // checkIfDisplayableEmailAddress() differs.
+        SignInPreference signInPreference = mMainSettings.findPreference(MainSettings.PREF_SIGN_IN);
+        CriteriaHelper.pollUiThread(() -> {
+            return !signInPreference.getProfileDataCache()
+                            .getProfileDataOrDefault(accountInfo.getEmail())
+                            .hasDisplayableEmailAddress();
+        });
+        TestThreadUtils.runOnUiThreadBlocking(signInPreference::syncStateChanged);
+
+        mSettingsActivityTestRule.startSettingsActivity();
+        onView(thatMatchesFirst(withText(accountInfo.getFullName()))).check(matches(isDisplayed()));
+        onView(withText(accountInfo.getEmail())).check(matches(not(isDisplayed())));
+    }
+
+    @Test
+    @SmallTest
+    @EnableFeatures(ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL)
+    public void
+    testAccountManagementRowForChildAccountWithNonDisplayableAccountEmailWithEmptyDisplayName()
+            throws InterruptedException {
+        launchSettingsActivity();
+
+        // Account set up.
+        // If both fullName and givenName are empty, accountCapabilities is ignored.
+        final SigninTestRule signinTestRule = mSyncTestRule.getSigninTestRule();
+        AccountInfo accountInfo = signinTestRule.addAccount(
+                AccountManagerTestRule.CHILD_ACCOUNT_EMAIL, "", "child.test.given", null,
+                SigninTestRule.NON_DISPLAYABLE_EMAIL_ACCOUNT_CAPABILITIES);
+        signinTestRule.waitForSeeding();
+        signinTestRule.waitForSignin(accountInfo);
+
+        SignInPreference signInPreference = mMainSettings.findPreference(MainSettings.PREF_SIGN_IN);
+        CriteriaHelper.pollUiThread(() -> {
+            return !signInPreference.getProfileDataCache()
+                            .getProfileDataOrDefault(accountInfo.getEmail())
+                            .hasDisplayableEmailAddress();
+        });
+        TestThreadUtils.runOnUiThreadBlocking(signInPreference::syncStateChanged);
+
+        mSettingsActivityTestRule.startSettingsActivity();
+        onView(withText(accountInfo.getEmail())).check(matches(not(isDisplayed())));
+        onView(thatMatchesFirst(withText(R.string.default_google_account_username)))
+                .check(matches(isDisplayed()));
+    }
+
+    @Test
+    @SmallTest
     public void testRemoveSettings() {
         // Disable night mode
         NightModeUtils.setNightModeSupportedForTesting(false);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
index d90c40d0..e4bdbfc 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
@@ -6,9 +6,11 @@
 
 import static androidx.test.espresso.Espresso.onView;
 import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.RootMatchers.isDialog;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.thatMatchesFirst;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
 import static org.hamcrest.CoreMatchers.allOf;
@@ -45,6 +47,8 @@
 import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
 import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
 import org.chromium.chrome.test.util.browser.signin.SigninTestRule;
+import org.chromium.components.signin.base.AccountInfo;
+import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
@@ -84,8 +88,10 @@
     @Test
     @MediumTest
     @Feature("RenderTest")
-    @DisableFeatures({ChromeFeatureList.ADD_EDU_ACCOUNT_FROM_ACCOUNT_SETTINGS_FOR_SUPERVISED_USERS})
-    public void testAccountManagementFragmentView() throws Exception {
+    @DisableFeatures({ChromeFeatureList.ADD_EDU_ACCOUNT_FROM_ACCOUNT_SETTINGS_FOR_SUPERVISED_USERS,
+            ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL})
+    public void
+    testAccountManagementFragmentView() throws Exception {
         mSigninTestRule.addTestAccountThenSigninAndEnableSync();
         mSettingsActivityTestRule.startSettingsActivity();
         View view = mSettingsActivityTestRule.getFragment().getView();
@@ -109,6 +115,20 @@
     @Test
     @MediumTest
     @Feature("RenderTest")
+    @EnableFeatures({ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL})
+    public void testAccountManagementFragmentViewWithHideNonDisplayableAccountEmailEnabled()
+            throws Exception {
+        mSigninTestRule.addTestAccountThenSigninAndEnableSync();
+        mSettingsActivityTestRule.startSettingsActivity();
+        View view = mSettingsActivityTestRule.getFragment().getView();
+        onViewWaiting(allOf(is(view), isDisplayed()));
+        mRenderTestRule.render(
+                view, "account_management_fragment_view_with_hide_non_displayable_account_email");
+    }
+
+    @Test
+    @MediumTest
+    @Feature("RenderTest")
     public void testSignedInAccountShownOnTop() throws Exception {
         mSigninTestRule.addAccount("testSecondary@gmail.com");
         mSigninTestRule.addTestAccountThenSigninAndEnableSync();
@@ -140,6 +160,58 @@
 
     @Test
     @MediumTest
+    @EnableFeatures({ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL})
+    public void testAccountManagementViewForChildAccountWithNonDisplayableAccountEmail()
+            throws Exception {
+        AccountInfo accountInfo = mSigninTestRule.addAccount(
+                CHILD_ACCOUNT_NAME, SigninTestRule.NON_DISPLAYABLE_EMAIL_ACCOUNT_CAPABILITIES);
+        mSigninTestRule.waitForSeeding();
+        mSigninTestRule.waitForSignin(accountInfo);
+        mSettingsActivityTestRule.startSettingsActivity();
+
+        // Force update the fragment so that NON_DISPLAYABLE_EMAIL_ACCOUNT_CAPABILITIES is
+        // actually utilized. This is to replicate downstream implementation behavior, where
+        // checkIfDisplayableEmailAddress() differs.
+        CriteriaHelper.pollUiThread(() -> {
+            return !mSettingsActivityTestRule.getFragment()
+                            .getProfileDataCacheForTesting()
+                            .getProfileDataOrDefault(CHILD_ACCOUNT_NAME)
+                            .hasDisplayableEmailAddress();
+        });
+        TestThreadUtils.runOnUiThreadBlocking(mSettingsActivityTestRule.getFragment()::update);
+        View view = mSettingsActivityTestRule.getFragment().getView();
+        onViewWaiting(allOf(is(view), isDisplayed()));
+        onView(thatMatchesFirst(withText(accountInfo.getFullName()))).check(matches(isDisplayed()));
+        onView(withText(accountInfo.getEmail())).check(doesNotExist());
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.HIDE_NON_DISPLAYABLE_ACCOUNT_EMAIL})
+    public void
+    testAccountManagementViewForChildAccountWithNonDisplayableAccountEmailWithEmptyDisplayName()
+            throws Exception {
+        CoreAccountInfo accountInfo = mSigninTestRule.addAccount(CHILD_ACCOUNT_NAME, "", "", null,
+                SigninTestRule.NON_DISPLAYABLE_EMAIL_ACCOUNT_CAPABILITIES);
+        mSigninTestRule.waitForSeeding();
+        mSigninTestRule.waitForSignin(accountInfo);
+        mSettingsActivityTestRule.startSettingsActivity();
+        CriteriaHelper.pollUiThread(() -> {
+            return !mSettingsActivityTestRule.getFragment()
+                            .getProfileDataCacheForTesting()
+                            .getProfileDataOrDefault(CHILD_ACCOUNT_NAME)
+                            .hasDisplayableEmailAddress();
+        });
+        TestThreadUtils.runOnUiThreadBlocking(mSettingsActivityTestRule.getFragment()::update);
+        View view = mSettingsActivityTestRule.getFragment().getView();
+        onViewWaiting(allOf(is(view), isDisplayed()));
+        onView(withText(accountInfo.getEmail())).check(doesNotExist());
+        onView(thatMatchesFirst(withText(R.string.default_google_account_username)))
+                .check(matches(isDisplayed()));
+    }
+
+    @Test
+    @MediumTest
     @Feature("RenderTest")
     @EnableFeatures({ChromeFeatureList.ADD_EDU_ACCOUNT_FROM_ACCOUNT_SETTINGS_FOR_SUPERVISED_USERS})
     public void testAccountManagementViewForChildAccountWithAddEduAccountEnabled()
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java
index ad129110..0887325 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java
@@ -185,6 +185,10 @@
     private SyncService mSyncService;
     private final SigninTestRule mSigninTestRule = new SigninTestRule();
 
+    public SigninTestRule getSigninTestRule() {
+        return mSigninTestRule;
+    }
+
     private void ruleTearDown() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mSyncService.setSyncRequested(false);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java
index 8534289..f7ac57a 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java
@@ -32,11 +32,13 @@
 
 import org.chromium.base.IntentUtils;
 import org.chromium.base.SysUtils;
+import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.JniMocker;
 import org.chromium.chrome.browser.ChromeInactivityTracker;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.homepage.HomepageManager;
+import org.chromium.chrome.browser.homepage.HomepagePolicyManager;
 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
 import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
@@ -292,4 +294,39 @@
 
         Assert.assertFalse(ReturnToChromeUtil.isStartSurfaceEnabled(mContext));
     }
+
+    @Test
+    @SmallTest
+    public void testShouldNotShowStartSurfaceOnStartWhenHomepagePolicyManagerIsNotInitialized() {
+        START_SURFACE_OPEN_START_AS_HOMEPAGE.setForTesting(true);
+        Assert.assertTrue(ReturnToChromeUtil.isStartSurfaceEnabled(mContext));
+
+        // Sets main intent from launcher:
+        doReturn(Intent.ACTION_MAIN).when(mIntent).getAction();
+        doReturn(true).when(mIntent).hasCategory(Intent.CATEGORY_LAUNCHER);
+        Assert.assertTrue(IntentUtils.isMainIntentFromLauncher(mIntent));
+
+        // Tests the case when there isn't any Tab:
+        doReturn(true).when(mTabModelSelector).isTabStateInitialized();
+        doReturn(0).when(mTabModelSelector).getTotalTabCount();
+        // Sets background time:
+        doReturn((long) -1).when(mInactivityTracker).getLastBackgroundedTimeMs();
+
+        Assert.assertFalse(ReturnToChromeUtil.shouldShowTabSwitcher(-1));
+        Assert.assertTrue(HomepageManager.isHomepageEnabled());
+        Assert.assertFalse(HomepagePolicyManager.isInitializedWithNative());
+        Assert.assertFalse(ReturnToChromeUtil.useChromeHomepage());
+        Assert.assertFalse(ReturnToChromeUtil.shouldShowOverviewPageOnStart(
+                mContext, mIntent, mTabModelSelector, mInactivityTracker, false /* isTablet */));
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramTotalCountForTesting(
+                        "Startup.Android.IsHomepagePolicyManagerInitialized"));
+
+        doReturn(1).when(mTabModelSelector).getTotalTabCount();
+        Assert.assertFalse(ReturnToChromeUtil.shouldShowOverviewPageOnStart(
+                mContext, mIntent, mTabModelSelector, mInactivityTracker, false /* isTablet */));
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramTotalCountForTesting(
+                        "Startup.Android.IsHomepagePolicyManagerInitialized"));
+    }
 }
diff --git a/chrome/android/modules/dev_ui/provider/dev_ui_install_listener.h b/chrome/android/modules/dev_ui/provider/dev_ui_install_listener.h
index 87b5533..0e4380f 100644
--- a/chrome/android/modules/dev_ui/provider/dev_ui_install_listener.h
+++ b/chrome/android/modules/dev_ui/provider/dev_ui_install_listener.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 
 #include "base/android/jni_android.h"
-#include "base/callback.h"
+#include "base/functional/callback.h"
 
 namespace dev_ui {
 
diff --git a/chrome/android/modules/dev_ui/provider/dev_ui_module_provider.h b/chrome/android/modules/dev_ui/provider/dev_ui_module_provider.h
index 41a2a92..4d34432d 100644
--- a/chrome/android/modules/dev_ui/provider/dev_ui_module_provider.h
+++ b/chrome/android/modules/dev_ui/provider/dev_ui_module_provider.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_ANDROID_MODULES_DEV_UI_PROVIDER_DEV_UI_MODULE_PROVIDER_H_
 #define CHROME_ANDROID_MODULES_DEV_UI_PROVIDER_DEV_UI_MODULE_PROVIDER_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 
 namespace dev_ui {
 
diff --git a/chrome/app/chrome_main.cc b/chrome/app/chrome_main.cc
index 307c8d5..146cf60 100644
--- a/chrome/app/chrome_main.cc
+++ b/chrome/app/chrome_main.cc
@@ -6,9 +6,9 @@
 
 #include "base/allocator/buildflags.h"
 #include "base/allocator/partition_allocator/partition_alloc_buildflags.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/app/chrome_main_delegate.h"
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
index f5f7c0b9..6ecb3ae 100644
--- a/chrome/app/chrome_main_delegate.cc
+++ b/chrome/app/chrome_main_delegate.cc
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/cpu.h"
@@ -17,6 +16,7 @@
 #include "base/dcheck_is_on.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/i18n/rtl.h"
 #include "base/immediate_crash.h"
 #include "base/lazy_instance.h"
@@ -34,7 +34,6 @@
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/hang_watcher.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "base/trace_event/trace_event_impl.h"
diff --git a/chrome/app/main_dll_loader_win.cc b/chrome/app/main_dll_loader_win.cc
index 880ee82d..18549fb 100644
--- a/chrome/app/main_dll_loader_win.cc
+++ b/chrome/app/main_dll_loader_win.cc
@@ -14,12 +14,12 @@
 
 #include "base/base_paths.h"
 #include "base/base_switches.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/path_service.h"
diff --git a/chrome/app/settings_chromium_strings.grdp b/chrome/app/settings_chromium_strings.grdp
index fd47829..9532de95 100644
--- a/chrome/app/settings_chromium_strings.grdp
+++ b/chrome/app/settings_chromium_strings.grdp
@@ -120,6 +120,14 @@
     </message>
   </if>
 
+    <!-- Site Settings - Site Data Page-->
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL" desc="A description of the benefit/cost of choosing 'Sites can save content on your device. In short, a site will remember your preferences, shopping cart content, etc. during this browser session. But once you close all open windows, and then visit the site again, it's as if you're coming to the site for the first time.">
+    Sites will probably work as you expect but won't remember you after you close all Chromium windows
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING" desc="2 of 3. A label within 'Customized behaviors' that allows for exceptions to the 'On-device site data' setting. This label and the list of sites that can appear beneath it is only relevant if the user has chosen to allow 'on-device site data' as the default value above.">
+    Always clear site data from your device when you close Chromium
+  </message>
+
   <!-- Privacy Guide -->
   <message name="IDS_SETTINGS_PRIVACY_GUIDE_PROMO_BODY" desc="Body text of a card in the settings page that explains what the 'Privacy Guide' feature is.">
     Review key privacy and security controls in Chromium
diff --git a/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING.png.sha1 b/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING.png.sha1
new file mode 100644
index 0000000..620406a
--- /dev/null
+++ b/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING.png.sha1
@@ -0,0 +1 @@
+afb3ccd698427e416847602640f82fe61292f1dd
\ No newline at end of file
diff --git a/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL.png.sha1 b/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_google_chrome_strings.grdp b/chrome/app/settings_google_chrome_strings.grdp
index 016f832..2305380e 100644
--- a/chrome/app/settings_google_chrome_strings.grdp
+++ b/chrome/app/settings_google_chrome_strings.grdp
@@ -134,6 +134,14 @@
     </message>
   </if>
 
+  <!-- Site Settings - Site Data Page-->
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL" desc="A description of the benefit/cost of choosing 'Sites can save content on your device. In short, a site will remember your preferences, shopping cart content, etc. during this browser session. But once you close all open windows, and then visit the site again, it's as if you're coming to the site for the first time.">
+    Sites will probably work as you expect but won't remember you after you close all Chrome windows
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING" desc="2 of 3. A label within 'Customized behaviors' that allows for exceptions to the 'On-device site data' setting. This label and the list of sites that can appear beneath it is only relevant if the user has chosen to allow 'on-device site data' as the default value above.">
+    Always clear site data from your device when you close Chrome
+  </message>
+
   <!-- Privacy Guide -->
   <message name="IDS_SETTINGS_PRIVACY_GUIDE_PROMO_BODY" desc="Body text of a card in the settings page that explains what the 'Privacy Guide' feature is.">
     Review key privacy and security controls in Chrome
diff --git a/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING.png.sha1 b/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING.png.sha1
new file mode 100644
index 0000000..620406a
--- /dev/null
+++ b/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING.png.sha1
@@ -0,0 +1 @@
+afb3ccd698427e416847602640f82fe61292f1dd
\ No newline at end of file
diff --git a/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL.png.sha1 b/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index fd840bf..f3e6dc5 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -1881,24 +1881,13 @@
     Disabled Vivamus id lacus et lacus porttitor vulputate. Sed semper egestas orci vel maximus.
   </message>
 
-  <!-- Privacy Sandbox Settings 4 - Topics Page -->
-  <message name="IDS_SETTINGS_TOPICS_PAGE_TITLE" translateable="false" desc="Title for the Topics preferences page.">
-    Mauris interdum lectus vitae lacinia
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_TOGGLE_LABEL" translateable="false" desc="Label for the toggle in the Topics preferences page.">
-    Nunc gravida condimentum consectetur
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_TOGGLE_SUB_LABEL" translateable="false" desc="Subabel for the toggle in the Topics preferences page.">
-    Vivamus nibh turpis, varius quis nisi vel, porta laoreet tellus. Mauris porta imperdiet venenatis
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_HEADING" translateable="false" desc="Section title for the current Topics list underneath toggle in the Topics preferences page.">
-    Mauris at lectus
-  </message>
+  <!-- Privacy Sandbox v4 - Topics Page -->
+  <!-- Where possible, these strings have been unified on Desktop & Android in privacy_sandox_strings.grdp. The strings here either only appear on one platform, or have platform specific requirements, e.g. the format of placeholders, and so cannot be unified. For the latter case, they have corresponding _CANONICAL representations used when consent is recorded on either platform, and so they must stay in sync -->
   <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION" translateable="false" desc="Section description for the current Topics list in the Topics preferences page.">
     Nulla tincidunt iaculis nulla, sit amet viverra massa luctus nec. Integer eget pellentesque magna, et venenatis lorem. Integer a porta elit.
   </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_LEARN_MORE" translateable="false" desc="Text for the clickable section of the description ('Learn more') for the current Topics list in the Topics preferences page.">
-    Eget bibendum neque.
+  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_LEARN_MORE_A11Y_LABEL" translateable="false" desc="A11y label for the clickable section of the description ('Learn more') for the current Topics list in the Topics preferences page.">
+    A11y label. Nulla tincidunt iaculis nulla, sit amet viverra massa luctus nec. Integer eget pellentesque magna, et venenatis lorem. Integer a porta elit.
   </message>
   <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_DISABLED" translateable="false" desc="Section description for the current Topics list when Topics is disabled in the Topics preferences page.">
     Sed porta viverra lacus ut euismod. Integer a cursus metus, ac ultricies libero.
@@ -1906,39 +1895,12 @@
   <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_EMPTY" translateable="false" desc="Section description for the current Topics list when the Topics list is empty in the Topics preferences page.">
     Curabitur sagittis sapien ut turpis interdum, vitae porttitor sem pretium. Vestibulum sem mauris, ultrices ac massa sit amet, sodales aliquet est.
   </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCK_TOPIC" translateable="false" desc="String on the button to block a topic in the Topics preferences page.">
-    Pellent
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_HEADING" translateable="false" desc="Section title for the blocked topics list in the Topics preferences page.">
-    Integer faucibus metus
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_DESCRIPTION" translateable="false" desc="Section description for the blocked topics list in the Topics preferences page.">
-    Donec fringilla justo vel ligula finibus, ut rutrum lectus vestibulum. Suspendisse vestibulum lorem lacinia nulla consequat auctor.
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_DESCRIPTION_EMPTY" translateable="false" desc="Section description for the blocked topics list when there are no blocked topics in the Topics preferences page.">
-    Donec commodo sem non augue blandit, ullamcorper aliquam enim fermentum
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_ALLOW_TOPIC" translateable="false" desc="String on the button to re-allow a topic in the Topics preferences page.">
-    Aenean
+  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_LEARN_MORE_LINK" translateable="false" desc="Text for the clickable section of the description ('Learn more') for the current Topics list in the Topics preferences page.">
+    Eget bibendum neque.
   </message>
   <message name="IDS_SETTINGS_TOPICS_PAGE_FOOTER" translateable="false" desc="Footer with more information at the bottom of the Topics preferences page.">
     Quisque eu auctor purus, id tempus nulla. Pellentesque porta orci purus. Donec dictum, <ph name="BEGIN_LINK1">&lt;a href="$1" target="_blank"&gt;</ph>justo nec ultricies semper<ph name="LINK_END1">&lt;/a&gt;</ph>, eros mauris varius nibh, <ph name="BEGIN_LINK2">&lt;a href="$2" target="_blank"&gt;</ph>sit amet molestie quam<ph name="LINK_END2">&lt;/a&gt;</ph> arcu id urna. Donec vulputate dui ut lorem egestas, ac sollicitudin metus fermentum.
   </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_HEADING" translateable="false" desc="Heading on 'Learn more' dialog in the Topics preferences page.">
-    Suspendisse sit amet consectetur sapien
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_1" translateable="false" desc="First bullet on 'Learn more' dialog in the Topics preferences page.">
-    Vestibulum arcu elit, pulvinar eu orci at, semper finibus metus. Donec sollicitudin, risus eu congue ullamcorper, nisl lorem consectetur risus, nec vulputate risus eros quis diam.
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_2" translateable="false" desc="Second bullet on 'Learn more' dialog in the Topics preferences page.">
-    Aenean vel turpis id arcu viverra aliquet. Donec convallis, felis eget dictum venenatis, odio orci bibendum neque, quis egestas sem turpis et dui.
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_3" translateable="false" desc="Third bullet on 'Learn more' dialog in the Topics preferences page.">
-    Integer convallis congue ex non vehicula. Nam vel vestibulum ante, ut consectetur ex. Duis semper lectus velit, id porttitor massa mattis sit amet. Integer pulvinar non nisi et tincidunt. Proin aliquam turpis massa, eget tincidunt orci vulputate vitae.
-  </message>
-  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_LEARN_MORE_A11Y_LABEL" translateable="false" desc="A11y label for the clickable section of the description ('Learn more') for the current Topics list in the Topics preferences page.">
-    A11y label. Nulla tincidunt iaculis nulla, sit amet viverra massa luctus nec. Integer eget pellentesque magna, et venenatis lorem. Integer a porta elit.
-  </message>
 
   <!-- Privacy Sandbox Settings 4 - Fledge Page -->
   <message name="IDS_SETTINGS_FLEDGE_PAGE_TITLE" translateable="false" desc="Title for the Fledge preferences page.">
@@ -3413,6 +3375,9 @@
   <message name="IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO" desc="Description for the first bullet of block third party cookies in Incognito radio toggle">
     While in Incognito, sites can't use your cookies to see your browsing activity across different sites, for example, to personalize ads. Features on some sites may not work.
   </message>
+  <message name="IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO_FPS" desc="Description for the first bullet of block third party cookies in Incognito radio toggle">
+    While in Incognito, sites can't use your cookies to see your browsing activity across sites, even related sites. Your browsing activity isn't used for things like personalizing ads. Features on some sites may not work.
+  </message>
   <message name="IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY" desc="Label for block third party cookies radio toggle">
     Block third-party cookies
   </message>
@@ -3942,6 +3907,59 @@
     Clear on exit cras in lectus mi ac magna dapibus
   </message>
 
+  <!-- Site Settings - Site Data Page-->
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_TITLE" desc="A page title for a new page. What is 'On-device site data'? When you interact with a site, that site can remember things about what you do. For example, you might place a pair of shoes in a shopping cart, close down your browser, and find those same shoes in your shopping cart when you visit the same site a week later. Sometimes that info is saved in the Cloud. Sometimes that info is saved on the user's device. There are several ways a site can save info to the user's device—for example, with cookies (text files saved to your device), small JavaScript databases, and even Chrome's new ad settings that are part of the Privacy Sandbox project (see details below). This page introduces the concept of on-device site data, allows the user to see which sites are using it, and allows the user to delete all saved data or just data from specific sites.">
+    On-device site data
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_DESCRIPTION" desc="A paragraph that appear beneath the page title: 'On-device site data'. It defines what on-device site data is. What is 'On-device site data'? When you interact with a site, that site can remember things about what you do. For example, you might place a pair of shoes in a shopping cart, close down your browser, and find those same shoes in your shopping cart when you visit the same site a week later. Sometimes that info is saved in the Cloud. Sometimes that info is saved on the user's device. There are several ways a site can save info to the user's device—for example, with cookies (text files saved to your device), small JavaScript databases, and even Chrome's new ad settings that are part of the Privacy Sandbox project (see details below). This page introduces the concept of on-device site data, allows the user to see which sites are using it, and allows the user to delete all saved data or just data from specific sites. **** CONTEXT PRIVACY SANDBOX **** Chrome's Privacy Sandbox initiative 1) deprecates third-party cookies in Chrome, 2) supports free and open content on the web (by finding better ways to support ads online), 3) while providing stronger privacy protections for users. You can see a high-level description of this public project at www.privacysanbox.com.">
+    A site you visit can save info about what you're doing so that it works as you would expect — for example, to keep you signed in to a site or to save items in your shopping cart. Often sites save this info temporarily on your device.
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_HEADING" desc="A label on a permissions page. For example, see the Microphone permission at chrome://settings/content/microphone.">
+    Default behavior
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_DESCRIPTION" desc="A description of what 'Default behavior' means. For example, see the Microphone permission at chrome://settings/content/microphone.">
+    Sites automatically follow this setting when you visit them
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_LABEL" desc="1 of 3 choices the user has regarding the 'default behavior' of the 'On-device site data' setting. This offers sites the most flexibility.">
+    Allow sites to save data on your device
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_SUB_LABEL" desc="A description of the benefit/cost of choosing 'Sites can save content on your device'.">
+    Sites are more likely to work as you would expect
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_LABEL" desc="2 of 3 choices the user has regarding the 'default behavior' of the 'On-device site data' setting.">
+    Delete data sites have saved to your device when you close all windows
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_LABEL" desc="3 of 3 choices the user has regarding the 'default behavior' of the 'On-device site data' setting. We include 'not recommended' because the user could have a poor experience with any given site. Imagine getting prompted to sign in again every time you click a link?">
+    Don't allow sites to save data on your device (not recommended)
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_SUB_LABEL" desc="A description of the benefit/cost of choosing 'Sites can save content on your device. * 'don't want to leave information on your device': We think that most users should allow all on-device site data because sites might break if they don't. But there are cases for which this info could prove harmful. Imagine a case of domestic abuse and a tech-savvy partner who can go into Chrome settings and find saved information about the activity of their partner. Or a journalist working in a sensitive environment. We want to convey the value of this option without alarming users.">
+    Sites may not work as you would expect. Choose this option if you don't want to leave information on your device about sites you visit.
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_HEADING" desc="A label on a permissions page. For example, see the Microphone permission at chrome://settings/content/microphone.">
+    Customized behaviors
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_DESCRIPTION" desc="A description of 'customized behaviors' that appear beneath the 'Customized behaviors' title. For example, see the Microphone permission at chrome://settings/content/microphone.">
+    Sites listed below follow a custom setting instead of the default
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_EXCEPTIONS_SUB_HEADING" desc="1 of 3. A label within 'Customized behaviors' that allows for exceptions to the 'On-device site data' setting. This label and the list of sites that can appear beneath it is only relevant if the user has chosen to not allow 'on-device site data' as the default value above.">
+    Allowed to save data on your device
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_EXCEPTIONS_SUB_HEADING" desc="3 of 3. A label within 'Customized behaviors' that allows for exceptions to the 'On-device site data' setting. This label and the list of sites that can appear beneath it is only relevant if the user has chosen to allow 'on-device site data' as the default value above.">
+    Not allowed to save data on your device
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_TITLE" desc="The title of a dialog box that appears if the user chooses 'Don't allow sites to save data on your device (not recommended)'. This dialog essentially serves as a 'are you sure?' reminder.">
+    Sites you visit may stop working as designed
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_DESCRIPTION" desc="A paragraph beneath the 'Sites you visit may stop working as designed' title on a dialog box that appears when a user chooses 'Don't allow sites to save data on your device (not recommended)'. We want to convey that sites are generally designed to rely on saving some information about the user. Usually this is benign, but sites can abuse this power, and so we qualify the statement with 'often'.">
+    Most sites you visit probably save data to your device, often to improve your experience by saving your preferences or information you share with the site. We recommend keeping this setting on.
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CONFIRM_BUTTON" desc="A button label. The user chose 'Don't allow sites to save data on your device (not recommended)'. As an 'are you sure' moment, we show the user a dialog box titled 'Sites you visit may stop working as designed.'. This string allows the user to confirm their intention to turn this setting off.">
+    Turn off
+  </message>
+  <message name="IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CANCEL_BUTTON" desc="A button label on the 'Sites you visit may stop working as designed' dialog.">
+    Cancel
+  </message>
+
   <message name="IDS_SETTINGS_NO_BLUETOOTH_DEVICES_FOUND" desc="Explanation for not showing Bluetooth devices in site settings.">
     No Bluetooth devices found
   </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO_FPS.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO_FPS.png.sha1
new file mode 100644
index 0000000..39a59a3
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO_FPS.png.sha1
@@ -0,0 +1 @@
+bba004099421a7e9bab6b4dd6b9bc851a5c2f165
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_EXCEPTIONS_SUB_HEADING.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_EXCEPTIONS_SUB_HEADING.png.sha1
new file mode 100644
index 0000000..620406a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_EXCEPTIONS_SUB_HEADING.png.sha1
@@ -0,0 +1 @@
+afb3ccd698427e416847602640f82fe61292f1dd
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_LABEL.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_LABEL.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_SUB_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_SUB_LABEL.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_SUB_LABEL.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CANCEL_BUTTON.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CANCEL_BUTTON.png.sha1
new file mode 100644
index 0000000..c0bcaeb
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CANCEL_BUTTON.png.sha1
@@ -0,0 +1 @@
+d45ef4b200cddf86a99dbca8c79055f8ba25d338
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CONFIRM_BUTTON.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CONFIRM_BUTTON.png.sha1
new file mode 100644
index 0000000..c0bcaeb
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CONFIRM_BUTTON.png.sha1
@@ -0,0 +1 @@
+d45ef4b200cddf86a99dbca8c79055f8ba25d338
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_DESCRIPTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..c0bcaeb
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+d45ef4b200cddf86a99dbca8c79055f8ba25d338
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_TITLE.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_TITLE.png.sha1
new file mode 100644
index 0000000..c0bcaeb
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@
+d45ef4b200cddf86a99dbca8c79055f8ba25d338
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_EXCEPTIONS_SUB_HEADING.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_EXCEPTIONS_SUB_HEADING.png.sha1
new file mode 100644
index 0000000..620406a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_EXCEPTIONS_SUB_HEADING.png.sha1
@@ -0,0 +1 @@
+afb3ccd698427e416847602640f82fe61292f1dd
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_LABEL.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_LABEL.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_SUB_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_SUB_LABEL.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_SUB_LABEL.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_LABEL.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_LABEL.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_DESCRIPTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..620406a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+afb3ccd698427e416847602640f82fe61292f1dd
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_HEADING.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_HEADING.png.sha1
new file mode 100644
index 0000000..620406a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_HEADING.png.sha1
@@ -0,0 +1 @@
+afb3ccd698427e416847602640f82fe61292f1dd
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_DESCRIPTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_HEADING.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_HEADING.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_HEADING.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DESCRIPTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_TITLE.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_TITLE.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_DATA_PAGE_TITLE.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/siteData1.png.sha1 b/chrome/app/settings_strings_grdp/siteData1.png.sha1
new file mode 100644
index 0000000..c5969c3e9
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/siteData1.png.sha1
@@ -0,0 +1 @@
+75d60b8a22c957aa252a59eeb4f0e25c00426379
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/siteData2.png.sha1 b/chrome/app/settings_strings_grdp/siteData2.png.sha1
new file mode 100644
index 0000000..620406a
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/siteData2.png.sha1
@@ -0,0 +1 @@
+afb3ccd698427e416847602640f82fe61292f1dd
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/siteData3.png.sha1 b/chrome/app/settings_strings_grdp/siteData3.png.sha1
new file mode 100644
index 0000000..c0bcaeb
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/siteData3.png.sha1
@@ -0,0 +1 @@
+d45ef4b200cddf86a99dbca8c79055f8ba25d338
\ No newline at end of file
diff --git a/chrome/app_shim/app_shim_controller.mm b/chrome/app_shim/app_shim_controller.mm
index 6c959eed..7bc8f61 100644
--- a/chrome/app_shim/app_shim_controller.mm
+++ b/chrome/app_shim/app_shim_controller.mm
@@ -5,6 +5,7 @@
 #include "chrome/app_shim/app_shim_controller.h"
 
 #include "base/memory/raw_ptr.h"
+#import "base/task/single_thread_task_runner.h"
 
 #import <Cocoa/Cocoa.h>
 #include <mach/message.h>
@@ -12,9 +13,9 @@
 #include <utility>
 
 #include "base/base_switches.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/hash/md5.h"
 #include "base/mac/bundle_locations.h"
 #include "base/mac/foundation_util.h"
diff --git a/chrome/app_shim/chrome_main_app_mode_mac.mm b/chrome/app_shim/chrome_main_app_mode_mac.mm
index e73c856..11aea43 100644
--- a/chrome/app_shim/chrome_main_app_mode_mac.mm
+++ b/chrome/app_shim/chrome_main_app_mode_mac.mm
@@ -13,12 +13,12 @@
 #include "base/allocator/early_zone_registration_mac.h"
 #include "base/at_exit.h"
 #include "base/base_switches.h"
-#include "base/bind.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/mac/bundle_locations.h"
 #include "base/mac/mac_logging.h"
 #include "base/message_loop/message_pump_type.h"
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index e30f015..955497e 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -3005,8 +3005,15 @@
       "fast_checkout/fast_checkout_client.h",
       "fast_checkout/fast_checkout_client_impl.cc",
       "fast_checkout/fast_checkout_client_impl.h",
+      "fast_checkout/fast_checkout_enums.h",
+      "fast_checkout/fast_checkout_personal_data_helper.h",
+      "fast_checkout/fast_checkout_personal_data_helper_impl.cc",
+      "fast_checkout/fast_checkout_personal_data_helper_impl.h",
       "fast_checkout/fast_checkout_tab_helper.cc",
       "fast_checkout/fast_checkout_tab_helper.h",
+      "fast_checkout/fast_checkout_trigger_validator.h",
+      "fast_checkout/fast_checkout_trigger_validator_impl.cc",
+      "fast_checkout/fast_checkout_trigger_validator_impl.h",
       "feature_guide/notifications/android/feature_notification_guide_bridge.cc",
       "feature_guide/notifications/android/feature_notification_guide_bridge.h",
       "feature_guide/notifications/android/feature_notification_guide_service_factory_android.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 55e8f680..a04f67e 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -8145,11 +8145,6 @@
          password_manager::features::kUnifiedPasswordManagerReenrollment)},
 #endif
 
-    {"extension-workflow-justification",
-     flag_descriptions::kExtensionWorkflowJustificationName,
-     flag_descriptions::kExtensionWorkflowJustificationDescription, kOsDesktop,
-     FEATURE_VALUE_TYPE(features::kExtensionWorkflowJustification)},
-
     {"tab-search-fuzzy-search", flag_descriptions::kTabSearchFuzzySearchName,
      flag_descriptions::kTabSearchFuzzySearchDescription, kOsDesktop,
      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kTabSearchFuzzySearch,
diff --git a/chrome/browser/android/explore_sites/explore_sites_fetcher.cc b/chrome/browser/android/explore_sites/explore_sites_fetcher.cc
index bc98d0a..96a51ec 100644
--- a/chrome/browser/android/explore_sites/explore_sites_fetcher.cc
+++ b/chrome/browser/android/explore_sites/explore_sites_fetcher.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "base/version.h"
 #include "chrome/browser/android/explore_sites/catalog.pb.h"
diff --git a/chrome/browser/android/explore_sites/explore_sites_store.cc b/chrome/browser/android/explore_sites/explore_sites_store.cc
index deaabc9..4c8eeb07 100644
--- a/chrome/browser/android/explore_sites/explore_sites_store.cc
+++ b/chrome/browser/android/explore_sites/explore_sites_store.cc
@@ -13,7 +13,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "chrome/browser/android/explore_sites/explore_sites_schema.h"
 #include "components/offline_pages/core/offline_clock.h"
diff --git a/chrome/browser/android/explore_sites/explore_sites_store.h b/chrome/browser/android/explore_sites/explore_sites_store.h
index 0d5d6cc..bf04c43 100644
--- a/chrome/browser/android/explore_sites/explore_sites_store.h
+++ b/chrome/browser/android/explore_sites/explore_sites_store.h
@@ -9,7 +9,6 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/task/sql_store_base.h"
 
 namespace sql {
diff --git a/chrome/browser/android/explore_sites/image_helper.h b/chrome/browser/android/explore_sites/image_helper.h
index 945bb47..569150a 100644
--- a/chrome/browser/android/explore_sites/image_helper.h
+++ b/chrome/browser/android/explore_sites/image_helper.h
@@ -10,7 +10,6 @@
 
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/android/explore_sites/explore_sites_types.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
diff --git a/chrome/browser/android/favicon_helper_unittest.cc b/chrome/browser/android/favicon_helper_unittest.cc
index 9ac77782..6a7bb60 100644
--- a/chrome/browser/android/favicon_helper_unittest.cc
+++ b/chrome/browser/android/favicon_helper_unittest.cc
@@ -7,6 +7,7 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "components/favicon/core/test/mock_favicon_service.h"
 #include "components/favicon_base/favicon_callback.h"
diff --git a/chrome/browser/android/oom_intervention/near_oom_monitor.cc b/chrome/browser/android/oom_intervention/near_oom_monitor.cc
index 1f1eb0a..dc07b9b 100644
--- a/chrome/browser/android/oom_intervention/near_oom_monitor.cc
+++ b/chrome/browser/android/oom_intervention/near_oom_monitor.cc
@@ -6,6 +6,7 @@
 
 #include "base/functional/bind.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/android/chrome_jni_headers/NearOomMonitor_jni.h"
 #include "chrome/browser/android/oom_intervention/oom_intervention_config.h"
diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc
index e13803c..45b2ac8b 100644
--- a/chrome/browser/android/signin/signin_manager_android.cc
+++ b/chrome/browser/android/signin/signin_manager_android.cc
@@ -12,6 +12,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/android/chrome_jni_headers/SigninManagerImpl_jni.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/android/usage_stats/usage_stats_database.cc b/chrome/browser/android/usage_stats/usage_stats_database.cc
index fea101f..fc09b40 100644
--- a/chrome/browser/android/usage_stats/usage_stats_database.cc
+++ b/chrome/browser/android/usage_stats/usage_stats_database.cc
@@ -10,6 +10,7 @@
 #include "base/functional/callback.h"
 #include "base/strings/safe_sprintf.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/android/usage_stats/website_event.pb.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc b/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc
index 38007a2..a7b9ba3 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/android/vr/arcore_device/fake_arcore.h"
 #include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/resources/shared_bitmap.h"
diff --git a/chrome/browser/android/vr/arcore_device/fake_arcore.h b/chrome/browser/android/vr/arcore_device/fake_arcore.h
index 36d92de0..838b37c 100644
--- a/chrome/browser/android/vr/arcore_device/fake_arcore.h
+++ b/chrome/browser/android/vr/arcore_device/fake_arcore.h
@@ -9,6 +9,7 @@
 #include <unordered_map>
 
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "device/vr/android/arcore/arcore.h"
 
diff --git a/chrome/browser/android/vr/autocomplete_controller.cc b/chrome/browser/android/vr/autocomplete_controller.cc
index bd90a3a8..2e053bbf 100644
--- a/chrome/browser/android/vr/autocomplete_controller.cc
+++ b/chrome/browser/android/vr/autocomplete_controller.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/vr/model/omnibox_suggestions.h"
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.cc b/chrome/browser/android/vr/gvr_scheduler_delegate.cc
index 240be61..098ecb7d 100644
--- a/chrome/browser/android/vr/gvr_scheduler_delegate.cc
+++ b/chrome/browser/android/vr/gvr_scheduler_delegate.cc
@@ -11,7 +11,6 @@
 #include "base/android/android_hardware_buffer_compat.h"
 #include "base/functional/bind.h"
 #include "base/metrics/field_trial_params.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
 #include "chrome/browser/android/vr/gl_browser_interface.h"
diff --git a/chrome/browser/android/vr/vr_gl_thread.cc b/chrome/browser/android/vr/vr_gl_thread.cc
index 4ab0df7..b58d958e 100644
--- a/chrome/browser/android/vr/vr_gl_thread.cc
+++ b/chrome/browser/android/vr/vr_gl_thread.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/version.h"
 #include "chrome/browser/android/vr/metrics_util_android.h"
 #include "chrome/browser/android/vr/ui_factory.h"
diff --git a/chrome/browser/android/vr/vr_shell_delegate.cc b/chrome/browser/android/vr/vr_shell_delegate.cc
index 5326479c..47ab7094 100644
--- a/chrome/browser/android/vr/vr_shell_delegate.cc
+++ b/chrome/browser/android/vr/vr_shell_delegate.cc
@@ -8,6 +8,7 @@
 
 #include "base/android/jni_android.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/android/features/vr/split_jni_headers/VrShellDelegate_jni.h"
 #include "chrome/browser/android/vr/vr_shell.h"
 #include "chrome/browser/android/vr/vrcore_install_helper.h"
diff --git a/chrome/browser/android/vr/vr_shell_delegate.h b/chrome/browser/android/vr/vr_shell_delegate.h
index daf0790..290d53f 100644
--- a/chrome/browser/android/vr/vr_shell_delegate.h
+++ b/chrome/browser/android/vr/vr_shell_delegate.h
@@ -11,6 +11,7 @@
 #include "base/cancelable_callback.h"
 #include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "device/vr/android/gvr/gvr_delegate_provider.h"
 #include "device/vr/public/mojom/vr_service.mojom.h"
 #include "device/vr/vr_device.h"
diff --git a/chrome/browser/android/webapk/webapk_install_coordinator_bridge.h b/chrome/browser/android/webapk/webapk_install_coordinator_bridge.h
index 7f6149d..f103e61 100644
--- a/chrome/browser/android/webapk/webapk_install_coordinator_bridge.h
+++ b/chrome/browser/android/webapk/webapk_install_coordinator_bridge.h
@@ -13,6 +13,7 @@
 #include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/android/webapk/webapk_install_service.h"
diff --git a/chrome/browser/apps/app_service/app_icon/app_icon_loader.h b/chrome/browser/apps/app_service/app_icon/app_icon_loader.h
index b70a6eb0..b4150e8 100644
--- a/chrome/browser/apps/app_service/app_icon/app_icon_loader.h
+++ b/chrome/browser/apps/app_service/app_icon/app_icon_loader.h
@@ -14,6 +14,7 @@
 #include "base/functional/callback_forward.h"
 #include "base/memory/raw_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/apps/app_service/app_icon/app_icon_factory.h"
 #include "components/services/app_service/public/cpp/icon_types.h"
diff --git a/chrome/browser/apps/app_service/app_icon/app_icon_util.cc b/chrome/browser/apps/app_service/app_icon/app_icon_util.cc
index fb72e86..dac54c7 100644
--- a/chrome/browser/apps/app_service/app_icon/app_icon_util.cc
+++ b/chrome/browser/apps/app_service/app_icon/app_icon_util.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/browser/apps/app_service/app_icon/app_icon_util.h"
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/apps/app_service/app_icon/dip_px_util.h"
diff --git a/chrome/browser/apps/app_service/app_service_proxy_lacros.cc b/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
index 00191ac..5a8cf4b8 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_lacros.cc
@@ -12,6 +12,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/location.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/apps/app_service/app_icon/app_icon_source.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
diff --git a/chrome/browser/apps/app_shim/app_shim_manager_mac.cc b/chrome/browser/apps/app_shim/app_shim_manager_mac.cc
index 1a8417b3..cdd7e67a 100644
--- a/chrome/browser/apps/app_shim/app_shim_manager_mac.cc
+++ b/chrome/browser/apps/app_shim/app_shim_manager_mac.cc
@@ -26,6 +26,7 @@
 #include "base/no_destructor.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.h"
 #include "chrome/browser/apps/app_shim/app_shim_host_mac.h"
 #include "chrome/browser/apps/app_shim/app_shim_listener.h"
diff --git a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
index e01f0b4..a49f5b5 100644
--- a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
+++ b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/weak_ptr.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/apps/platform_apps/api/BUILD.gn b/chrome/browser/apps/platform_apps/api/BUILD.gn
index c38c536f..5b419f6 100644
--- a/chrome/browser/apps/platform_apps/api/BUILD.gn
+++ b/chrome/browser/apps/platform_apps/api/BUILD.gn
@@ -77,22 +77,11 @@
     sources += [
       "arc_apps_private/arc_apps_private_api.cc",
       "arc_apps_private/arc_apps_private_api.h",
-      "webstore_widget_private/app_installer.cc",
-      "webstore_widget_private/app_installer.h",
-      "webstore_widget_private/webstore_widget_private_api.cc",
-      "webstore_widget_private/webstore_widget_private_api.h",
     ]
 
     deps += [
-      "//chrome:strings",
       "//chrome/browser/ash/crosapi",
-      "//chromeos/ash/components/multidevice/logging",
-      "//chromeos/ash/components/proximity_auth",
-      "//components/account_id",
-      "//components/strings:components_strings_grit",
-      "//components/user_manager",
-      "//device/bluetooth",
-      "//ui/chromeos",
+      "//ui/events:event_constants",
     ]
   }
 
diff --git a/chrome/browser/apps/platform_apps/api/webstore_widget_private/OWNERS b/chrome/browser/apps/platform_apps/api/webstore_widget_private/OWNERS
deleted file mode 100644
index df9b2c5d..0000000
--- a/chrome/browser/apps/platform_apps/api/webstore_widget_private/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-file://ui/file_manager/OWNERS
-tbarzic@chromium.org
diff --git a/chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.cc b/chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.cc
deleted file mode 100644
index 3b06e85..0000000
--- a/chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2013 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/apps/platform_apps/api/webstore_widget_private/app_installer.h"
-
-#include "chrome/common/extensions/webstore_install_result.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_contents_observer.h"
-
-namespace {
-const char kWebContentsDestroyedError[] = "WebContents is destroyed.";
-}  // namespace
-
-namespace webstore_widget {
-
-class AppInstaller::WebContentsObserver : public content::WebContentsObserver {
- public:
-  WebContentsObserver() = delete;
-
-  WebContentsObserver(content::WebContents* web_contents, AppInstaller* parent)
-      : content::WebContentsObserver(web_contents), parent_(parent) {}
-
-  WebContentsObserver(const WebContentsObserver&) = delete;
-  WebContentsObserver& operator=(const WebContentsObserver&) = delete;
-
- protected:
-  // content::WebContentsObserver implementation.
-  void WebContentsDestroyed() override {
-    parent_->OnWebContentsDestroyed(web_contents());
-  }
-
- private:
-  AppInstaller* parent_;
-};
-
-AppInstaller::AppInstaller(content::WebContents* web_contents,
-                           const std::string& item_id,
-                           Profile* profile,
-                           bool silent_installation,
-                           Callback callback)
-    : extensions::WebstoreStandaloneInstaller(item_id,
-                                              profile,
-                                              std::move(callback)),
-      silent_installation_(silent_installation),
-      web_contents_(web_contents),
-      web_contents_observer_(new WebContentsObserver(web_contents, this)) {
-  DCHECK(web_contents_);
-}
-
-AppInstaller::~AppInstaller() {}
-
-bool AppInstaller::CheckRequestorAlive() const {
-  // The tab may have gone away - cancel installation in that case.
-  return web_contents_ != nullptr;
-}
-
-std::unique_ptr<ExtensionInstallPrompt::Prompt>
-AppInstaller::CreateInstallPrompt() const {
-  if (silent_installation_)
-    return nullptr;
-
-  std::unique_ptr<ExtensionInstallPrompt::Prompt> prompt(
-      new ExtensionInstallPrompt::Prompt(
-          ExtensionInstallPrompt::WEBSTORE_WIDGET_PROMPT));
-
-  prompt->SetWebstoreData(localized_user_count(), show_user_count(),
-                          average_rating(), rating_count());
-  return prompt;
-}
-
-bool AppInstaller::ShouldShowPostInstallUI() const {
-  return false;
-}
-
-bool AppInstaller::ShouldShowAppInstalledBubble() const {
-  return false;
-}
-
-content::WebContents* AppInstaller::GetWebContents() const {
-  return web_contents_;
-}
-
-void AppInstaller::OnWebContentsDestroyed(content::WebContents* web_contents) {
-  RunCallback(false, kWebContentsDestroyedError,
-              extensions::webstore_install::OTHER_ERROR);
-  AbortInstall();
-}
-
-}  // namespace webstore_widget
diff --git a/chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.h b/chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.h
deleted file mode 100644
index 8fdb095e..0000000
--- a/chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2013 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_APPS_PLATFORM_APPS_API_WEBSTORE_WIDGET_PRIVATE_APP_INSTALLER_H_
-#define CHROME_BROWSER_APPS_PLATFORM_APPS_API_WEBSTORE_WIDGET_PRIVATE_APP_INSTALLER_H_
-
-#include <string>
-
-#include "base/functional/callback.h"
-#include "base/memory/ref_counted.h"
-#include "chrome/browser/extensions/webstore_standalone_installer.h"
-
-namespace content {
-class WebContents;
-}  // namespace content
-
-namespace webstore_widget {
-
-// This class is used for installing apps and extensions suggested from the
-// Chrome Web Store Gallery widget.
-class AppInstaller : public extensions::WebstoreStandaloneInstaller {
- public:
-  AppInstaller() = delete;
-
-  AppInstaller(content::WebContents* web_contents,
-               const std::string& item_id,
-               Profile* profile,
-               bool silent_installation,
-               Callback callback);
-
-  AppInstaller(const AppInstaller&) = delete;
-  AppInstaller& operator=(const AppInstaller&) = delete;
-
- protected:
-  friend class base::RefCountedThreadSafe<AppInstaller>;
-
-  ~AppInstaller() override;
-
-  void OnWebContentsDestroyed(content::WebContents* web_contents);
-
-  // WebstoreStandaloneInstaller implementation.
-  bool CheckRequestorAlive() const override;
-  bool ShouldShowPostInstallUI() const override;
-  bool ShouldShowAppInstalledBubble() const override;
-  content::WebContents* GetWebContents() const override;
-  std::unique_ptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
-      const override;
-
- private:
-  class WebContentsObserver;
-
-  bool silent_installation_;
-  content::WebContents* web_contents_;
-  std::unique_ptr<WebContentsObserver> web_contents_observer_;
-};
-
-}  // namespace webstore_widget
-
-#endif  // CHROME_BROWSER_APPS_PLATFORM_APPS_API_WEBSTORE_WIDGET_PRIVATE_APP_INSTALLER_H_
diff --git a/chrome/browser/apps/platform_apps/api/webstore_widget_private/webstore_widget_private_api.cc b/chrome/browser/apps/platform_apps/api/webstore_widget_private/webstore_widget_private_api.cc
deleted file mode 100644
index 775bd82f..0000000
--- a/chrome/browser/apps/platform_apps/api/webstore_widget_private/webstore_widget_private_api.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2015 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/apps/platform_apps/api/webstore_widget_private/webstore_widget_private_api.h"
-
-#include <memory>
-#include <utility>
-
-#include "base/functional/bind.h"
-#include "chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/apps/platform_apps/api/webstore_widget_private.h"
-#include "extensions/browser/extension_function_constants.h"
-
-namespace chrome_apps {
-namespace api {
-
-WebstoreWidgetPrivateInstallWebstoreItemFunction::
-    WebstoreWidgetPrivateInstallWebstoreItemFunction() {}
-
-WebstoreWidgetPrivateInstallWebstoreItemFunction::
-    ~WebstoreWidgetPrivateInstallWebstoreItemFunction() {}
-
-ExtensionFunction::ResponseAction
-WebstoreWidgetPrivateInstallWebstoreItemFunction::Run() {
-  const std::unique_ptr<webstore_widget_private::InstallWebstoreItem::Params>
-      params(
-          webstore_widget_private::InstallWebstoreItem::Params::Create(args()));
-  EXTENSION_FUNCTION_VALIDATE(params);
-
-  if (params->item_id.empty())
-    return RespondNow(Error("App ID empty."));
-
-  if (params->silent_installation)
-    return RespondNow(Error("Silent installation not allowed."));
-
-  content::WebContents* web_contents = GetSenderWebContents();
-  if (!web_contents) {
-    return RespondNow(
-        Error(extensions::function_constants::kCouldNotFindSenderWebContents));
-  }
-
-  auto installer = base::MakeRefCounted<webstore_widget::AppInstaller>(
-      web_contents, params->item_id,
-      Profile::FromBrowserContext(browser_context()),
-      params->silent_installation,
-      base::BindOnce(
-          &WebstoreWidgetPrivateInstallWebstoreItemFunction::OnInstallComplete,
-          this));
-  // installer will be AddRef()'d in BeginInstall().
-  installer->BeginInstall();
-
-  return RespondLater();
-}
-
-void WebstoreWidgetPrivateInstallWebstoreItemFunction::OnInstallComplete(
-    bool success,
-    const std::string& error,
-    extensions::webstore_install::Result result) {
-  Respond(success ? NoArguments() : Error(error));
-}
-
-}  // namespace api
-}  // namespace chrome_apps
diff --git a/chrome/browser/apps/platform_apps/api/webstore_widget_private/webstore_widget_private_api.h b/chrome/browser/apps/platform_apps/api/webstore_widget_private/webstore_widget_private_api.h
deleted file mode 100644
index a1a091a..0000000
--- a/chrome/browser/apps/platform_apps/api/webstore_widget_private/webstore_widget_private_api.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2015 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_APPS_PLATFORM_APPS_API_WEBSTORE_WIDGET_PRIVATE_WEBSTORE_WIDGET_PRIVATE_API_H_
-#define CHROME_BROWSER_APPS_PLATFORM_APPS_API_WEBSTORE_WIDGET_PRIVATE_WEBSTORE_WIDGET_PRIVATE_API_H_
-
-#include <string>
-
-#include "chrome/common/extensions/webstore_install_result.h"
-#include "extensions/browser/extension_function.h"
-
-namespace chrome_apps {
-namespace api {
-
-class WebstoreWidgetPrivateInstallWebstoreItemFunction
-    : public ExtensionFunction {
- public:
-  WebstoreWidgetPrivateInstallWebstoreItemFunction();
-  WebstoreWidgetPrivateInstallWebstoreItemFunction(
-      const WebstoreWidgetPrivateInstallWebstoreItemFunction&) = delete;
-  WebstoreWidgetPrivateInstallWebstoreItemFunction& operator=(
-      const WebstoreWidgetPrivateInstallWebstoreItemFunction&) = delete;
-
-  DECLARE_EXTENSION_FUNCTION("webstoreWidgetPrivate.installWebstoreItem",
-                             WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM)
-
- protected:
-  ~WebstoreWidgetPrivateInstallWebstoreItemFunction() override;
-
-  // ExtensionFunction overrides.
-  ResponseAction Run() override;
-
- private:
-  void OnInstallComplete(bool success,
-                         const std::string& error,
-                         extensions::webstore_install::Result result);
-};
-
-}  // namespace api
-}  // namespace chrome_apps
-
-#endif  // CHROME_BROWSER_APPS_PLATFORM_APPS_API_WEBSTORE_WIDGET_PRIVATE_WEBSTORE_WIDGET_PRIVATE_API_H_
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index bde0dd6..b340bcd 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -2954,8 +2954,6 @@
     "smb_client/smbfs_share.h",
     "startup_settings_cache.cc",
     "startup_settings_cache.h",
-    "sync/app_settings_model_type_controller.cc",
-    "sync/app_settings_model_type_controller.h",
     "sync/os_sync_util.cc",
     "sync/os_sync_util.h",
     "sync/os_syncable_service_model_type_controller.cc",
@@ -6044,6 +6042,8 @@
       ":ash",
       "//base",
       "//chrome/browser",
+      "//components/exo/wayland:ui_controls_protocol_stub",
+      "//components/exo/wayland:weston_test_stub",
     ]
   }
 
diff --git a/chrome/browser/ash/accessibility/dictation_browsertest.cc b/chrome/browser/ash/accessibility/dictation_browsertest.cc
index 4e705091..25fe751 100644
--- a/chrome/browser/ash/accessibility/dictation_browsertest.cc
+++ b/chrome/browser/ash/accessibility/dictation_browsertest.cc
@@ -141,6 +141,10 @@
     "move to the next sentence",
     "move to the previous sentence"};
 
+constexpr char kTestSupportPath[] =
+    "chrome/browser/resources/chromeos/accessibility/accessibility_common/"
+    "dictation/dictation_test_support.js";
+
 PrefService* GetActiveUserPrefs() {
   return ProfileManager::GetActiveUserProfile()->GetPrefs();
 }
@@ -349,12 +353,14 @@
     ASSERT_NO_FATAL_FAILURE(ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
         nullptr, ui::KeyboardCode::VKEY_TAB, false, false, false, false)));
 
+    // Create an instance of the DictationTestSupport JS class, which can be
+    // used from these tests to interact with Dictation JS. For more
+    // information, see kTestSupportPath.
+    SetUpTestSupport();
+
     // Increase Dictation's NO_FOCUSED_IME timeout to reduce flakiness on slower
     // builds.
-    std::string script = R"(
-      accessibilityCommon.dictation_.increaseNoFocusedImeTimeoutForTesting_();
-      window.domAutomationController.send("done");
-    )";
+    std::string script = "testSupport.increaseNoFocusedImeTimeout();";
     ExecuteAccessibilityCommonScript(script);
 
     // Dictation will request a Pumpkin install when it starts up. Wait for
@@ -369,6 +375,17 @@
     InProcessBrowserTest::TearDownOnMainThread();
   }
 
+  void SetUpTestSupport() {
+    base::ScopedAllowBlockingForTesting allow_blocking;
+    base::FilePath source_dir;
+    CHECK(base::PathService::Get(base::DIR_SOURCE_ROOT, &source_dir));
+    auto test_support_path = source_dir.AppendASCII(kTestSupportPath);
+    std::string script;
+    ASSERT_TRUE(base::ReadFileToString(test_support_path, &script))
+        << test_support_path;
+    ExecuteAccessibilityCommonScript(script);
+  }
+
   void SetUpPumpkinDir() {
     // Set the path to the Pumpkin test files. For more details, see the
     // `pumpkin_test_files` rule in the accessibility_common BUILD file.
@@ -394,18 +411,8 @@
       return;
     }
 
-    std::string error_message = "Waiting for Pumpkin Tagger to initialize";
-    SuccessWaiter(
-        base::BindLambdaForTesting([&]() { return GetPumpkinTaggerReady(); }),
-        error_message)
-        .Wait();
-  }
-
-  bool GetPumpkinTaggerReady() {
-    std::string script =
-        "window.domAutomationController.send(String(accessibilityCommon."
-        "dictation_.speechParser_.pumpkinParseStrategy_.pumpkinTaggerReady_));";
-    return "true" == ExecuteAccessibilityCommonScript(script);
+    std::string script = "testSupport.WaitForPumpkinTaggerReady();";
+    ExecuteAccessibilityCommonScript(script);
   }
 
   // Routers to SpeechRecognitionTestHelper methods.
@@ -499,34 +506,14 @@
   }
 
   void WaitForEditableValue(const std::string& value) {
-    std::string error_message = "Still waiting for text area value: " + value;
-    SuccessWaiter(base::BindLambdaForTesting(
-                      [&]() { return value == GetEditableValue(); }),
-                  error_message)
-        .Wait();
+    std::string script = base::StringPrintf(
+        "testSupport.waitForEditableValue(`%s`);", value.c_str());
+    ExecuteAccessibilityCommonScript(script);
   }
 
   void WaitForFocusHandler() {
-    std::string error_message = "Still waiting for FocusHandler";
-    std::string script = R"(
-      if (accessibilityCommon.dictation_.focusHandler_.isReadyForTesting()) {
-        window.domAutomationController.send("ready");
-      } else {
-        window.domAutomationController.send("not ready");
-      }
-    )";
-    SuccessWaiter(
-        base::BindLambdaForTesting([&]() {
-          std::string result =
-              extensions::browsertest_util::ExecuteScriptInBackgroundPage(
-                  /*context=*/browser()->profile(),
-                  /*extension_id=*/
-                  extension_misc::kAccessibilityCommonExtensionId,
-                  /*script=*/script);
-          return result == "ready";
-        }),
-        error_message)
-        .Wait();
+    std::string script = "testSupport.waitForFocusHandler();";
+    ExecuteAccessibilityCommonScript(script);
   }
 
   void ToggleDictationWithKeystroke() {
@@ -562,10 +549,7 @@
   }
 
   void DisablePumpkin() {
-    std::string script = R"(
-      accessibilityCommon.dictation_.disablePumpkinForTesting_();
-      window.domAutomationController.send("done");
-    )";
+    std::string script = "testSupport.disablePumpkin();";
     ExecuteAccessibilityCommonScript(script);
   }
 
diff --git a/chrome/browser/ash/accessibility/magnification_manager.cc b/chrome/browser/ash/accessibility/magnification_manager.cc
index 8d7fd290..9ca3c5f 100644
--- a/chrome/browser/ash/accessibility/magnification_manager.cc
+++ b/chrome/browser/ash/accessibility/magnification_manager.cc
@@ -130,8 +130,13 @@
 
 void MagnificationManager::OnViewEvent(views::View* view,
                                        ax::mojom::Event event_type) {
-  if (!fullscreen_magnifier_enabled_ && !IsDockedMagnifierEnabled())
+  if (!view) {
     return;
+  }
+
+  if (!fullscreen_magnifier_enabled_ && !IsDockedMagnifierEnabled()) {
+    return;
+  }
 
   if (event_type != ax::mojom::Event::kFocus &&
       event_type != ax::mojom::Event::kSelection) {
@@ -154,8 +159,14 @@
 
 MagnificationManager::~MagnificationManager() {
   CHECK(this == g_magnification_manager);
-  views::AXEventManager::Get()->RemoveObserver(this);
-  user_manager::UserManager::Get()->RemoveSessionStateObserver(this);
+  auto* event_manager = views::AXEventManager::Get();
+  if (event_manager) {
+    event_manager->RemoveObserver(this);
+  }
+  auto* user_manager = user_manager::UserManager::Get();
+  if (user_manager) {
+    user_manager->RemoveSessionStateObserver(this);
+  }
 }
 
 void MagnificationManager::OnLoginOrLockScreenVisible() {
diff --git a/chrome/browser/ash/android_sms/android_sms_app_manager_impl.h b/chrome/browser/ash/android_sms/android_sms_app_manager_impl.h
index 676328fa..cef2e80 100644
--- a/chrome/browser/ash/android_sms/android_sms_app_manager_impl.h
+++ b/chrome/browser/ash/android_sms/android_sms_app_manager_impl.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/memory/weak_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
 #include "chrome/browser/ash/android_sms/android_sms_app_manager.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
diff --git a/chrome/browser/ash/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ash/app_list/arc/arc_app_list_prefs.cc
index 2ebe75a..9b205688c 100644
--- a/chrome/browser/ash/app_list/arc/arc_app_list_prefs.cc
+++ b/chrome/browser/ash/app_list/arc/arc_app_list_prefs.cc
@@ -30,6 +30,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/values.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_list_prefs_factory.h"
diff --git a/chrome/browser/ash/app_list/search/app_search_provider.cc b/chrome/browser/ash/app_list/search/app_search_provider.cc
index 6edbf0d..0d2f18e 100644
--- a/chrome/browser/ash/app_list/search/app_search_provider.cc
+++ b/chrome/browser/ash/app_list/search/app_search_provider.cc
@@ -13,7 +13,6 @@
 #include "base/functional/bind.h"
 #include "base/i18n/rtl.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/app_list/app_list_model_updater.h"
 #include "chrome/browser/ash/app_list/search/app_search_data_source.h"
diff --git a/chrome/browser/ash/app_list/search/files/drive_file_suggestion_provider.h b/chrome/browser/ash/app_list/search/files/drive_file_suggestion_provider.h
index 8b0897fc..617d0f70 100644
--- a/chrome/browser/ash/app_list/search/files/drive_file_suggestion_provider.h
+++ b/chrome/browser/ash/app_list/search/files/drive_file_suggestion_provider.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_ASH_APP_LIST_SEARCH_FILES_DRIVE_FILE_SUGGESTION_PROVIDER_H_
 #define CHROME_BROWSER_ASH_APP_LIST_SEARCH_FILES_DRIVE_FILE_SUGGESTION_PROVIDER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/app_list/search/files/file_suggestion_provider.h"
 #include "chrome/browser/ash/app_list/search/files/item_suggest_cache.h"
 #include "chromeos/ash/components/drivefs/mojom/drivefs.mojom.h"
diff --git a/chrome/browser/ash/app_list/search/files/local_file_suggestion_provider.h b/chrome/browser/ash/app_list/search/files/local_file_suggestion_provider.h
index 3b6ca9b..d43e272 100644
--- a/chrome/browser/ash/app_list/search/files/local_file_suggestion_provider.h
+++ b/chrome/browser/ash/app_list/search/files/local_file_suggestion_provider.h
@@ -9,6 +9,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/app_list/search/files/file_suggest_util.h"
 #include "chrome/browser/ash/app_list/search/files/file_suggestion_provider.h"
diff --git a/chrome/browser/ash/app_list/search/files/zero_state_drive_provider.cc b/chrome/browser/ash/app_list/search/files/zero_state_drive_provider.cc
index 5a1606f..3de7bb1 100644
--- a/chrome/browser/ash/app_list/search/files/zero_state_drive_provider.cc
+++ b/chrome/browser/ash/app_list/search/files/zero_state_drive_provider.cc
@@ -10,6 +10,7 @@
 
 #include "ash/public/cpp/app_list/app_list_types.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/app_list/search/files/file_suggest_keyed_service.h"
 #include "chrome/browser/ash/app_list/search/files/file_suggest_keyed_service_factory.h"
diff --git a/chrome/browser/ash/app_list/search/files/zero_state_drive_provider_unittest.cc b/chrome/browser/ash/app_list/search/files/zero_state_drive_provider_unittest.cc
index 2cb96a91..7cb36e5 100644
--- a/chrome/browser/ash/app_list/search/files/zero_state_drive_provider_unittest.cc
+++ b/chrome/browser/ash/app_list/search/files/zero_state_drive_provider_unittest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ash/app_list/search/files/zero_state_drive_provider.h"
 
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.cc b/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.cc
index 718de56..a1967c91 100644
--- a/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.cc
+++ b/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.cc
@@ -13,8 +13,8 @@
 #include "base/files/file_path_watcher.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ash/app_list/search/local_images/annotation_storage.h"
 
 namespace app_list {
diff --git a/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.h b/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.h
index b99247f9..3d71c5e 100644
--- a/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.h
+++ b/chrome/browser/ash/app_list/search/local_images/image_annotation_worker.h
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace base {
 class FilePathWatcher;
diff --git a/chrome/browser/ash/app_mode/kiosk_app_data.cc b/chrome/browser/ash/app_mode/kiosk_app_data.cc
index c6d450a..b0418895 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_data.cc
+++ b/chrome/browser/ash/app_mode/kiosk_app_data.cc
@@ -12,6 +12,7 @@
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted_memory.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_data_delegate.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
diff --git a/chrome/browser/ash/app_mode/kiosk_external_update_validator.cc b/chrome/browser/ash/app_mode/kiosk_external_update_validator.cc
index babecbe7..efb132132 100644
--- a/chrome/browser/ash/app_mode/kiosk_external_update_validator.cc
+++ b/chrome/browser/ash/app_mode/kiosk_external_update_validator.cc
@@ -6,6 +6,7 @@
 
 #include "base/functional/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/common/extension.h"
diff --git a/chrome/browser/ash/app_mode/kiosk_external_updater.cc b/chrome/browser/ash/app_mode/kiosk_external_updater.cc
index 0fb78e5..67f9ed47 100644
--- a/chrome/browser/ash/app_mode/kiosk_external_updater.cc
+++ b/chrome/browser/ash/app_mode/kiosk_external_updater.cc
@@ -10,6 +10,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/version.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
 #include "chrome/browser/ash/notifications/kiosk_external_update_notification.h"
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc
index 7efe008..0834f64d 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.cc
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/syslog_logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_data.h"
 #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ash/app_restore/arc_app_single_restore_handler.cc b/chrome/browser/ash/app_restore/arc_app_single_restore_handler.cc
index 86e34e7..0aa1ae1 100644
--- a/chrome/browser/ash/app_restore/arc_app_single_restore_handler.cc
+++ b/chrome/browser/ash/app_restore/arc_app_single_restore_handler.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ash/app_restore/arc_app_single_restore_handler.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/ash/app_restore/arc_ghost_window_handler.h"
diff --git a/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc b/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc
index d28706a7..eb4e6a6 100644
--- a/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc
+++ b/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc
@@ -21,6 +21,7 @@
 #include "ash/wm/wm_event.h"
 #include "base/check_op.h"
 #include "base/feature_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/timer/timer.h"
diff --git a/chrome/browser/ash/arc/arc_support_host.cc b/chrome/browser/ash/arc/arc_support_host.cc
index 09a8de1..92f6145e 100644
--- a/chrome/browser/ash/arc/arc_support_host.cc
+++ b/chrome/browser/ash/arc/arc_support_host.cc
@@ -14,7 +14,6 @@
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/strings/string_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
diff --git a/chrome/browser/ash/arc/arc_util.cc b/chrome/browser/ash/arc/arc_util.cc
index 93dc641c..acd7f0ce 100644
--- a/chrome/browser/ash/arc/arc_util.cc
+++ b/chrome/browser/ash/arc/arc_util.cc
@@ -24,6 +24,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_util.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "chrome/browser/ash/arc/policy/arc_policy_util.h"
diff --git a/chrome/browser/ash/arc/bluetooth/arc_bluetooth_bridge.cc b/chrome/browser/ash/arc/bluetooth/arc_bluetooth_bridge.cc
index 189bce9..b8cf603 100644
--- a/chrome/browser/ash/arc/bluetooth/arc_bluetooth_bridge.cc
+++ b/chrome/browser/ash/arc/bluetooth/arc_bluetooth_bridge.cc
@@ -31,7 +31,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ash/arc/enterprise/cert_store/cert_store_service.cc b/chrome/browser/ash/arc/enterprise/cert_store/cert_store_service.cc
index d67fcac..b2f73cd 100644
--- a/chrome/browser/ash/arc/enterprise/cert_store/cert_store_service.cc
+++ b/chrome/browser/ash/arc/enterprise/cert_store/cert_store_service.cc
@@ -16,6 +16,7 @@
 #include "base/logging.h"
 #include "base/memory/singleton.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_utils.h"
 #include "chrome/browser/ash/arc/keymaster/arc_keymaster_bridge.h"
diff --git a/chrome/browser/ash/arc/extensions/arc_support_message_host.h b/chrome/browser/ash/arc/extensions/arc_support_message_host.h
index 874455af..222502ab 100644
--- a/chrome/browser/ash/arc/extensions/arc_support_message_host.h
+++ b/chrome/browser/ash/arc/extensions/arc_support_message_host.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "content/public/browser/browser_context.h"
 #include "extensions/browser/api/messaging/native_message_host.h"
diff --git a/chrome/browser/ash/arc/file_system_watcher/file_system_scanner.h b/chrome/browser/ash/arc/file_system_watcher/file_system_scanner.h
index 6d007513..9e0cf223 100644
--- a/chrome/browser/ash/arc/file_system_watcher/file_system_scanner.h
+++ b/chrome/browser/ash/arc/file_system_watcher/file_system_scanner.h
@@ -13,6 +13,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 
diff --git a/chrome/browser/ash/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc b/chrome/browser/ash/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc
index e17f0091..d7898e8 100644
--- a/chrome/browser/ash/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc
+++ b/chrome/browser/ash/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/arc/fileapi/arc_content_file_system_url_util.h"
 #include "chrome/browser/ash/arc/fileapi/arc_file_system_operation_runner.h"
 #include "chrome/browser/ash/fileapi/external_file_url_util.h"
diff --git a/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader.h b/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader.h
index 00129210..62b5523 100644
--- a/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader.h
+++ b/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader.h
@@ -12,7 +12,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/arc/fileapi/arc_file_system_operation_runner_util.h"
-#include "mojo/public/cpp/system/handle.h"
 #include "net/base/completion_once_callback.h"
 #include "storage/browser/file_system/file_stream_reader.h"
 #include "url/gurl.h"
diff --git a/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc b/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc
index 95d264d..b91e706 100644
--- a/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc
+++ b/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc
@@ -16,7 +16,6 @@
 #include "ash/components/arc/test/fake_file_system_instance.h"
 #include "base/functional/bind.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/arc/fileapi/arc_content_file_system_size_util.h"
 #include "chrome/browser/ash/arc/fileapi/arc_file_system_operation_runner.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_writer.h b/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_writer.h
index 05ab663c..b2f80e5 100644
--- a/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_writer.h
+++ b/chrome/browser/ash/arc/fileapi/arc_content_file_system_file_stream_writer.h
@@ -14,7 +14,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/arc/fileapi/arc_file_system_operation_runner_util.h"
-#include "mojo/public/cpp/system/handle.h"
 #include "net/base/completion_once_callback.h"
 #include "storage/browser/file_system/file_stream_writer.h"
 #include "url/gurl.h"
diff --git a/chrome/browser/ash/arc/fileapi/file_stream_forwarder.h b/chrome/browser/ash/arc/fileapi/file_stream_forwarder.h
index bdac90e..a723550 100644
--- a/chrome/browser/ash/arc/fileapi/file_stream_forwarder.h
+++ b/chrome/browser/ash/arc/fileapi/file_stream_forwarder.h
@@ -10,6 +10,7 @@
 #include "base/files/scoped_file.h"
 #include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "net/base/io_buffer.h"
 #include "storage/browser/file_system/file_stream_reader.h"
 #include "storage/browser/file_system/file_system_context.h"
diff --git a/chrome/browser/ash/arc/fileapi/file_stream_forwarder_unittest.cc b/chrome/browser/ash/arc/fileapi/file_stream_forwarder_unittest.cc
index 7132e0c..ba3e791e 100644
--- a/chrome/browser/ash/arc/fileapi/file_stream_forwarder_unittest.cc
+++ b/chrome/browser/ash/arc/fileapi/file_stream_forwarder_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/functional/bind.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/test/browser_task_environment.h"
 #include "storage/browser/file_system/file_system_context.h"
 #include "storage/browser/file_system/file_system_url.h"
diff --git a/chrome/browser/ash/arc/input_method_manager/input_connection_impl.cc b/chrome/browser/ash/arc/input_method_manager/input_connection_impl.cc
index 49fc8926..a91c7a5f 100644
--- a/chrome/browser/ash/arc/input_method_manager/input_connection_impl.cc
+++ b/chrome/browser/ash/arc/input_method_manager/input_connection_impl.cc
@@ -8,7 +8,6 @@
 
 #include "base/functional/bind.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "third_party/abseil-cpp/absl/utility/utility.h"
 #include "ui/base/ime/ash/ime_bridge.h"
 #include "ui/base/ime/ash/ime_keymap.h"
diff --git a/chrome/browser/ash/arc/input_overlay/arc_input_overlay_manager.h b/chrome/browser/ash/arc/input_overlay/arc_input_overlay_manager.h
index 06ef266..0616158 100644
--- a/chrome/browser/ash/arc/input_overlay/arc_input_overlay_manager.h
+++ b/chrome/browser/ash/arc/input_overlay/arc_input_overlay_manager.h
@@ -12,6 +12,7 @@
 #include "base/scoped_multi_source_observation.h"
 #include "base/scoped_observation.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_list_prefs.h"
 #include "chrome/browser/ash/arc/input_overlay/db/data_controller.h"
 #include "chrome/browser/ash/arc/input_overlay/db/proto/app_data.pb.h"
diff --git a/chrome/browser/ash/arc/input_overlay/db/data_controller.cc b/chrome/browser/ash/arc/input_overlay/db/data_controller.cc
index 70baecf..6f6b334 100644
--- a/chrome/browser/ash/arc/input_overlay/db/data_controller.cc
+++ b/chrome/browser/ash/arc/input_overlay/db/data_controller.cc
@@ -7,6 +7,7 @@
 #include "base/files/file.h"
 #include "base/files/file_util.h"
 #include "base/functional/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
diff --git a/chrome/browser/ash/arc/input_overlay/db/data_controller.h b/chrome/browser/ash/arc/input_overlay/db/data_controller.h
index b1fa8af..fcb096c8 100644
--- a/chrome/browser/ash/arc/input_overlay/db/data_controller.h
+++ b/chrome/browser/ash/arc/input_overlay/db/data_controller.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/arc/input_overlay/db/proto/app_data.pb.h"
 #include "content/public/browser/browser_context.h"
 
diff --git a/chrome/browser/ash/arc/input_overlay/touch_injector.cc b/chrome/browser/ash/arc/input_overlay/touch_injector.cc
index 652e1f9d..5b70e78 100644
--- a/chrome/browser/ash/arc/input_overlay/touch_injector.cc
+++ b/chrome/browser/ash/arc/input_overlay/touch_injector.cc
@@ -12,6 +12,7 @@
 #include "ash/utility/transformer_util.h"
 #include "base/containers/flat_set.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/ash/arc/input_overlay/actions/action_move.h"
 #include "chrome/browser/ash/arc/input_overlay/actions/action_tap.h"
diff --git a/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.cc b/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.cc
index 899ffc2b..a3490b6 100644
--- a/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.cc
+++ b/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.cc
@@ -19,6 +19,7 @@
 #include "base/location.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.h b/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.h
index d0aabd9..a6e4c539 100644
--- a/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.h
+++ b/chrome/browser/ash/arc/nearby_share/nearby_share_session_impl.h
@@ -9,6 +9,7 @@
 #include "base/functional/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/arc/nearby_share/share_info_file_handler.h"
 #include "chrome/browser/ash/fusebox/fusebox_moniker.h"
diff --git a/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc b/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc
index f4a4305..42674a7 100644
--- a/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc
+++ b/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/numerics/checked_math.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/arc/arc_util.h"
 #include "chrome/browser/ash/arc/fileapi/arc_content_file_system_url_util.h"
 #include "chrome/browser/ash/arc/nearby_share/arc_nearby_share_uma.h"
diff --git a/chrome/browser/ash/arc/nearby_share/share_info_file_handler.h b/chrome/browser/ash/arc/nearby_share/share_info_file_handler.h
index cfa0939..c7bafa2e 100644
--- a/chrome/browser/ash/arc/nearby_share/share_info_file_handler.h
+++ b/chrome/browser/ash/arc/nearby_share/share_info_file_handler.h
@@ -13,6 +13,7 @@
 #include "ash/components/arc/mojom/nearby_share.mojom.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter.h b/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter.h
index 935fcd9..4f398ff 100644
--- a/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter.h
+++ b/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter.h
@@ -10,6 +10,7 @@
 #include "base/files/scoped_file.h"
 #include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
 #include "net/base/io_buffer.h"
diff --git a/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter_unittest.cc b/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter_unittest.cc
index 38cdfb7..1681b00 100644
--- a/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter_unittest.cc
+++ b/chrome/browser/ash/arc/nearby_share/share_info_file_stream_adapter_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "content/public/test/browser_task_environment.h"
 #include "storage/browser/file_system/file_system_context.h"
diff --git a/chrome/browser/ash/arc/session/arc_service_launcher.cc b/chrome/browser/ash/arc/session/arc_service_launcher.cc
index 9c89982..38ffe2e 100644
--- a/chrome/browser/ash/arc/session/arc_service_launcher.cc
+++ b/chrome/browser/ash/arc/session/arc_service_launcher.cc
@@ -45,6 +45,7 @@
 #include "base/check_op.h"
 #include "base/files/file_util.h"
 #include "base/functional/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/apps/app_service/publishers/arc_apps_factory.h"
 #include "chrome/browser/ash/app_list/arc/arc_usb_host_permission_manager.h"
 #include "chrome/browser/ash/app_restore/app_restore_arc_task_handler.h"
diff --git a/chrome/browser/ash/arc/session/arc_service_launcher.h b/chrome/browser/ash/arc/session/arc_service_launcher.h
index 4f100c78..0759643d 100644
--- a/chrome/browser/ash/arc/session/arc_service_launcher.h
+++ b/chrome/browser/ash/arc/session/arc_service_launcher.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "media/media_buildflags.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 
 #if BUILDFLAG(USE_ARC_PROTECTED_MEDIA)
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/browser/ash/arc/session/arc_session_manager.cc b/chrome/browser/ash/arc/session/arc_session_manager.cc
index 8cf6520..75782729 100644
--- a/chrome/browser/ash/arc/session/arc_session_manager.cc
+++ b/chrome/browser/ash/arc/session/arc_session_manager.cc
@@ -30,7 +30,6 @@
 #include "base/task/task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_launcher.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_list_prefs.h"
diff --git a/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc b/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc
index 33a6a10..b27125ac 100644
--- a/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc
+++ b/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc
@@ -17,7 +17,7 @@
 #include "base/memory/singleton.h"
 #include "base/no_destructor.h"
 #include "base/posix/unix_domain_socket.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_config.h"
 #include "base/trace_event/trace_event.h"
diff --git a/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc b/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc
index a4ba353d..d2e9ff6 100644
--- a/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc
+++ b/chrome/browser/ash/arc/user_session/arc_user_session_service_browsertest.cc
@@ -47,9 +47,9 @@
 class ArcUserSessionServiceTest : public InProcessBrowserTest {
  public:
   ArcUserSessionServiceTest() {
-    // SyncSettingsCategorization makes an untitled Play Store icon appear in
-    // the shelf due to app pin syncing code. Sync isn't relevant to this test,
-    // so skip pinned app sync. https://crbug.com/1085597
+    // App pin syncing code makes an untitled Play Store icon appear in the
+    // shelf. Sync isn't relevant to this test, so skip pinned app sync.
+    // https://crbug.com/1085597
     ChromeShelfPrefs::SkipPinnedAppsFromSyncForTest();
   }
 
diff --git a/chrome/browser/ash/arc/video/gpu_arc_video_service_host.cc b/chrome/browser/ash/arc/video/gpu_arc_video_service_host.cc
index d34a977..ae9d408 100644
--- a/chrome/browser/ash/arc/video/gpu_arc_video_service_host.cc
+++ b/chrome/browser/ash/arc/video/gpu_arc_video_service_host.cc
@@ -24,6 +24,7 @@
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy_ash.h"
 #include "chromeos/components/cdm_factory_daemon/mojom/browser_cdm_factory.mojom.h"
diff --git a/chrome/browser/ash/attestation/attestation_ca_client.cc b/chrome/browser/ash/attestation/attestation_ca_client.cc
index 16fbe2f..c087de1 100644
--- a/chrome/browser/ash/attestation/attestation_ca_client.cc
+++ b/chrome/browser/ash/attestation/attestation_ca_client.cc
@@ -9,7 +9,6 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/net/system_network_context_manager.h"
 #include "chromeos/dbus/constants/dbus_switches.h"
diff --git a/chrome/browser/ash/attestation/attestation_policy_observer_unittest.cc b/chrome/browser/ash/attestation/attestation_policy_observer_unittest.cc
index 36a649a3..507bbd74 100644
--- a/chrome/browser/ash/attestation/attestation_policy_observer_unittest.cc
+++ b/chrome/browser/ash/attestation/attestation_policy_observer_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/attestation/attestation_policy_observer.h"
 #include "chrome/browser/ash/attestation/mock_machine_certificate_uploader.h"
 #include "chrome/browser/ash/settings/scoped_cros_settings_test_helper.h"
diff --git a/chrome/browser/ash/attestation/platform_verification_flow_unittest.cc b/chrome/browser/ash/attestation/platform_verification_flow_unittest.cc
index fd9edfa..8a78945 100644
--- a/chrome/browser/ash/attestation/platform_verification_flow_unittest.cc
+++ b/chrome/browser/ash/attestation/platform_verification_flow_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/attestation/platform_verification_flow.h"
 #include "chrome/browser/ash/login/users/mock_user_manager.h"
 #include "chrome/browser/ash/settings/scoped_cros_settings_test_helper.h"
diff --git a/chrome/browser/ash/authpolicy/authpolicy_credentials_manager.cc b/chrome/browser/ash/authpolicy/authpolicy_credentials_manager.cc
index 2a33791..89e853c 100644
--- a/chrome/browser/ash/authpolicy/authpolicy_credentials_manager.cc
+++ b/chrome/browser/ash/authpolicy/authpolicy_credentials_manager.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_platform_part.h"
diff --git a/chrome/browser/ash/bluetooth/debug_logs_manager.cc b/chrome/browser/ash/bluetooth/debug_logs_manager.cc
index 58e8f3e9..72a4e34c 100644
--- a/chrome/browser/ash/bluetooth/debug_logs_manager.cc
+++ b/chrome/browser/ash/bluetooth/debug_logs_manager.cc
@@ -7,6 +7,7 @@
 #include "ash/constants/ash_features.h"
 #include "base/feature_list.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "device/bluetooth/dbus/bluetooth_debug_manager_client.h"
diff --git a/chrome/browser/ash/borealis/borealis_context_unittest.cc b/chrome/browser/ash/borealis/borealis_context_unittest.cc
index 464d6f3..3a25755 100644
--- a/chrome/browser/ash/borealis/borealis_context_unittest.cc
+++ b/chrome/browser/ash/borealis/borealis_context_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/barrier_closure.h"
 #include "base/base64.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "chrome/browser/ash/borealis/borealis_disk_manager_dispatcher.h"
 #include "chrome/browser/ash/borealis/borealis_launch_options.h"
diff --git a/chrome/browser/ash/borealis/borealis_launch_watcher.cc b/chrome/browser/ash/borealis/borealis_launch_watcher.cc
index 90d6850..8f03389 100644
--- a/chrome/browser/ash/borealis/borealis_launch_watcher.cc
+++ b/chrome/browser/ash/borealis/borealis_launch_watcher.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/ash/borealis/borealis_launch_watcher.h"
 
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 
 namespace borealis {
diff --git a/chrome/browser/ash/borealis/borealis_shutdown_monitor.cc b/chrome/browser/ash/borealis/borealis_shutdown_monitor.cc
index 8e53a0e..08330fdb9 100644
--- a/chrome/browser/ash/borealis/borealis_shutdown_monitor.cc
+++ b/chrome/browser/ash/borealis/borealis_shutdown_monitor.cc
@@ -6,7 +6,6 @@
 
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/borealis/borealis_context_manager.h"
 #include "chrome/browser/ash/borealis/borealis_service.h"
 
diff --git a/chrome/browser/ash/child_accounts/screen_time_controller.cc b/chrome/browser/ash/child_accounts/screen_time_controller.cc
index 520e786..f6461717 100644
--- a/chrome/browser/ash/child_accounts/screen_time_controller.cc
+++ b/chrome/browser/ash/child_accounts/screen_time_controller.cc
@@ -12,6 +12,7 @@
 #include "ash/public/cpp/login_screen.h"
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/clock.h"
 #include "base/time/default_clock.h"
 #include "base/timer/timer.h"
diff --git a/chrome/browser/ash/child_accounts/time_limit_notifier.cc b/chrome/browser/ash/child_accounts/time_limit_notifier.cc
index 6194764..b0d97fb 100644
--- a/chrome/browser/ash/child_accounts/time_limit_notifier.cc
+++ b/chrome/browser/ash/child_accounts/time_limit_notifier.cc
@@ -12,6 +12,7 @@
 #include "base/functional/bind.h"
 #include "base/i18n/time_formatting.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/notifications/notification_display_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/grit/generated_resources.h"
diff --git a/chrome/browser/ash/chrome_browser_main_parts_ash.cc b/chrome/browser/ash/chrome_browser_main_parts_ash.cc
index de73539..d7c18422 100644
--- a/chrome/browser/ash/chrome_browser_main_parts_ash.cc
+++ b/chrome/browser/ash/chrome_browser_main_parts_ash.cc
@@ -37,6 +37,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
diff --git a/chrome/browser/ash/concierge_helper_service_unittest.cc b/chrome/browser/ash/concierge_helper_service_unittest.cc
index 8ac0afa..8c313f23 100644
--- a/chrome/browser/ash/concierge_helper_service_unittest.cc
+++ b/chrome/browser/ash/concierge_helper_service_unittest.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/ash/components/dbus/concierge/concierge_service.pb.h"
 #include "chromeos/ash/components/dbus/concierge/fake_concierge_client.h"
diff --git a/chrome/browser/ash/crosapi/ash_requires_lacros_browsertestbase.h b/chrome/browser/ash/crosapi/ash_requires_lacros_browsertestbase.h
index b2fa7ed..1ae3787 100644
--- a/chrome/browser/ash/crosapi/ash_requires_lacros_browsertestbase.h
+++ b/chrome/browser/ash/crosapi/ash_requires_lacros_browsertestbase.h
@@ -11,7 +11,6 @@
 #include "chrome/browser/ash/crosapi/test_controller_ash.h"
 #include "chrome/test/base/chromeos/ash_browser_test_starter.h"
 #include "chromeos/crosapi/mojom/test_controller.mojom.h"
-#include "mojo/public/cpp/bindings/remote.h"
 
 namespace crosapi {
 
diff --git a/chrome/browser/ash/crosapi/ash_requires_lacros_extension_apitest.h b/chrome/browser/ash/crosapi/ash_requires_lacros_extension_apitest.h
index 4ff6c7f..5956297 100644
--- a/chrome/browser/ash/crosapi/ash_requires_lacros_extension_apitest.h
+++ b/chrome/browser/ash/crosapi/ash_requires_lacros_extension_apitest.h
@@ -11,7 +11,6 @@
 #include "chrome/browser/ash/crosapi/test_controller_ash.h"
 #include "chrome/test/base/chromeos/ash_browser_test_starter.h"
 #include "chromeos/crosapi/mojom/test_controller.mojom.h"
-#include "mojo/public/cpp/bindings/remote.h"
 
 namespace crosapi {
 
diff --git a/chrome/browser/ash/crosapi/login_screen_storage_ash_unittest.cc b/chrome/browser/ash/crosapi/login_screen_storage_ash_unittest.cc
index 7b44139..c43602b 100644
--- a/chrome/browser/ash/crosapi/login_screen_storage_ash_unittest.cc
+++ b/chrome/browser/ash/crosapi/login_screen_storage_ash_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/ash/crosapi/login_screen_storage_ash.h"
 
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/test/base/scoped_testing_local_state.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h"
diff --git a/chrome/browser/ash/crosapi/screen_manager_ash_browsertest.cc b/chrome/browser/ash/crosapi/screen_manager_ash_browsertest.cc
index ef85e4c..5b9f09e 100644
--- a/chrome/browser/ash/crosapi/screen_manager_ash_browsertest.cc
+++ b/chrome/browser/ash/crosapi/screen_manager_ash_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "ash/public/cpp/test/shell_test_api.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/ash/crosapi/screen_manager_ash.h"
diff --git a/chrome/browser/ash/crosapi/test_controller_ash.cc b/chrome/browser/ash/crosapi/test_controller_ash.cc
index 10e4284..adcc27be 100644
--- a/chrome/browser/ash/crosapi/test_controller_ash.cc
+++ b/chrome/browser/ash/crosapi/test_controller_ash.cc
@@ -24,6 +24,7 @@
 #include "base/scoped_observation.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/version.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
diff --git a/chrome/browser/ash/crostini/crostini_installer.cc b/chrome/browser/ash/crostini/crostini_installer.cc
index 344c1b4..1f546ddf 100644
--- a/chrome/browser/ash/crostini/crostini_installer.cc
+++ b/chrome/browser/ash/crostini/crostini_installer.cc
@@ -12,6 +12,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/no_destructor.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/crostini/ansible/ansible_management_service_factory.h"
diff --git a/chrome/browser/ash/crostini/crostini_installer_unittest.cc b/chrome/browser/ash/crostini/crostini_installer_unittest.cc
index ea49fc5..63d12f8 100644
--- a/chrome/browser/ash/crostini/crostini_installer_unittest.cc
+++ b/chrome/browser/ash/crostini/crostini_installer_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "chrome/browser/ash/crostini/ansible/ansible_management_test_helper.h"
diff --git a/chrome/browser/ash/crostini/crostini_manager_unittest.cc b/chrome/browser/ash/crostini/crostini_manager_unittest.cc
index 9beaf7f7..84b8cfe 100644
--- a/chrome/browser/ash/crostini/crostini_manager_unittest.cc
+++ b/chrome/browser/ash/crostini/crostini_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/browser/ash/crostini/crostini_upgrader.h b/chrome/browser/ash/crostini/crostini_upgrader.h
index 3dae588..b8c3496 100644
--- a/chrome/browser/ash/crostini/crostini_upgrader.h
+++ b/chrome/browser/ash/crostini/crostini_upgrader.h
@@ -7,6 +7,7 @@
 
 #include "base/functional/callback_forward.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/crostini/crostini_export_import.h"
 #include "chrome/browser/ash/crostini/crostini_export_import_status_tracker.h"
 #include "chrome/browser/ash/crostini/crostini_manager.h"
diff --git a/chrome/browser/ash/crostini/crostini_util.cc b/chrome/browser/ash/crostini/crostini_util.cc
index 24d728f..6ec4ec00 100644
--- a/chrome/browser/ash/crostini/crostini_util.cc
+++ b/chrome/browser/ash/crostini/crostini_util.cc
@@ -17,6 +17,7 @@
 #include "base/no_destructor.h"
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/crostini/crostini_features.h"
 #include "chrome/browser/ash/crostini/crostini_manager.h"
diff --git a/chrome/browser/ash/dbus/encrypted_reporting_service_provider.cc b/chrome/browser/ash/dbus/encrypted_reporting_service_provider.cc
index fa368c1d..dd8b9a0 100644
--- a/chrome/browser/ash/dbus/encrypted_reporting_service_provider.cc
+++ b/chrome/browser/ash/dbus/encrypted_reporting_service_provider.cc
@@ -14,6 +14,7 @@
 #include "base/strings/strcat.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/policy/messaging_layer/upload/event_upload_size_controller.h"
 #include "chrome/browser/policy/messaging_layer/upload/upload_client.h"
diff --git a/chrome/browser/ash/dbus/encrypted_reporting_service_provider.h b/chrome/browser/ash/dbus/encrypted_reporting_service_provider.h
index ea4e12cd..b09074b 100644
--- a/chrome/browser/ash/dbus/encrypted_reporting_service_provider.h
+++ b/chrome/browser/ash/dbus/encrypted_reporting_service_provider.h
@@ -12,8 +12,8 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/policy/messaging_layer/upload/network_condition_service.h"
 #include "chrome/browser/policy/messaging_layer/upload/upload_client.h"
 #include "chrome/browser/policy/messaging_layer/upload/upload_provider.h"
diff --git a/chrome/browser/ash/dbus/mojo_connection_service_provider.cc b/chrome/browser/ash/dbus/mojo_connection_service_provider.cc
index fa06db82..7129064 100644
--- a/chrome/browser/ash/dbus/mojo_connection_service_provider.cc
+++ b/chrome/browser/ash/dbus/mojo_connection_service_provider.cc
@@ -9,7 +9,6 @@
 
 #include "base/files/scoped_file.h"
 #include "base/functional/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/net/rollback_network_config/rollback_network_config_service.h"
 #include "chromeos/ash/services/rollback_network_config/public/mojom/rollback_network_config.mojom.h"
 #include "chromeos/components/sensors/ash/sensor_hal_dispatcher.h"
diff --git a/chrome/browser/ash/device_sync/device_sync_client_factory.cc b/chrome/browser/ash/device_sync/device_sync_client_factory.cc
index e2d84ba..a801492 100644
--- a/chrome/browser/ash/device_sync/device_sync_client_factory.cc
+++ b/chrome/browser/ash/device_sync/device_sync_client_factory.cc
@@ -6,6 +6,7 @@
 
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/attestation/soft_bind_attestation_flow_impl.h"
 #include "chrome/browser/ash/cryptauth/client_app_metadata_provider_service.h"
diff --git a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
index ee73e29..b59178d1 100644
--- a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
+++ b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
@@ -24,6 +24,7 @@
 #include "ash/public/cpp/test/app_list_test_api.h"
 #include "ash/public/cpp/test/shell_test_api.h"
 #include "base/json/json_writer.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/values.h"
@@ -107,9 +108,9 @@
 class AutotestPrivateApiTest : public ExtensionApiTest {
  public:
   AutotestPrivateApiTest() {
-    // SyncSettingsCategorization makes an untitled Play Store icon appear in
-    // the shelf due to app pin syncing code. Sync isn't relevant to this test,
-    // so skip pinned app sync. https://crbug.com/1085597
+    // App pin syncing code makes an untitled Play Store icon appear in the
+    // shelf. Sync isn't relevant to this test, so skip pinned app sync.
+    // https://crbug.com/1085597
     ChromeShelfPrefs::SkipPinnedAppsFromSyncForTest();
   }
 
diff --git a/chrome/browser/ash/extensions/external_cache_impl.cc b/chrome/browser/ash/extensions/external_cache_impl.cc
index 18b44db..1a793d5 100644
--- a/chrome/browser/ash/extensions/external_cache_impl.cc
+++ b/chrome/browser/ash/extensions/external_cache_impl.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/rand_util.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "base/version.h"
 #include "chrome/browser/ash/extensions/external_cache_delegate.h"
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest.cc b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
index 4ddb67db..2799285 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
@@ -11,6 +11,7 @@
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/threading/thread_restrictions.h"
 #include "chrome/browser/ash/file_manager/copy_or_move_io_task_scanning_impl.h"
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
index a71ad12..53a5cad 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
@@ -45,6 +45,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/ash/file_system_provider/scoped_file_opener_unittest.cc b/chrome/browser/ash/file_system_provider/scoped_file_opener_unittest.cc
index a033f12..01f3d06a 100644
--- a/chrome/browser/ash/file_system_provider/scoped_file_opener_unittest.cc
+++ b/chrome/browser/ash/file_system_provider/scoped_file_opener_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/file_system_provider/fake_provided_file_system.h"
 #include "chrome/browser/ash/file_system_provider/provided_file_system_info.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc b/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc
index 9c907fa..ff89c64 100644
--- a/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc
+++ b/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc
@@ -4,6 +4,7 @@
 #include "chrome/browser/ash/floating_workspace/floating_workspace_service.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/sync_sessions/open_tabs_ui_delegate.h"
diff --git a/chrome/browser/ash/guest_os/guest_os_diagnostics_builder.h b/chrome/browser/ash/guest_os/guest_os_diagnostics_builder.h
index 6225cbcf..716a7a2 100644
--- a/chrome/browser/ash/guest_os/guest_os_diagnostics_builder.h
+++ b/chrome/browser/ash/guest_os/guest_os_diagnostics_builder.h
@@ -8,7 +8,6 @@
 #include <string>
 
 #include "chrome/browser/ash/guest_os/guest_os_diagnostics.mojom.h"
-#include "mojo/public/cpp/bindings/struct_ptr.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc b/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc
index 6995022..2285c3b 100644
--- a/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc
+++ b/chrome/browser/ash/guest_os/guest_os_stability_monitor_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/barrier_closure.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "chrome/browser/ash/crostini/crostini_manager.h"
 #include "chrome/browser/ash/crostini/crostini_simple_types.h"
diff --git a/chrome/browser/ash/input_method/native_input_method_engine.h b/chrome/browser/ash/input_method/native_input_method_engine.h
index 1bde399..198edcc 100644
--- a/chrome/browser/ash/input_method/native_input_method_engine.h
+++ b/chrome/browser/ash/input_method/native_input_method_engine.h
@@ -21,9 +21,6 @@
 #include "chromeos/ash/services/ime/public/mojom/input_method_host.mojom.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "components/prefs/pref_service.h"
-#include "mojo/public/cpp/bindings/associated_receiver.h"
-#include "mojo/public/cpp/bindings/associated_remote.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/base/ime/character_composer.h"
 
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc
index f522dc6f..19eacc1 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc
@@ -19,7 +19,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_clock.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/ash/login/enrollment/enrollment_screen.cc b/chrome/browser/ash/login/enrollment/enrollment_screen.cc
index 6505849..d07989f 100644
--- a/chrome/browser/ash/login/enrollment/enrollment_screen.cc
+++ b/chrome/browser/ash/login/enrollment/enrollment_screen.cc
@@ -17,6 +17,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/elapsed_timer.h"
 #include "chrome/browser/ash/login/active_directory_migration_utils.h"
 #include "chrome/browser/ash/login/configuration_keys.h"
diff --git a/chrome/browser/ash/login/existing_user_controller_browsertest.cc b/chrome/browser/ash/login/existing_user_controller_browsertest.cc
index 1dc6525..18c41a5 100644
--- a/chrome/browser/ash/login/existing_user_controller_browsertest.cc
+++ b/chrome/browser/ash/login/existing_user_controller_browsertest.cc
@@ -23,7 +23,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/app_list/arc/arc_app_list_prefs_factory.h"
 #include "chrome/browser/ash/arc/arc_util.h"
diff --git a/chrome/browser/ash/login/lock/screen_locker.cc b/chrome/browser/ash/login/lock/screen_locker.cc
index b0c6b333..1fcf673 100644
--- a/chrome/browser/ash/login/lock/screen_locker.cc
+++ b/chrome/browser/ash/login/lock/screen_locker.cc
@@ -21,7 +21,6 @@
 #include "base/strings/string_util.h"
 #include "base/task/current_thread.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/accessibility/accessibility_manager.h"
 #include "chrome/browser/ash/authpolicy/authpolicy_helper.h"
diff --git a/chrome/browser/ash/login/lock/views_screen_locker.cc b/chrome/browser/ash/login/lock/views_screen_locker.cc
index aaebcb7..e4a4c46 100644
--- a/chrome/browser/ash/login/lock/views_screen_locker.cc
+++ b/chrome/browser/ash/login/lock/views_screen_locker.cc
@@ -16,7 +16,6 @@
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/authpolicy/authpolicy_helper.h"
 #include "chrome/browser/ash/lock_screen_apps/state_controller.h"
diff --git a/chrome/browser/ash/login/login_screen_policy_browsertest.cc b/chrome/browser/ash/login/login_screen_policy_browsertest.cc
index 41b5ca8..7d8a97f 100644
--- a/chrome/browser/ash/login/login_screen_policy_browsertest.cc
+++ b/chrome/browser/ash/login/login_screen_policy_browsertest.cc
@@ -15,7 +15,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/startup_utils.h"
 #include "chrome/browser/ash/login/test/js_checker.h"
 #include "chrome/browser/ash/login/test/login_manager_mixin.h"
diff --git a/chrome/browser/ash/login/login_ui_keyboard_browsertest.cc b/chrome/browser/ash/login/login_ui_keyboard_browsertest.cc
index 2b74cda9..dc7d7d3 100644
--- a/chrome/browser/ash/login/login_ui_keyboard_browsertest.cc
+++ b/chrome/browser/ash/login/login_ui_keyboard_browsertest.cc
@@ -11,7 +11,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/input_method/input_method_persistence.h"
 #include "chrome/browser/ash/language_preferences.h"
 #include "chrome/browser/ash/login/lock/screen_locker_tester.h"
diff --git a/chrome/browser/ash/login/oobe_interactive_ui_test.cc b/chrome/browser/ash/login/oobe_interactive_ui_test.cc
index b2b5dcb..508222a 100644
--- a/chrome/browser/ash/login/oobe_interactive_ui_test.cc
+++ b/chrome/browser/ash/login/oobe_interactive_ui_test.cc
@@ -16,6 +16,7 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "build/branding_buildflags.h"
diff --git a/chrome/browser/ash/login/reporting/login_logout_reporter.cc b/chrome/browser/ash/login/reporting/login_logout_reporter.cc
index 7cd134e..944e8a4 100644
--- a/chrome/browser/ash/login/reporting/login_logout_reporter.cc
+++ b/chrome/browser/ash/login/reporting/login_logout_reporter.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/login/existing_user_controller.h"
 #include "chrome/browser/ash/policy/core/device_local_account.h"
 #include "chrome/browser/ash/policy/reporting/user_event_reporter_helper.h"
diff --git a/chrome/browser/ash/login/screens/chromevox_hint/chromevox_hint_detector_unittest.cc b/chrome/browser/ash/login/screens/chromevox_hint/chromevox_hint_detector_unittest.cc
index bf6743d0..0d362a32 100644
--- a/chrome/browser/ash/login/screens/chromevox_hint/chromevox_hint_detector_unittest.cc
+++ b/chrome/browser/ash/login/screens/chromevox_hint/chromevox_hint_detector_unittest.cc
@@ -5,9 +5,9 @@
 #include "chrome/browser/ash/login/screens/chromevox_hint/chromevox_hint_detector.h"
 
 #include "ash/constants/ash_switches.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_command_line.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/dbus/constants/dbus_switches.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/ash/login/screens/sync_consent_screen.cc b/chrome/browser/ash/login/screens/sync_consent_screen.cc
index 59555c7f..d2514f1 100644
--- a/chrome/browser/ash/login/screens/sync_consent_screen.cc
+++ b/chrome/browser/ash/login/screens/sync_consent_screen.cc
@@ -16,6 +16,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/account_manager/account_apps_availability.h"
 #include "chrome/browser/ash/crosapi/browser_util.h"
 #include "chrome/browser/ash/login/wizard_controller.h"
diff --git a/chrome/browser/ash/login/signin_partition_manager_unittest.cc b/chrome/browser/ash/login/signin_partition_manager_unittest.cc
index e5c45fa..efaa986d 100644
--- a/chrome/browser/ash/login/signin_partition_manager_unittest.cc
+++ b/chrome/browser/ash/login/signin_partition_manager_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/functional/callback.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/browser_context.h"
diff --git a/chrome/browser/ash/login/test/oobe_base_test.cc b/chrome/browser/ash/login/test/oobe_base_test.cc
index 377e96a8..73d0da7 100644
--- a/chrome/browser/ash/login/test/oobe_base_test.cc
+++ b/chrome/browser/ash/login/test/oobe_base_test.cc
@@ -13,7 +13,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/session/user_session_manager.h"
 #include "chrome/browser/ash/login/session/user_session_manager_test_api.h"
 #include "chrome/browser/ash/login/test/login_or_lock_screen_visible_waiter.h"
diff --git a/chrome/browser/ash/login/ui/login_display_host_common.cc b/chrome/browser/ash/login/ui/login_display_host_common.cc
index c396f9b..1c37efc 100644
--- a/chrome/browser/ash/login/ui/login_display_host_common.cc
+++ b/chrome/browser/ash/login/ui/login_display_host_common.cc
@@ -14,6 +14,7 @@
 #include "base/functional/callback.h"
 #include "base/functional/callback_helpers.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_types.h"
 #include "chrome/browser/ash/language_preferences.h"
 #include "chrome/browser/ash/login/app_mode/kiosk_launch_controller.h"
diff --git a/chrome/browser/ash/login/ui/login_feedback_browsertest.cc b/chrome/browser/ash/login/ui/login_feedback_browsertest.cc
index e43fcb6..20591cd 100644
--- a/chrome/browser/ash/login/ui/login_feedback_browsertest.cc
+++ b/chrome/browser/ash/login/ui/login_feedback_browsertest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ash/login/ui/login_feedback.h"
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/login/login_manager_test.h"
 #include "chrome/browser/ash/login/test/login_manager_mixin.h"
 #include "chrome/browser/ash/login/test/oobe_base_test.h"
diff --git a/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc b/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc
index 154c9a93..adba9ea 100644
--- a/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc
+++ b/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc
@@ -23,7 +23,6 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/ash/login/login_manager_test.h"
diff --git a/chrome/browser/ash/login/users/avatar/user_image_manager_test_util.cc b/chrome/browser/ash/login/users/avatar/user_image_manager_test_util.cc
index fab87470..442e17bf 100644
--- a/chrome/browser/ash/login/users/avatar/user_image_manager_test_util.cc
+++ b/chrome/browser/ash/login/users/avatar/user_image_manager_test_util.cc
@@ -12,7 +12,6 @@
 #include "base/files/file_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/image/image_skia_rep.h"
 
diff --git a/chrome/browser/ash/login/users/chrome_user_manager.cc b/chrome/browser/ash/login/users/chrome_user_manager.cc
index fd2f256..afb8bf6 100644
--- a/chrome/browser/ash/login/users/chrome_user_manager.cc
+++ b/chrome/browser/ash/login/users/chrome_user_manager.cc
@@ -6,6 +6,7 @@
 
 #include "ash/constants/ash_switches.h"
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/browser_process.h"
 #include "chromeos/ash/components/settings/cros_settings_names.h"
 #include "components/policy/core/common/policy_map.h"
diff --git a/chrome/browser/ash/login/users/supervised_user_manager_impl.cc b/chrome/browser/ash/login/users/supervised_user_manager_impl.cc
index de39ae7..4504dc8 100644
--- a/chrome/browser/ash/login/users/supervised_user_manager_impl.cc
+++ b/chrome/browser/ash/login/users/supervised_user_manager_impl.cc
@@ -9,6 +9,7 @@
 #include "base/functional/bind.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/ash/login/users/chrome_user_manager_impl.h"
 #include "chrome/browser/ash/settings/cros_settings.h"
diff --git a/chrome/browser/ash/login/version_updater/version_updater.cc b/chrome/browser/ash/login/version_updater/version_updater.cc
index 6e74b7f..c028d813 100644
--- a/chrome/browser/ash/login/version_updater/version_updater.cc
+++ b/chrome/browser/ash/login/version_updater/version_updater.cc
@@ -11,7 +11,6 @@
 
 #include "base/functional/bind.h"
 #include "base/logging.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/login/version_updater/update_time_estimator.h"
diff --git a/chrome/browser/ash/login/wizard_controller.cc b/chrome/browser/ash/login/wizard_controller.cc
index 8d2b4091..80cd5bc0 100644
--- a/chrome/browser/ash/login/wizard_controller.cc
+++ b/chrome/browser/ash/login/wizard_controller.cc
@@ -31,7 +31,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/accessibility/accessibility_manager.h"
 #include "chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h"
 #include "chrome/browser/ash/app_mode/kiosk_app_manager.h"
diff --git a/chrome/browser/ash/memory_metrics.h b/chrome/browser/ash/memory_metrics.h
index 006b5b31..812f591a 100644
--- a/chrome/browser/ash/memory_metrics.h
+++ b/chrome/browser/ash/memory_metrics.h
@@ -12,6 +12,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/chrome/browser/ash/net/network_diagnostics/arc_ping_routine.cc b/chrome/browser/ash/net/network_diagnostics/arc_ping_routine.cc
index bdcc165..65f8326 100644
--- a/chrome/browser/ash/net/network_diagnostics/arc_ping_routine.cc
+++ b/chrome/browser/ash/net/network_diagnostics/arc_ping_routine.cc
@@ -8,6 +8,7 @@
 
 #include "ash/components/arc/session/arc_service_manager.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/net/network_diagnostics/arc_ping_routine.h"
 #include "chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.h"
 #include "chromeos/services/network_config/in_process_instance.h"
diff --git a/chrome/browser/ash/net/network_diagnostics/tls_prober.cc b/chrome/browser/ash/net/network_diagnostics/tls_prober.cc
index 5c3559b..8b4506f 100644
--- a/chrome/browser/ash/net/network_diagnostics/tls_prober.cc
+++ b/chrome/browser/ash/net/network_diagnostics/tls_prober.cc
@@ -9,7 +9,6 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/task/task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/chrome/browser/ash/net/network_portal_detector_impl_browsertest.cc b/chrome/browser/ash/net/network_portal_detector_impl_browsertest.cc
index 368b1824..06536c0 100644
--- a/chrome/browser/ash/net/network_portal_detector_impl_browsertest.cc
+++ b/chrome/browser/ash/net/network_portal_detector_impl_browsertest.cc
@@ -15,7 +15,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/login_manager_test.h"
 #include "chrome/browser/ash/login/startup_utils.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/ash/net/system_proxy_manager.cc b/chrome/browser/ash/net/system_proxy_manager.cc
index 272c1a1..cf737c6b 100644
--- a/chrome/browser/ash/net/system_proxy_manager.cc
+++ b/chrome/browser/ash/net/system_proxy_manager.cc
@@ -14,6 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/ash/login/ui/login_display_host.h"
 #include "chrome/browser/ash/notifications/request_system_proxy_credentials_view.h"
diff --git a/chrome/browser/ash/ownership/owner_settings_service_ash.cc b/chrome/browser/ash/ownership/owner_settings_service_ash.cc
index 841b369..fec87e8d 100644
--- a/chrome/browser/ash/ownership/owner_settings_service_ash.cc
+++ b/chrome/browser/ash/ownership/owner_settings_service_ash.cc
@@ -21,6 +21,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_checker.h"
 #include "chrome/browser/ash/login/session/user_session_manager.h"
diff --git a/chrome/browser/ash/platform_keys/platform_keys_service_nss.cc b/chrome/browser/ash/platform_keys/platform_keys_service_nss.cc
index c1cd966..9151b770 100644
--- a/chrome/browser/ash/platform_keys/platform_keys_service_nss.cc
+++ b/chrome/browser/ash/platform_keys/platform_keys_service_nss.cc
@@ -27,7 +27,6 @@
 #include "base/strings/string_piece.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/net/client_cert_store_ash.h"
 #include "chrome/browser/ash/platform_keys/chaps_util.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc b/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc
index 5051131..b68ceda 100644
--- a/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc
+++ b/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc
@@ -11,7 +11,6 @@
 #include "base/json/json_writer.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/strcat.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
diff --git a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service_unittest.cc b/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service_unittest.cc
index 49605e6e..da4c55d 100644
--- a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service_unittest.cc
+++ b/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service_unittest.cc
@@ -352,18 +352,18 @@
                        POLICY_SCOPE_USER, POLICY_SOURCE_ACTIVE_DIRECTORY,
                        base::Value(1.0), nullptr);
 
-  base::Value list(base::Value::Type::LIST);
+  base::Value::List list;
   list.Append("One");
   list.Append("Two");
   expected_policy_.Set("ListAsSubkeys", POLICY_LEVEL_MANDATORY,
                        POLICY_SCOPE_USER, POLICY_SOURCE_ACTIVE_DIRECTORY,
-                       std::move(list), nullptr);
+                       base::Value(std::move(list)), nullptr);
 
-  base::Value dict(base::Value::Type::DICTIONARY);
-  dict.SetStringKey("Key", "Value");
+  base::Value::Dict dict;
+  dict.Set("Key", "Value");
   expected_policy_.Set("DictionaryAsJsonString", POLICY_LEVEL_MANDATORY,
                        POLICY_SCOPE_USER, POLICY_SOURCE_ACTIVE_DIRECTORY,
-                       std::move(dict), nullptr);
+                       base::Value(std::move(dict)), nullptr);
 
   StorePolicy(kTestUserAccountId, login_manager::POLICY_DOMAIN_EXTENSIONS,
               kTestExtensionId);
diff --git a/chrome/browser/ash/policy/core/browser_policy_connector_ash.h b/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
index f07cf49..556effc4 100644
--- a/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
+++ b/chrome/browser/ash/policy/core/browser_policy_connector_ash.h
@@ -13,6 +13,7 @@
 #include "base/containers/flat_set.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/login/users/affiliation.h"
 #include "chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.h"
 #include "chrome/browser/policy/chrome_browser_policy_connector.h"
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc b/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc
index 1bc9bdc..adb53c6 100644
--- a/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc
+++ b/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc
@@ -20,6 +20,7 @@
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/attestation/attestation_policy_observer.h"
 #include "chrome/browser/ash/attestation/enrollment_certificate_uploader_impl.h"
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash_unittest.cc b/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash_unittest.cc
index 880ab18..ecd5f89 100644
--- a/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash_unittest.cc
+++ b/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/ownership/owner_settings_service_ash.h"
diff --git a/chrome/browser/ash/policy/core/device_local_account.cc b/chrome/browser/ash/policy/core/device_local_account.cc
index bfb8eaae..b09c5e41 100644
--- a/chrome/browser/ash/policy/core/device_local_account.cc
+++ b/chrome/browser/ash/policy/core/device_local_account.cc
@@ -34,9 +34,10 @@
 
 const char kDeviceLocalAccountDomainSuffix[] = ".device-local.localhost";
 
-bool GetString(const base::Value& dict, const char* key, std::string* result) {
-  DCHECK(dict.is_dict());
-  const std::string* value = dict.FindStringKey(key);
+bool GetString(const base::Value::Dict& dict,
+               const char* key,
+               std::string* result) {
+  const std::string* value = dict.FindString(key);
   if (!value)
     return false;
   *result = *value;
@@ -251,8 +252,9 @@
       continue;
     }
 
+    const base::Value::Dict& entry_dict = entry.GetDict();
     std::string account_id;
-    if (!GetString(entry, ash::kAccountsPrefDeviceLocalAccountsKeyId,
+    if (!GetString(entry_dict, ash::kAccountsPrefDeviceLocalAccountsKeyId,
                    &account_id) ||
         account_id.empty()) {
       LOG(ERROR) << "Missing account ID in device-local account list at index "
@@ -261,7 +263,7 @@
     }
 
     absl::optional<int> type =
-        entry.FindIntKey(ash::kAccountsPrefDeviceLocalAccountsKeyType);
+        entry_dict.FindInt(ash::kAccountsPrefDeviceLocalAccountsKeyType);
     if (!type || type.value() < 0 ||
         type.value() >= DeviceLocalAccount::TYPE_COUNT) {
       LOG(ERROR) << "Missing or invalid account type in device-local account "
@@ -287,14 +289,14 @@
       case DeviceLocalAccount::TYPE_KIOSK_APP: {
         std::string kiosk_app_id;
         std::string kiosk_app_update_url;
-        if (!GetString(entry,
+        if (!GetString(entry_dict,
                        ash::kAccountsPrefDeviceLocalAccountsKeyKioskAppId,
                        &kiosk_app_id)) {
           LOG(ERROR) << "Missing app ID in device-local account entry at index "
                      << i << ".";
           continue;
         }
-        GetString(entry,
+        GetString(entry_dict,
                   ash::kAccountsPrefDeviceLocalAccountsKeyKioskAppUpdateURL,
                   &kiosk_app_update_url);
 
@@ -308,7 +310,7 @@
         std::string class_name;
         std::string action;
         std::string display_name;
-        if (!GetString(entry,
+        if (!GetString(entry_dict,
                        ash::kAccountsPrefDeviceLocalAccountsKeyArcKioskPackage,
                        &package_name)) {
           LOG(ERROR) << "Missing package name in ARC kiosk type device-local "
@@ -316,11 +318,13 @@
                      << i << ".";
           continue;
         }
-        GetString(entry, ash::kAccountsPrefDeviceLocalAccountsKeyArcKioskClass,
+        GetString(entry_dict,
+                  ash::kAccountsPrefDeviceLocalAccountsKeyArcKioskClass,
                   &class_name);
-        GetString(entry, ash::kAccountsPrefDeviceLocalAccountsKeyArcKioskAction,
+        GetString(entry_dict,
+                  ash::kAccountsPrefDeviceLocalAccountsKeyArcKioskAction,
                   &action);
-        GetString(entry,
+        GetString(entry_dict,
                   ash::kAccountsPrefDeviceLocalAccountsKeyArcKioskDisplayName,
                   &display_name);
         const ArcKioskAppBasicInfo arc_kiosk_app(package_name, class_name,
@@ -333,7 +337,7 @@
         std::string url;
         std::string title;
         std::string icon_url;
-        if (!GetString(entry,
+        if (!GetString(entry_dict,
                        ash::kAccountsPrefDeviceLocalAccountsKeyWebKioskUrl,
                        &url)) {
           LOG(ERROR) << "Missing install url in Web kiosk type device-local "
@@ -342,9 +346,10 @@
           continue;
         }
 
-        GetString(entry, ash::kAccountsPrefDeviceLocalAccountsKeyWebKioskTitle,
+        GetString(entry_dict,
+                  ash::kAccountsPrefDeviceLocalAccountsKeyWebKioskTitle,
                   &title);
-        GetString(entry,
+        GetString(entry_dict,
                   ash::kAccountsPrefDeviceLocalAccountsKeyWebKioskIconUrl,
                   &icon_url);
         accounts.push_back(DeviceLocalAccount(
diff --git a/chrome/browser/ash/policy/core/device_local_account_external_cache.cc b/chrome/browser/ash/policy/core/device_local_account_external_cache.cc
index 01d282e..8268dd8 100644
--- a/chrome/browser/ash/policy/core/device_local_account_external_cache.cc
+++ b/chrome/browser/ash/policy/core/device_local_account_external_cache.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_path.h"
 #include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/ash/crosapi/crosapi_ash.h"
 #include "chrome/browser/ash/crosapi/crosapi_manager.h"
diff --git a/chrome/browser/ash/policy/core/device_local_account_external_cache.h b/chrome/browser/ash/policy/core/device_local_account_external_cache.h
index c00b4538d..048d7db 100644
--- a/chrome/browser/ash/policy/core/device_local_account_external_cache.h
+++ b/chrome/browser/ash/policy/core/device_local_account_external_cache.h
@@ -8,6 +8,7 @@
 #include "base/files/file_path.h"
 #include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/ash/extensions/external_cache_delegate.h"
 #include "chrome/browser/chromeos/extensions/device_local_account_external_policy_loader.h"
diff --git a/chrome/browser/ash/policy/core/device_local_account_policy_broker.cc b/chrome/browser/ash/policy/core/device_local_account_policy_broker.cc
index 0aad656b..a20bb3f 100644
--- a/chrome/browser/ash/policy/core/device_local_account_policy_broker.cc
+++ b/chrome/browser/ash/policy/core/device_local_account_policy_broker.cc
@@ -10,6 +10,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/ash/policy/core/device_local_account.h"
 #include "chrome/browser/ash/policy/core/device_local_account_external_cache.h"
diff --git a/chrome/browser/ash/policy/core/device_local_account_policy_broker.h b/chrome/browser/ash/policy/core/device_local_account_policy_broker.h
index a49ab23..1079b58 100644
--- a/chrome/browser/ash/policy/core/device_local_account_policy_broker.h
+++ b/chrome/browser/ash/policy/core/device_local_account_policy_broker.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/functional/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/ash/policy/core/device_local_account.h"
 #include "chrome/browser/ash/policy/core/device_local_account_extension_tracker.h"
diff --git a/chrome/browser/ash/policy/core/fake_device_cloud_policy_manager.cc b/chrome/browser/ash/policy/core/fake_device_cloud_policy_manager.cc
index c177cef6..e0837fc 100644
--- a/chrome/browser/ash/policy/core/fake_device_cloud_policy_manager.cc
+++ b/chrome/browser/ash/policy/core/fake_device_cloud_policy_manager.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/functional/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/policy/core/device_cloud_policy_store_ash.h"
 #include "components/policy/core/common/cloud/mock_cloud_external_data_manager.h"
 
diff --git a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder.cc b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder.cc
index bd2f302..143a3a4 100644
--- a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder.cc
+++ b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder.cc
@@ -8,6 +8,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/clock.h"
 #include "base/time/default_clock.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_unittest.cc b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_unittest.cc
index 2c0ce14..e3993b34 100644
--- a/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_unittest.cc
+++ b/chrome/browser/ash/policy/core/user_cloud_policy_token_forwarder_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_mock_time_task_runner.h"
diff --git a/chrome/browser/ash/policy/display/device_display_cros_browser_test.cc b/chrome/browser/ash/policy/display/device_display_cros_browser_test.cc
index a8ddc7aa..d472d87 100644
--- a/chrome/browser/ash/policy/display/device_display_cros_browser_test.cc
+++ b/chrome/browser/ash/policy/display/device_display_cros_browser_test.cc
@@ -6,6 +6,7 @@
 
 #include "ash/display/display_configuration_controller.h"
 #include "ash/shell.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/login/ui/login_display_host.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/test/base/mixin_based_in_process_browser_test.h"
diff --git a/chrome/browser/ash/policy/display/display_resolution_handler_browsertest.cc b/chrome/browser/ash/policy/display/display_resolution_handler_browsertest.cc
index fc94e22b..102166e 100644
--- a/chrome/browser/ash/policy/display/display_resolution_handler_browsertest.cc
+++ b/chrome/browser/ash/policy/display/display_resolution_handler_browsertest.cc
@@ -12,7 +12,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/test/device_state_mixin.h"
 #include "chrome/browser/ash/login/ui/login_display_host.h"
 #include "chrome/browser/ash/policy/core/device_policy_builder.h"
diff --git a/chrome/browser/ash/policy/display/display_rotation_default_handler_browsertest.cc b/chrome/browser/ash/policy/display/display_rotation_default_handler_browsertest.cc
index 83d9af9b..83bc7df 100644
--- a/chrome/browser/ash/policy/display/display_rotation_default_handler_browsertest.cc
+++ b/chrome/browser/ash/policy/display/display_rotation_default_handler_browsertest.cc
@@ -14,7 +14,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/test/device_state_mixin.h"
 #include "chrome/browser/ash/policy/core/device_policy_builder.h"
 #include "chrome/browser/ash/policy/display/device_display_cros_browser_test.h"
diff --git a/chrome/browser/ash/policy/display/display_settings_handler.cc b/chrome/browser/ash/policy/display/display_settings_handler.cc
index 5b3005b..456d7b4 100644
--- a/chrome/browser/ash/policy/display/display_settings_handler.cc
+++ b/chrome/browser/ash/policy/display/display_settings_handler.cc
@@ -13,7 +13,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/settings/cros_settings_names.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
index a6916fc..5570c76 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
@@ -25,6 +25,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/strcat.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/apps/app_service/file_utils.h"
 #include "chrome/browser/ash/drive/drive_integration_service.h"
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_event_storage.cc b/chrome/browser/ash/policy/dlp/dlp_files_event_storage.cc
index 7303c6a7..44f1c00 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_event_storage.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_event_storage.cc
@@ -6,6 +6,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_histogram_helper.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
 
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_event_storage.h b/chrome/browser/ash/policy/dlp/dlp_files_event_storage.h
index 496a204..bc6645cc 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_event_storage.h
+++ b/chrome/browser/ash/policy/dlp/dlp_files_event_storage.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/containers/flat_map.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/chrome/browser/ash/policy/enrollment/account_status_check_fetcher_unittest.cc b/chrome/browser/ash/policy/enrollment/account_status_check_fetcher_unittest.cc
index 0a968145..c04fa88 100644
--- a/chrome/browser/ash/policy/enrollment/account_status_check_fetcher_unittest.cc
+++ b/chrome/browser/ash/policy/enrollment/account_status_check_fetcher_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/test/base/testing_browser_process.h"
diff --git a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc
index 1335a1e4..cfe5146d 100644
--- a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc
+++ b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/current_thread.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/ash/login/enrollment/auto_enrollment_controller.h"
 #include "chrome/browser/ash/policy/enrollment/psm/fake_rlwe_dmserver_client.h"
diff --git a/chrome/browser/ash/policy/external_data/cloud_external_data_manager_base_unittest.cc b/chrome/browser/ash/policy/external_data/cloud_external_data_manager_base_unittest.cc
index 282b96e..26f6cef 100644
--- a/chrome/browser/ash/policy/external_data/cloud_external_data_manager_base_unittest.cc
+++ b/chrome/browser/ash/policy/external_data/cloud_external_data_manager_base_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "components/policy/core/common/cloud/cloud_external_data_store.h"
 #include "components/policy/core/common/cloud/mock_cloud_policy_store.h"
@@ -87,10 +86,10 @@
 
   base::Value ConstructMetadata(const std::string& url,
                                 const std::string& hash);
-  void AddMetadataToWebAppPolicyValue(base::Value& value,
-                                      const std::string& app_url,
-                                      const std::string& image_url,
-                                      const std::string& image_hash);
+  void AddMetadataToWebAppPolicyList(base::Value::List& value,
+                                     const std::string& app_url,
+                                     const std::string& image_url,
+                                     const std::string& image_hash);
   void SetExternalDataReference(const std::string& policy,
                                 base::Value policy_value);
 
@@ -181,16 +180,15 @@
   return base::Value(std::move(metadata));
 }
 
-void CloudExternalDataManagerBaseTest::AddMetadataToWebAppPolicyValue(
-    base::Value& value,
+void CloudExternalDataManagerBaseTest::AddMetadataToWebAppPolicyList(
+    base::Value::List& list,
     const std::string& app_url,
     const std::string& image_url,
     const std::string& image_hash) {
-  DCHECK(value.is_list());
-  base::Value app(base::Value::Type::DICTIONARY);
-  app.SetStringKey("url", app_url);
-  app.SetKey("custom_icon", ConstructMetadata(image_url, image_hash));
-  value.Append(std::move(app));
+  base::Value::Dict app;
+  app.Set("url", app_url);
+  app.Set("custom_icon", ConstructMetadata(image_url, image_hash));
+  list.Append(std::move(app));
 }
 
 void CloudExternalDataManagerBaseTest::SetExternalDataReference(
@@ -779,12 +777,13 @@
 // external data files (every installed app can include one icon).
 TEST_F(CloudExternalDataManagerBaseTest, DownloadMultipleFilesFromPolicy) {
   // Set up the policy value with 2 apps, one icon each:
-  base::Value web_app_value(base::Value::Type::LIST);
-  AddMetadataToWebAppPolicyValue(web_app_value, k10ByteAppURL, k10BytePolicyURL,
-                                 crypto::SHA256HashString(k10ByteData));
-  AddMetadataToWebAppPolicyValue(web_app_value, k20ByteAppURL, k20BytePolicyURL,
-                                 crypto::SHA256HashString(k20ByteData));
-  SetExternalDataReference(kWebAppPolicy, std::move(web_app_value));
+  base::Value::List web_app_value;
+  AddMetadataToWebAppPolicyList(web_app_value, k10ByteAppURL, k10BytePolicyURL,
+                                crypto::SHA256HashString(k10ByteData));
+  AddMetadataToWebAppPolicyList(web_app_value, k20ByteAppURL, k20BytePolicyURL,
+                                crypto::SHA256HashString(k20ByteData));
+  SetExternalDataReference(kWebAppPolicy,
+                           base::Value(std::move(web_app_value)));
   cloud_policy_store_.NotifyStoreLoaded();
 
   // Serve valid external data for both icons.
diff --git a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc
index db78dba1..a7eb163 100644
--- a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc
+++ b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc
@@ -56,11 +56,11 @@
 constexpr char kSubkeyURL[] = "url";
 constexpr char kSubkeyHash[] = "hash";
 
-absl::optional<std::string> GetSubkeyString(const base::Value& dict,
+absl::optional<std::string> GetSubkeyString(const base::Value::Dict& dict,
                                             PolicyErrorMap* errors,
                                             const std::string& policy,
                                             const std::string& subkey) {
-  const base::Value* policy_value = dict.FindKey(subkey);
+  const base::Value* policy_value = dict.Find(subkey);
 
   if (!policy_value) {
     errors->AddError(policy, IDS_POLICY_NOT_SPECIFIED_ERROR,
@@ -171,10 +171,11 @@
 
   const base::Value* value = entry->value(base::Value::Type::DICT);
   DCHECK(value);
+  const base::Value::Dict& dict = value->GetDict();
   absl::optional<std::string> url_string =
-      GetSubkeyString(*value, errors, policy, kSubkeyURL);
+      GetSubkeyString(dict, errors, policy, kSubkeyURL);
   absl::optional<std::string> hash_string =
-      GetSubkeyString(*value, errors, policy, kSubkeyHash);
+      GetSubkeyString(dict, errors, policy, kSubkeyHash);
   if (!url_string || !hash_string)
     return false;
 
diff --git a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash_unittest.cc b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash_unittest.cc
index e6ee8aa..611b6cf0 100644
--- a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash_unittest.cc
+++ b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash_unittest.cc
@@ -114,12 +114,12 @@
 }
 
 TEST(ExternalDataPolicyHandlerTest, MissingURL) {
-  base::Value dict(base::Value::Type::DICTIONARY);
-  dict.SetStringKey("hash", "1234567890123456789012345678901234567890");
+  base::Value::Dict dict;
+  dict.Set("hash", "1234567890123456789012345678901234567890");
   PolicyMap policy_map;
   policy_map.Set(key::kUserAvatarImage, POLICY_LEVEL_MANDATORY,
-                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(dict),
-                 nullptr);
+                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+                 base::Value(std::move(dict)), nullptr);
   PolicyErrorMap errors;
   EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
                    .CheckPolicySettings(policy_map, &errors));
@@ -127,13 +127,13 @@
 }
 
 TEST(ExternalDataPolicyHandlerTest, InvalidURL) {
-  base::Value dict(base::Value::Type::DICTIONARY);
-  dict.SetStringKey("url", "http://");
-  dict.SetStringKey("hash", "1234567890123456789012345678901234567890");
+  base::Value::Dict dict;
+  dict.Set("url", "http://");
+  dict.Set("hash", "1234567890123456789012345678901234567890");
   PolicyMap policy_map;
   policy_map.Set(key::kUserAvatarImage, POLICY_LEVEL_MANDATORY,
-                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(dict),
-                 nullptr);
+                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+                 base::Value(std::move(dict)), nullptr);
   PolicyErrorMap errors;
   EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
                    .CheckPolicySettings(policy_map, &errors));
@@ -141,12 +141,12 @@
 }
 
 TEST(ExternalDataPolicyHandlerTest, MissingHash) {
-  base::Value dict(base::Value::Type::DICTIONARY);
-  dict.SetStringKey("url", "http://localhost/");
+  base::Value::Dict dict;
+  dict.Set("url", "http://localhost/");
   PolicyMap policy_map;
   policy_map.Set(key::kUserAvatarImage, POLICY_LEVEL_MANDATORY,
-                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(dict),
-                 nullptr);
+                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+                 base::Value(std::move(dict)), nullptr);
   PolicyErrorMap errors;
   EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
                    .CheckPolicySettings(policy_map, &errors));
@@ -154,13 +154,13 @@
 }
 
 TEST(ExternalDataPolicyHandlerTest, InvalidHash) {
-  base::Value dict(base::Value::Type::DICTIONARY);
-  dict.SetStringKey("url", "http://localhost/");
-  dict.SetStringKey("hash", "1234");
+  base::Value::Dict dict;
+  dict.Set("url", "http://localhost/");
+  dict.Set("hash", "1234");
   PolicyMap policy_map;
   policy_map.Set(key::kUserAvatarImage, POLICY_LEVEL_MANDATORY,
-                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(dict),
-                 nullptr);
+                 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
+                 base::Value(std::move(dict)), nullptr);
   PolicyErrorMap errors;
   EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage)
                    .CheckPolicySettings(policy_map, &errors));
@@ -168,17 +168,16 @@
 }
 
 TEST(ExternalDataPolicyHandlerTest, Valid) {
-  base::Value dict(base::Value::Type::DICTIONARY);
-  dict.SetStringKey("url", "http://localhost/");
-  dict.SetStringKey(
-      "hash",
-      "1234567890123456789012345678901234567890123456789012345678901234");
+  base::Value::Dict dict;
+  dict.Set("url", "http://localhost/");
+  dict.Set("hash",
+           "1234567890123456789012345678901234567890123456789012345678901234");
   PolicyMap policy_map;
   MockCloudExternalDataManager external_data_manager;
 
   policy_map.Set(
       key::kUserAvatarImage, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
-      POLICY_SOURCE_CLOUD, std::move(dict),
+      POLICY_SOURCE_CLOUD, base::Value(std::move(dict)),
       external_data_manager.CreateExternalDataFetcher(key::kUserAvatarImage));
   PolicyErrorMap errors;
   EXPECT_TRUE(ExternalDataPolicyHandler(key::kUserAvatarImage)
diff --git a/chrome/browser/ash/policy/handlers/system_proxy_handler.cc b/chrome/browser/ash/policy/handlers/system_proxy_handler.cc
index 6b2f6d0..14eaccb 100644
--- a/chrome/browser/ash/policy/handlers/system_proxy_handler.cc
+++ b/chrome/browser/ash/policy/handlers/system_proxy_handler.cc
@@ -47,22 +47,24 @@
   if (!proxy_settings)
     return;
 
+  const base::Value::Dict& proxy_settings_dict = proxy_settings->GetDict();
   bool system_proxy_enabled =
-      proxy_settings->FindBoolKey(ash::kSystemProxySettingsKeyEnabled)
+      proxy_settings_dict.FindBool(ash::kSystemProxySettingsKeyEnabled)
           .value_or(false);
-  const std::string* username = proxy_settings->FindStringKey(
+  const std::string* username = proxy_settings_dict.FindString(
       ash::kSystemProxySettingsKeySystemServicesUsername);
 
-  const std::string* password = proxy_settings->FindStringKey(
+  const std::string* password = proxy_settings_dict.FindString(
       ash::kSystemProxySettingsKeySystemServicesPassword);
 
-  const base::Value* auth_schemes =
-      proxy_settings->FindListKey(ash::kSystemProxySettingsKeyAuthSchemes);
+  const base::Value::List* auth_schemes =
+      proxy_settings_dict.FindList(ash::kSystemProxySettingsKeyAuthSchemes);
 
   std::vector<std::string> system_services_auth_schemes;
   if (auth_schemes) {
-    for (const auto& auth_scheme : auth_schemes->GetList())
+    for (const auto& auth_scheme : *auth_schemes) {
       system_services_auth_schemes.push_back(auth_scheme.GetString());
+    }
   }
 
   std::string system_services_username;
diff --git a/chrome/browser/ash/policy/handlers/system_proxy_handler_unittest.cc b/chrome/browser/ash/policy/handlers/system_proxy_handler_unittest.cc
index 5438ef0..1018e09 100644
--- a/chrome/browser/ash/policy/handlers/system_proxy_handler_unittest.cc
+++ b/chrome/browser/ash/policy/handlers/system_proxy_handler_unittest.cc
@@ -88,11 +88,11 @@
 
   void SetManagedProxy(Profile* profile) {
     // Configure a proxy via user policy.
-    base::Value proxy_config(base::Value::Type::DICTIONARY);
-    proxy_config.SetKey("mode",
-                        base::Value(ProxyPrefs::kFixedServersProxyModeName));
-    proxy_config.SetKey("server", base::Value(kProxyAuthUrl));
-    profile->GetPrefs()->Set(proxy_config::prefs::kProxy, proxy_config);
+    base::Value::Dict proxy_config;
+    proxy_config.Set("mode", ProxyPrefs::kFixedServersProxyModeName);
+    proxy_config.Set("server", kProxyAuthUrl);
+    profile->GetPrefs()->SetDict(proxy_config::prefs::kProxy,
+                                 std::move(proxy_config));
     task_environment_.RunUntilIdle();
   }
 
diff --git a/chrome/browser/ash/policy/login/device_login_screen_policy_browsertest.cc b/chrome/browser/ash/policy/login/device_login_screen_policy_browsertest.cc
index 5117987..4e4a8c07 100644
--- a/chrome/browser/ash/policy/login/device_login_screen_policy_browsertest.cc
+++ b/chrome/browser/ash/policy/login/device_login_screen_policy_browsertest.cc
@@ -14,7 +14,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/ash/accessibility/accessibility_manager.h"
 #include "chrome/browser/ash/accessibility/magnification_manager.h"
diff --git a/chrome/browser/ash/policy/login/login_profile_policy_provider.cc b/chrome/browser/ash/policy/login/login_profile_policy_provider.cc
index 529bc6e..820ae1ac 100644
--- a/chrome/browser/ash/policy/login/login_profile_policy_provider.cc
+++ b/chrome/browser/ash/policy/login/login_profile_policy_provider.cc
@@ -238,9 +238,9 @@
   const base::Value* value = device_policy_map.GetValue(
       key::kDeviceLoginScreenPowerManagement, base::Value::Type::DICT);
   if (value) {
-    base::Value policy_value = value->Clone();
+    base::Value::Dict policy_dict = value->GetDict().Clone();
     const std::string* lid_close_action =
-        policy_value.FindStringKey(kLidCloseAction);
+        policy_dict.FindString(kLidCloseAction);
 
     if (lid_close_action) {
       std::unique_ptr<base::Value> action = GetAction(*lid_close_action);
@@ -248,23 +248,24 @@
         ApplyValueAsMandatoryPolicy(*action, key::kLidCloseAction,
                                     &user_policy_map);
       }
-      policy_value.RemoveKey(kLidCloseAction);
+      policy_dict.Remove(kLidCloseAction);
     }
 
     const base::Value* screen_dim_delay_scale =
-        policy_value.FindKey(kUserActivityScreenDimDelayScale);
+        policy_dict.Find(kUserActivityScreenDimDelayScale);
     if (screen_dim_delay_scale) {
       ApplyValueAsMandatoryPolicy(*screen_dim_delay_scale,
                                   key::kUserActivityScreenDimDelayScale,
                                   &user_policy_map);
-      policy_value.RemoveKey(kUserActivityScreenDimDelayScale);
+      policy_dict.Remove(kUserActivityScreenDimDelayScale);
     }
 
-    // |policy_value| is expected to be a valid value for the
+    // |policy_dict| is expected to be a valid value for the
     // PowerManagementIdleSettings policy now.
-    if (!policy_value.DictEmpty()) {
-      ApplyValueAsMandatoryPolicy(
-          policy_value, key::kPowerManagementIdleSettings, &user_policy_map);
+    if (!policy_dict.empty()) {
+      ApplyValueAsMandatoryPolicy(base::Value(std::move(policy_dict)),
+                                  key::kPowerManagementIdleSettings,
+                                  &user_policy_map);
     }
   }
 
diff --git a/chrome/browser/ash/policy/login/login_screen_accessibility_policy_browsertest.cc b/chrome/browser/ash/policy/login/login_screen_accessibility_policy_browsertest.cc
index 84231c8..6f5ee14 100644
--- a/chrome/browser/ash/policy/login/login_screen_accessibility_policy_browsertest.cc
+++ b/chrome/browser/ash/policy/login/login_screen_accessibility_policy_browsertest.cc
@@ -14,7 +14,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/ash/accessibility/accessibility_manager.h"
 #include "chrome/browser/ash/accessibility/magnification_manager.h"
diff --git a/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc b/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc
index af484b8..40a0020 100644
--- a/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc
+++ b/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc
@@ -131,7 +131,7 @@
       return;
     }
     const std::string* property_value =
-        initial_service_properties->FindStringKey(property_name);
+        initial_service_properties->GetDict().FindString(property_name);
     if (!property_value) {
       return;
     }
@@ -769,7 +769,7 @@
     const base::Value* wifi_service_properties =
         shill_service_client_test_->GetServiceProperties(kServiceWifi2);
     ASSERT_TRUE(wifi_service_properties);
-    EXPECT_FALSE(wifi_service_properties->FindKey(shill::kGuidProperty));
+    EXPECT_FALSE(wifi_service_properties->GetDict().Find(shill::kGuidProperty));
   }
   {
     const base::Value* wifi_service_properties =
@@ -917,10 +917,9 @@
                 DictionaryHasValue(shill::kGuidProperty,
                                    base::Value("{DeviceLevelWifiGuid}")));
     // Expect that the EAP.Identity has been replaced
-    const std::string* eap_identity =
-        wifi_service_properties->FindStringKey(shill::kEapIdentityProperty);
-    ASSERT_TRUE(eap_identity);
-    EXPECT_EQ(*eap_identity, kSerialNumber);
+    EXPECT_THAT(*wifi_service_properties,
+                DictionaryHasValue(shill::kEapIdentityProperty,
+                                   base::Value(kSerialNumber)));
 
     // TODO(b/209084821): Also test DEVICE_ASSET_ID when it's easily
     // configurable in a browsertest.
@@ -988,10 +987,9 @@
                 DictionaryHasValue(shill::kGuidProperty,
                                    base::Value("{DeviceLevelWifiGuid}")));
     // Expect that the EAP.Identity has been replaced
-    const std::string* eap_identity =
-        wifi_service_properties->FindStringKey(shill::kEapIdentityProperty);
-    ASSERT_TRUE(eap_identity);
-    EXPECT_EQ(*eap_identity, kExpectedIdentity);
+    EXPECT_THAT(*wifi_service_properties,
+                DictionaryHasValue(shill::kEapIdentityProperty,
+                                   base::Value(kExpectedIdentity)));
   }
 }
 
@@ -1051,10 +1049,10 @@
                 DictionaryHasValue(shill::kGuidProperty,
                                    base::Value("{UserLevelWifiGuid}")));
     // Expect that the EAP.Identity has been replaced
-    const std::string* eap_identity =
-        wifi_service_properties->FindStringKey(shill::kEapIdentityProperty);
-    ASSERT_TRUE(eap_identity);
-    EXPECT_EQ(*eap_identity, test_account_id_.GetUserEmail());
+    EXPECT_THAT(
+        *wifi_service_properties,
+        DictionaryHasValue(shill::kEapIdentityProperty,
+                           base::Value(test_account_id_.GetUserEmail())));
   }
 }
 
diff --git a/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc b/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc
index e0195b72..93437e5a 100644
--- a/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc
+++ b/chrome/browser/ash/policy/networking/policy_certs_browsertest.cc
@@ -612,7 +612,7 @@
           test_certs_path.AppendASCII(kRootCaCert), &x509_contents));
     }
 
-    base::Value onc_dict = BuildONCForExtensionScopedCertificate(
+    base::Value::Dict onc_dict = BuildONCForExtensionScopedCertificate(
         x509_contents, kSigninScreenExtension1);
     ASSERT_TRUE(base::JSONWriter::Write(
         onc_dict, device_policy()
@@ -668,35 +668,32 @@
  private:
   // Builds an ONC policy value that specifies exactly one certificate described
   // by |x509_contents| with Web trust to be used for |extension_id|.
-  base::Value BuildONCForExtensionScopedCertificate(
+  base::Value::Dict BuildONCForExtensionScopedCertificate(
       const std::string& x509_contents,
       const std::string& extension_id) {
-    base::Value onc_cert_scope(base::Value::Type::DICTIONARY);
-    onc_cert_scope.SetKey(onc::scope::kType,
-                          base::Value(onc::scope::kExtension));
-    onc_cert_scope.SetKey(onc::scope::kId, base::Value(extension_id));
+    base::Value::Dict onc_cert_scope;
+    onc_cert_scope.Set(onc::scope::kType, onc::scope::kExtension);
+    onc_cert_scope.Set(onc::scope::kId, extension_id);
 
-    base::Value onc_cert_trust_bits(base::Value::Type::LIST);
-    onc_cert_trust_bits.Append(base::Value(onc::certificate::kWeb));
+    base::Value::List onc_cert_trust_bits;
+    onc_cert_trust_bits.Append(onc::certificate::kWeb);
 
-    base::Value onc_certificate(base::Value::Type::DICTIONARY);
-    onc_certificate.SetKey(onc::certificate::kGUID, base::Value("guid"));
-    onc_certificate.SetKey(onc::certificate::kType,
-                           base::Value(onc::certificate::kAuthority));
-    onc_certificate.SetKey(onc::certificate::kX509, base::Value(x509_contents));
-    onc_certificate.SetKey(onc::certificate::kScope, std::move(onc_cert_scope));
-    onc_certificate.SetKey(onc::certificate::kTrustBits,
-                           std::move(onc_cert_trust_bits));
+    base::Value::Dict onc_certificate;
+    onc_certificate.Set(onc::certificate::kGUID, base::Value("guid"));
+    onc_certificate.Set(onc::certificate::kType, onc::certificate::kAuthority);
+    onc_certificate.Set(onc::certificate::kX509, x509_contents);
+    onc_certificate.Set(onc::certificate::kScope, std::move(onc_cert_scope));
+    onc_certificate.Set(onc::certificate::kTrustBits,
+                        std::move(onc_cert_trust_bits));
 
-    base::Value onc_certificates(base::Value::Type::LIST);
+    base::Value::List onc_certificates;
     onc_certificates.Append(std::move(onc_certificate));
 
-    base::Value onc_dict(base::Value::Type::DICTIONARY);
-    onc_dict.SetKey(onc::toplevel_config::kCertificates,
-                    std::move(onc_certificates));
-    onc_dict.SetKey(
-        onc::toplevel_config::kType,
-        base::Value(onc::toplevel_config::kUnencryptedConfiguration));
+    base::Value::Dict onc_dict;
+    onc_dict.Set(onc::toplevel_config::kCertificates,
+                 std::move(onc_certificates));
+    onc_dict.Set(onc::toplevel_config::kType,
+                 onc::toplevel_config::kUnencryptedConfiguration);
 
     return onc_dict;
   }
diff --git a/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc
index bac5f0c..c826c3f 100644
--- a/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc
+++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc
@@ -181,13 +181,15 @@
     const std::string* network_state =
         network_handler_test_helper_->service_test()
             ->GetServiceProperties(kWifiServicePath)
-            ->FindStringKey(shill::kStateProperty);
+            ->GetDict()
+            .FindString(shill::kStateProperty);
     if (network_state && *network_state == shill::kStateOnline) {
       connection_type = network::mojom::ConnectionType::CONNECTION_WIFI;
     }
     network_state = network_handler_test_helper_->service_test()
                         ->GetServiceProperties(kEthernetServicePath)
-                        ->FindStringKey(shill::kStateProperty);
+                        ->GetDict()
+                        .FindString(shill::kStateProperty);
     if (network_state && *network_state == shill::kStateOnline) {
       connection_type = network::mojom::ConnectionType::CONNECTION_ETHERNET;
     }
diff --git a/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc
index 1445e0b..d9584bf 100644
--- a/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc
+++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/test/gmock_move_support.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/ash/policy/reporting/install_event_log_util.h"
diff --git a/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.cc
index 0eefb6a..d556268 100644
--- a/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.cc
+++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.cc
@@ -198,11 +198,11 @@
 
 void ArcAppInstallEventLogger::SetPref(const std::string& pref_name,
                                        const std::set<std::string>& packages) {
-  base::Value value(base::Value::Type::LIST);
+  base::Value::List value;
   for (const std::string& package : packages) {
     value.Append(package);
   }
-  profile_->GetPrefs()->Set(pref_name, value);
+  profile_->GetPrefs()->SetList(pref_name, std::move(value));
 }
 
 void ArcAppInstallEventLogger::UpdateCollector(
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
index e47aad25..65bf44a 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
@@ -41,6 +41,7 @@
 #include "chromeos/ash/components/settings/cros_settings_names.h"
 #include "components/reporting/client/report_queue_configuration.h"
 #include "components/reporting/metrics/collector_base.h"
+#include "components/reporting/metrics/delayed_sampler.h"
 #include "components/reporting/metrics/metric_event_observer.h"
 #include "components/reporting/metrics/metric_event_observer_manager.h"
 #include "components/reporting/metrics/metric_report_queue.h"
@@ -59,6 +60,7 @@
 constexpr char kHttpsLatency[] = "https_latency";
 constexpr char kNetworkTelemetry[] = "network_telemetry";
 constexpr char kPeripheralTelemetry[] = "peripheral_telemetry";
+constexpr char kDelayedPeripheralTelemetry[] = "delayed_peripheral_telemetry";
 constexpr char kDisplaysTelemetry[] = "displays_telemetry";
 
 }  // namespace
@@ -147,6 +149,14 @@
     case NETWORK_SIGNAL_STRENGTH_RECOVERED:
       return GetTelemetryCollectorsFromSetting(
           ::ash::kReportDeviceSignalStrengthEventDrivenTelemetry);
+    case USB_ADDED:
+    case USB_REMOVED:
+      if (base::Contains(telemetry_collectors_, kDelayedPeripheralTelemetry)) {
+        return {telemetry_collectors_.at(kDelayedPeripheralTelemetry).get()};
+      }
+      // Return statement or `ABSL_FALLTHROUGH_INTENDED` is necessary to silence
+      // "unannotated fall-through" errors on builds.
+      return {};
     default:
       return {};
   }
@@ -330,6 +340,24 @@
   telemetry_collectors_.insert({collector_name, std::move(collector)});
 }
 
+void MetricReportingManager::InitManualTelemetryCollector(
+    const std::string& collector_name,
+    Sampler* sampler,
+    MetricReportQueue* metric_report_queue,
+    const std::string& enable_setting_path,
+    bool enable_default_value) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(!base::Contains(telemetry_collectors_, collector_name));
+  if (!metric_report_queue) {
+    return;
+  }
+
+  auto collector = delegate_->CreateManualCollector(
+      sampler, metric_report_queue, &reporting_settings_, enable_setting_path,
+      enable_default_value);
+  telemetry_collectors_.insert({collector_name, std::move(collector)});
+}
+
 void MetricReportingManager::InitPeriodicCollector(
     const std::string& collector_name,
     Sampler* sampler,
@@ -482,10 +510,10 @@
 
 void MetricReportingManager::InitPeripheralsCollectors() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  // Peripheral events
   if (!user_peripheral_events_and_telemetry_report_queue_) {
     return;
   }
+  // Peripheral events
   event_observer_managers_.emplace_back(delegate_->CreateEventObserverManager(
       std::make_unique<UsbEventsObserver>(),
       user_peripheral_events_and_telemetry_report_queue_.get(),
@@ -494,13 +522,12 @@
       /*collector_pool=*/this));
 
   // Peripheral telemetry
-  auto peripheral_telemetry_handler =
-      std::make_unique<CrosHealthdBusSamplerHandler>(
-          CrosHealthdSamplerHandler::MetricType::kTelemetry);
   auto peripheral_telemetry_sampler =
-      std::make_unique<CrosHealthdMetricSampler>(
-          std::move(peripheral_telemetry_handler),
+      /*sampler=*/std::make_unique<CrosHealthdMetricSampler>(
+          /*handler=*/std::make_unique<CrosHealthdBusSamplerHandler>(
+              CrosHealthdSamplerHandler::MetricType::kTelemetry),
           ::ash::cros_healthd::mojom::ProbeCategoryEnum::kBus);
+
   InitOneShotTelemetryCollector(
       kPeripheralTelemetry, peripheral_telemetry_sampler.get(),
       user_peripheral_events_and_telemetry_report_queue_.get(),
@@ -508,6 +535,26 @@
       metrics::kReportDevicePeripheralsDefaultValue,
       /*init_delay=*/base::TimeDelta());
   samplers_.push_back(std::move(peripheral_telemetry_sampler));
+
+  // Event-driven peripheral telemetry.
+  // We add a short delay to mitigate a
+  // race condition that occurs when cros healthd queries the firmware updater
+  // tool (fwupd) for USB firmware version data before fwupd has a chance to
+  // read all of the USB devices plugged into the machine.
+  auto delayed_peripheral_telemetry_sampler = std::make_unique<DelayedSampler>(
+      /*sampler=*/std::make_unique<CrosHealthdMetricSampler>(
+          /*handler=*/std::make_unique<CrosHealthdBusSamplerHandler>(
+              CrosHealthdSamplerHandler::MetricType::kTelemetry),
+          ::ash::cros_healthd::mojom::ProbeCategoryEnum::kBus),
+      /*delay=*/metrics::PeripheralCollectionDelayParam::Get());
+
+  InitManualTelemetryCollector(
+      kDelayedPeripheralTelemetry, delayed_peripheral_telemetry_sampler.get(),
+      user_peripheral_events_and_telemetry_report_queue_.get(),
+      /*enable_setting_path=*/::ash::kReportDevicePeripherals,
+      metrics::kReportDevicePeripheralsDefaultValue);
+
+  samplers_.push_back(std::move(delayed_peripheral_telemetry_sampler));
 }
 
 void MetricReportingManager::InitDisplayCollectors() {
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h
index d67ae50..a2ea7ba 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h
@@ -118,6 +118,12 @@
                                      bool enable_default_value,
                                      base::TimeDelta init_delay);
 
+  void InitManualTelemetryCollector(const std::string& collector_name,
+                                    Sampler* sampler,
+                                    MetricReportQueue* metric_report_queue,
+                                    const std::string& enable_setting_path,
+                                    bool enable_default_value);
+
   void InitPeriodicCollector(const std::string& collector_name,
                              Sampler* sampler,
                              MetricReportQueue* metric_report_queue,
@@ -186,9 +192,6 @@
   std::vector<std::unique_ptr<Sampler>> samplers_
       GUARDED_BY_CONTEXT(sequence_checker_);
 
-  base::flat_map<std::string, std::unique_ptr<CollectorBase>>
-      telemetry_collectors_ GUARDED_BY_CONTEXT(sequence_checker_);
-
   std::vector<std::unique_ptr<CollectorBase>> info_collectors_
       GUARDED_BY_CONTEXT(sequence_checker_);
 
@@ -218,6 +221,9 @@
   // telemetry.
   std::unique_ptr<CollectorBase> network_bandwidth_collector_;
 
+  base::flat_map<std::string, std::unique_ptr<CollectorBase>>
+      telemetry_collectors_ GUARDED_BY_CONTEXT(sequence_checker_);
+
   std::unique_ptr<Delegate> delegate_;
 };
 
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc
index 3313e0fd7..0924bfd1 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc
@@ -133,6 +133,15 @@
               (override));
 
   MOCK_METHOD(std::unique_ptr<CollectorBase>,
+              CreateManualCollector,
+              (Sampler * sampler,
+               MetricReportQueue* metric_report_queue,
+               ReportingSettings* reporting_settings,
+               const std::string& enable_setting_path,
+               bool setting_enabled_default_value),
+              (override));
+
+  MOCK_METHOD(std::unique_ptr<CollectorBase>,
               CreateOneShotCollector,
               (Sampler * sampler,
                MetricReportQueue* metric_report_queue,
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/usb/usb_events_browsertest.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/usb/usb_events_browsertest.cc
index 26cf2fa..1c50bc7b 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/usb/usb_events_browsertest.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/usb/usb_events_browsertest.cc
@@ -7,12 +7,14 @@
 
 #include "ash/constants/ash_switches.h"
 #include "base/containers/contains.h"
+#include "base/time/time.h"
 #include "chrome/browser/ash/login/test/login_manager_mixin.h"
 #include "chrome/browser/ash/login/test/session_manager_state_waiter.h"
 #include "chrome/browser/ash/login/test/user_policy_mixin.h"
 #include "chrome/browser/ash/policy/core/device_policy_cros_browser_test.h"
 #include "chrome/browser/ash/settings/scoped_testing_cros_settings.h"
 #include "chrome/browser/ash/settings/stub_cros_settings_provider.h"
+#include "chrome/browser/chromeos/reporting/metric_default_utils.h"
 #include "chrome/browser/policy/dm_token_utils.h"
 #include "chrome/test/base/fake_gaia_mixin.h"
 #include "chromeos/ash/components/settings/cros_settings_names.h"
@@ -30,6 +32,16 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace reporting {
+
+class UsbBrowserTestHelper {
+ public:
+  UsbBrowserTestHelper() {
+    // Set collection delay to zero seconds. We don't use
+    // |ScopedMockTimeMessageLoopTaskRunner| here because we are not able to
+    // make it work with mojom.
+    metrics::PeripheralCollectionDelayParam::SetForTesting(base::Seconds(0));
+  }
+};
 namespace {
 
 namespace cros_healthd = ::ash::cros_healthd;
@@ -135,8 +147,41 @@
   ash::LoginManagerMixin login_manager_mixin_{
       &mixin_host_, ash::LoginManagerMixin::UserList(), &fake_gaia_mixin_};
   ash::ScopedTestingCrosSettings scoped_testing_cros_settings_;
+  UsbBrowserTestHelper usb_browser_test_helper_;
 };
 
+IN_PROC_BROWSER_TEST_F(UsbEventsBrowserTest,
+                       UsbEventDrivenTelemetryCollectedOnUsbEvent) {
+  EnableUsbPolicy();
+  LoginAffiliatedUser();
+
+  chromeos::MissiveClientTestObserver missive_observer_(
+      Destination::PERIPHERAL_EVENTS);
+
+  auto usb_telemetry = CreateUsbTelemetry();
+  cros_healthd::FakeCrosHealthd::Get()->SetProbeTelemetryInfoResponseForTesting(
+      usb_telemetry);
+
+  // Any USB event should trigger event driven telemetry collection
+  cros_healthd::FakeCrosHealthd::Get()->EmitUsbAddEventForTesting();
+
+  Record record = std::get<1>(missive_observer_.GetNextEnqueuedRecord());
+  MetricData record_data;
+
+  // First record should be the USB added event
+  ASSERT_TRUE(record_data.ParseFromString(record.data()));
+  EXPECT_THAT(record_data.event_data().type(),
+              ::testing::Eq(MetricEventType::USB_ADDED));
+
+  // Second record should be the USB telemetry
+  record = std::get<1>(missive_observer_.GetNextEnqueuedRecord());
+  ASSERT_TRUE(record_data.ParseFromString(record.data()));
+  EXPECT_TRUE(record_data.has_telemetry_data());
+  EXPECT_TRUE(record_data.telemetry_data().has_peripherals_telemetry());
+  // Since telemetry is not an event, it shouldn't have event data or event type
+  EXPECT_FALSE(record_data.has_event_data());
+}
+
 IN_PROC_BROWSER_TEST_F(
     UsbEventsBrowserTest,
     UsbAddedEventCollectedWhenPolicyEnabledWithAffiliatedUser) {
diff --git a/chrome/browser/ash/policy/reporting/remoting_host_event_reporter_delegate_impl.cc b/chrome/browser/ash/policy/reporting/remoting_host_event_reporter_delegate_impl.cc
index 39228d5..6487e7a 100644
--- a/chrome/browser/ash/policy/reporting/remoting_host_event_reporter_delegate_impl.cc
+++ b/chrome/browser/ash/policy/reporting/remoting_host_event_reporter_delegate_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/policy/reporting/user_event_reporter_helper.h"
 #include "chrome/browser/policy/messaging_layer/proto/synced/crd_event.pb.h"
 #include "chromeos/ash/components/settings/cros_settings_names.h"
diff --git a/chrome/browser/ash/policy/reporting/user_event_reporter_helper.cc b/chrome/browser/ash/policy/reporting/user_event_reporter_helper.cc
index f1ed307..0c8c6dc 100644
--- a/chrome/browser/ash/policy/reporting/user_event_reporter_helper.cc
+++ b/chrome/browser/ash/policy/reporting/user_event_reporter_helper.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/login/users/chrome_user_manager.h"
 #include "chrome/browser/ash/settings/cros_settings.h"
 #include "components/reporting/client/report_queue_factory.h"
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/scheduled_task_util.cc b/chrome/browser/ash/policy/scheduled_task_handler/scheduled_task_util.cc
index 2db2f13..8a8a581f 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/scheduled_task_util.cc
+++ b/chrome/browser/ash/policy/scheduled_task_handler/scheduled_task_util.cc
@@ -135,28 +135,28 @@
 absl::optional<ScheduledTaskExecutor::ScheduledTaskData> ParseScheduledTask(
     const base::Value& value,
     const std::string& task_time_field_name) {
+  const base::Value::Dict& dict = value.GetDict();
   ScheduledTaskExecutor::ScheduledTaskData result;
   // Parse mandatory values first i.e. hour, minute and frequency of update
   // check. These should always be present due to schema validation at higher
   // layers.
-  const base::Value* hour_value = value.FindPathOfType(
-      {task_time_field_name, "hour"}, base::Value::Type::INTEGER);
-  DCHECK(hour_value);
-  int hour = hour_value->GetInt();
+  const base::Value::Dict* task_time_field_dict =
+      dict.FindDict(task_time_field_name);
+  DCHECK(task_time_field_dict);
+  absl::optional<int> hour_opt = task_time_field_dict->FindInt("hour");
+  DCHECK(hour_opt);
   // Validated by schema validation at higher layers.
-  DCHECK(hour >= 0 && hour <= 23);
-  result.hour = hour;
+  DCHECK(*hour_opt >= 0 && *hour_opt <= 23);
+  result.hour = *hour_opt;
 
-  const base::Value* minute_value = value.FindPathOfType(
-      {task_time_field_name, "minute"}, base::Value::Type::INTEGER);
-  DCHECK(minute_value);
-  int minute = minute_value->GetInt();
+  absl::optional<int> minute_opt = task_time_field_dict->FindInt("minute");
+  DCHECK(minute_opt);
   // Validated by schema validation at higher layers.
-  DCHECK(minute >= 0 && minute <= 59);
-  result.minute = minute;
+  DCHECK(*minute_opt >= 0 && *minute_opt <= 59);
+  result.minute = *minute_opt;
 
   // Validated by schema validation at higher layers.
-  const std::string* frequency = value.FindStringKey({"frequency"});
+  const std::string* frequency = dict.FindString({"frequency"});
   DCHECK(frequency);
   result.frequency = GetFrequency(*frequency);
 
@@ -166,7 +166,7 @@
       break;
 
     case ScheduledTaskExecutor::Frequency::kWeekly: {
-      const std::string* day_of_week = value.FindStringKey({"day_of_week"});
+      const std::string* day_of_week = dict.FindString({"day_of_week"});
       if (!day_of_week) {
         LOG(ERROR) << "Day of week missing";
         return absl::nullopt;
@@ -178,7 +178,7 @@
     }
 
     case ScheduledTaskExecutor::Frequency::kMonthly: {
-      absl::optional<int> day_of_month = value.FindIntKey({"day_of_month"});
+      absl::optional<int> day_of_month = dict.FindInt("day_of_month");
       if (!day_of_month) {
         LOG(ERROR) << "Day of month missing";
         return absl::nullopt;
diff --git a/chrome/browser/ash/policy/status_collector/status_collector.h b/chrome/browser/ash/policy/status_collector/status_collector.h
index 8862997..7e32974 100644
--- a/chrome/browser/ash/policy/status_collector/status_collector.h
+++ b/chrome/browser/ash/policy/status_collector/status_collector.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/functional/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/clock.h"
 #include "base/time/default_clock.h"
diff --git a/chrome/browser/ash/policy/status_collector/status_collector_state.cc b/chrome/browser/ash/policy/status_collector/status_collector_state.cc
index 102b268..d08d058 100644
--- a/chrome/browser/ash/policy/status_collector/status_collector_state.cc
+++ b/chrome/browser/ash/policy/status_collector/status_collector_state.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/functional/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 
 namespace policy {
diff --git a/chrome/browser/ash/policy/uploading/system_log_uploader.cc b/chrome/browser/ash/policy/uploading/system_log_uploader.cc
index 410b307..9673cae0 100644
--- a/chrome/browser/ash/policy/uploading/system_log_uploader.cc
+++ b/chrome/browser/ash/policy/uploading/system_log_uploader.cc
@@ -553,12 +553,12 @@
     updated_log_uploads.erase(updated_log_uploads.begin());
 
   // Create a list to be updated for the pref.
-  base::Value updated_prev_log_uploads(base::Value::Type::LIST);
+  base::Value::List updated_prev_log_uploads;
   for (auto it : updated_log_uploads) {
     updated_prev_log_uploads.Append(it.ToDoubleT());
   }
-  local_state->Set(prefs::kStoreLogStatesAcrossReboots,
-                   updated_prev_log_uploads);
+  local_state->SetList(prefs::kStoreLogStatesAcrossReboots,
+                       std::move(updated_prev_log_uploads));
 
   // Write the changes to the disk to prevent loss of changes.
   local_state->CommitPendingWrite();
diff --git a/chrome/browser/ash/power/auto_screen_brightness/adapter_unittest.cc b/chrome/browser/ash/power/auto_screen_brightness/adapter_unittest.cc
index a2e4cb31..3de8fe0 100644
--- a/chrome/browser/ash/power/auto_screen_brightness/adapter_unittest.cc
+++ b/chrome/browser/ash/power/auto_screen_brightness/adapter_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ash/power/auto_screen_brightness/fake_brightness_monitor.h"
 #include "chrome/browser/ash/power/auto_screen_brightness/fake_light_provider.h"
 #include "chrome/browser/ash/power/auto_screen_brightness/fake_model_config_loader.h"
diff --git a/chrome/browser/ash/power/auto_screen_brightness/als_file_reader.cc b/chrome/browser/ash/power/auto_screen_brightness/als_file_reader.cc
index b5c0d07..12bcf5d 100644
--- a/chrome/browser/ash/power/auto_screen_brightness/als_file_reader.cc
+++ b/chrome/browser/ash/power/auto_screen_brightness/als_file_reader.cc
@@ -13,6 +13,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/power/auto_screen_brightness/utils.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/ash/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc b/chrome/browser/ash/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc
index 9a3bebb..deab909d 100644
--- a/chrome/browser/ash/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc
+++ b/chrome/browser/ash/power/auto_screen_brightness/brightness_monitor_impl_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.cc b/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.cc
index 569d8e4..3063816 100644
--- a/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.cc
+++ b/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.cc
@@ -17,6 +17,7 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/values.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.h b/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.h
index 25c7c59..69c64ae 100644
--- a/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.h
+++ b/chrome/browser/ash/power/auto_screen_brightness/model_config_loader_impl.h
@@ -13,6 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/power/auto_screen_brightness/model_config.h"
 #include "chrome/browser/ash/power/auto_screen_brightness/model_config_loader.h"
 
diff --git a/chrome/browser/ash/power/auto_screen_brightness/modeller_impl.cc b/chrome/browser/ash/power/auto_screen_brightness/modeller_impl.cc
index cc5917e7..e372b4b 100644
--- a/chrome/browser/ash/power/auto_screen_brightness/modeller_impl.cc
+++ b/chrome/browser/ash/power/auto_screen_brightness/modeller_impl.cc
@@ -19,6 +19,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/ash/power/ml/smart_dim/download_worker.cc b/chrome/browser/ash/power/ml/smart_dim/download_worker.cc
index 8bd69bf..cfd2b464 100644
--- a/chrome/browser/ash/power/ml/smart_dim/download_worker.cc
+++ b/chrome/browser/ash/power/ml/smart_dim/download_worker.cc
@@ -6,7 +6,6 @@
 
 #include "base/functional/bind.h"
 #include "base/task/task_traits.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ash/power/ml/smart_dim/metrics.h"
 #include "chrome/browser/ash/power/ml/smart_dim/ml_agent_util.h"
 #include "chromeos/services/machine_learning/public/cpp/service_connection.h"
diff --git a/chrome/browser/ash/power/smart_charging/smart_charging_manager.h b/chrome/browser/ash/power/smart_charging/smart_charging_manager.h
index 0ef2385..7350759 100644
--- a/chrome/browser/ash/power/smart_charging/smart_charging_manager.h
+++ b/chrome/browser/ash/power/smart_charging/smart_charging_manager.h
@@ -9,6 +9,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/power/ml/boot_clock.h"
diff --git a/chrome/browser/ash/printing/cups_print_job_manager_impl.cc b/chrome/browser/ash/printing/cups_print_job_manager_impl.cc
index 2eb2f12..6ab25ec 100644
--- a/chrome/browser/ash/printing/cups_print_job_manager_impl.cc
+++ b/chrome/browser/ash/printing/cups_print_job_manager_impl.cc
@@ -16,7 +16,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/printing/cups_print_job.h"
diff --git a/chrome/browser/ash/printing/cups_printers_manager.cc b/chrome/browser/ash/printing/cups_printers_manager.cc
index ada848bb..40412c0 100644
--- a/chrome/browser/ash/printing/cups_printers_manager.cc
+++ b/chrome/browser/ash/printing/cups_printers_manager.cc
@@ -850,8 +850,6 @@
 // static
 void CupsPrintersManager::RegisterLocalStatePrefs(
     PrefRegistrySimple* registry) {
-  registry->RegisterStringPref(prefs::kPrintingClientNameTemplate,
-                               std::string());
   PrintServersProvider::RegisterLocalStatePrefs(registry);
   printing::oauth2::ClientIdsDatabase::RegisterLocalStatePrefs(registry);
 }
diff --git a/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.cc b/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.cc
index 709ef81..ccabce7 100644
--- a/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.cc
+++ b/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/plugin_vm/plugin_vm_pref_names.h"
 #include "chrome/browser/ash/printing/cups_printers_manager.h"
 #include "chrome/browser/ash/printing/cups_printers_manager_factory.h"
diff --git a/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.h b/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.h
index 4f667404..a0d9164 100644
--- a/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.h
+++ b/chrome/browser/ash/printing/cups_proxy_service_delegate_impl.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/printing/printer_configurer.h"
 #include "chrome/services/cups_proxy/cups_proxy_service_delegate.h"
 #include "chromeos/printing/printer_configuration.h"
diff --git a/chrome/browser/ash/printing/cups_proxy_service_manager.h b/chrome/browser/ash/printing/cups_proxy_service_manager.h
index 7132a49f..be74069 100644
--- a/chrome/browser/ash/printing/cups_proxy_service_manager.h
+++ b/chrome/browser/ash/printing/cups_proxy_service_manager.h
@@ -8,7 +8,6 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/services/cups_proxy/cups_proxy_service.h"
 #include "components/keyed_service/core/keyed_service.h"
-#include "mojo/public/cpp/bindings/remote.h"
 
 namespace ash {
 
diff --git a/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc b/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc
index 1332a5dd..809febc 100644
--- a/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc
+++ b/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/printing/history/print_job_info.pb.h"
 #include "components/leveldb_proto/public/proto_database_provider.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/printing/print_servers_manager_unittest.cc b/chrome/browser/ash/printing/print_servers_manager_unittest.cc
index 300d817..c2e110b 100644
--- a/chrome/browser/ash/printing/print_servers_manager_unittest.cc
+++ b/chrome/browser/ash/printing/print_servers_manager_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/containers/flat_set.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ash/printing/print_servers_provider.h"
 #include "chrome/browser/ash/printing/server_printers_provider.h"
 #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/ash/printing/usb_printer_detector.cc b/chrome/browser/ash/printing/usb_printer_detector.cc
index 1425ad71..f9584ce 100644
--- a/chrome/browser/ash/printing/usb_printer_detector.cc
+++ b/chrome/browser/ash/printing/usb_printer_detector.cc
@@ -15,7 +15,6 @@
 #include "base/sequence_checker.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ash/printing/ppd_provider_factory.h"
 #include "chrome/browser/ash/printing/printer_configurer.h"
 #include "chrome/browser/ash/printing/printer_event_tracker.h"
diff --git a/chrome/browser/ash/secure_channel/nearby_connection_broker.cc b/chrome/browser/ash/secure_channel/nearby_connection_broker.cc
index e0ba40e..5c2f4d83 100644
--- a/chrome/browser/ash/secure_channel/nearby_connection_broker.cc
+++ b/chrome/browser/ash/secure_channel/nearby_connection_broker.cc
@@ -6,7 +6,6 @@
 
 #include "base/check.h"
 #include "base/functional/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 
 namespace ash {
diff --git a/chrome/browser/ash/settings/device_settings_provider.cc b/chrome/browser/ash/settings/device_settings_provider.cc
index 9406c3c8..20cb6f3d 100644
--- a/chrome/browser/ash/settings/device_settings_provider.cc
+++ b/chrome/browser/ash/settings/device_settings_provider.cc
@@ -98,6 +98,7 @@
     kDevicePrintersAccessMode,
     kDevicePrintersBlocklist,
     kDevicePrintersAllowlist,
+    kDevicePrintingClientNameTemplate,
     kDevicePowerwashAllowed,
     kDeviceQuirksDownloadEnabled,
     kDeviceRebootOnUserSignout,
@@ -1098,6 +1099,15 @@
                                base::Value(std::move(list)));
   }
 
+  if (policy.has_device_printing_client_name_template()) {
+    const em::StringPolicyProto& container(
+        policy.device_printing_client_name_template());
+    if (container.has_value() && !container.value().empty()) {
+      new_values_cache->SetString(kDevicePrintingClientNameTemplate,
+                                  container.value());
+    }
+  }
+
   if (policy.has_device_reboot_on_user_signout()) {
     const em::DeviceRebootOnUserSignoutProto& container(
         policy.device_reboot_on_user_signout());
diff --git a/chrome/browser/ash/settings/device_settings_provider_unittest.cc b/chrome/browser/ash/settings/device_settings_provider_unittest.cc
index d01ef9a7..15f1ed0 100644
--- a/chrome/browser/ash/settings/device_settings_provider_unittest.cc
+++ b/chrome/browser/ash/settings/device_settings_provider_unittest.cc
@@ -1297,4 +1297,19 @@
             *provider_->Get(kDeviceEncryptedReportingPipelineEnabled));
 }
 
+TEST_F(DeviceSettingsProviderTest, DevicePrintingClientNameTemplateUnset) {
+  device_policy_->payload().clear_device_printing_client_name_template();
+  BuildAndInstallDevicePolicy();
+  EXPECT_FALSE(provider_->Get(kDevicePrintingClientNameTemplate));
+}
+
+TEST_F(DeviceSettingsProviderTest, DevicePrintingClientNameTemplate) {
+  device_policy_->payload()
+      .mutable_device_printing_client_name_template()
+      ->set_value("chromebook-${DEVICE_ASSET_ID}");
+  BuildAndInstallDevicePolicy();
+  EXPECT_EQ(base::Value("chromebook-${DEVICE_ASSET_ID}"),
+            *provider_->Get(kDevicePrintingClientNameTemplate));
+}
+
 }  // namespace ash
diff --git a/chrome/browser/ash/settings/session_manager_operation_unittest.cc b/chrome/browser/ash/settings/session_manager_operation_unittest.cc
index 2612f26e..f125c98 100644
--- a/chrome/browser/ash/settings/session_manager_operation_unittest.cc
+++ b/chrome/browser/ash/settings/session_manager_operation_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/ownership/owner_settings_service_ash.h"
 #include "chrome/browser/ash/ownership/owner_settings_service_ash_factory.h"
diff --git a/chrome/browser/ash/smb_client/smb_service_unittest.cc b/chrome/browser/ash/smb_client/smb_service_unittest.cc
index f64f3ad..244d0ec1 100644
--- a/chrome/browser/ash/smb_client/smb_service_unittest.cc
+++ b/chrome/browser/ash/smb_client/smb_service_unittest.cc
@@ -23,7 +23,6 @@
 #include "base/test/gmock_callback_support.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/file_manager/fake_disk_mount_manager.h"
 #include "chrome/browser/ash/file_manager/volume_manager.h"
 #include "chrome/browser/ash/file_manager/volume_manager_factory.h"
diff --git a/chrome/browser/ash/sync/app_settings_model_type_controller.cc b/chrome/browser/ash/sync/app_settings_model_type_controller.cc
deleted file mode 100644
index ed90393..0000000
--- a/chrome/browser/ash/sync/app_settings_model_type_controller.cc
+++ /dev/null
@@ -1,46 +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.
-
-#include "chrome/browser/ash/sync/app_settings_model_type_controller.h"
-
-#include <utility>
-
-#include "chrome/browser/profiles/profile.h"
-#include "components/prefs/pref_service.h"
-#include "components/sync/base/model_type.h"
-#include "components/sync/base/pref_names.h"
-#include "components/sync/driver/sync_service.h"
-#include "extensions/browser/api/storage/backend_task_runner.h"
-#include "extensions/browser/extension_system.h"
-
-AppSettingsModelTypeController::AppSettingsModelTypeController(
-    syncer::OnceModelTypeStoreFactory store_factory,
-    SyncableServiceProvider syncable_service_provider,
-    const base::RepeatingClosure& dump_stack,
-    Profile* profile,
-    syncer::SyncService* sync_service)
-    : NonUiSyncableServiceBasedModelTypeController(
-          syncer::APP_SETTINGS,
-          std::move(store_factory),
-          std::move(syncable_service_provider),
-          dump_stack,
-          extensions::GetBackendTaskRunner(),
-          /*allow_transport_mode=*/true),
-      profile_(profile),
-      sync_service_(sync_service) {
-  DCHECK(profile_);
-  DCHECK(sync_service_);
-}
-
-AppSettingsModelTypeController::~AppSettingsModelTypeController() = default;
-
-void AppSettingsModelTypeController::LoadModels(
-    const syncer::ConfigureContext& configure_context,
-    const ModelLoadCallback& model_load_callback) {
-  DCHECK(CalledOnValidThread());
-  extensions::ExtensionSystem::Get(profile_)->InitForRegularProfile(
-      /*extensions_enabled=*/true);
-  NonUiSyncableServiceBasedModelTypeController::LoadModels(configure_context,
-                                                           model_load_callback);
-}
diff --git a/chrome/browser/ash/sync/app_settings_model_type_controller.h b/chrome/browser/ash/sync/app_settings_model_type_controller.h
deleted file mode 100644
index 90f3c99..0000000
--- a/chrome/browser/ash/sync/app_settings_model_type_controller.h
+++ /dev/null
@@ -1,47 +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 CHROME_BROWSER_ASH_SYNC_APP_SETTINGS_MODEL_TYPE_CONTROLLER_H_
-#define CHROME_BROWSER_ASH_SYNC_APP_SETTINGS_MODEL_TYPE_CONTROLLER_H_
-
-#include "base/functional/callback_forward.h"
-#include "components/prefs/pref_change_registrar.h"
-#include "components/sync/driver/non_ui_syncable_service_based_model_type_controller.h"
-#include "components/sync/model/model_type_store.h"
-
-class Profile;
-
-namespace syncer {
-class SyncService;
-}  // namespace syncer
-
-// Controller for sync of ModelType APP_SETTINGS on Chrome OS. Runs in sync
-// transport mode. Starts the extensions machinery when sync is starting.
-// Handles extension data on the extensions background thread.
-class AppSettingsModelTypeController
-    : public syncer::NonUiSyncableServiceBasedModelTypeController {
- public:
-  AppSettingsModelTypeController(
-      syncer::OnceModelTypeStoreFactory store_factory,
-      SyncableServiceProvider syncable_service_provider,
-      const base::RepeatingClosure& dump_stack,
-      Profile* profile,
-      syncer::SyncService* sync_service);
-  ~AppSettingsModelTypeController() override;
-
-  AppSettingsModelTypeController(const AppSettingsModelTypeController&) =
-      delete;
-  AppSettingsModelTypeController& operator=(
-      const AppSettingsModelTypeController&) = delete;
-
-  // DataTypeController:
-  void LoadModels(const syncer::ConfigureContext& configure_context,
-                  const ModelLoadCallback& model_load_callback) override;
-
- private:
-  Profile* const profile_;
-  syncer::SyncService* const sync_service_;
-};
-
-#endif  // CHROME_BROWSER_ASH_SYNC_APP_SETTINGS_MODEL_TYPE_CONTROLLER_H_
diff --git a/chrome/browser/ash/sync/os_sync_util.cc b/chrome/browser/ash/sync/os_sync_util.cc
index c5ac025..b86dfbc 100644
--- a/chrome/browser/ash/sync/os_sync_util.cc
+++ b/chrome/browser/ash/sync/os_sync_util.cc
@@ -14,8 +14,8 @@
 
 // Returns true if the prefs were migrated.
 bool MaybeMigratePreferencesForSyncSettingsCategorization(PrefService* prefs) {
-  // Migration code can be removed when SyncSettingsCategorization has been
-  // fully deployed to stable channel for a couple milestones.
+  // TODO(crbug.com/1249845): Remove this migration code after 2023-06 (see
+  // also crbug.com/1255724).
   bool migrated_this_time = false;
 
   // Don't migrate more than once.
diff --git a/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc b/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc
index 1c549f9..e36cbb9 100644
--- a/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc
+++ b/chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.cc
@@ -11,6 +11,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
 #include "chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.h"
diff --git a/chrome/browser/ash/telemetry_extension/diagnostics_service_converters.h b/chrome/browser/ash/telemetry_extension/diagnostics_service_converters.h
index 31f03e6..8625f613 100644
--- a/chrome/browser/ash/telemetry_extension/diagnostics_service_converters.h
+++ b/chrome/browser/ash/telemetry_extension/diagnostics_service_converters.h
@@ -13,7 +13,6 @@
 #include "chromeos/ash/services/cros_healthd/public/mojom/nullable_primitives.mojom.h"
 #include "chromeos/crosapi/mojom/diagnostics_service.mojom-forward.h"
 #include "chromeos/crosapi/mojom/nullable_primitives.mojom.h"
-#include "mojo/public/cpp/system/handle.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace ash::converters {
diff --git a/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.h b/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.h
index 7d539dc..f4b193e 100644
--- a/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.h
+++ b/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.h
@@ -11,6 +11,7 @@
 #include "base/files/file_path_watcher.h"
 #include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ui/webui/ash/system_web_dialog_delegate.h"
diff --git a/chrome/browser/autofill/autofill_uitest.cc b/chrome/browser/autofill/autofill_uitest.cc
index 9f833025..3320bc1 100644
--- a/chrome/browser/autofill/autofill_uitest.cc
+++ b/chrome/browser/autofill/autofill_uitest.cc
@@ -6,6 +6,7 @@
 
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/autofill/autofill_uitest.h"
 #include "chrome/browser/autofill/autofill_uitest_util.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
diff --git a/chrome/browser/autofill/captured_sites_test_utils.cc b/chrome/browser/autofill/captured_sites_test_utils.cc
index 0fe5cb0..3dc25a5f 100644
--- a/chrome/browser/autofill/captured_sites_test_utils.cc
+++ b/chrome/browser/autofill/captured_sites_test_utils.cc
@@ -23,6 +23,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/autofill/manual_filling_controller_impl.cc b/chrome/browser/autofill/manual_filling_controller_impl.cc
index a909f3b..5002c6c 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl.cc
+++ b/chrome/browser/autofill/manual_filling_controller_impl.cc
@@ -13,6 +13,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/memory_usage_estimator.h"
diff --git a/chrome/browser/background/background_mode_manager_unittest.cc b/chrome/browser/background/background_mode_manager_unittest.cc
index eb9cc19..eaa85f9 100644
--- a/chrome/browser/background/background_mode_manager_unittest.cc
+++ b/chrome/browser/background/background_mode_manager_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
diff --git a/chrome/browser/battery/battery_metrics_browsertest.cc b/chrome/browser/battery/battery_metrics_browsertest.cc
index fb071ef5..4fc4078 100644
--- a/chrome/browser/battery/battery_metrics_browsertest.cc
+++ b/chrome/browser/battery/battery_metrics_browsertest.cc
@@ -8,7 +8,6 @@
 #include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/battery/battery_metrics.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/bluetooth/web_bluetooth_browsertest.cc b/chrome/browser/bluetooth/web_bluetooth_browsertest.cc
index 44deccd..d123c914 100644
--- a/chrome/browser/bluetooth/web_bluetooth_browsertest.cc
+++ b/chrome/browser/bluetooth/web_bluetooth_browsertest.cc
@@ -11,6 +11,7 @@
 #include "base/metrics/field_trial.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/with_feature_override.h"
 #include "chrome/browser/bluetooth/bluetooth_chooser_context_factory.h"
diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc
index f18859c..50617a83 100644
--- a/chrome/browser/bookmarks/android/bookmark_bridge.cc
+++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc
@@ -43,7 +43,6 @@
 #include "components/bookmarks/common/bookmark_metrics.h"
 #include "components/bookmarks/common/bookmark_pref_names.h"
 #include "components/bookmarks/managed/managed_bookmark_service.h"
-#include "components/commerce/core/commerce_feature_list.h"
 #include "components/dom_distiller/core/url_utils.h"
 #include "components/power_bookmarks/core/power_bookmark_utils.h"
 #include "components/power_bookmarks/core/proto/power_bookmark_meta.pb.h"
@@ -752,25 +751,22 @@
   power_bookmarks::PowerBookmarkQueryFields query;
   query.word_phrase_query = std::make_unique<std::u16string>(
       base::android::ConvertJavaStringToUTF16(env, j_query));
-  if (query.word_phrase_query->empty())
+  if (query.word_phrase_query->empty()) {
     query.word_phrase_query.reset();
-
-  if (base::FeatureList::IsEnabled(commerce::kShoppingList)) {
-    if (!j_tags.is_null()) {
-      base::android::AppendJavaStringArrayToStringVector(env, j_tags,
-                                                         &query.tags);
-    }
-
-    if (type >= 0)
-      query.type = static_cast<power_bookmarks::PowerBookmarkType>(type);
-
-    power_bookmarks::GetBookmarksMatchingProperties(bookmark_model_, query,
-                                                    max_results, &results);
-  } else {
-    GetBookmarksMatchingProperties(bookmark_model_, query, max_results,
-                                   &results);
   }
 
+  if (!j_tags.is_null()) {
+    base::android::AppendJavaStringArrayToStringVector(env, j_tags,
+                                                       &query.tags);
+  }
+
+  if (type >= 0) {
+    query.type = static_cast<power_bookmarks::PowerBookmarkType>(type);
+  }
+
+  power_bookmarks::GetBookmarksMatchingProperties(bookmark_model_, query,
+                                                  max_results, &results);
+
   reading_list_manager_->GetMatchingNodes(query, max_results, &results);
   if (partner_bookmarks_shim_->HasPartnerBookmarks() &&
       IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) {
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index edb0a84..216ff33 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -26,6 +26,7 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc b/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc
index 7f74bea0..62c607a47 100644
--- a/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc
@@ -11,6 +11,7 @@
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/browser/browser_switcher/browser_switcher_service_win.h b/chrome/browser/browser_switcher/browser_switcher_service_win.h
index e2cad27f..ec596c8 100644
--- a/chrome/browser/browser_switcher/browser_switcher_service_win.h
+++ b/chrome/browser/browser_switcher/browser_switcher_service_win.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/browser_switcher/browser_switcher_service.h"
 
 namespace browser_switcher {
diff --git a/chrome/browser/browser_switcher/ieem_sitelist_parser.cc b/chrome/browser/browser_switcher/ieem_sitelist_parser.cc
index a8cbc16..603ec3e3 100644
--- a/chrome/browser/browser_switcher/ieem_sitelist_parser.cc
+++ b/chrome/browser/browser_switcher/ieem_sitelist_parser.cc
@@ -80,8 +80,7 @@
       base::FeatureList::IsEnabled(kBrowserSwitcherNoneIsGreylist);
 
   DCHECK(data_decoder::IsXmlElementNamed(xml, kSchema1RulesElement));
-  for (const base::Value& node :
-       data_decoder::GetXmlElementChildren(xml)->GetList()) {
+  for (const base::Value& node : *data_decoder::GetXmlElementChildren(xml)) {
     // Skip over anything that is not a <emie> or <docMode> element.
     if (!data_decoder::IsXmlElementNamed(node, kSchema1EmieElement) &&
         !data_decoder::IsXmlElementNamed(node, kSchema1DocModeElement)) {
diff --git a/chrome/browser/browsing_data/browsing_data_model_browsertest.cc b/chrome/browser/browsing_data/browsing_data_model_browsertest.cc
index a4015ee..a3ce726 100644
--- a/chrome/browser/browsing_data/browsing_data_model_browsertest.cc
+++ b/chrome/browser/browsing_data/browsing_data_model_browsertest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_future.h"
diff --git a/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc b/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc
index abb437f3..406bab9 100644
--- a/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc
+++ b/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc
@@ -20,6 +20,7 @@
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_task_environment.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/cookies/cookie_access_result.h"
 #include "services/network/public/mojom/cookie_manager.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc b/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc
index 036926c..b4615b7 100644
--- a/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc
+++ b/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc
@@ -6,6 +6,7 @@
 #include "base/json/values_util.h"
 #include "base/path_service.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/browsing_topics/browsing_topics_service_factory.h"
 #include "chrome/browser/content_settings/cookie_settings_factory.h"
diff --git a/chrome/browser/cart/fetch_discount_worker.h b/chrome/browser/cart/fetch_discount_worker.h
index 183ff99d..cef36d39 100644
--- a/chrome/browser/cart/fetch_discount_worker.h
+++ b/chrome/browser/cart/fetch_discount_worker.h
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/cart/cart_discount_fetcher.h"
 #include "chrome/browser/cart/cart_service.h"
 #include "chrome/browser/commerce/coupons/coupon_service.h"
diff --git a/chrome/browser/certificate_provider/test_certificate_provider_extension.cc b/chrome/browser/certificate_provider/test_certificate_provider_extension.cc
index 90f7672..fcb93ce 100644
--- a/chrome/browser/certificate_provider/test_certificate_provider_extension.cc
+++ b/chrome/browser/certificate_provider/test_certificate_provider_extension.cc
@@ -60,10 +60,10 @@
                                   ALGORITHM_RSASSA_PKCS1_V1_5_SHA1};
 
 base::Value ConvertBytesToValue(base::span<const uint8_t> bytes) {
-  base::Value value(base::Value::Type::LIST);
+  base::Value::List value;
   for (auto byte : bytes)
     value.Append(byte);
-  return value;
+  return base::Value(std::move(value));
 }
 
 std::vector<uint8_t> ExtractBytesFromValue(const base::Value& value) {
@@ -80,18 +80,18 @@
 
 base::Value MakeClientCertificateInfoValue(
     const net::X509Certificate& certificate) {
-  base::Value cert_info_value(base::Value::Type::DICTIONARY);
-  base::Value certificate_chain(base::Value::Type::LIST);
+  base::Value::Dict cert_info_value;
+  base::Value::List certificate_chain;
   certificate_chain.Append(ConvertBytesToValue(GetCertDer(certificate)));
-  cert_info_value.SetKey("certificateChain", std::move(certificate_chain));
-  base::Value supported_algorithms_value(base::Value::Type::LIST);
+  cert_info_value.Set("certificateChain", std::move(certificate_chain));
+  base::Value::List supported_algorithms_value;
   for (auto supported_algorithm : kSupportedAlgorithms) {
     supported_algorithms_value.Append(
         extensions::api::certificate_provider::ToString(supported_algorithm));
   }
-  cert_info_value.SetKey("supportedAlgorithms",
-                         std::move(supported_algorithms_value));
-  return cert_info_value;
+  cert_info_value.Set("supportedAlgorithms",
+                      std::move(supported_algorithms_value));
+  return base::Value(std::move(cert_info_value));
 }
 
 std::string ConvertValueToJson(const base::Value& value) {
@@ -210,12 +210,12 @@
 TestCertificateProviderExtension::~TestCertificateProviderExtension() = default;
 
 void TestCertificateProviderExtension::TriggerSetCertificates() {
-  base::Value message_data(base::Value::Type::DICTIONARY);
-  message_data.SetStringKey("name", "setCertificates");
-  base::Value cert_info_values(base::Value::Type::LIST);
+  base::Value::Dict message_data;
+  message_data.Set("name", "setCertificates");
+  base::Value::List cert_info_values;
   if (should_provide_certificates_)
     cert_info_values.Append(MakeClientCertificateInfoValue(*certificate_));
-  message_data.SetKey("certificateInfoList", std::move(cert_info_values));
+  message_data.Set("certificateInfoList", std::move(cert_info_values));
 
   base::Value::List message;
   message.Append(std::move(message_data));
@@ -255,10 +255,10 @@
 void TestCertificateProviderExtension::HandleCertificatesRequest(
     ReplyToJsCallback callback) {
   ++certificate_request_count_;
-  base::Value cert_info_values(base::Value::Type::LIST);
+  base::Value::List cert_info_values;
   if (should_provide_certificates_)
     cert_info_values.Append(MakeClientCertificateInfoValue(*certificate_));
-  std::move(callback).Run(cert_info_values);
+  std::move(callback).Run(base::Value(std::move(cert_info_values)));
 }
 
 void TestCertificateProviderExtension::HandleSignatureRequest(
@@ -295,19 +295,18 @@
     return;
   }
 
-  base::Value response(base::Value::Type::DICTIONARY);
+  base::Value::Dict response;
   if (required_pin_.has_value()) {
     if (pin_status_string == "not_requested") {
       // The PIN is required but not specified yet, so request it via the JS
       // side before generating the signature.
-      base::Value pin_request_parameters(base::Value::Type::DICTIONARY);
-      pin_request_parameters.SetIntKey("signRequestId", sign_request_id);
+      base::Value::Dict pin_request_parameters;
+      pin_request_parameters.Set("signRequestId", sign_request_id);
       if (remaining_pin_attempts_ == 0) {
-        pin_request_parameters.SetStringKey("errorType",
-                                            "MAX_ATTEMPTS_EXCEEDED");
+        pin_request_parameters.Set("errorType", "MAX_ATTEMPTS_EXCEEDED");
       }
-      response.SetKey("requestPin", std::move(pin_request_parameters));
-      std::move(callback).Run(response);
+      response.Set("requestPin", std::move(pin_request_parameters));
+      std::move(callback).Run(base::Value(std::move(response)));
       return;
     }
     if (remaining_pin_attempts_ == 0) {
@@ -330,31 +329,30 @@
       // update the PIN dialog with displaying an error.
       if (remaining_pin_attempts_ > 0)
         --remaining_pin_attempts_;
-      base::Value pin_request_parameters(base::Value::Type::DICTIONARY);
-      pin_request_parameters.SetIntKey("signRequestId", sign_request_id);
-      pin_request_parameters.SetStringKey(
-          "errorType", remaining_pin_attempts_ == 0 ? "MAX_ATTEMPTS_EXCEEDED"
-                                                    : "INVALID_PIN");
+      base::Value::Dict pin_request_parameters;
+      pin_request_parameters.Set("signRequestId", sign_request_id);
+      pin_request_parameters.Set("errorType", remaining_pin_attempts_ == 0
+                                                  ? "MAX_ATTEMPTS_EXCEEDED"
+                                                  : "INVALID_PIN");
       if (remaining_pin_attempts_ > 0) {
-        pin_request_parameters.SetIntKey("attemptsLeft",
-                                         remaining_pin_attempts_);
+        pin_request_parameters.Set("attemptsLeft", remaining_pin_attempts_);
       }
-      response.SetKey("requestPin", std::move(pin_request_parameters));
-      std::move(callback).Run(response);
+      response.Set("requestPin", std::move(pin_request_parameters));
+      std::move(callback).Run(base::Value(std::move(response)));
       return;
     }
     // The entered PIN is correct. Stop the PIN request and proceed to
     // generating the signature.
-    base::Value stop_pin_request_parameters(base::Value::Type::DICTIONARY);
-    stop_pin_request_parameters.SetIntKey("signRequestId", sign_request_id);
-    response.SetKey("stopPinRequest", std::move(stop_pin_request_parameters));
+    base::Value::Dict stop_pin_request_parameters;
+    stop_pin_request_parameters.Set("signRequestId", sign_request_id);
+    response.Set("stopPinRequest", std::move(stop_pin_request_parameters));
   }
   // Generate and return a valid signature.
   std::vector<uint8_t> signature;
   CHECK(RsaSignRawData(private_key_.get(), openssl_signature_algorithm, input,
                        &signature));
-  response.SetKey("signature", ConvertBytesToValue(signature));
-  std::move(callback).Run(response);
+  response.Set("signature", ConvertBytesToValue(signature));
+  std::move(callback).Run(base::Value(std::move(response)));
 }
 
 }  // namespace ash
diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc
index 9ae2bcf..247f6a0 100644
--- a/chrome/browser/chrome_browser_field_trials.cc
+++ b/chrome/browser/chrome_browser_field_trials.cc
@@ -36,7 +36,6 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "chrome/browser/ash/login/consolidated_consent_field_trial.h"
-#include "chrome/browser/ash/login/hid_detection_revamp_field_trial.h"
 #include "chromeos/ash/services/multidevice_setup/public/cpp/first_run_field_trial.h"
 #endif
 
@@ -63,8 +62,6 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   ash::consolidated_consent_field_trial::Create(
       entropy_providers.default_entropy(), feature_list, local_state_);
-  ash::hid_detection_revamp_field_trial::Create(
-      entropy_providers.default_entropy(), feature_list, local_state_);
 #endif
 
   // Only create the fallback trials if there isn't already a variations seed
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 32b57f5..8b43fd9 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -31,6 +31,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/types/expected.h"
 #include "base/values.h"
 #include "build/build_config.h"
@@ -3284,13 +3285,13 @@
   if (operation == InterestGroupApiOperation::kJoin) {
     content_settings::PageSpecificContentSettings::InterestGroupJoined(
         render_frame_host, api_origin, !allowed);
+    content_settings::PageSpecificContentSettings::BrowsingDataAccessed(
+        render_frame_host,
+        content::InterestGroupManager::InterestGroupDataKey{api_origin,
+                                                            top_frame_origin},
+        BrowsingDataModel::StorageType::kInterestGroup, !allowed);
   }
 
-  content_settings::PageSpecificContentSettings::BrowsingDataAccessed(
-      render_frame_host,
-      content::InterestGroupManager::InterestGroupDataKey{api_origin,
-                                                          top_frame_origin},
-      BrowsingDataModel::StorageType::kInterestGroup, !allowed);
   return allowed;
 }
 
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index f686708b..8fd2d08 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -17,6 +17,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_piece_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "base/values.h"
diff --git a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
index e28f30f..f6fec44 100644
--- a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
+++ b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/chrome_navigation_browsertest.cc b/chrome/browser/chrome_navigation_browsertest.cc
index 51b20f2f..97abcd7d5 100644
--- a/chrome/browser/chrome_navigation_browsertest.cc
+++ b/chrome/browser/chrome_navigation_browsertest.cc
@@ -7,6 +7,7 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/browser/chromeos/app_mode/app_session.cc b/chrome/browser/chromeos/app_mode/app_session.cc
index 59d94131..ecbe5da 100644
--- a/chrome/browser/chromeos/app_mode/app_session.cc
+++ b/chrome/browser/chromeos/app_mode/app_session.cc
@@ -12,7 +12,6 @@
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/app_mode/app_session_browser_window_handler.h"
diff --git a/chrome/browser/chromeos/app_mode/app_session_browser_window_handler.cc b/chrome/browser/chromeos/app_mode/app_session_browser_window_handler.cc
index 6d96bfa..18b048e 100644
--- a/chrome/browser/chromeos/app_mode/app_session_browser_window_handler.cc
+++ b/chrome/browser/chromeos/app_mode/app_session_browser_window_handler.cc
@@ -6,6 +6,7 @@
 #include <memory>
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/chromeos/app_mode/app_session_policies.h"
 #include "chrome/browser/chromeos/app_mode/kiosk_settings_navigation_throttle.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_api_ash_unittest.cc b/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_api_ash_unittest.cc
index 9e908fe..385f6766 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_api_ash_unittest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_api_ash_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/strcat.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/extensions/extension_api_unittest.h"
 #include "chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h"
 #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h"
diff --git a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc
index bc4f0a00..dbb58f47 100644
--- a/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc
+++ b/chrome/browser/chromeos/policy/dlp/data_transfer_dlp_controller_browsertest.cc
@@ -11,7 +11,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/types/optional_util.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
@@ -701,13 +700,9 @@
   EXPECT_TRUE(!widget || widget->IsClosed());
 }
 
-#if defined(MEMORY_SANITIZER)
-#define MAYBE_ShouldProceedWarn DISABLED_ShouldProceedWarn
-#else
-#define MAYBE_ShouldProceedWarn ShouldProceedWarn
-#endif
+// TODO(b/264865493): Flaky
 IN_PROC_BROWSER_TEST_F(DataTransferDlpBlinkBrowserTest,
-                       MAYBE_ShouldProceedWarn) {
+                       DISABLED_ShouldProceedWarn) {
   ASSERT_TRUE(embedded_test_server()->Start());
   ASSERT_TRUE(ui_test_utils::NavigateToURL(
       browser(), embedded_test_server()->GetURL("/title1.html")));
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc
index ab2ce4c2f..9316f07 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.cc
@@ -10,6 +10,7 @@
 #include "base/containers/cxx20_erase_vector.h"
 #include "base/ranges/algorithm.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_histogram_helper.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h
index 7619208..bfe6c03 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_confidential_contents.h
@@ -11,6 +11,7 @@
 
 #include "base/containers/flat_set.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate.cc b/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate.cc
index 23e628d1..5bb63ca 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_copy_or_move_hook_delegate.cc
@@ -15,6 +15,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "chrome/browser/ash/policy/dlp/dlp_files_controller.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc
index 1843ebb..f11b9c2 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/chrome/browser/chromeos/reporting/metric_default_utils.cc b/chrome/browser/chromeos/reporting/metric_default_utils.cc
index 94394156..ffb8333 100644
--- a/chrome/browser/chromeos/reporting/metric_default_utils.cc
+++ b/chrome/browser/chromeos/reporting/metric_default_utils.cc
@@ -49,4 +49,19 @@
   return InitDelayParam::init_delay;
 }
 
+// static
+// 5 seconds is what was recommended by the upstream maintainer of FWUPD
+base::TimeDelta PeripheralCollectionDelayParam::collection_delay_ =
+    base::Seconds(5);
+
+// static
+void PeripheralCollectionDelayParam::SetForTesting(
+    const base::TimeDelta& delay) {
+  PeripheralCollectionDelayParam::collection_delay_ = delay;
+}
+
+// static
+const base::TimeDelta PeripheralCollectionDelayParam::Get() {
+  return PeripheralCollectionDelayParam::collection_delay_;
+}
 }  // namespace reporting::metrics
diff --git a/chrome/browser/chromeos/reporting/metric_default_utils.h b/chrome/browser/chromeos/reporting/metric_default_utils.h
index 94e83ec..6f1b359 100644
--- a/chrome/browser/chromeos/reporting/metric_default_utils.h
+++ b/chrome/browser/chromeos/reporting/metric_default_utils.h
@@ -69,6 +69,11 @@
 class CrosHealthdInfoMetricsHelper;
 }  // namespace ash::reporting
 
+// Forward declaration for the friend class below.
+namespace reporting {
+class UsbBrowserTestHelper;
+}  // namespace reporting
+
 namespace reporting::metrics {
 // Metric reporting manager initialization delay. This is for rate limiting
 // in case a device frequently reboots.
@@ -83,6 +88,18 @@
   static void SetForTesting(const base::TimeDelta& delay);
 };
 
+// Peripheral collection delay to mitigate the race
+// condition where CrosHealthD may query fwupd before it has a chance to read
+// all of the USB devices that are plugged into the machine.
+class PeripheralCollectionDelayParam {
+ public:
+  static const base::TimeDelta Get();
+
+ private:
+  friend class ::reporting::UsbBrowserTestHelper;
+  static void SetForTesting(const base::TimeDelta& delay);
+  static base::TimeDelta collection_delay_;
+};
 }  // namespace reporting::metrics
 
 #endif  // CHROME_BROWSER_CHROMEOS_REPORTING_METRIC_DEFAULT_UTILS_H_
diff --git a/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.cc b/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.cc
index 73ce8898..9dd595a0 100644
--- a/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.cc
+++ b/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.cc
@@ -10,6 +10,7 @@
 #include "components/reporting/client/report_queue_factory.h"
 #include "components/reporting/metrics/collector_base.h"
 #include "components/reporting/metrics/event_driven_telemetry_collector_pool.h"
+#include "components/reporting/metrics/manual_collector.h"
 #include "components/reporting/metrics/metric_event_observer.h"
 #include "components/reporting/metrics/metric_report_queue.h"
 #include "components/reporting/metrics/one_shot_collector.h"
@@ -94,6 +95,18 @@
       setting_enabled_default_value, init_delay);
 }
 
+std::unique_ptr<CollectorBase>
+MetricReportingManagerDelegateBase::CreateManualCollector(
+    Sampler* sampler,
+    MetricReportQueue* metric_report_queue,
+    ReportingSettings* reporting_settings,
+    const std::string& enable_setting_path,
+    bool setting_enabled_default_value) {
+  return std::make_unique<ManualCollector>(
+      sampler, metric_report_queue, reporting_settings, enable_setting_path,
+      setting_enabled_default_value);
+}
+
 std::unique_ptr<MetricEventObserverManager>
 MetricReportingManagerDelegateBase::CreateEventObserverManager(
     std::unique_ptr<MetricEventObserver> event_observer,
diff --git a/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.h b/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.h
index b994051..50f843bf8 100644
--- a/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.h
+++ b/chrome/browser/chromeos/reporting/metric_reporting_manager_delegate_base.h
@@ -73,6 +73,16 @@
       bool setting_enabled_default_value,
       base::TimeDelta init_delay = base::TimeDelta());
 
+  // Creates a new collector for manual collection. Does not automatically
+  // collect data upon construction or on any time period. Only collects if the
+  // appropriate settings are enabled when manual collection happens.
+  virtual std::unique_ptr<CollectorBase> CreateManualCollector(
+      Sampler* sampler,
+      MetricReportQueue* metric_report_queue,
+      ReportingSettings* reporting_settings,
+      const std::string& enable_setting_path,
+      bool setting_enabled_default_value);
+
   // Creates a new event observer manager to manage events reporting. The rate
   // is controlled by the specified setting and we fall back to the defaults
   // specified if none set by policy.
diff --git a/chrome/browser/component_updater/cros_component_installer_chromeos_unittest.cc b/chrome/browser/component_updater/cros_component_installer_chromeos_unittest.cc
index db36bd6..d3bfc08 100644
--- a/chrome/browser/component_updater/cros_component_installer_chromeos_unittest.cc
+++ b/chrome/browser/component_updater/cros_component_installer_chromeos_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/task/thread_pool.h"
 #include "base/test/scoped_path_override.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
 #include "chrome/browser/browser_process_platform_part_ash.h"
 #include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
diff --git a/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc b/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc
index 218a984e9..ed64d3f2 100644
--- a/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc
+++ b/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc
@@ -17,7 +17,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "chrome/browser/share/core/share_targets.h"
 #include "components/component_updater/component_updater_paths.h"
diff --git a/chrome/browser/component_updater/first_party_sets_component_installer_unittest.cc b/chrome/browser/component_updater/first_party_sets_component_installer_unittest.cc
index d044141..41d12c3 100644
--- a/chrome/browser/component_updater/first_party_sets_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/first_party_sets_component_installer_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "chrome/browser/first_party_sets/scoped_mock_first_party_sets_handler.h"
 #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/component_updater/pnacl_component_installer.cc b/chrome/browser/component_updater/pnacl_component_installer.cc
index 3530b32b1..272f107 100644
--- a/chrome/browser/component_updater/pnacl_component_installer.cc
+++ b/chrome/browser/component_updater/pnacl_component_installer.cc
@@ -24,7 +24,6 @@
 #include "base/strings/string_util.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "base/version.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/component_updater/sw_reporter_installer_win.cc b/chrome/browser/component_updater/sw_reporter_installer_win.cc
index 6f2b5e1e..b106a2c 100644
--- a/chrome/browser/component_updater/sw_reporter_installer_win.cc
+++ b/chrome/browser/component_updater/sw_reporter_installer_win.cc
@@ -34,7 +34,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/task_traits.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "base/win/registry.h"
diff --git a/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc b/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc
index f324ab1..7a46755c 100644
--- a/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc
+++ b/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/metrics/field_trial.h"
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_reg_util_win.h"
diff --git a/chrome/browser/custom_handlers/chrome_protocol_handler_registry_delegate.cc b/chrome/browser/custom_handlers/chrome_protocol_handler_registry_delegate.cc
index 32bf469..836c60f 100644
--- a/chrome/browser/custom_handlers/chrome_protocol_handler_registry_delegate.cc
+++ b/chrome/browser/custom_handlers/chrome_protocol_handler_registry_delegate.cc
@@ -8,7 +8,6 @@
 
 #include "base/check_op.h"
 #include "base/functional/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile_io_data.h"
 #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc b/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc
index ac51c70..1fafd393 100644
--- a/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc
+++ b/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/scoped_testing_local_state.h"
diff --git a/chrome/browser/device_reauth/win/biometric_authenticator_win_unittest.cc b/chrome/browser/device_reauth/win/biometric_authenticator_win_unittest.cc
index 2dbb095..dee498d 100644
--- a/chrome/browser/device_reauth/win/biometric_authenticator_win_unittest.cc
+++ b/chrome/browser/device_reauth/win/biometric_authenticator_win_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/device_reauth/win/biometric_authenticator_win.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/device_reauth/chrome_biometric_authenticator_factory.h"
 
 #include <memory>
diff --git a/chrome/browser/devtools/device/tcp_device_provider.h b/chrome/browser/devtools/device/tcp_device_provider.h
index fcfea15..37e67ca 100644
--- a/chrome/browser/devtools/device/tcp_device_provider.h
+++ b/chrome/browser/devtools/device/tcp_device_provider.h
@@ -10,8 +10,6 @@
 #include <set>
 
 #include "chrome/browser/devtools/device/android_device_manager.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/host_port_pair.h"
 #include "services/network/public/mojom/host_resolver.mojom-forward.h"
 
diff --git a/chrome/browser/devtools/devtools_browsertest.cc b/chrome/browser/devtools/devtools_browsertest.cc
index daf254d2..81c11a21 100644
--- a/chrome/browser/devtools/devtools_browsertest.cc
+++ b/chrome/browser/devtools/devtools_browsertest.cc
@@ -27,7 +27,6 @@
 #include "base/test/bind.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/devtools/devtools_targets_ui.cc b/chrome/browser/devtools/devtools_targets_ui.cc
index 68a71508..6f26a4d 100644
--- a/chrome/browser/devtools/devtools_targets_ui.cc
+++ b/chrome/browser/devtools/devtools_targets_ui.cc
@@ -12,7 +12,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/timer.h"
 #include "base/values.h"
 #include "base/version.h"
diff --git a/chrome/browser/dips/dips_service.cc b/chrome/browser/dips/dips_service.cc
index 0953cd7b..6a85e46 100644
--- a/chrome/browser/dips/dips_service.cc
+++ b/chrome/browser/dips/dips_service.cc
@@ -12,6 +12,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "chrome/browser/content_settings/cookie_settings_factory.h"
diff --git a/chrome/browser/dips/dips_service.h b/chrome/browser/dips/dips_service.h
index 0445ad93..82c25de4 100644
--- a/chrome/browser/dips/dips_service.h
+++ b/chrome/browser/dips/dips_service.h
@@ -8,6 +8,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "chrome/browser/dips/dips_redirect_info.h"
 #include "chrome/browser/dips/dips_storage.h"
diff --git a/chrome/browser/dips/dips_storage_unittest.cc b/chrome/browser/dips/dips_storage_unittest.cc
index b564b26..912f2b8 100644
--- a/chrome/browser/dips/dips_storage_unittest.cc
+++ b/chrome/browser/dips/dips_storage_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/functional/bind.h"
 #include "base/metrics/field_trial_params.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/browser/download/android/available_offline_content_provider.cc b/chrome/browser/download/android/available_offline_content_provider.cc
index bd9e1f8..f9bc9d22 100644
--- a/chrome/browser/download/android/available_offline_content_provider.cc
+++ b/chrome/browser/download/android/available_offline_content_provider.cc
@@ -13,6 +13,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/download/android/download_open_source.h"
 #include "chrome/browser/download/android/download_utils.h"
diff --git a/chrome/browser/download/android/duplicate_download_dialog_bridge.cc b/chrome/browser/download/android/duplicate_download_dialog_bridge.cc
index 29a9415..641340a 100644
--- a/chrome/browser/download/android/duplicate_download_dialog_bridge.cc
+++ b/chrome/browser/download/android/duplicate_download_dialog_bridge.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/singleton.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/android/chrome_jni_headers/DuplicateDownloadDialogBridge_jni.h"
 #include "chrome/browser/android/android_theme_resources.h"
 #include "chrome/browser/download/android/download_dialog_utils.h"
diff --git a/chrome/browser/download/android/insecure_download_dialog_bridge.cc b/chrome/browser/download/android/insecure_download_dialog_bridge.cc
index acdf831c..32ca735b 100644
--- a/chrome/browser/download/android/insecure_download_dialog_bridge.cc
+++ b/chrome/browser/download/android/insecure_download_dialog_bridge.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/singleton.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/android/android_theme_resources.h"
 #include "chrome/browser/download/android/download_dialog_utils.h"
 #include "chrome/browser/download/android/jni_headers/InsecureDownloadDialogBridge_jni.h"
diff --git a/chrome/browser/download/android/insecure_download_infobar_delegate.cc b/chrome/browser/download/android/insecure_download_infobar_delegate.cc
index f134bd6..22893f35 100644
--- a/chrome/browser/download/android/insecure_download_infobar_delegate.cc
+++ b/chrome/browser/download/android/insecure_download_infobar_delegate.cc
@@ -9,6 +9,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/android/android_theme_resources.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/download/public/common/download_item.h"
diff --git a/chrome/browser/download/download_commands.cc b/chrome/browser/download/download_commands.cc
index 4edd9cfc..4c2e4943 100644
--- a/chrome/browser/download/download_commands.cc
+++ b/chrome/browser/download/download_commands.cc
@@ -11,6 +11,7 @@
 #include "base/functional/bind.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/download/download_commands.h b/chrome/browser/download/download_commands.h
index 37412bf..adc1bda 100644
--- a/chrome/browser/download/download_commands.h
+++ b/chrome/browser/download/download_commands.h
@@ -7,6 +7,7 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "content/public/browser/page_navigator.h"
 #include "ui/gfx/image/image.h"
diff --git a/chrome/browser/download/download_item_model.cc b/chrome/browser/download/download_item_model.cc
index 20297a4..13ea18b 100644
--- a/chrome/browser/download/download_item_model.cc
+++ b/chrome/browser/download/download_item_model.cc
@@ -16,7 +16,6 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/supports_user_data.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/download/notification/download_item_notification_unittest.cc b/chrome/browser/download/notification/download_item_notification_unittest.cc
index 18a2324..97a45a0 100644
--- a/chrome/browser/download/notification/download_item_notification_unittest.cc
+++ b/chrome/browser/download/notification/download_item_notification_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/download/chrome_download_manager_delegate.h"
 #include "chrome/browser/download/download_commands.h"
diff --git a/chrome/browser/download/offline_item_model.cc b/chrome/browser/download/offline_item_model.cc
index 366f115..51a15aa 100644
--- a/chrome/browser/download/offline_item_model.cc
+++ b/chrome/browser/download/offline_item_model.cc
@@ -7,7 +7,6 @@
 #include <string>
 
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/download/download_commands.h"
diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc
index 5235638..69fd5d23 100644
--- a/chrome/browser/engagement/important_sites_util.cc
+++ b/chrome/browser/engagement/important_sites_util.cc
@@ -347,49 +347,6 @@
   }
 }
 
-// WebAppRegistrar is desktop specific, but Android does not warn users
-// about clearing data for installed apps, so this and any functions explicitly
-// used to warn about clearing data for installed apps can be excluded from the
-// Android build.
-#if !BUILDFLAG(IS_ANDROID)
-void PopulateInfoMapWithInstalledEngagedInTimePeriod(
-    browsing_data::TimePeriod time_period,
-    Profile* profile,
-    std::map<std::string, ImportantDomainInfo>* output) {
-  SiteEngagementService* service = SiteEngagementService::Get(profile);
-  std::vector<mojom::SiteEngagementDetails> engagement_details =
-      service->GetAllDetailsEngagedInTimePeriod(time_period);
-  std::set<GURL> content_origins;
-
-  // Check with WebAppRegistrar to make sure the apps have not yet been
-  // uninstalled.
-  std::map<std::string, std::string> installed_origins_map;
-  if (web_app::AreWebAppsUserInstallable(profile)) {
-    const web_app::WebAppRegistrar& registrar =
-        web_app::WebAppProvider::GetForWebApps(profile)->registrar_unsafe();
-    auto app_ids = registrar.GetAppIds();
-    for (auto& app_id : app_ids) {
-      GURL scope = registrar.GetAppScope(app_id);
-      DCHECK(scope.is_valid());
-      auto app_name = registrar.GetAppShortName(app_id);
-      installed_origins_map.emplace(
-          std::make_pair(scope.DeprecatedGetOriginAsURL().spec(), app_name));
-    }
-  }
-
-  for (const auto& detail : engagement_details) {
-    if (detail.installed_bonus > 0) {
-      auto origin_pair = installed_origins_map.find(detail.origin.spec());
-      if (origin_pair != installed_origins_map.end()) {
-        MaybePopulateImportantInfoForReason(detail.origin, &content_origins,
-                                            ImportantReason::HOME_SCREEN,
-                                            origin_pair->second, output);
-      }
-    }
-  }
-}
-#endif
-
 }  // namespace
 
 ImportantDomainInfo::ImportantDomainInfo() = default;
@@ -482,36 +439,6 @@
   return final_list;
 }
 
-#if !BUILDFLAG(IS_ANDROID)
-std::vector<ImportantDomainInfo>
-ImportantSitesUtil::GetInstalledRegisterableDomains(
-    browsing_data::TimePeriod time_period,
-    Profile* profile,
-    size_t max_results) {
-  std::vector<ImportantDomainInfo> installed_domains;
-  std::map<std::string, ImportantDomainInfo> installed_app_info;
-  PopulateInfoMapWithInstalledEngagedInTimePeriod(time_period, profile,
-                                                  &installed_app_info);
-
-  std::unordered_set<std::string> excluded_domains =
-      GetSuppressedImportantDomains(profile);
-
-  std::vector<std::pair<std::string, ImportantDomainInfo>> items;
-  for (auto& item : installed_app_info)
-    items.emplace_back(std::move(item));
-  std::sort(items.begin(), items.end(), &CompareDescendingImportantInfo);
-
-  for (std::pair<std::string, ImportantDomainInfo>& domain_info : items) {
-    if (installed_domains.size() >= max_results)
-      break;
-    if (excluded_domains.find(domain_info.first) != excluded_domains.end())
-      continue;
-    installed_domains.push_back(std::move(domain_info.second));
-  }
-  return installed_domains;
-}
-#endif
-
 void ImportantSitesUtil::RecordExcludedAndIgnoredImportantSites(
     Profile* profile,
     const std::vector<std::string>& excluded_sites,
diff --git a/chrome/browser/engagement/important_sites_util.h b/chrome/browser/engagement/important_sites_util.h
index 7dcc2fa..618953a 100644
--- a/chrome/browser/engagement/important_sites_util.h
+++ b/chrome/browser/engagement/important_sites_util.h
@@ -79,15 +79,6 @@
       Profile* profile,
       size_t max_results);
 
-#if !BUILDFLAG(IS_ANDROID)
-  // Return the top |<=max_results| important registrable domains that have an
-  // associated installed app. |max_results| is assumed to be small.
-  static std::vector<ImportantDomainInfo> GetInstalledRegisterableDomains(
-      browsing_data::TimePeriod time_period,
-      Profile* profile,
-      size_t max_results);
-#endif
-
   static std::set<std::string> GetInstalledRegisterableDomains(
       Profile* profile);
 
diff --git a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc
index e33718d..44e40bc 100644
--- a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc
+++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc
@@ -8,6 +8,7 @@
 #include "base/functional/callback.h"
 #include "base/functional/callback_forward.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/time/time.h"
 #include "chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h"
diff --git a/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc b/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc
index 70c60f6..52d0db2 100644
--- a/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc
+++ b/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/ash/file_manager/fake_disk_mount_manager.h"
diff --git a/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc b/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc
index 12dbb0d..84bb225 100644
--- a/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc
+++ b/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/linux_key_rotation_command.h b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/linux_key_rotation_command.h
index 85509d6..2bec53f 100644
--- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/linux_key_rotation_command.h
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/linux_key_rotation_command.h
@@ -11,7 +11,6 @@
 #include "base/process/launch.h"
 #include "base/process/process.h"
 #include "chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/key_rotation_command.h"
-#include "mojo/public/cpp/platform/platform_channel.h"
 
 namespace network {
 class SharedURLLoaderFactory;
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/win_key_rotation_command.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/win_key_rotation_command.cc
index b68d1f5..5a288fd9 100644
--- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/win_key_rotation_command.cc
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/win_key_rotation_command.cc
@@ -16,6 +16,7 @@
 #include "base/check.h"
 #include "base/functional/bind.h"
 #include "base/syslog_logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/platform_thread.h"
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl.cc
index 9b3dc86..bf37333 100644
--- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl.cc
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/device_trust_key_manager_impl.cc
@@ -11,7 +11,6 @@
 #include "base/task/bind_post_task.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/enterprise/connectors/device_trust/key_management/browser/key_rotation_launcher.h"
 #include "chrome/browser/enterprise/connectors/device_trust/key_management/browser/metrics_utils.h"
 #include "chrome/browser/enterprise/connectors/device_trust/key_management/core/signing_key_pair.h"
diff --git a/chrome/browser/enterprise/idle/action.cc b/chrome/browser/enterprise/idle/action.cc
index e35150f..b692d5e7 100644
--- a/chrome/browser/enterprise/idle/action.cc
+++ b/chrome/browser/enterprise/idle/action.cc
@@ -13,7 +13,6 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/ranges/algorithm.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h"
 #include "chrome/browser/enterprise/idle/action_runner.h"
 #include "chrome/browser/enterprise/idle/browser_closer.h"
diff --git a/chrome/browser/enterprise/idle/browser_closer.cc b/chrome/browser/enterprise/idle/browser_closer.cc
index 41cc61da..6490152 100644
--- a/chrome/browser/enterprise/idle/browser_closer.cc
+++ b/chrome/browser/enterprise/idle/browser_closer.cc
@@ -11,7 +11,6 @@
 #include "base/check_is_test.h"
 #include "base/containers/contains.h"
 #include "base/ranges/algorithm.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
diff --git a/chrome/browser/enterprise/idle/idle_service_browsertest.cc b/chrome/browser/enterprise/idle/idle_service_browsertest.cc
index 9f72bfb6..f8067ea6 100644
--- a/chrome/browser/enterprise/idle/idle_service_browsertest.cc
+++ b/chrome/browser/enterprise/idle/idle_service_browsertest.cc
@@ -8,6 +8,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator.cc
index abf799f..1b96496 100644
--- a/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator.cc
+++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/extensions/extension_management.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/pref_names.h"
 #include "components/enterprise/common/proto/extensions_workflow_events.pb.h"
@@ -41,12 +40,11 @@
           request_data->FindKey(extension_misc::kExtensionRequestTimestamp));
       if (timestamp)
         report->set_request_timestamp_millis(timestamp->ToJavaTime());
-      if (base::FeatureList::IsEnabled(
-              features::kExtensionWorkflowJustification)) {
-        const std::string* justification = request_data->FindStringKey(
-            extension_misc::kExtensionWorkflowJustification);
-        if (justification)
-          report->set_justification(*justification);
+
+      const std::string* justification = request_data->FindStringKey(
+          extension_misc::kExtensionWorkflowJustification);
+      if (justification) {
+        report->set_justification(*justification);
       }
     }
     report->set_removed(false);
diff --git a/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator_unittest.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator_unittest.cc
index bbe016d4..9c378ef 100644
--- a/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator_unittest.cc
+++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator_unittest.cc
@@ -4,13 +4,11 @@
 
 #include "chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator.h"
 
-#include "base/feature_list.h"
 #include "base/json/json_reader.h"
 #include "base/json/values_util.h"
 #include "base/time/time.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/enterprise/reporting/prefs.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_browser_process.h"
@@ -93,11 +91,7 @@
     EXPECT_EQ(expected_id, actual_report->id());
     if (!is_removed) {
       EXPECT_EQ(kTimeStamp, actual_report->request_timestamp_millis());
-      EXPECT_EQ(actual_report->justification(),
-                base::FeatureList::IsEnabled(
-                    features::kExtensionWorkflowJustification)
-                    ? kJustification
-                    : std::string());
+      EXPECT_EQ(actual_report->justification(), kJustification);
     }
     EXPECT_EQ(is_removed, actual_report->removed());
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -110,8 +104,6 @@
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
   }
 
-  base::test::ScopedFeatureList feature_list_;
-
  private:
   void SetRequestPrefs(const std::vector<std::string>& ids,
                        const std::string& pref_name,
@@ -124,11 +116,8 @@
       request_data.SetKey(
           timestamp_name,
           ::base::TimeToValue(base::Time::FromJavaTime(kTimeStamp)));
-      if (base::FeatureList::IsEnabled(
-              features::kExtensionWorkflowJustification)) {
-        request_data.SetKey(extension_misc::kExtensionWorkflowJustification,
-                            base::Value(kJustification));
-      }
+      request_data.SetKey(extension_misc::kExtensionWorkflowJustification,
+                          base::Value(kJustification));
       id_values->SetKey(id, std::move(request_data));
     }
 
@@ -156,23 +145,6 @@
   EXPECT_EQ(0u, reports.size());
 }
 
-TEST_F(ExtensionRequestReportGeneratorTest, AddRequests_Justification) {
-  feature_list_.InitAndEnableFeature(features::kExtensionWorkflowJustification);
-
-  auto* profile = CreateProfile(kProfileName);
-  SetExtensionRequestsList({kExtensionId1, kExtensionId2}, {}, profile);
-
-  auto reports = GenerateReports(profile);
-
-  EXPECT_EQ(2u, reports.size());
-  VerifyReport(reports[0].get(), kExtensionId1, /*is_removed=*/false);
-  VerifyReport(reports[1].get(), kExtensionId2, /*is_removed=*/false);
-
-  reports = GenerateReports(profile);
-
-  EXPECT_EQ(0u, reports.size());
-}
-
 TEST_F(ExtensionRequestReportGeneratorTest, RemovalRequest) {
   auto* profile = CreateProfile(kProfileName);
   SetExtensionRequestsList({}, {kExtensionId1, kExtensionId2}, profile);
diff --git a/chrome/browser/enterprise/reporting/profile_report_generator_desktop.cc b/chrome/browser/enterprise/reporting/profile_report_generator_desktop.cc
index 7b2925d..4c9cce7 100644
--- a/chrome/browser/enterprise/reporting/profile_report_generator_desktop.cc
+++ b/chrome/browser/enterprise/reporting/profile_report_generator_desktop.cc
@@ -8,14 +8,12 @@
 
 #include "base/json/values_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/enterprise/reporting/extension_info.h"
 #include "chrome/browser/enterprise/reporting/extension_request/extension_request_report_generator.h"
 #include "chrome/browser/extensions/extension_management.h"
 #include "chrome/browser/policy/chrome_browser_policy_connector.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/pref_names.h"
 #include "components/enterprise/browser/reporting/policy_info.h"
@@ -75,12 +73,10 @@
     if (timestamp)
       request->set_request_timestamp(timestamp->ToJavaTime());
 
-    if (base::FeatureList::IsEnabled(
-            features::kExtensionWorkflowJustification)) {
-      const std::string* justification = it.second.FindStringKey(
-          extension_misc::kExtensionWorkflowJustification);
-      if (justification)
-        request->set_justification(*justification);
+    const std::string* justification = it.second.FindStringKey(
+        extension_misc::kExtensionWorkflowJustification);
+    if (justification) {
+      request->set_justification(*justification);
     }
   }
 }
diff --git a/chrome/browser/enterprise/reporting/profile_report_generator_unittest.cc b/chrome/browser/enterprise/reporting/profile_report_generator_unittest.cc
index 096583c..f2c2d44e 100644
--- a/chrome/browser/enterprise/reporting/profile_report_generator_unittest.cc
+++ b/chrome/browser/enterprise/reporting/profile_report_generator_unittest.cc
@@ -6,7 +6,6 @@
 
 #include <string>
 
-#include "base/feature_list.h"
 #include "base/json/json_reader.h"
 #include "base/json/values_util.h"
 #include "base/memory/raw_ptr.h"
@@ -17,7 +16,6 @@
 #include "chrome/browser/profiles/profile_attributes_init_params.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_browser_process.h"
@@ -146,11 +144,8 @@
       request_data.SetKey(
           extension_misc::kExtensionRequestTimestamp,
           ::base::TimeToValue(base::Time::FromJavaTime(kFakeTime)));
-      if (base::FeatureList::IsEnabled(
-              features::kExtensionWorkflowJustification)) {
-        request_data.SetKey(extension_misc::kExtensionWorkflowJustification,
-                            base::Value(kJustification));
-      }
+      request_data.SetKey(extension_misc::kExtensionWorkflowJustification,
+                          base::Value(kJustification));
       id_values->SetKey(id, std::move(request_data));
     }
     profile()->GetTestingPrefService()->SetUserPref(
@@ -173,8 +168,6 @@
   PlatformReportingDelegateFactory reporting_delegate_factory_;
   ProfileReportGenerator generator_;
 
-  base::test::ScopedFeatureList feature_list_;
-
  private:
   content::BrowserTaskEnvironment task_environment_;
   TestingProfileManager profile_manager_;
@@ -258,23 +251,6 @@
 }
 
 TEST_F(ProfileReportGeneratorTest, PendingRequest) {
-  feature_list_.InitAndDisableFeature(
-      features::kExtensionWorkflowJustification);
-
-  profile()->GetTestingPrefService()->SetManagedPref(
-      prefs::kCloudExtensionRequestEnabled,
-      std::make_unique<base::Value>(true));
-  std::vector<std::string> ids = {kExtensionId};
-  SetExtensionToPendingList(ids);
-
-  auto report = GenerateReport();
-  ASSERT_EQ(1, report->extension_requests_size());
-  EXPECT_EQ(kExtensionId, report->extension_requests(0).id());
-  EXPECT_EQ(kFakeTime, report->extension_requests(0).request_timestamp());
-  EXPECT_EQ(std::string(), report->extension_requests(0).justification());
-}
-
-TEST_F(ProfileReportGeneratorTest, PendingRequest_Justification) {
   profile()->GetTestingPrefService()->SetManagedPref(
       prefs::kCloudExtensionRequestEnabled,
       std::make_unique<base::Value>(true));
diff --git a/chrome/browser/enterprise/reporting/report_scheduler_unittest.cc b/chrome/browser/enterprise/reporting/report_scheduler_unittest.cc
index 1280231..e5df34b 100644
--- a/chrome/browser/enterprise/reporting/report_scheduler_unittest.cc
+++ b/chrome/browser/enterprise/reporting/report_scheduler_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
diff --git a/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc b/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
index 4f24825..a3a6bc48 100644
--- a/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
+++ b/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "base/command_line.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_command_line.h"
 #include "chrome/browser/extensions/activity_log/activity_log.h"
 #include "chrome/browser/extensions/activity_log/activity_log_task_runner.h"
diff --git a/chrome/browser/extensions/activity_log/activity_log_unittest.cc b/chrome/browser/extensions/activity_log/activity_log_unittest.cc
index 6369464..ad94eef 100644
--- a/chrome/browser/extensions/activity_log/activity_log_unittest.cc
+++ b/chrome/browser/extensions/activity_log/activity_log_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/browser/extensions/activity_log/activity_action_constants.h"
 #include "chrome/browser/extensions/activity_log/activity_log_task_runner.h"
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc
index 30559e8..94c18b25 100644
--- a/chrome/browser/extensions/api/automation/automation_apitest.cc
+++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -11,7 +11,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/trace_event_analyzer.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/extensions/extension_apitest.h"
diff --git a/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.h b/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.h
index 5d42e40..33deba6 100644
--- a/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.h
+++ b/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.h
@@ -13,6 +13,7 @@
 #include "base/functional/callback_forward.h"
 #include "base/memory/singleton.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/extensions/api/braille_display_private/braille_controller.h"
 #include "chrome/browser/extensions/api/braille_display_private/brlapi_connection.h"
diff --git a/chrome/browser/extensions/api/dashboard_private/dashboard_private_api.cc b/chrome/browser/extensions/api/dashboard_private/dashboard_private_api.cc
index cd283ae9..78750ab 100644
--- a/chrome/browser/extensions/api/dashboard_private/dashboard_private_api.cc
+++ b/chrome/browser/extensions/api/dashboard_private/dashboard_private_api.cc
@@ -9,7 +9,6 @@
 
 #include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/bitmap_fetcher/bitmap_fetcher.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/extensions/api/debugger/debugger_apitest.cc b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
index f92a29c..25d63b6 100644
--- a/chrome/browser/extensions/api/debugger/debugger_apitest.cc
+++ b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_mock_time_message_loop_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
index 3c2e12f..c6e7d95 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
@@ -1007,7 +1007,7 @@
 
   open_function = base::MakeRefCounted<DownloadsOpenFunction>();
   open_function->set_user_gesture(true);
-  base::Value args_list(base::Value::Type::LIST);
+  base::Value::List args_list;
   args_list.Append(static_cast<int>(download_item->GetId()));
   open_function->SetArgs(std::move(args_list));
   open_function->set_extension(extension());
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc
index 6bda463..24316be4 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/values.h"
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h
index 0fa45211..26b91e5 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/browser/enterprise/signals/client_certificate_fetcher.h"
 #include "chrome/browser/enterprise/signals/context_info_fetcher.h"
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
index 00d0490..063efea2 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
@@ -46,6 +46,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/test/test_reg_util_win.h"
 #include "base/win/registry.h"
+#include "components/device_signals/test/win/scoped_executable_files.h"
 #endif  // BUILDFLAG(IS_WIN)
 
 #if !BUILDFLAG(IS_CHROMEOS_ASH)
@@ -745,12 +746,13 @@
 
   std::string extra_items = "";
 #if BUILDFLAG(IS_WIN)
+  device_signals::test::ScopedExecutableFiles scoped_executable_files;
   std::string signed_exe_path =
-      device_signals::test::GetSignedExePath().AsUTF8Unsafe();
+      scoped_executable_files.GetSignedExePath().AsUTF8Unsafe();
   base::ReplaceSubstringsAfterOffset(&signed_exe_path, 0U, "\\", "\\\\");
 
   std::string metadata_exe_path =
-      device_signals::test::GetMetadataExePath().AsUTF8Unsafe();
+      scoped_executable_files.GetMetadataExePath().AsUTF8Unsafe();
   base::ReplaceSubstringsAfterOffset(&metadata_exe_path, 0U, "\\", "\\\\");
 
   extra_items = base::StringPrintf(
@@ -772,8 +774,8 @@
     });
   )",
       signed_exe_path.c_str(), metadata_exe_path.c_str(),
-      device_signals::test::GetMetadataProductName().c_str(),
-      device_signals::test::GetMetadataProductVersion().c_str());
+      scoped_executable_files.GetMetadataProductName().c_str(),
+      scoped_executable_files.GetMetadataProductVersion().c_str());
 
   constexpr char kAssertions[] = R"(
         chrome.test.assertTrue(fileItems instanceof Array);
diff --git a/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc b/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc
index f7d2fef0..ac2fa10 100644
--- a/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc
+++ b/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc
@@ -8,6 +8,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/extensions/api/file_manager/file_browser_handler_api.cc b/chrome/browser/extensions/api/file_manager/file_browser_handler_api.cc
index 095944f..0fbb73b 100644
--- a/chrome/browser/extensions/api/file_manager/file_browser_handler_api.cc
+++ b/chrome/browser/extensions/api/file_manager/file_browser_handler_api.cc
@@ -21,7 +21,6 @@
 #include <vector>
 
 #include "base/functional/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/extensions/api/file_manager/file_selector_impl.h"
 #include "chrome/browser/extensions/chrome_extension_function_details.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/extensions/api/file_manager/file_selector_impl.cc b/chrome/browser/extensions/api/file_manager/file_selector_impl.cc
index b75bf9d..bbc50a6 100644
--- a/chrome/browser/extensions/api/file_manager/file_selector_impl.cc
+++ b/chrome/browser/extensions/api/file_manager/file_selector_impl.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_select_file_policy.h"
diff --git a/chrome/browser/extensions/api/history/history_api.cc b/chrome/browser/extensions/api/history/history_api.cc
index 689f768..d739471 100644
--- a/chrome/browser/extensions/api/history/history_api.cc
+++ b/chrome/browser/extensions/api/history/history_api.cc
@@ -19,7 +19,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/activity_log/activity_log.h"
diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc
index c057bd05..859961d7 100644
--- a/chrome/browser/extensions/api/identity/identity_apitest.cc
+++ b/chrome/browser/extensions/api/identity/identity_apitest.cc
@@ -152,7 +152,7 @@
     response_delegate_ =
         std::make_unique<api_test_utils::SendResponseHelper>(function);
     function->preserve_results_for_testing();
-    absl::optional<base::Value> parsed_args(utils::ParseList(args));
+    absl::optional<base::Value::List> parsed_args(utils::ParseList(args));
     ASSERT_TRUE(parsed_args)
         << "Could not parse extension function arguments: " << args;
     function->SetArgs(std::move(*parsed_args));
diff --git a/chrome/browser/extensions/api/messaging/native_message_echo_host.h b/chrome/browser/extensions/api/messaging/native_message_echo_host.h
index 6ea94c3e..2ada874 100644
--- a/chrome/browser/extensions/api/messaging/native_message_echo_host.h
+++ b/chrome/browser/extensions/api/messaging/native_message_echo_host.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "extensions/browser/api/messaging/native_message_host.h"
 
diff --git a/chrome/browser/extensions/api/messaging/native_message_process_host.cc b/chrome/browser/extensions/api/messaging/native_message_process_host.cc
index 37dbe92..bf63034 100644
--- a/chrome/browser/extensions/api/messaging/native_message_process_host.cc
+++ b/chrome/browser/extensions/api/messaging/native_message_process_host.cc
@@ -14,6 +14,7 @@
 #include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/process/kill.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "chrome/browser/extensions/api/messaging/native_messaging_host_manifest.h"
diff --git a/chrome/browser/extensions/api/omnibox/suggestion_parser.cc b/chrome/browser/extensions/api/omnibox/suggestion_parser.cc
index c8b53ad..658968e1 100644
--- a/chrome/browser/extensions/api/omnibox/suggestion_parser.cc
+++ b/chrome/browser/extensions/api/omnibox/suggestion_parser.cc
@@ -31,12 +31,11 @@
 
 // Recursively walks an XML node, generating `result` as it goes along.
 void WalkNode(const base::Value& node, DescriptionAndStyles* result) {
-  const base::Value* children = data_decoder::GetXmlElementChildren(node);
+  const base::Value::List* children = data_decoder::GetXmlElementChildren(node);
   if (!children)
     return;
 
-  DCHECK(children->is_list());
-  for (const base::Value& child : children->GetList()) {
+  for (const base::Value& child : *children) {
     // Append text nodes to our description.
     if (data_decoder::IsXmlElementOfType(
             child, data_decoder::mojom::XmlParser::kTextNodeType)) {
@@ -106,13 +105,13 @@
   if (CheckedGetElementTag(root_node) != "fragment")
     return false;
 
-  const base::Value* children = data_decoder::GetXmlElementChildren(root_node);
+  const base::Value::List* children =
+      data_decoder::GetXmlElementChildren(root_node);
   if (!children)
     return false;
 
-  DCHECK(children->is_list());
-  entries_out->reserve(children->GetList().size());
-  for (const base::Value& child : children->GetList()) {
+  entries_out->reserve(children->size());
+  for (const base::Value& child : *children) {
     if (!data_decoder::IsXmlElementOfType(
             child, data_decoder::mojom::XmlParser::kElementType)) {
       return false;
diff --git a/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc b/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
index 59e2fe8..243114997 100644
--- a/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api_unittest.cc
@@ -21,7 +21,6 @@
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_service_factory.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.h"
 #include "chrome/browser/ash/login/quick_unlock/auth_token.h"
diff --git a/chrome/browser/extensions/api/socket/socket_api_unittest.cc b/chrome/browser/extensions/api/socket/socket_api_unittest.cc
index d8432d46..4e5b178a 100644
--- a/chrome/browser/extensions/api/socket/socket_api_unittest.cc
+++ b/chrome/browser/extensions/api/socket/socket_api_unittest.cc
@@ -5,7 +5,6 @@
 #include <memory>
 
 #include "base/functional/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process_impl.h"
 #include "chrome/browser/extensions/extension_api_unittest.h"
diff --git a/chrome/browser/extensions/api/sockets_tcp_server/sockets_tcp_server_api_unittest.cc b/chrome/browser/extensions/api/sockets_tcp_server/sockets_tcp_server_api_unittest.cc
index 3566a3a2..b98b708 100644
--- a/chrome/browser/extensions/api/sockets_tcp_server/sockets_tcp_server_api_unittest.cc
+++ b/chrome/browser/extensions/api/sockets_tcp_server/sockets_tcp_server_api_unittest.cc
@@ -5,7 +5,6 @@
 #include <memory>
 
 #include "base/functional/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process_impl.h"
 #include "chrome/browser/extensions/extension_api_unittest.h"
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
index 1b5b84c0..8a4bd53 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
@@ -13,7 +13,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/extensions/api/tab_capture/tab_capture_api.h"
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/remote_session_state_change.h b/chrome/browser/extensions/api/web_authentication_proxy/remote_session_state_change.h
index 050021cbd..9af8067bbb 100644
--- a/chrome/browser/extensions/api/web_authentication_proxy/remote_session_state_change.h
+++ b/chrome/browser/extensions/api/web_authentication_proxy/remote_session_state_change.h
@@ -12,6 +12,7 @@
 #include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
index a97e407..12b99bb3 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
@@ -24,7 +24,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.h b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.h
index e74ba6c8..f4118bbc 100644
--- a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.h
+++ b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.h
@@ -11,7 +11,6 @@
 #include "chrome/browser/chrome_content_browser_client_parts.h"
 #include "components/download/public/common/quarantine_connection.h"
 #include "content/public/browser/browser_or_resource_context.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/network/public/mojom/network_context.mojom-forward.h"
 #include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
 #include "ui/base/page_transition_types.h"
diff --git a/chrome/browser/extensions/chrome_content_verifier_delegate.cc b/chrome/browser/extensions/chrome_content_verifier_delegate.cc
index 3e73e01..f982ce3 100644
--- a/chrome/browser/extensions/chrome_content_verifier_delegate.cc
+++ b/chrome/browser/extensions/chrome_content_verifier_delegate.cc
@@ -18,7 +18,6 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/syslog_logging.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/extensions/chrome_extension_cookies.cc b/chrome/browser/extensions/chrome_extension_cookies.cc
index e26c2db..6671685 100644
--- a/chrome/browser/extensions/chrome_extension_cookies.cc
+++ b/chrome/browser/extensions/chrome_extension_cookies.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/extensions/chrome_extension_cookies.h"
 
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/content_settings/cookie_settings_factory.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/extensions/chrome_extension_cookies_factory.h"
diff --git a/chrome/browser/extensions/content_verifier_browsertest.cc b/chrome/browser/extensions/content_verifier_browsertest.cc
index 6b42aa7..3b52759 100644
--- a/chrome/browser/extensions/content_verifier_browsertest.cc
+++ b/chrome/browser/extensions/content_verifier_browsertest.cc
@@ -14,7 +14,6 @@
 #include "base/test/task_environment.h"
 #include "base/test/test_file_util.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/extensions/browsertest_util.h"
 #include "chrome/browser/extensions/chrome_content_verifier_delegate.h"
diff --git a/chrome/browser/extensions/content_verifier_test_utils.cc b/chrome/browser/extensions/content_verifier_test_utils.cc
index 457d0b0..02898fd3 100644
--- a/chrome/browser/extensions/content_verifier_test_utils.cc
+++ b/chrome/browser/extensions/content_verifier_test_utils.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/test/test_utils.h"
 #include "extensions/browser/external_install_info.h"
 #include "extensions/browser/updater/extension_downloader.h"
diff --git a/chrome/browser/extensions/context_menu_matcher_unittest.cc b/chrome/browser/extensions/context_menu_matcher_unittest.cc
index 225b06f..0b406cbd 100644
--- a/chrome/browser/extensions/context_menu_matcher_unittest.cc
+++ b/chrome/browser/extensions/context_menu_matcher_unittest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/extensions/context_menu_matcher.h"
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/extensions/menu_manager.h"
 #include "chrome/browser/extensions/menu_manager_factory.h"
 #include "chrome/browser/extensions/test_extension_prefs.h"
diff --git a/chrome/browser/extensions/corrupted_extension_reinstaller_unittest.cc b/chrome/browser/extensions/corrupted_extension_reinstaller_unittest.cc
index a66d0632..d7d87a6 100644
--- a/chrome/browser/extensions/corrupted_extension_reinstaller_unittest.cc
+++ b/chrome/browser/extensions/corrupted_extension_reinstaller_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_service_test_base.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index c21501c..92f41dd 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -22,6 +22,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/test_future.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/values.h"
 #include "build/build_config.h"
@@ -585,27 +586,28 @@
 const Extension* ExtensionBrowserTest::UpdateExtensionWaitForIdle(
     const std::string& id,
     const base::FilePath& path,
-    int expected_change) {
+    absl::optional<int> expected_change) {
   return InstallOrUpdateExtension(id, path, INSTALL_UI_TYPE_NONE,
-                                  expected_change, ManifestLocation::kInternal,
-                                  browser(), Extension::NO_FLAGS, false, false);
+                                  std::move(expected_change),
+                                  ManifestLocation::kInternal, browser(),
+                                  Extension::NO_FLAGS, false, false);
 }
 
 const Extension* ExtensionBrowserTest::InstallExtensionFromWebstore(
     const base::FilePath& path,
-    int expected_change) {
-  return InstallOrUpdateExtension(std::string(), path,
-                                  INSTALL_UI_TYPE_AUTO_CONFIRM, expected_change,
-                                  ManifestLocation::kInternal, browser(),
-                                  Extension::FROM_WEBSTORE, true, false);
+    absl::optional<int> expected_change) {
+  return InstallOrUpdateExtension(
+      std::string(), path, INSTALL_UI_TYPE_AUTO_CONFIRM,
+      std::move(expected_change), ManifestLocation::kInternal, browser(),
+      Extension::FROM_WEBSTORE, true, false);
 }
 
 const Extension* ExtensionBrowserTest::InstallOrUpdateExtension(
     const std::string& id,
     const base::FilePath& path,
     InstallUIType ui_type,
-    int expected_change) {
-  return InstallOrUpdateExtension(id, path, ui_type, expected_change,
+    absl::optional<int> expected_change) {
+  return InstallOrUpdateExtension(id, path, ui_type, std::move(expected_change),
                                   ManifestLocation::kInternal, browser(),
                                   Extension::NO_FLAGS, true, false);
 }
@@ -614,10 +616,10 @@
     const std::string& id,
     const base::FilePath& path,
     InstallUIType ui_type,
-    int expected_change,
+    absl::optional<int> expected_change,
     Browser* browser,
     Extension::InitFromValueFlags creation_flags) {
-  return InstallOrUpdateExtension(id, path, ui_type, expected_change,
+  return InstallOrUpdateExtension(id, path, ui_type, std::move(expected_change),
                                   ManifestLocation::kInternal, browser,
                                   creation_flags, true, false);
 }
@@ -626,9 +628,9 @@
     const std::string& id,
     const base::FilePath& path,
     InstallUIType ui_type,
-    int expected_change,
+    absl::optional<int> expected_change,
     ManifestLocation install_source) {
-  return InstallOrUpdateExtension(id, path, ui_type, expected_change,
+  return InstallOrUpdateExtension(id, path, ui_type, std::move(expected_change),
                                   install_source, browser(),
                                   Extension::NO_FLAGS, true, false);
 }
@@ -637,7 +639,7 @@
     const std::string& id,
     const base::FilePath& path,
     InstallUIType ui_type,
-    int expected_change,
+    absl::optional<int> expected_change,
     ManifestLocation install_source,
     Browser* browser,
     Extension::InitFromValueFlags creation_flags,
@@ -646,6 +648,8 @@
   ExtensionRegistry* registry = extension_registry();
   size_t num_before = registry->enabled_extensions().size();
 
+  scoped_refptr<CrxInstaller> installer;
+  absl::optional<CrxInstallError> install_error;
   {
     std::unique_ptr<ScopedTestDialogAutoConfirm> prompt_auto_confirm;
     if (ui_type == INSTALL_UI_TYPE_CANCEL) {
@@ -673,8 +677,8 @@
       install_ui = std::make_unique<ExtensionInstallPrompt>(
           browser->tab_strip_model()->GetActiveWebContents());
     }
-    scoped_refptr<CrxInstaller> installer(
-        CrxInstaller::Create(extension_service(), std::move(install_ui)));
+    installer =
+        CrxInstaller::Create(extension_service(), std::move(install_ui));
     installer->set_expected_id(id);
     installer->set_creation_flags(creation_flags);
     installer->set_install_source(install_source);
@@ -685,37 +689,52 @@
           CrxInstaller::OffStoreInstallAllowedInTest);
     }
 
-    observer_->Watch(NOTIFICATION_CRX_INSTALLER_DONE,
-                     content::Source<CrxInstaller>(installer.get()));
+    base::test::TestFuture<absl::optional<CrxInstallError>>
+        installer_done_future;
+    installer->AddInstallerCallback(
+        installer_done_future
+            .GetCallback<const absl::optional<CrxInstallError>&>());
 
     installer->InstallCrx(crx_path);
 
-    observer_->Wait();
+    install_error = installer_done_future.Get();
   }
 
-  size_t num_after = registry->enabled_extensions().size();
-  EXPECT_EQ(num_before + expected_change, num_after);
-  if (num_before + expected_change != num_after) {
-    VLOG(1) << "Num extensions before: " << base::NumberToString(num_before)
-            << " num after: " << base::NumberToString(num_after)
-            << " Installed extensions follow:";
+  if (expected_change.has_value()) {
+    size_t num_after = registry->enabled_extensions().size();
+    EXPECT_EQ(num_before + expected_change.value(), num_after);
+    if (num_before + expected_change.value() != num_after) {
+      VLOG(1) << "Num extensions before: " << base::NumberToString(num_before)
+              << " num after: " << base::NumberToString(num_after)
+              << " Installed extensions follow:";
 
-    for (const scoped_refptr<const Extension>& extension :
-         registry->enabled_extensions())
-      VLOG(1) << "  " << extension->id();
+      for (const scoped_refptr<const Extension>& extension :
+           registry->enabled_extensions()) {
+        VLOG(1) << "  " << extension->id();
+      }
 
-    VLOG(1) << "Errors follow:";
-    const std::vector<std::u16string>* errors =
-        LoadErrorReporter::GetInstance()->GetErrors();
-    for (auto iter = errors->begin(); iter != errors->end(); ++iter)
-      VLOG(1) << *iter;
+      VLOG(1) << "Errors follow:";
+      const std::vector<std::u16string>* errors =
+          LoadErrorReporter::GetInstance()->GetErrors();
+      for (const auto& error : *errors) {
+        VLOG(1) << error;
+      }
 
+      return nullptr;
+    }
+  }
+
+  if (!observer_->WaitForExtensionViewsToLoad()) {
     return nullptr;
   }
 
-  if (!observer_->WaitForExtensionViewsToLoad())
+  if (install_error) {
     return nullptr;
-  return registry->GetExtensionById(last_loaded_extension_id(),
+  }
+
+  // Even though we can already get the Extension from the CrxInstaller,
+  // ensure it's also in the list of enabled extensions.
+  return registry->GetExtensionById(installer->extension()->id(),
                                     ExtensionRegistry::ENABLED);
 }
 
diff --git a/chrome/browser/extensions/extension_browsertest.h b/chrome/browser/extensions/extension_browsertest.h
index 4235fc3..92aaa11 100644
--- a/chrome/browser/extensions/extension_browsertest.h
+++ b/chrome/browser/extensions/extension_browsertest.h
@@ -34,6 +34,7 @@
 #include "extensions/common/features/feature_channel.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/mojom/manifest.mojom-shared.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 class Profile;
 
@@ -201,21 +202,18 @@
   // 1 means you expect a new install, 0 means you expect an upgrade, -1 means
   // you expect a failed upgrade.
   const Extension* InstallExtension(const base::FilePath& path,
-                                    int expected_change) {
-    return InstallOrUpdateExtension(
-        std::string(), path, INSTALL_UI_TYPE_NONE, expected_change);
+                                    absl::optional<int> expected_change) {
+    return InstallOrUpdateExtension(std::string(), path, INSTALL_UI_TYPE_NONE,
+                                    std::move(expected_change));
   }
 
   // Same as above, but an install source other than
   // mojom::ManifestLocation::kInternal can be specified.
   const Extension* InstallExtension(const base::FilePath& path,
-                                    int expected_change,
+                                    absl::optional<int> expected_change,
                                     mojom::ManifestLocation install_source) {
-    return InstallOrUpdateExtension(std::string(),
-                                    path,
-                                    INSTALL_UI_TYPE_NONE,
-                                    expected_change,
-                                    install_source);
+    return InstallOrUpdateExtension(std::string(), path, INSTALL_UI_TYPE_NONE,
+                                    std::move(expected_change), install_source);
   }
 
   // Installs an extension and grants it the permissions it requests.
@@ -223,47 +221,50 @@
   // the time - otherwise the extension installs in a disabled state.
   const Extension* InstallExtensionWithPermissionsGranted(
       const base::FilePath& file_path,
-      int expected_change) {
+      absl::optional<int> expected_change) {
     return InstallOrUpdateExtension(
-        std::string(), file_path, INSTALL_UI_TYPE_NONE, expected_change,
-        mojom::ManifestLocation::kInternal, browser(), Extension::NO_FLAGS,
-        false, true);
+        std::string(), file_path, INSTALL_UI_TYPE_NONE,
+        std::move(expected_change), mojom::ManifestLocation::kInternal,
+        browser(), Extension::NO_FLAGS, false, true);
   }
 
   // Installs extension as if it came from the Chrome Webstore.
-  const Extension* InstallExtensionFromWebstore(const base::FilePath& path,
-                                                int expected_change);
+  const Extension* InstallExtensionFromWebstore(
+      const base::FilePath& path,
+      absl::optional<int> expected_change);
 
   // Same as above but passes an id to CrxInstaller and does not allow a
   // privilege increase.
   const Extension* UpdateExtension(const std::string& id,
                                    const base::FilePath& path,
-                                   int expected_change) {
+                                   absl::optional<int> expected_change) {
     return InstallOrUpdateExtension(id, path, INSTALL_UI_TYPE_NONE,
-                                    expected_change);
+                                    std::move(expected_change));
   }
 
   // Same as UpdateExtension but waits for the extension to be idle first.
-  const Extension* UpdateExtensionWaitForIdle(const std::string& id,
-                                              const base::FilePath& path,
-                                              int expected_change);
+  const Extension* UpdateExtensionWaitForIdle(
+      const std::string& id,
+      const base::FilePath& path,
+      absl::optional<int> expected_change);
 
-  const Extension* InstallExtensionWithUIAutoConfirm(const base::FilePath& path,
-                                                     int expected_change,
-                                                     Browser* browser) {
+  const Extension* InstallExtensionWithUIAutoConfirm(
+      const base::FilePath& path,
+      absl::optional<int> expected_change,
+      Browser* browser) {
     return InstallOrUpdateExtension(
-        std::string(), path, INSTALL_UI_TYPE_AUTO_CONFIRM, expected_change,
-        browser, Extension::NO_FLAGS);
+        std::string(), path, INSTALL_UI_TYPE_AUTO_CONFIRM,
+        std::move(expected_change), browser, Extension::NO_FLAGS);
   }
 
   const Extension* InstallExtensionWithSourceAndFlags(
       const base::FilePath& path,
-      int expected_change,
+      absl::optional<int> expected_change,
       mojom::ManifestLocation install_source,
       Extension::InitFromValueFlags creation_flags) {
     return InstallOrUpdateExtension(std::string(), path, INSTALL_UI_TYPE_NONE,
-                                    expected_change, install_source, browser(),
-                                    creation_flags, false, false);
+                                    std::move(expected_change), install_source,
+                                    browser(), creation_flags, false, false);
   }
 
   // Begins install process but simulates a user cancel.
@@ -380,28 +381,29 @@
     INSTALL_UI_TYPE_AUTO_CONFIRM,
   };
 
-  const Extension* InstallOrUpdateExtension(const std::string& id,
-                                            const base::FilePath& path,
-                                            InstallUIType ui_type,
-                                            int expected_change);
   const Extension* InstallOrUpdateExtension(
       const std::string& id,
       const base::FilePath& path,
       InstallUIType ui_type,
-      int expected_change,
+      absl::optional<int> expected_change);
+  const Extension* InstallOrUpdateExtension(
+      const std::string& id,
+      const base::FilePath& path,
+      InstallUIType ui_type,
+      absl::optional<int> expected_change,
       Browser* browser,
       Extension::InitFromValueFlags creation_flags);
   const Extension* InstallOrUpdateExtension(
       const std::string& id,
       const base::FilePath& path,
       InstallUIType ui_type,
-      int expected_change,
+      absl::optional<int> expected_change,
       mojom::ManifestLocation install_source);
   const Extension* InstallOrUpdateExtension(
       const std::string& id,
       const base::FilePath& path,
       InstallUIType ui_type,
-      int expected_change,
+      absl::optional<int> expected_change,
       mojom::ManifestLocation install_source,
       Browser* browser,
       Extension::InitFromValueFlags creation_flags,
diff --git a/chrome/browser/extensions/extension_function_test_utils.cc b/chrome/browser/extensions/extension_function_test_utils.cc
index 1c6c889..d11ae01 100644
--- a/chrome/browser/extensions/extension_function_test_utils.cc
+++ b/chrome/browser/extensions/extension_function_test_utils.cc
@@ -51,7 +51,7 @@
 
 namespace extension_function_test_utils {
 
-absl::optional<base::Value> ParseList(const std::string& data) {
+absl::optional<base::Value::List> ParseList(const std::string& data) {
   absl::optional<base::Value> result = base::JSONReader::Read(data);
   if (!result) {
     ADD_FAILURE() << "Failed to parse: " << data;
@@ -59,7 +59,7 @@
   }
   if (!result->is_list())
     return absl::nullopt;
-  return result;
+  return std::move(*result).TakeList();
 }
 
 base::Value::Dict ToDictionary(std::unique_ptr<base::Value> val) {
@@ -149,11 +149,10 @@
                  const std::string& args,
                  Browser* browser,
                  extensions::api_test_utils::RunFunctionFlags flags) {
-  absl::optional<base::Value> maybe_parsed_args(ParseList(args));
+  absl::optional<base::Value::List> maybe_parsed_args(ParseList(args));
   EXPECT_TRUE(maybe_parsed_args)
       << "Could not parse extension function arguments: " << args;
-  return RunFunction(function, std::move(*maybe_parsed_args).TakeList(),
-                     browser, flags);
+  return RunFunction(function, std::move(*maybe_parsed_args), browser, flags);
 }
 
 bool RunFunction(ExtensionFunction* function,
diff --git a/chrome/browser/extensions/extension_function_test_utils.h b/chrome/browser/extensions/extension_function_test_utils.h
index 0796c2c..279bcbe 100644
--- a/chrome/browser/extensions/extension_function_test_utils.h
+++ b/chrome/browser/extensions/extension_function_test_utils.h
@@ -22,7 +22,7 @@
 namespace extension_function_test_utils {
 
 // Parse JSON and return as a list Value, or nullopt if invalid.
-absl::optional<base::Value> ParseList(const std::string& data);
+absl::optional<base::Value::List> ParseList(const std::string& data);
 
 // If |val| is a dictionary, return it as one, otherwise create an empty one.
 base::Value::Dict ToDictionary(std::unique_ptr<base::Value> val);
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc
index 4aa0ae7..2e786c29 100644
--- a/chrome/browser/extensions/extension_install_prompt.cc
+++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -54,8 +54,7 @@
 
 bool AllowWebstoreData(ExtensionInstallPrompt::PromptType type) {
   return type == ExtensionInstallPrompt::EXTERNAL_INSTALL_PROMPT ||
-         type == ExtensionInstallPrompt::REPAIR_PROMPT ||
-         type == ExtensionInstallPrompt::WEBSTORE_WIDGET_PROMPT;
+         type == ExtensionInstallPrompt::REPAIR_PROMPT;
 }
 
 // Returns bitmap for the default icon with size equal to the default icon's
@@ -121,7 +120,6 @@
   int id = -1;
   switch (type_) {
     case INSTALL_PROMPT:
-    case WEBSTORE_WIDGET_PROMPT:
       id = IDS_EXTENSION_INSTALL_PROMPT_TITLE;
       break;
     case RE_ENABLE_PROMPT:
@@ -188,7 +186,6 @@
   int id = -1;
   switch (type_) {
     case INSTALL_PROMPT:
-    case WEBSTORE_WIDGET_PROMPT:
 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
       if (requires_parent_permission())
         id = IDS_EXTENSION_INSTALL_PROMPT_ASK_A_PARENT_BUTTON;
@@ -263,7 +260,6 @@
   int id = -1;
   switch (type_) {
     case INSTALL_PROMPT:
-    case WEBSTORE_WIDGET_PROMPT:
     case RE_ENABLE_PROMPT:
     case REMOTE_INSTALL_PROMPT:
     case REPAIR_PROMPT:
@@ -293,7 +289,6 @@
   int id = -1;
   switch (type_) {
     case INSTALL_PROMPT:
-    case WEBSTORE_WIDGET_PROMPT:
     case EXTERNAL_INSTALL_PROMPT:
     case REMOTE_INSTALL_PROMPT:
     case DELEGATED_PERMISSIONS_PROMPT:
diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h
index 19a8885..ead7c23 100644
--- a/chrome/browser/extensions/extension_install_prompt.h
+++ b/chrome/browser/extensions/extension_install_prompt.h
@@ -65,7 +65,7 @@
     REPAIR_PROMPT = 9,
     DELEGATED_PERMISSIONS_PROMPT = 10,
     // DELEGATED_BUNDLE_PERMISSIONS_PROMPT_DEPRECATED = 11,
-    WEBSTORE_WIDGET_PROMPT = 12,
+    // WEBSTORE_WIDGET_PROMPT_DEPRECATED = 12,
     EXTENSION_REQUEST_PROMPT = 13,
     EXTENSION_PENDING_REQUEST_PROMPT = 14,
     NUM_PROMPT_TYPES = 15,
diff --git a/chrome/browser/extensions/external_pref_loader.h b/chrome/browser/extensions/external_pref_loader.h
index 8e288a23..fbd1158 100644
--- a/chrome/browser/extensions/external_pref_loader.h
+++ b/chrome/browser/extensions/external_pref_loader.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/extensions/external_loader.h"
diff --git a/chrome/browser/extensions/external_pref_loader_unittest.cc b/chrome/browser/extensions/external_pref_loader_unittest.cc
index 659d61a..9307b8c 100644
--- a/chrome/browser/extensions/external_pref_loader_unittest.cc
+++ b/chrome/browser/extensions/external_pref_loader_unittest.cc
@@ -127,8 +127,7 @@
 // PrioritySyncReadyWaiter::OnIsSyncingChanged().
 
 // Tests that we fire pref reading correctly after priority sync state
-// is resolved by ExternalPrefLoader. This test checks that the flow works
-// regardless of the state of SyncSettingsCategorization.
+// is resolved by ExternalPrefLoader.
 TEST_F(ExternalPrefLoaderTest, PrefReadInitiatesCorrectly) {
   base::RunLoop run_loop;
   scoped_refptr<ExternalPrefLoader> loader(
diff --git a/chrome/browser/extensions/external_registry_loader_win.h b/chrome/browser/extensions/external_registry_loader_win.h
index 34ea712..87489c5e 100644
--- a/chrome/browser/extensions/external_registry_loader_win.h
+++ b/chrome/browser/extensions/external_registry_loader_win.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_EXTENSIONS_EXTERNAL_REGISTRY_LOADER_WIN_H_
 #define CHROME_BROWSER_EXTENSIONS_EXTERNAL_REGISTRY_LOADER_WIN_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "base/win/registry.h"
 #include "chrome/browser/extensions/external_loader.h"
diff --git a/chrome/browser/extensions/lazy_background_page_apitest.cc b/chrome/browser/extensions/lazy_background_page_apitest.cc
index 76e96a4..ec668742 100644
--- a/chrome/browser/extensions/lazy_background_page_apitest.cc
+++ b/chrome/browser/extensions/lazy_background_page_apitest.cc
@@ -13,6 +13,7 @@
 #include "base/scoped_observation.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
diff --git a/chrome/browser/extensions/test_blocklist_state_fetcher.cc b/chrome/browser/extensions/test_blocklist_state_fetcher.cc
index 504f449c..8327e74 100644
--- a/chrome/browser/extensions/test_blocklist_state_fetcher.cc
+++ b/chrome/browser/extensions/test_blocklist_state_fetcher.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/extensions/test_blocklist_state_fetcher.h"
 
 #include "base/containers/contains.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/safe_browsing/core/browser/db/v4_test_util.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/chrome/browser/extensions/test_extension_prefs.cc b/chrome/browser/extensions/test_extension_prefs.cc
index 7573d3e..7cdaf0d 100644
--- a/chrome/browser/extensions/test_extension_prefs.cc
+++ b/chrome/browser/extensions/test_extension_prefs.cc
@@ -13,7 +13,6 @@
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/chrome/browser/extensions/webstore_install_with_prompt.cc b/chrome/browser/extensions/webstore_install_with_prompt.cc
index 262df1b..8a032ec 100644
--- a/chrome/browser/extensions/webstore_install_with_prompt.cc
+++ b/chrome/browser/extensions/webstore_install_with_prompt.cc
@@ -73,10 +73,6 @@
   return show_post_install_ui_;
 }
 
-bool WebstoreInstallWithPrompt::ShouldShowAppInstalledBubble() const {
-  return false;
-}
-
 WebContents* WebstoreInstallWithPrompt::GetWebContents() const {
   return dummy_web_contents_.get();
 }
diff --git a/chrome/browser/extensions/webstore_install_with_prompt.h b/chrome/browser/extensions/webstore_install_with_prompt.h
index a9fd2c1..0799c74 100644
--- a/chrome/browser/extensions/webstore_install_with_prompt.h
+++ b/chrome/browser/extensions/webstore_install_with_prompt.h
@@ -56,7 +56,6 @@
   // extensions::WebstoreStandaloneInstaller overrides:
   bool CheckRequestorAlive() const override;
   bool ShouldShowPostInstallUI() const override;
-  bool ShouldShowAppInstalledBubble() const override;
   content::WebContents* GetWebContents() const override;
   std::unique_ptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
       const override;
diff --git a/chrome/browser/extensions/webstore_reinstaller.cc b/chrome/browser/extensions/webstore_reinstaller.cc
index 21a382bf..f3edde3 100644
--- a/chrome/browser/extensions/webstore_reinstaller.cc
+++ b/chrome/browser/extensions/webstore_reinstaller.cc
@@ -61,10 +61,6 @@
   return false;
 }
 
-bool WebstoreReinstaller::ShouldShowAppInstalledBubble() const {
-  return false;
-}
-
 content::WebContents* WebstoreReinstaller::GetWebContents() const {
   return web_contents();
 }
diff --git a/chrome/browser/extensions/webstore_reinstaller.h b/chrome/browser/extensions/webstore_reinstaller.h
index dbe8cc5f..d44b3e59 100644
--- a/chrome/browser/extensions/webstore_reinstaller.h
+++ b/chrome/browser/extensions/webstore_reinstaller.h
@@ -31,7 +31,6 @@
   // WebstoreStandaloneInstaller:
   bool CheckRequestorAlive() const override;
   bool ShouldShowPostInstallUI() const override;
-  bool ShouldShowAppInstalledBubble() const override;
   content::WebContents* GetWebContents() const override;
   std::unique_ptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
       const override;
diff --git a/chrome/browser/extensions/webstore_standalone_installer.cc b/chrome/browser/extensions/webstore_standalone_installer.cc
index c09cf045..37f3351e 100644
--- a/chrome/browser/extensions/webstore_standalone_installer.cc
+++ b/chrome/browser/extensions/webstore_standalone_installer.cc
@@ -170,7 +170,6 @@
       WebstoreInstaller::Approval::CreateWithNoInstallPrompt(
           profile_, id_, manifest_->Clone(), true));
   approval->skip_post_install_ui = !ShouldShowPostInstallUI();
-  approval->use_app_installed_bubble = ShouldShowAppInstalledBubble();
   approval->installing_icon = gfx::ImageSkia::CreateFrom1xBitmap(icon_);
   return approval;
 }
diff --git a/chrome/browser/extensions/webstore_standalone_installer.h b/chrome/browser/extensions/webstore_standalone_installer.h
index aa691583..041b777 100644
--- a/chrome/browser/extensions/webstore_standalone_installer.h
+++ b/chrome/browser/extensions/webstore_standalone_installer.h
@@ -101,9 +101,6 @@
   // extension's icon?
   virtual bool ShouldShowPostInstallUI() const = 0;
 
-  // Should pop up an "App installed" bubble after installation?
-  virtual bool ShouldShowAppInstalledBubble() const = 0;
-
   // In the very least this should return a dummy WebContents (required
   // by some calls even when no prompt or other UI is shown). A non-dummy
   // WebContents is required if the prompt returned by CreateInstallPromt()
diff --git a/chrome/browser/fast_checkout/fast_checkout_client.h b/chrome/browser/fast_checkout/fast_checkout_client.h
index 857348e..2762ea2 100644
--- a/chrome/browser/fast_checkout/fast_checkout_client.h
+++ b/chrome/browser/fast_checkout/fast_checkout_client.h
@@ -5,12 +5,12 @@
 #ifndef CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_CLIENT_H_
 #define CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_CLIENT_H_
 
-#include "base/memory/weak_ptr.h"
-
 class GURL;
 
 namespace autofill {
-class FastCheckoutDelegate;
+class AutofillDriver;
+struct FormData;
+struct FormFieldData;
 }  // namespace autofill
 
 namespace content {
@@ -28,15 +28,21 @@
       content::WebContents* web_contents);
 
   // Starts the fast checkout run. Returns true if the run was successful.
-  virtual bool Start(base::WeakPtr<autofill::FastCheckoutDelegate> delegate,
-                     const GURL& url) = 0;
+  virtual bool TryToStart(const GURL& url,
+                          const autofill::FormData& form,
+                          const autofill::FormFieldData& field,
+                          autofill::AutofillDriver* autofill_driver) = 0;
 
-  // Stops the fast checkout run.
-  virtual void Stop() = 0;
+  // Stops the fast checkout run. Resets internal UI state to `kNotShownYet` if
+  // `allow_further_runs == true`.
+  virtual void Stop(bool allow_further_runs) = 0;
 
   // Returns true if a fast checkout run is ongoing.
   virtual bool IsRunning() const = 0;
 
+  // Returns true if the bottomsheet is currently showing to the user.
+  virtual bool IsShowing() const = 0;
+
  protected:
   FastCheckoutClient() = default;
   virtual ~FastCheckoutClient() = default;
diff --git a/chrome/browser/fast_checkout/fast_checkout_client_impl.cc b/chrome/browser/fast_checkout/fast_checkout_client_impl.cc
index 45618150..5adfafe2 100644
--- a/chrome/browser/fast_checkout/fast_checkout_client_impl.cc
+++ b/chrome/browser/fast_checkout/fast_checkout_client_impl.cc
@@ -4,69 +4,30 @@
 
 #include "chrome/browser/fast_checkout/fast_checkout_client_impl.h"
 
-#include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
-#include "chrome/browser/autofill/personal_data_manager_factory.h"
-#include "chrome/browser/fast_checkout/fast_checkout_features.h"
-#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.h"
+#include "chrome/browser/fast_checkout/fast_checkout_enums.h"
+#include "chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl.h"
+#include "chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl.h"
+#include "chrome/browser/ui/autofill/chrome_autofill_client.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
-#include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
-#include "components/autofill/core/browser/fast_checkout_delegate.h"
-#include "components/autofill/core/browser/geo/autofill_country.h"
-#include "components/autofill/core/browser/logging/log_manager.h"
-#include "components/autofill/core/common/autofill_internals/log_message.h"
-#include "components/autofill/core/common/autofill_internals/logging_scope.h"
-#include "components/autofill/core/common/logging/log_macros.h"
 #include "content/public/browser/web_contents_user_data.h"
 #include "url/gurl.h"
 
-namespace {
-bool IsCompleteAddressProfile(const autofill::AutofillProfile* profile,
-                              const std::string& app_locale) {
-  std::string country_code =
-      base::UTF16ToASCII(profile->GetRawInfo(autofill::ADDRESS_HOME_COUNTRY));
-  if (country_code.empty()) {
-    return false;
-  }
-
-  autofill::AutofillCountry country(country_code, app_locale);
-  return !profile->GetInfo(autofill::NAME_FULL, app_locale).empty() &&
-         !profile->GetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS).empty() &&
-         (!country.requires_zip() ||
-          profile->HasRawInfo(autofill::ADDRESS_HOME_ZIP)) &&
-         !profile->GetRawInfo(autofill::EMAIL_ADDRESS).empty() &&
-         !profile->GetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER).empty();
-}
-
-std::vector<autofill::CreditCard*> GetValidCreditCards(
-    autofill::PersonalDataManager* pdm) {
-  // TODO(crbug.com/1334642): Check on autofill_client whether server credit
-  // cards are supported.
-  std::vector<autofill::CreditCard*> cards = pdm->GetCreditCardsToSuggest(true);
-  base::EraseIf(cards,
-                base::not_fn(&autofill::CreditCard::IsCompleteValidCard));
-  return cards;
-}
-
-std::vector<autofill::AutofillProfile*> GetValidAddressProfiles(
-    autofill::PersonalDataManager* pdm) {
-  // Trigger only if there is at least 1 complete address profile on file.
-  std::vector<autofill::AutofillProfile*> profiles =
-      pdm->GetProfilesToSuggest();
-
-  base::EraseIf(profiles, [&pdm](const autofill::AutofillProfile* profile) {
-    return !IsCompleteAddressProfile(profile, pdm->app_locale());
-  });
-  return profiles;
-}
-
-}  // namespace
-
 FastCheckoutClientImpl::FastCheckoutClientImpl(
     content::WebContents* web_contents)
-    : content::WebContentsUserData<FastCheckoutClientImpl>(*web_contents) {}
+    : content::WebContentsUserData<FastCheckoutClientImpl>(*web_contents),
+      autofill_client_(
+          autofill::ChromeAutofillClient::FromWebContents(web_contents)),
+      personal_data_helper_(
+          std::make_unique<FastCheckoutPersonalDataHelperImpl>(web_contents)),
+      trigger_validator_(std::make_unique<FastCheckoutTriggerValidatorImpl>(
+          autofill_client_,
+          FastCheckoutCapabilitiesFetcherFactory::GetForBrowserContext(
+              web_contents->GetBrowserContext()),
+          personal_data_helper_.get())) {}
 
 FastCheckoutClientImpl::~FastCheckoutClientImpl() {
   if (is_running_) {
@@ -75,110 +36,66 @@
   }
 }
 
-bool FastCheckoutClientImpl::Start(
-    base::WeakPtr<autofill::FastCheckoutDelegate> delegate,
-    const GURL& url) {
-  if (!ShouldRun()) {
-    LOG_AF(GetAutofillLogManager()) << autofill::LoggingScope::kFastCheckout
-                                    << autofill::LogMessage::kFastCheckout
-                                    << "not triggered because "
-                                       "`ShouldRun()` returned `false`.";
+bool FastCheckoutClientImpl::TryToStart(
+    const GURL& url,
+    const autofill::FormData& form,
+    const autofill::FormFieldData& field,
+    autofill::AutofillDriver* autofill_driver) {
+  autofill::ContentAutofillDriver* content_autofill_driver =
+      static_cast<autofill::ContentAutofillDriver*>(autofill_driver);
+
+  if (!content_autofill_driver) {
     return false;
   }
 
-  is_running_ = true;
+  if (!trigger_validator_->ShouldRun(form, field, fast_checkout_ui_state_,
+                                     is_running_, content_autofill_driver)) {
+    return false;
+  }
+
+  autofill_driver_ = content_autofill_driver;
   url_ = url;
-  delegate_ = std::move(delegate);
-  personal_data_manager_observation_.Observe(GetPersonalDataManager());
+  is_running_ = true;
+  personal_data_manager_observation_.Observe(
+      personal_data_helper_->GetPersonalDataManager());
 
   SetShouldSuppressKeyboard(true);
 
   fast_checkout_controller_ = CreateFastCheckoutController();
   ShowFastCheckoutUI();
 
-  return true;
-}
-
-bool FastCheckoutClientImpl::ShouldRun() {
-  if (!base::FeatureList::IsEnabled(features::kFastCheckout)) {
-    LOG_AF(GetAutofillLogManager())
-        << autofill::LoggingScope::kFastCheckout
-        << autofill::LogMessage::kFastCheckout
-        << "not triggered because FastCheckout flag is disabled.";
-    return false;
-  }
-
-  if (is_running_) {
-    LOG_AF(GetAutofillLogManager())
-        << autofill::LoggingScope::kFastCheckout
-        << autofill::LogMessage::kFastCheckout
-        << "not triggered because Fast Checkout is already running.";
-    return false;
-  }
-
-  autofill::PersonalDataManager* pdm = GetPersonalDataManager();
-  DCHECK(pdm);
-  // Trigger only if there is at least 1 valid Autofill profile on file.
-  if (GetValidAddressProfiles(pdm).empty()) {
-    base::UmaHistogramEnumeration(
-        autofill::kUmaKeyFastCheckoutTriggerOutcome,
-        autofill::FastCheckoutTriggerOutcome::kFailureNoValidAutofillProfile);
-    LOG_AF(GetAutofillLogManager())
-        << autofill::LoggingScope::kFastCheckout
-        << autofill::LogMessage::kFastCheckout
-        << "not triggered because the client does not have at least one valid "
-           "Autofill profile stored.";
-    return false;
-  }
-  // Trigger only if there is at least 1 complete valid credit card on file.
-  if (GetValidCreditCards(pdm).empty()) {
-    base::UmaHistogramEnumeration(
-        autofill::kUmaKeyFastCheckoutTriggerOutcome,
-        autofill::FastCheckoutTriggerOutcome::kFailureNoValidCreditCard);
-    LOG_AF(GetAutofillLogManager())
-        << autofill::LoggingScope::kFastCheckout
-        << autofill::LogMessage::kFastCheckout
-        << "not triggered because the client does not have at least one "
-           "valid Autofill credit card stored.";
-    return false;
-  }
+  fast_checkout_ui_state_ = FastCheckoutUIState::kIsShowing;
+  autofill_client_->HideAutofillPopup(
+      autofill::PopupHidingReason::kOverlappingWithFastCheckoutSurface);
 
   return true;
 }
 
 void FastCheckoutClientImpl::ShowFastCheckoutUI() {
-  autofill::PersonalDataManager* pdm = GetPersonalDataManager();
-
-  std::vector<autofill::AutofillProfile*> profiles_to_suggest =
-      pdm->GetProfilesToSuggest();
-
-  std::vector<autofill::CreditCard*> cards_to_suggest =
-      pdm->GetCreditCardsToSuggest(true);
-  // Do not offer cards with empty number.
-  base::EraseIf(cards_to_suggest, [](const autofill::CreditCard* card) {
-    return card->GetRawInfo(autofill::CREDIT_CARD_NUMBER).empty();
-  });
-
-  fast_checkout_controller_->Show(profiles_to_suggest, cards_to_suggest);
+  fast_checkout_controller_->Show(
+      personal_data_helper_->GetProfilesToSuggest(),
+      personal_data_helper_->GetCreditCardsToSuggest(
+          autofill_client_->AreServerCardsSupported()));
 }
 
 void FastCheckoutClientImpl::SetShouldSuppressKeyboard(bool suppress) {
-  if (delegate_) {
-    autofill::ContentAutofillDriver* driver =
-        static_cast<autofill::ContentAutofillDriver*>(delegate_->GetDriver());
-    if (driver) {
-      driver->SetShouldSuppressKeyboard(suppress);
-    }
+  if (autofill_driver_) {
+    autofill_driver_->SetShouldSuppressKeyboard(suppress);
   }
 }
 
 void FastCheckoutClientImpl::OnRunComplete() {
   // TODO(crbug.com/1334642): Handle result (e.g. report metrics).
   OnHidden();
-  Stop();
+  Stop(/*allow_further_runs=*/false);
 }
 
-void FastCheckoutClientImpl::Stop() {
+void FastCheckoutClientImpl::Stop(bool allow_further_runs) {
+  if (allow_further_runs) {
+    fast_checkout_ui_state_ = FastCheckoutUIState::kNotShownYet;
+  } else if (IsShowing()) {
+    fast_checkout_ui_state_ = FastCheckoutUIState::kWasShown;
+  }
   fast_checkout_controller_.reset();
   is_running_ = false;
   personal_data_manager_observation_.Reset();
@@ -187,6 +104,17 @@
   // e.g. due to a failed onboarding. This ensures that keyboard suppression
   // stops.
   SetShouldSuppressKeyboard(false);
+
+  // There is one `ContentAutofillDriver` instance per frame but only one
+  // instance of this class per `WebContents`. Reset `autofill_driver_` here to
+  // avoid the issue of having a non-null, invalid pointer. This method is
+  // (also) called from `~BrowserAutofillManager()` which is owned by
+  // `ContentAutofillDriver`.
+  autofill_driver_ = nullptr;
+}
+
+bool FastCheckoutClientImpl::IsShowing() const {
+  return fast_checkout_ui_state_ == FastCheckoutUIState::kIsShowing;
 }
 
 bool FastCheckoutClientImpl::IsRunning() const {
@@ -199,9 +127,7 @@
 }
 
 void FastCheckoutClientImpl::OnHidden() {
-  if (delegate_) {
-    delegate_->OnFastCheckoutUIHidden();
-  }
+  fast_checkout_ui_state_ = FastCheckoutUIState::kWasShown;
   SetShouldSuppressKeyboard(false);
 }
 
@@ -214,42 +140,19 @@
 
 void FastCheckoutClientImpl::OnDismiss() {
   OnHidden();
-  Stop();
-}
-
-autofill::PersonalDataManager*
-FastCheckoutClientImpl::GetPersonalDataManager() {
-  Profile* profile =
-      Profile::FromBrowserContext(GetWebContents().GetBrowserContext());
-  return autofill::PersonalDataManagerFactory::GetForProfile(
-      profile->GetOriginalProfile());
+  Stop(/*allow_further_runs=*/false);
 }
 
 void FastCheckoutClientImpl::OnPersonalDataChanged() {
-  if (!delegate_ || !delegate_->IsShowingFastCheckoutUI()) {
+  if (!IsShowing()) {
     return;
   }
 
-  autofill::PersonalDataManager* pdm = GetPersonalDataManager();
-  if (GetValidCreditCards(pdm).empty() ||
-      GetValidAddressProfiles(pdm).empty()) {
-    Stop();
+  if (!trigger_validator_->HasValidPersonalData()) {
+    Stop(/*allow_further_runs=*/false);
   } else {
     ShowFastCheckoutUI();
   }
 }
 
-autofill::LogManager* FastCheckoutClientImpl::GetAutofillLogManager() {
-  if (!delegate_)
-    return nullptr;
-
-  autofill::ContentAutofillDriver* driver =
-      static_cast<autofill::ContentAutofillDriver*>(delegate_->GetDriver());
-
-  if (!driver)
-    return nullptr;
-
-  return driver->autofill_manager()->client()->GetLogManager();
-}
-
 WEB_CONTENTS_USER_DATA_KEY_IMPL(FastCheckoutClientImpl);
diff --git a/chrome/browser/fast_checkout/fast_checkout_client_impl.h b/chrome/browser/fast_checkout/fast_checkout_client_impl.h
index 10f2fc14..ed0d56ce 100644
--- a/chrome/browser/fast_checkout/fast_checkout_client_impl.h
+++ b/chrome/browser/fast_checkout/fast_checkout_client_impl.h
@@ -7,7 +7,11 @@
 
 #include "base/scoped_observation.h"
 #include "chrome/browser/fast_checkout/fast_checkout_client.h"
+#include "chrome/browser/fast_checkout/fast_checkout_enums.h"
+#include "chrome/browser/fast_checkout/fast_checkout_personal_data_helper.h"
+#include "chrome/browser/fast_checkout/fast_checkout_trigger_validator.h"
 #include "chrome/browser/ui/fast_checkout/fast_checkout_controller_impl.h"
+#include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_user_data.h"
@@ -20,22 +24,6 @@
 constexpr char kUmaKeyFastCheckoutRunOutcome[] =
     "Autofill.FastCheckout.RunOutcome";
 
-// Enum defining possible outcomes of a Fast Checkout run. Must be kept in sync
-// with enums.xml.
-// These values are persisted to logs. Entries should not be renumbered and
-// numeric values should never be reused.
-enum class FastCheckoutRunOutcome {
-  // Script did not run because the user has declined onboarding.
-  kOnboardingDeclined = 0,
-  // The script run did not complete or never started.
-  kIncompleteRun = 1,
-  // Script run failed.
-  kFail = 2,
-  // Script ran successfully.
-  kSuccess = 3,
-  kMaxValue = kSuccess
-};
-
 class FastCheckoutClientImpl
     : public content::WebContentsUserData<FastCheckoutClientImpl>,
       public FastCheckoutClient,
@@ -48,10 +36,13 @@
   FastCheckoutClientImpl& operator=(const FastCheckoutClientImpl&) = delete;
 
   // FastCheckoutClient:
-  bool Start(base::WeakPtr<autofill::FastCheckoutDelegate> delegate,
-             const GURL& url) override;
-  void Stop() override;
+  bool TryToStart(const GURL& url,
+                  const autofill::FormData& form,
+                  const autofill::FormFieldData& field,
+                  autofill::AutofillDriver* autofill_driver) override;
+  void Stop(bool allow_further_runs) override;
   bool IsRunning() const override;
+  bool IsShowing() const override;
 
   // FastCheckoutControllerImpl::Delegate:
   void OnOptionsSelected(
@@ -59,6 +50,21 @@
       std::unique_ptr<autofill::CreditCard> selected_credit_card) override;
   void OnDismiss() override;
 
+#if defined(UNIT_TEST)
+  void set_trigger_validator_for_test(
+      std::unique_ptr<FastCheckoutTriggerValidator> trigger_validator) {
+    trigger_validator_ = std::move(trigger_validator);
+  }
+
+  void set_autofill_client_for_test(autofill::AutofillClient* autofill_client) {
+    autofill_client_ = autofill_client;
+  }
+
+  autofill::ContentAutofillDriver* get_autofill_driver_for_test() {
+    return autofill_driver_;
+  }
+#endif
+
  protected:
   explicit FastCheckoutClientImpl(content::WebContents* web_contents);
 
@@ -72,9 +78,6 @@
   // From autofill::PersonalDataManagerObserver.
   void OnPersonalDataChanged() override;
 
-  // Returns the current active personal data manager.
-  autofill::PersonalDataManager* GetPersonalDataManager();
-
   // Called whenever the surface gets hidden (regardless of the cause). Informs
   // the Delegate that the surface is now hidden.
   void OnHidden();
@@ -89,25 +92,42 @@
   // Turns keyboard suppression on and off.
   void SetShouldSuppressKeyboard(bool suppress);
 
-  // Returns true if fast checkout should run, e.g. if the feature is enabled.
-  bool ShouldRun();
-
   // Returns the Autofill log manager if available.
-  autofill::LogManager* GetAutofillLogManager();
+  autofill::LogManager* GetAutofillLogManager() const;
 
-  // Delegate for the surface being shown.
-  base::WeakPtr<autofill::FastCheckoutDelegate> delegate_;
+  // Logs `message` to chrome://autofill-internals.
+  void LogAutofillInternals(std::string message) const;
+
+  // The `ChromeAutofillClient` instanced attached to the same `WebContents`.
+  raw_ptr<autofill::AutofillClient> autofill_client_ = nullptr;
+
+  // The `ContentAutofillDriver` instance invoking the fast checkout run. This
+  // class generally outlives `autofill_driver_` so extra care needs to be taken
+  // with this pointer. It gets reset in `Stop(..)` which is (also) called from
+  // `~BrowserAutofillManager()` when the `ContentAutofillDriver` instance gets
+  // destroyed.
+  raw_ptr<autofill::ContentAutofillDriver> autofill_driver_ = nullptr;
 
   // Fast Checkout UI Controller. Responsible for showing the bottomsheet and
   // handling user selections.
   std::unique_ptr<FastCheckoutController> fast_checkout_controller_;
 
+  // Helper class providing information about address profiles and credit cards.
+  std::unique_ptr<FastCheckoutPersonalDataHelper> personal_data_helper_;
+
+  // Checks whether a run should be permitted or not.
+  std::unique_ptr<FastCheckoutTriggerValidator> trigger_validator_;
+
   // True if a run is ongoing; used to avoid multiple runs in parallel.
   bool is_running_ = false;
 
   // The url for which `Start()` was triggered.
   GURL url_;
 
+  // The current state of the bottomsheet.
+  FastCheckoutUIState fast_checkout_ui_state_ =
+      FastCheckoutUIState::kNotShownYet;
+
   base::ScopedObservation<autofill::PersonalDataManager,
                           autofill::PersonalDataManagerObserver>
       personal_data_manager_observation_{this};
diff --git a/chrome/browser/fast_checkout/fast_checkout_client_impl_unittest.cc b/chrome/browser/fast_checkout/fast_checkout_client_impl_unittest.cc
index 739603b..bffc1e1 100644
--- a/chrome/browser/fast_checkout/fast_checkout_client_impl_unittest.cc
+++ b/chrome/browser/fast_checkout/fast_checkout_client_impl_unittest.cc
@@ -16,13 +16,15 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/fast_checkout/fast_checkout_features.h"
+#include "chrome/browser/fast_checkout/fast_checkout_trigger_validator.h"
+#include "chrome/browser/ui/autofill/chrome_autofill_client.h"
 #include "chrome/browser/ui/fast_checkout/fast_checkout_controller.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/autofill/content/browser/content_autofill_router.h"
 #include "components/autofill/core/browser/autofill_driver.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
-#include "components/autofill/core/browser/fast_checkout_delegate.h"
 #include "components/autofill/core/browser/test_autofill_client.h"
 #include "components/autofill/core/browser/test_autofill_driver.h"
 #include "components/autofill/core/browser/test_browser_autofill_manager.h"
@@ -77,12 +79,6 @@
   return personal_data_manager;
 }
 
-struct SupportsConsentlessExecution {
-  bool client_supports_consentless = false;
-  bool script_supports_consentless = false;
-  bool run_consentless = false;
-};
-
 }  // namespace
 
 class MockFastCheckoutController : public FastCheckoutController {
@@ -116,32 +112,6 @@
   MOCK_METHOD(void, SetShouldSuppressKeyboard, (bool), (override));
 };
 
-class MockFastCheckoutDelegate : public autofill::FastCheckoutDelegate {
- public:
-  explicit MockFastCheckoutDelegate(MockAutofillDriver* driver)
-      : driver_(driver) {}
-  ~MockFastCheckoutDelegate() override = default;
-
-  MOCK_METHOD(bool,
-              TryToShowFastCheckout,
-              (const autofill::FormData&, const autofill::FormFieldData&),
-              (override));
-  MOCK_METHOD(bool, IsShowingFastCheckoutUI, (), (const, override));
-  MOCK_METHOD(void, HideFastCheckoutUI, (), (override));
-  MOCK_METHOD(void, OnFastCheckoutUIHidden, (), (override));
-  MOCK_METHOD(void, Reset, (), (override));
-
-  AutofillDriver* GetDriver() override { return driver_; }
-
-  base::WeakPtr<MockFastCheckoutDelegate> GetWeakPtr() {
-    return weak_factory_.GetWeakPtr();
-  }
-
- private:
-  const raw_ptr<MockAutofillDriver> driver_;
-  base::WeakPtrFactory<MockFastCheckoutDelegate> weak_factory_{this};
-};
-
 class TestFastCheckoutClientImpl : public FastCheckoutClientImpl {
  public:
   static TestFastCheckoutClientImpl* CreateForWebContents(
@@ -164,6 +134,27 @@
   std::unique_ptr<FastCheckoutController> fast_checkout_controller_;
 };
 
+class MockFastCheckoutTriggerValidator : public FastCheckoutTriggerValidator {
+ public:
+  MockFastCheckoutTriggerValidator() = default;
+  ~MockFastCheckoutTriggerValidator() override = default;
+
+  MOCK_METHOD(bool,
+              ShouldRun,
+              (const autofill::FormData&,
+               const autofill::FormFieldData&,
+               const FastCheckoutUIState,
+               const bool,
+               const autofill::ContentAutofillDriver*),
+              (const));
+  MOCK_METHOD(bool, HasValidPersonalData, (), (const));
+};
+
+class MockAutofillClient : public autofill::TestAutofillClient {
+ public:
+  MOCK_METHOD(void, HideAutofillPopup, (autofill::PopupHidingReason), ());
+};
+
 // static
 TestFastCheckoutClientImpl* TestFastCheckoutClientImpl::CreateForWebContents(
     content::WebContents* web_contents) {
@@ -180,6 +171,7 @@
     feature_list_.InitWithFeatures({features::kFastCheckout}, {});
   }
 
+ protected:
   void SetUp() override {
     content::RenderViewHostTestHarness::SetUp();
 
@@ -197,19 +189,24 @@
     test_client_->InjectFastCheckoutController(
         std::move(fast_checkout_controller));
 
-    // Prepare the FastCheckoutDelegate.
+    // Prepare the AutofillDriver.
     autofill_driver_ = std::make_unique<MockAutofillDriver>();
-    fast_checkout_delegate_ =
-        std::make_unique<MockFastCheckoutDelegate>(autofill_driver_.get());
 
     // Set AutofillManager on AutofillDriver.
-    auto test_autofill_client =
-        std::make_unique<autofill::TestAutofillClient>();
+    autofill_client_ = std::make_unique<MockAutofillClient>();
     auto test_browser_autofill_manager =
         std::make_unique<autofill::TestBrowserAutofillManager>(
-            autofill_driver_.get(), test_autofill_client.release());
+            autofill_driver_.get(), autofill_client_.get());
     autofill_driver_->set_autofill_manager(
         std::move(test_browser_autofill_manager));
+
+    auto trigger_validator =
+        std::make_unique<MockFastCheckoutTriggerValidator>();
+    validator_ = trigger_validator.get();
+    test_client_->set_trigger_validator_for_test(std::move(trigger_validator));
+    ON_CALL(*validator(), ShouldRun).WillByDefault(Return(true));
+
+    test_client_->set_autofill_client_for_test(autofill_client_.get());
   }
 
   autofill::TestPersonalDataManager* personal_data_manager() {
@@ -225,18 +222,19 @@
 
   MockAutofillDriver* autofill_driver() { return autofill_driver_.get(); }
 
-  base::WeakPtr<MockFastCheckoutDelegate> delegate() {
-    return fast_checkout_delegate_->GetWeakPtr();
-  }
+  MockFastCheckoutTriggerValidator* validator() { return validator_.get(); }
 
- protected:
+  MockAutofillClient* autofill_client() { return autofill_client_.get(); }
+
   base::test::ScopedFeatureList feature_list_;
   base::HistogramTester histogram_tester_;
 
+ private:
+  std::unique_ptr<MockAutofillClient> autofill_client_;
   raw_ptr<MockFastCheckoutController> fast_checkout_controller_;
   std::unique_ptr<MockAutofillDriver> autofill_driver_;
-  std::unique_ptr<MockFastCheckoutDelegate> fast_checkout_delegate_;
   raw_ptr<TestFastCheckoutClientImpl> test_client_;
+  raw_ptr<MockFastCheckoutTriggerValidator> validator_;
 };
 
 TEST_F(
@@ -249,147 +247,69 @@
   EXPECT_EQ(client, fast_checkout_client());
 }
 
-TEST_F(FastCheckoutClientImplTest, Start_FeatureDisabled_NoRuns) {
-  // Disable Fast Checkout feature
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatures({}, {features::kFastCheckout});
+TEST_F(FastCheckoutClientImplTest, Start_InvalidAutofillDriver_NoRun) {
+  // `FastCheckoutClient` is not running initially.
+  EXPECT_FALSE(fast_checkout_client()->IsRunning());
+
+  // Do not expect bottomsheet to show up.
+  EXPECT_CALL(*fast_checkout_controller(), Show).Times(0);
+  // Do not expect keyboard to be suppressed.
+  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard).Times(0);
+  // Do not expect Autofill popups to be hidden.
+  EXPECT_CALL(*autofill_client(), HideAutofillPopup).Times(0);
+
+  EXPECT_FALSE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(), nullptr));
+}
+
+TEST_F(FastCheckoutClientImplTest, Start_ShouldRunReturnsFalse_NoRun) {
+  ON_CALL(*validator(), ShouldRun).WillByDefault(Return(false));
 
   // `FastCheckoutClient` is not running initially.
   EXPECT_FALSE(fast_checkout_client()->IsRunning());
 
   // Do not expect bottomsheet to show up.
   EXPECT_CALL(*fast_checkout_controller(), Show).Times(0);
-
-  EXPECT_CALL(*delegate(), OnFastCheckoutUIHidden).Times(0);
+  // Do not expect keyboard to be suppressed.
   EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard).Times(0);
+  // Do not expect Autofill popups to be hidden.
+  EXPECT_CALL(*autofill_client(), HideAutofillPopup).Times(0);
 
-  // Starting is not successful which is also represented by the internal state.
-  EXPECT_FALSE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
+  EXPECT_FALSE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(),
+      autofill_driver()));
 }
 
-TEST_F(FastCheckoutClientImplTest, Start_FeatureEnabled_RunsSuccessfully) {
+TEST_F(FastCheckoutClientImplTest, Start_ShouldRunReturnsTrue_Run) {
   // `FastCheckoutClient` is not running initially.
   EXPECT_FALSE(fast_checkout_client()->IsRunning());
 
-  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard(true));
-
-  // Expect bottomsheet to show up.
+  // Expect the bottomsheet to show up.
   EXPECT_CALL(
       *fast_checkout_controller(),
       Show(UnorderedElementsAre(Pointee(kProfile1), Pointee(kProfile2),
                                 Pointee(kIncompleteProfile)),
            UnorderedElementsAre(Pointee(kCreditCard1), Pointee(kCreditCard2))));
+  // Expect keyboard suppression.
+  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard(true));
+  // Expect call to `HideAutofillPopup`.
+  EXPECT_CALL(
+      *autofill_client(),
+      HideAutofillPopup(
+          autofill::PopupHidingReason::kOverlappingWithFastCheckoutSurface));
 
-  // Starting the run successfully.
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
+  EXPECT_TRUE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(),
+      autofill_driver()));
 
-  // `FastCheckoutClient` is running.
   EXPECT_TRUE(fast_checkout_client()->IsRunning());
-
-  // Cannot start another run.
-  EXPECT_FALSE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-}
-
-TEST_F(FastCheckoutClientImplTest, Start_FailsIfNoProfilesOnFile) {
-  // `FastCheckoutClient` is not running initially.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  // Remove all profiles.
-  personal_data_manager()->ClearProfiles();
-  // Do not expect bottomsheet to show up.
-  EXPECT_CALL(*fast_checkout_controller(), Show).Times(0);
-
-  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard).Times(0);
-
-  // Starting the run unsuccessfully.
-  EXPECT_FALSE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-
-  // `FastCheckoutClient` is not running.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  histogram_tester_.ExpectUniqueSample(
-      autofill::kUmaKeyFastCheckoutTriggerOutcome,
-      autofill::FastCheckoutTriggerOutcome::kFailureNoValidAutofillProfile, 1u);
-}
-
-TEST_F(FastCheckoutClientImplTest, Start_FailsIfNoCompleteProfile) {
-  // `FastCheckoutClient` is not running initially.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  // Remove all Profiles.
-  personal_data_manager()->ClearProfiles();
-  personal_data_manager()->AddProfile(autofill::test::GetIncompleteProfile1());
-  personal_data_manager()->AddProfile(autofill::test::GetIncompleteProfile2());
-
-  // Do not expect bottomsheet to show up.
-  EXPECT_CALL(*fast_checkout_controller(), Show).Times(0);
-
-  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard).Times(0);
-
-  // Starting the run unsuccessfully.
-  EXPECT_FALSE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-
-  // `FastCheckoutClient` is not running.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  histogram_tester_.ExpectUniqueSample(
-      autofill::kUmaKeyFastCheckoutTriggerOutcome,
-      autofill::FastCheckoutTriggerOutcome::kFailureNoValidAutofillProfile, 1u);
-}
-
-TEST_F(FastCheckoutClientImplTest, Start_FailsIfNoCreditCardsOnFile) {
-  // `FastCheckoutClient` is not running initially.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  // Remove all credit cards.
-  personal_data_manager()->ClearCreditCards();
-
-  // Do not expect bottomsheet to show up.
-  EXPECT_CALL(*fast_checkout_controller(), Show).Times(0);
-
-  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard).Times(0);
-
-  // Starting the run unsuccessfully.
-  EXPECT_FALSE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-
-  // `FastCheckoutClient` is not running.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  histogram_tester_.ExpectUniqueSample(
-      autofill::kUmaKeyFastCheckoutTriggerOutcome,
-      autofill::FastCheckoutTriggerOutcome::kFailureNoValidCreditCard, 1u);
-}
-
-TEST_F(FastCheckoutClientImplTest, Start_FailsIfNoCompleteorValidCreditCard) {
-  // `FastCheckoutClient` is not running initially.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  // Remove all credit Cards.
-  personal_data_manager()->ClearCreditCards();
-  personal_data_manager()->AddCreditCard(
-      autofill::test::GetExpiredCreditCard());
-  personal_data_manager()->AddCreditCard(
-      autofill::test::GetIncompleteCreditCard());
-
-  // Do not expect bottomsheet to show up.
-  EXPECT_CALL(*fast_checkout_controller(), Show).Times(0);
-
-  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard).Times(0);
-
-  // Starting the run unsuccessfully.
-  EXPECT_FALSE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-
-  // `FastCheckoutClient` is not running.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  histogram_tester_.ExpectUniqueSample(
-      autofill::kUmaKeyFastCheckoutTriggerOutcome,
-      autofill::FastCheckoutTriggerOutcome::kFailureNoValidCreditCard, 1u);
+  EXPECT_TRUE(fast_checkout_client()->IsShowing());
 }
 
 TEST_F(FastCheckoutClientImplTest,
-       OnPersonalDataChanged_StopIfInvalidProfiles) {
+       OnPersonalDataChanged_StopIfInvalidPersonalData) {
+  ON_CALL(*validator(), HasValidPersonalData).WillByDefault(Return(false));
+
   // `FastCheckoutClient` is not running initially.
   EXPECT_FALSE(fast_checkout_client()->IsRunning());
 
@@ -397,14 +317,13 @@
   EXPECT_CALL(*fast_checkout_controller(), Show).Times(1);
 
   // Starting the run successfully.
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
+  EXPECT_TRUE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(),
+      autofill_driver()));
 
   // `FastCheckoutClient` is running.
   EXPECT_TRUE(fast_checkout_client()->IsRunning());
 
-  // Bottom sheet UI is showing.
-  ON_CALL(*delegate(), IsShowingFastCheckoutUI).WillByDefault(Return(true));
-
   // User removes all the profiles.
   personal_data_manager()->ClearProfiles();
   // User adds an incomplete profile only.
@@ -415,33 +334,9 @@
 }
 
 TEST_F(FastCheckoutClientImplTest,
-       OnPersonalDataChanged_StopIfInvalidCreditCards) {
-  // `FastCheckoutClient` is not running initially.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-
-  // Expect bottomsheet to show up.
-  EXPECT_CALL(*fast_checkout_controller(), Show).Times(1);
-
-  // Starting the run successfully.
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-
-  // `FastCheckoutClient` is running.
-  EXPECT_TRUE(fast_checkout_client()->IsRunning());
-
-  // Bottom sheet UI is showing.
-  ON_CALL(*delegate(), IsShowingFastCheckoutUI).WillByDefault(Return(true));
-
-  // User removes all valid credit cards and adds an incomplete one.
-  personal_data_manager()->ClearCreditCards();
-  personal_data_manager()->AddCreditCard(
-      autofill::test::GetIncompleteCreditCard());
-
-  // `FastCheckoutClient` is not running anymore.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
-}
-
-TEST_F(FastCheckoutClientImplTest,
        OnPersonalDataChanged_UpdatesTheUIWithNewData) {
+  ON_CALL(*validator(), HasValidPersonalData).WillByDefault(Return(true));
+
   // `FastCheckoutClient` is not running initially.
   EXPECT_FALSE(fast_checkout_client()->IsRunning());
 
@@ -452,14 +347,13 @@
            UnorderedElementsAre(Pointee(kCreditCard1), Pointee(kCreditCard2))));
 
   // Starting the run successfully.
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
+  EXPECT_TRUE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(),
+      autofill_driver()));
 
   // `FastCheckoutClient` is running.
   EXPECT_TRUE(fast_checkout_client()->IsRunning());
 
-  // Bottom sheet UI is showing.
-  ON_CALL(*delegate(), IsShowingFastCheckoutUI).WillByDefault(Return(true));
-
   // Expect bottomsheet to display the updated info.
   EXPECT_CALL(*fast_checkout_controller(),
               Show(UnorderedElementsAre(Pointee(kProfile1), Pointee(kProfile2),
@@ -477,14 +371,23 @@
 TEST_F(FastCheckoutClientImplTest, Stop_WhenIsRunning_CancelsTheRun) {
   // `FastCheckoutClient` is not running initially.
   EXPECT_FALSE(fast_checkout_client()->IsRunning());
+  EXPECT_FALSE(fast_checkout_client()->IsShowing());
 
   // Starting the run successfully.
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
+  EXPECT_TRUE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(),
+      autofill_driver()));
 
-  fast_checkout_client()->Stop();
+  // Fast Checkout is running and showing the bottomsheet.
+  EXPECT_TRUE(fast_checkout_client()->IsRunning());
+  EXPECT_TRUE(fast_checkout_client()->IsShowing());
+
+  // Stopping the run.
+  fast_checkout_client()->Stop(/*allow_further_runs=*/false);
 
   // `FastCheckoutClient` is not running anymore.
   EXPECT_FALSE(fast_checkout_client()->IsRunning());
+  EXPECT_FALSE(fast_checkout_client()->IsShowing());
 }
 
 TEST_F(FastCheckoutClientImplTest, OnDismiss_WhenIsRunning_CancelsTheRun) {
@@ -492,9 +395,9 @@
   EXPECT_FALSE(fast_checkout_client()->IsRunning());
 
   // Starting the run successfully.
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
-
-  EXPECT_CALL(*delegate(), OnFastCheckoutUIHidden);
+  EXPECT_TRUE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(),
+      autofill_driver()));
 
   fast_checkout_client()->OnDismiss();
 
@@ -503,29 +406,44 @@
 }
 
 TEST_F(FastCheckoutClientImplTest,
-       OnOptionsSelected_MovesSelectionsToExternalActionDelegate) {
-  // Starting the run successfully starts keyboard suppression.
-  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard(true));
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
+       DestroyingAutofillDriver_ResetsAutofillDriverPointer) {
+  // Set up Autofill instances so that `FastCheckoutClient::Stop(..)` will be
+  // called when `autofill_driver` is destroyed below. `Stop(..)` is supposed to
+  // reset `FastCheckoutClientImpl::autofill_driver_`.
+  // The expected stack trace is:
+  //   `FastCheckoutClientImpl::Stop(/*allow_further_runs=*/true)`
+  //   `ChromeAutofillClient::HideFastCheckout(/*allow_further_runs=*/true)`
+  //   `~BrowserAutofillManager()`
+  //   `autofill_driver.reset()`
+  autofill::ChromeAutofillClient::CreateForWebContents(web_contents());
+  auto autofill_router = std::make_unique<autofill::ContentAutofillRouter>();
+  auto autofill_driver = std::make_unique<autofill::ContentAutofillDriver>(
+      web_contents()->GetPrimaryMainFrame(), autofill_router.get());
+  auto browser_autofill_manager =
+      std::make_unique<autofill::BrowserAutofillManager>(
+          autofill_driver.get(),
+          autofill::ChromeAutofillClient::FromWebContents(web_contents()),
+          "en-US", autofill::AutofillManager::EnableDownloadManager(false));
+  autofill_driver->set_autofill_manager(std::move(browser_autofill_manager));
 
-  // Profile selection turns off keyboard suppression again.
-  EXPECT_CALL(*autofill_driver(), SetShouldSuppressKeyboard(false));
-  EXPECT_CALL(*delegate(), OnFastCheckoutUIHidden);
+  // `FastCheckoutClientImpl::autofill_driver_` is `nullptr` initially.
+  EXPECT_FALSE(fast_checkout_client()->get_autofill_driver_for_test());
 
-  // User selected profile and card in bottomsheet.
-  fast_checkout_client()->OnOptionsSelected(std::make_unique<AutofillProfile>(),
-                                            std::make_unique<CreditCard>());
-}
-
-TEST_F(FastCheckoutClientImplTest, RunsSuccessfullyIfDelegateIsDestroyed) {
-  // `FastCheckoutClient` is not running initially.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
   // Starting the run successfully.
-  EXPECT_TRUE(fast_checkout_client()->Start(delegate(), GURL(kUrl)));
+  EXPECT_TRUE(fast_checkout_client()->TryToStart(
+      GURL(kUrl), autofill::FormData(), autofill::FormFieldData(),
+      autofill_driver.get()));
 
-  fast_checkout_delegate_.reset();
-  fast_checkout_client()->OnDismiss();
+  // `FastCheckoutClientImpl::autofill_driver_` is not `nullptr` anymore.
+  EXPECT_TRUE(fast_checkout_client()->get_autofill_driver_for_test());
 
-  // `FastCheckoutClient` is not running anymore.
-  EXPECT_FALSE(fast_checkout_client()->IsRunning());
+  // Destroy `ContentAutofillDriver` instance, invoking
+  // `~BrowserAutofillManager()` and thus `FastCheckoutClient::Stop(..)`.
+  autofill_driver.reset();
+
+  // `FastCheckoutClientImpl::autofill_driver_` is `nullptr` again.
+  EXPECT_FALSE(fast_checkout_client()->get_autofill_driver_for_test());
+
+  // Expect this `Stop(..)` call to not crash the test.
+  fast_checkout_client()->Stop(/*allow_further_runs=*/true);
 }
diff --git a/chrome/browser/fast_checkout/fast_checkout_enums.h b/chrome/browser/fast_checkout/fast_checkout_enums.h
new file mode 100644
index 0000000..ab54537
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_enums.h
@@ -0,0 +1,59 @@
+// Copyright 2023 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_FAST_CHECKOUT_FAST_CHECKOUT_ENUMS_H_
+#define CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_ENUMS_H_
+
+// Enum that describes different outcomes to an attempt of triggering the
+// FastCheckout bottomsheet.
+// Do not remove or renumber entries in this enum. It needs to be kept in
+// sync with the enum of the same name in `enums.xml`.
+// The enum values are not exhaustive to avoid excessive metric collection.
+// Instead focus on the most interesting abort cases and only deal with cases
+// in which the FastCheckout feature is enabled and a script exists for the
+// form in question.
+enum class FastCheckoutTriggerOutcome {
+  // The sheet was shown.
+  kSuccess = 0,
+  // The sheet was not shown because it has already been shown before.
+  kFailureShownBefore = 1,
+  // The sheet was not shown because the clicked field is not focusable.
+  kFailureFieldNotFocusable = 2,
+  // The sheet was not shown because the clicked field is not empty.
+  kFailureFieldNotEmpty = 3,
+  // The sheet was not shown because Autofill UI cannot be shown.
+  kFailureCannotShowAutofillUi = 4,
+  // The sheet was not shown because there is no valid credit card.
+  kFailureNoValidCreditCard = 5,
+  // The sheet was not shown because there is no valid Autofill profile.
+  kFailureNoValidAutofillProfile = 6,
+  kMaxValue = kFailureNoValidAutofillProfile
+};
+
+// Enum defining possible outcomes of a Fast Checkout run. Must be kept in sync
+// with enums.xml.
+// These values are persisted to logs. Entries should not be renumbered and
+// numeric values should never be reused.
+// TODO(crbug.com/1334642): remove references to scripts and adjust to new
+// implementation.
+enum class FastCheckoutRunOutcome {
+  // Script did not run because the user has declined onboarding.
+  kOnboardingDeclined = 0,
+  // The script run did not complete or never started.
+  kIncompleteRun = 1,
+  // Script run failed.
+  kFail = 2,
+  // Script ran successfully.
+  kSuccess = 3,
+  kMaxValue = kSuccess
+};
+
+// Represents the state of the bottomsheet.
+enum class FastCheckoutUIState {
+  kNotShownYet,
+  kIsShowing,
+  kWasShown,
+};
+
+#endif
diff --git a/chrome/browser/fast_checkout/fast_checkout_personal_data_helper.h b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper.h
new file mode 100644
index 0000000..bacaa3c
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper.h
@@ -0,0 +1,46 @@
+// Copyright 2023 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_FAST_CHECKOUT_FAST_CHECKOUT_PERSONAL_DATA_HELPER_H_
+#define CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_PERSONAL_DATA_HELPER_H_
+
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+#include "components/autofill/core/browser/personal_data_manager.h"
+
+// Filters data from the personal data manager for Fast Checkout's purposes,
+// i.e. returns valid and complete profiles and credit cards.
+class FastCheckoutPersonalDataHelper {
+ public:
+  virtual ~FastCheckoutPersonalDataHelper() = default;
+
+  FastCheckoutPersonalDataHelper(const FastCheckoutPersonalDataHelper&) =
+      delete;
+  FastCheckoutPersonalDataHelper& operator=(
+      const FastCheckoutPersonalDataHelper&) = delete;
+
+  // Returns profiles to suggest.
+  virtual std::vector<autofill::AutofillProfile*> GetProfilesToSuggest()
+      const = 0;
+
+  // Returns credit cards to suggest that have a number.
+  virtual std::vector<autofill::CreditCard*> GetCreditCardsToSuggest(
+      bool include_server_cards) const = 0;
+
+  // Returns unexpired credit cards with valid number and name.
+  virtual std::vector<autofill::CreditCard*> GetValidCreditCards(
+      bool include_server_cards) const = 0;
+
+  // Returns profiles with name, address, country, email and phone number.
+  virtual std::vector<autofill::AutofillProfile*> GetValidAddressProfiles()
+      const = 0;
+
+  // Returns the current profile's `PersonalDataManager` instance.
+  virtual autofill::PersonalDataManager* GetPersonalDataManager() const = 0;
+
+ protected:
+  FastCheckoutPersonalDataHelper() = default;
+};
+
+#endif
diff --git a/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl.cc b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl.cc
new file mode 100644
index 0000000..896f69c
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl.cc
@@ -0,0 +1,83 @@
+// Copyright 2023 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/fast_checkout/fast_checkout_personal_data_helper_impl.h"
+
+#include "chrome/browser/autofill/personal_data_manager_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/autofill/core/browser/geo/autofill_country.h"
+
+FastCheckoutPersonalDataHelperImpl::FastCheckoutPersonalDataHelperImpl(
+    content::WebContents* web_contents)
+    : web_contents_(web_contents) {}
+
+autofill::PersonalDataManager*
+FastCheckoutPersonalDataHelperImpl::GetPersonalDataManager() const {
+  Profile* profile =
+      Profile::FromBrowserContext(web_contents_->GetBrowserContext());
+  autofill::PersonalDataManager* pdm =
+      autofill::PersonalDataManagerFactory::GetForProfile(
+          profile->GetOriginalProfile());
+  DCHECK(pdm);
+  return pdm;
+}
+
+std::vector<autofill::AutofillProfile*>
+FastCheckoutPersonalDataHelperImpl::GetProfilesToSuggest() const {
+  return GetPersonalDataManager()->GetProfilesToSuggest();
+}
+
+std::vector<autofill::CreditCard*>
+FastCheckoutPersonalDataHelperImpl::GetCreditCardsToSuggest(
+    bool include_server_cards) const {
+  std::vector<autofill::CreditCard*> cards_to_suggest =
+      GetPersonalDataManager()->GetCreditCardsToSuggest(include_server_cards);
+  // Do not offer cards with empty number.
+  base::EraseIf(cards_to_suggest, [](const autofill::CreditCard* card) {
+    return !card->HasRawInfo(autofill::CREDIT_CARD_NUMBER);
+  });
+  return cards_to_suggest;
+}
+
+bool FastCheckoutPersonalDataHelperImpl::IsCompleteAddressProfile(
+    const autofill::AutofillProfile* profile,
+    const std::string& app_locale) const {
+  if (!profile->HasRawInfo(autofill::ADDRESS_HOME_COUNTRY)) {
+    return false;
+  }
+
+  std::string country_code =
+      base::UTF16ToASCII(profile->GetRawInfo(autofill::ADDRESS_HOME_COUNTRY));
+  autofill::AutofillCountry country(country_code, app_locale);
+  return profile->HasRawInfo(autofill::NAME_FULL) &&
+         profile->HasRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS) &&
+         (!country.requires_zip() ||
+          profile->HasRawInfo(autofill::ADDRESS_HOME_ZIP)) &&
+         profile->HasRawInfo(autofill::EMAIL_ADDRESS) &&
+         profile->HasRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER);
+}
+
+std::vector<autofill::CreditCard*>
+FastCheckoutPersonalDataHelperImpl::GetValidCreditCards(
+    bool include_server_cards) const {
+  std::vector<autofill::CreditCard*> cards =
+      GetPersonalDataManager()->GetCreditCardsToSuggest(include_server_cards);
+  base::EraseIf(cards,
+                base::not_fn(&autofill::CreditCard::IsCompleteValidCard));
+  return cards;
+}
+
+std::vector<autofill::AutofillProfile*>
+FastCheckoutPersonalDataHelperImpl::GetValidAddressProfiles() const {
+  autofill::PersonalDataManager* pdm = GetPersonalDataManager();
+  // Trigger only if there is at least 1 complete address profile on file.
+  std::vector<autofill::AutofillProfile*> profiles =
+      pdm->GetProfilesToSuggest();
+
+  base::EraseIf(profiles,
+                [&pdm, this](const autofill::AutofillProfile* profile) {
+                  return !IsCompleteAddressProfile(profile, pdm->app_locale());
+                });
+  return profiles;
+}
diff --git a/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl.h b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl.h
new file mode 100644
index 0000000..487f7e20
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl.h
@@ -0,0 +1,43 @@
+// Copyright 2023 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_FAST_CHECKOUT_FAST_CHECKOUT_PERSONAL_DATA_HELPER_IMPL_H_
+#define CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_PERSONAL_DATA_HELPER_IMPL_H_
+
+#include "chrome/browser/fast_checkout/fast_checkout_personal_data_helper.h"
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/autofill/core/browser/data_model/credit_card.h"
+#include "components/autofill/core/browser/personal_data_manager.h"
+#include "content/public/browser/web_contents.h"
+
+class FastCheckoutPersonalDataHelperImpl
+    : public FastCheckoutPersonalDataHelper {
+ public:
+  explicit FastCheckoutPersonalDataHelperImpl(
+      content::WebContents* web_contents);
+  ~FastCheckoutPersonalDataHelperImpl() override = default;
+
+  FastCheckoutPersonalDataHelperImpl(
+      const FastCheckoutPersonalDataHelperImpl&) = delete;
+  FastCheckoutPersonalDataHelperImpl& operator=(
+      const FastCheckoutPersonalDataHelperImpl&) = delete;
+
+  // FastCheckoutPersonalDataHelper:
+  std::vector<autofill::AutofillProfile*> GetProfilesToSuggest() const override;
+  std::vector<autofill::CreditCard*> GetCreditCardsToSuggest(
+      bool include_server_cards) const override;
+  std::vector<autofill::CreditCard*> GetValidCreditCards(
+      bool include_server_cards) const override;
+  std::vector<autofill::AutofillProfile*> GetValidAddressProfiles()
+      const override;
+  autofill::PersonalDataManager* GetPersonalDataManager() const override;
+
+ private:
+  bool IsCompleteAddressProfile(const autofill::AutofillProfile* profile,
+                                const std::string& app_locale) const;
+
+  raw_ptr<content::WebContents> web_contents_;
+};
+
+#endif
diff --git a/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl_unittest.cc b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl_unittest.cc
new file mode 100644
index 0000000..88ab9e19
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_personal_data_helper_impl_unittest.cc
@@ -0,0 +1,156 @@
+// Copyright 2023 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/fast_checkout/fast_checkout_personal_data_helper_impl.h"
+
+#include "base/guid.h"
+#include "chrome/browser/autofill/personal_data_manager_factory.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/test_personal_data_manager.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+using ::autofill::AutofillProfile;
+using ::autofill::CreditCard;
+using ::testing::Eq;
+
+CreditCard GetEmptyCreditCard() {
+  CreditCard credit_card(base::GenerateGUID(), "");
+  autofill::test::SetCreditCardInfo(&credit_card, /*name_on_card=*/"",
+                                    /*card_number=*/"",
+                                    autofill::test::NextMonth().c_str(),
+                                    autofill::test::NextYear().c_str(), "1");
+  return credit_card;
+}
+
+const AutofillProfile kProfile = autofill::test::GetFullProfile();
+const AutofillProfile kIncompleteProfile =
+    autofill::test::GetIncompleteProfile1();
+const CreditCard kCreditCard = autofill::test::GetCreditCard();
+const CreditCard kEmptyCreditCard = GetEmptyCreditCard();
+
+std::unique_ptr<KeyedService> BuildTestPersonalDataManager(
+    content::BrowserContext* context) {
+  auto personal_data_manager =
+      std::make_unique<autofill::TestPersonalDataManager>();
+  personal_data_manager->SetAutofillProfileEnabled(true);
+  personal_data_manager->SetAutofillCreditCardEnabled(true);
+  personal_data_manager->SetAutofillWalletImportEnabled(true);
+  return personal_data_manager;
+}
+
+class FastCheckoutPersonalDataHelperTest
+    : public ChromeRenderViewHostTestHarness {
+ protected:
+  void SetUp() override {
+    content::RenderViewHostTestHarness::SetUp();
+
+    autofill::PersonalDataManagerFactory::GetInstance()->SetTestingFactory(
+        GetBrowserContext(),
+        base::BindRepeating(&BuildTestPersonalDataManager));
+
+    personal_data_helper_ =
+        std::make_unique<FastCheckoutPersonalDataHelperImpl>(web_contents());
+  }
+
+  FastCheckoutPersonalDataHelperImpl* personal_data_helper() {
+    return personal_data_helper_.get();
+  }
+
+ private:
+  std::unique_ptr<FastCheckoutPersonalDataHelperImpl> personal_data_helper_;
+};
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       GetPersonalDataManager_ReturnsValidPointer) {
+  EXPECT_TRUE(personal_data_helper()->GetPersonalDataManager());
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       NoValidAddressProfiles_HasValidProfiles_ReturnsFalse) {
+  personal_data_helper()->GetPersonalDataManager()->AddProfile(kProfile);
+
+  EXPECT_FALSE(personal_data_helper()->GetValidAddressProfiles().empty());
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       NoValidAddressProfiles_HasOnlyInvalidProfiles_ReturnsTrue) {
+  personal_data_helper()->GetPersonalDataManager()->AddProfile(
+      kIncompleteProfile);
+
+  EXPECT_TRUE(personal_data_helper()->GetValidAddressProfiles().empty());
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       NoValidAddressProfiles_HasValidAndInvalidProfiles_ReturnsFalse) {
+  personal_data_helper()->GetPersonalDataManager()->AddProfile(kProfile);
+  personal_data_helper()->GetPersonalDataManager()->AddProfile(
+      kIncompleteProfile);
+
+  EXPECT_FALSE(personal_data_helper()->GetValidAddressProfiles().empty());
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       NoValidCreditCards_HasValidCreditCards_ReturnsFalse) {
+  personal_data_helper()->GetPersonalDataManager()->AddCreditCard(kCreditCard);
+
+  EXPECT_FALSE(personal_data_helper()
+                   ->GetValidCreditCards(
+                       /*include_server_cards=*/false)
+                   .empty());
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       NoValidCreditCards_HasOnlyInvalidCreditCards_ReturnsTrue) {
+  personal_data_helper()->GetPersonalDataManager()->AddCreditCard(
+      kEmptyCreditCard);
+
+  EXPECT_TRUE(personal_data_helper()
+                  ->GetValidCreditCards(
+                      /*include_server_cards=*/false)
+                  .empty());
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       NoValidCreditCards_HasValidAndInvalidCreditCards_ReturnsFalse) {
+  personal_data_helper()->GetPersonalDataManager()->AddCreditCard(kCreditCard);
+  personal_data_helper()->GetPersonalDataManager()->AddCreditCard(
+      kEmptyCreditCard);
+
+  EXPECT_FALSE(personal_data_helper()
+                   ->GetValidCreditCards(
+                       /*include_server_cards=*/false)
+                   .empty());
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       GetCreditCardsToSuggest_ReturnsOnlyCardsWithNumber) {
+  personal_data_helper()->GetPersonalDataManager()->AddCreditCard(kCreditCard);
+  personal_data_helper()->GetPersonalDataManager()->AddCreditCard(
+      kEmptyCreditCard);
+
+  std::vector<autofill::CreditCard*> cards =
+      personal_data_helper()->GetCreditCardsToSuggest(
+          /*include_server_cards=*/false);
+
+  EXPECT_EQ(cards.size(), 1UL);
+  EXPECT_EQ(*cards.front(), kCreditCard);
+}
+
+TEST_F(FastCheckoutPersonalDataHelperTest,
+       GetProfilesToSuggest_ReturnsAllProfiles) {
+  personal_data_helper()->GetPersonalDataManager()->AddProfile(kProfile);
+  personal_data_helper()->GetPersonalDataManager()->AddProfile(
+      kIncompleteProfile);
+
+  std::vector<autofill::AutofillProfile*> profiles =
+      personal_data_helper()->GetProfilesToSuggest();
+
+  EXPECT_EQ(profiles.size(), 2UL);
+}
+
+}  // namespace
diff --git a/chrome/browser/fast_checkout/fast_checkout_trigger_validator.h b/chrome/browser/fast_checkout/fast_checkout_trigger_validator.h
new file mode 100644
index 0000000..51dabc8
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_trigger_validator.h
@@ -0,0 +1,40 @@
+// Copyright 2023 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_FAST_CHECKOUT_FAST_CHECKOUT_TRIGGER_VALIDATOR_H_
+#define CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_TRIGGER_VALIDATOR_H_
+
+#include "chrome/browser/fast_checkout/fast_checkout_enums.h"
+#include "components/autofill/content/browser/content_autofill_driver.h"
+
+constexpr char kUmaKeyFastCheckoutTriggerOutcome[] =
+    "Autofill.FastCheckout.TriggerOutcome";
+
+// Checks whether a Fast Checkout run should be permitted or not.
+class FastCheckoutTriggerValidator {
+ public:
+  virtual ~FastCheckoutTriggerValidator() = default;
+
+  FastCheckoutTriggerValidator(const FastCheckoutTriggerValidator&) = delete;
+  FastCheckoutTriggerValidator& operator=(const FastCheckoutTriggerValidator&) =
+      delete;
+
+  // Returns `true` if a Fast Checkout run should be permitted, `false`
+  // otherwise. Logs outcome to UMA and chrome://autofill-internals.
+  virtual bool ShouldRun(
+      const autofill::FormData& form,
+      const autofill::FormFieldData& field,
+      const FastCheckoutUIState ui_state,
+      const bool is_running,
+      const autofill::ContentAutofillDriver* autofill_driver) const = 0;
+
+  // Returns `true` if the current profile has Autofill data enabled and at
+  // least one valid Autofill profile and credit card stored, `false` otherwise.
+  virtual bool HasValidPersonalData() const = 0;
+
+ protected:
+  FastCheckoutTriggerValidator() = default;
+};
+
+#endif
diff --git a/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl.cc b/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl.cc
new file mode 100644
index 0000000..df3497623
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl.cc
@@ -0,0 +1,169 @@
+// Copyright 2023 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/fast_checkout/fast_checkout_trigger_validator_impl.h"
+
+#include "base/metrics/histogram_functions.h"
+#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher.h"
+#include "chrome/browser/fast_checkout/fast_checkout_features.h"
+#include "components/autofill/core/browser/logging/log_manager.h"
+#include "components/autofill/core/browser/personal_data_manager.h"
+#include "components/autofill/core/common/autofill_internals/log_message.h"
+#include "components/autofill/core/common/autofill_internals/logging_scope.h"
+#include "components/autofill/core/common/logging/log_macros.h"
+
+namespace {
+void LogUmaTriggerOutcome(FastCheckoutTriggerOutcome trigger_outcome) {
+  base::UmaHistogramEnumeration(kUmaKeyFastCheckoutTriggerOutcome,
+                                trigger_outcome);
+}
+}  // namespace
+
+FastCheckoutTriggerValidatorImpl::FastCheckoutTriggerValidatorImpl(
+    autofill::AutofillClient* autofill_client,
+    FastCheckoutCapabilitiesFetcher* capabilities_fetcher,
+    FastCheckoutPersonalDataHelper* personal_data_helper)
+    : autofill_client_(autofill_client),
+      capabilities_fetcher_(capabilities_fetcher),
+      personal_data_helper_(personal_data_helper) {}
+
+bool FastCheckoutTriggerValidatorImpl::ShouldRun(
+    const autofill::FormData& form,
+    const autofill::FormFieldData& field,
+    const FastCheckoutUIState ui_state,
+    const bool is_running,
+    const autofill::ContentAutofillDriver* autofill_driver) const {
+  LogAutofillInternals(
+      "Start of checking whether a Fast Checkout run should be permitted.");
+
+  // Trigger only on supported platforms.
+  if (!base::FeatureList::IsEnabled(::features::kFastCheckout)) {
+    LogAutofillInternals(
+        "not triggered because FastCheckout flag is disabled.");
+    return false;
+  }
+
+  // Trigger only if there is no ongoing run.
+  if (is_running) {
+    LogAutofillInternals(
+        "not triggered because Fast Checkout is already running.");
+    return false;
+  }
+
+  // Trigger only if the form is a trigger form for Fast Checkout.
+  if (!IsTriggerForm(form, field)) {
+    return false;
+  }
+
+  // UMA drop out metrics are recorded after this point only to avoid collecting
+  // unnecessary metrics that would dominate the other data points.
+  // Trigger only if not shown before.
+  if (ui_state != FastCheckoutUIState::kNotShownYet) {
+    LogUmaTriggerOutcome(FastCheckoutTriggerOutcome::kFailureShownBefore);
+    LogAutofillInternals("not triggered because it was shown before.");
+    return false;
+  }
+
+  // Trigger only on focusable fields.
+  if (!field.is_focusable) {
+    LogUmaTriggerOutcome(FastCheckoutTriggerOutcome::kFailureFieldNotFocusable);
+    LogAutofillInternals("not triggered because field was not focusable.");
+    return false;
+  }
+
+  // Trigger only on empty fields.
+  if (!field.value.empty()) {
+    LogUmaTriggerOutcome(FastCheckoutTriggerOutcome::kFailureFieldNotEmpty);
+    LogAutofillInternals("not triggered because field was not empty.");
+    return false;
+  }
+
+  // Trigger only if the UI is available.
+  if (!autofill_driver->CanShowAutofillUi()) {
+    LogUmaTriggerOutcome(
+        FastCheckoutTriggerOutcome::kFailureCannotShowAutofillUi);
+    LogAutofillInternals("not triggered because Autofill UI cannot be shown.");
+    return false;
+  }
+
+  if (!HasValidPersonalData()) {
+    return false;
+  }
+
+  LogUmaTriggerOutcome(FastCheckoutTriggerOutcome::kSuccess);
+  LogAutofillInternals("was triggered successfully.");
+
+  return true;
+}
+
+bool FastCheckoutTriggerValidatorImpl::IsTriggerForm(
+    const autofill::FormData& form,
+    const autofill::FormFieldData& field) const {
+  if (!capabilities_fetcher_) {
+    return false;
+  }
+  // TODO(crbug.com/1356498): Stop calculating the signature once the form
+  // signature has been moved to `form_data`.
+  // Check browser form's signature and renderer form's signature.
+  autofill::FormSignature form_signature =
+      autofill::CalculateFormSignature(form);
+  bool is_trigger_form = capabilities_fetcher_->IsTriggerFormSupported(
+                             form.main_frame_origin, form_signature) ||
+                         capabilities_fetcher_->IsTriggerFormSupported(
+                             form.main_frame_origin, field.host_form_signature);
+  if (!is_trigger_form) {
+    LogAutofillInternals(
+        "not triggered because there is no Fast Checkout support for form "
+        "signatures {" +
+        base::NumberToString(form_signature.value()) + ", " +
+        base::NumberToString(field.host_form_signature.value()) +
+        "} on origin " + form.main_frame_origin.Serialize() + ".");
+  }
+  return is_trigger_form;
+}
+
+bool FastCheckoutTriggerValidatorImpl::HasValidPersonalData() const {
+  autofill::PersonalDataManager* pdm =
+      personal_data_helper_->GetPersonalDataManager();
+  if (!pdm->IsAutofillProfileEnabled()) {
+    LogAutofillInternals("not triggered because Autofill profile is disabled.");
+    return false;
+  }
+
+  if (!pdm->IsAutofillCreditCardEnabled()) {
+    LogAutofillInternals(
+        "not triggered because Autofill credit card is disabled.");
+    return false;
+  }
+
+  // Trigger only if there is at least 1 valid Autofill profile on file.
+  if (personal_data_helper_->GetValidAddressProfiles().empty()) {
+    LogUmaTriggerOutcome(
+        FastCheckoutTriggerOutcome::kFailureNoValidAutofillProfile);
+    LogAutofillInternals(
+        "not triggered because the client does not have at least one valid "
+        "Autofill profile stored.");
+    return false;
+  }
+
+  // Trigger only if there is at least 1 complete valid credit card on file.
+  if (personal_data_helper_
+          ->GetValidCreditCards(autofill_client_->AreServerCardsSupported())
+          .empty()) {
+    LogUmaTriggerOutcome(FastCheckoutTriggerOutcome::kFailureNoValidCreditCard);
+    LogAutofillInternals(
+        "not triggered because the client does not have at least one "
+        "valid Autofill credit card stored.");
+    return false;
+  }
+
+  return true;
+}
+
+void FastCheckoutTriggerValidatorImpl::LogAutofillInternals(
+    std::string message) const {
+  LOG_AF(autofill_client_->GetLogManager())
+      << autofill::LoggingScope::kFastCheckout
+      << autofill::LogMessage::kFastCheckout << message;
+}
diff --git a/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl.h b/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl.h
new file mode 100644
index 0000000..ae2c23fe
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl.h
@@ -0,0 +1,46 @@
+// Copyright 2023 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_FAST_CHECKOUT_FAST_CHECKOUT_TRIGGER_VALIDATOR_IMPL_H_
+#define CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_TRIGGER_VALIDATOR_IMPL_H_
+
+#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher.h"
+#include "chrome/browser/fast_checkout/fast_checkout_enums.h"
+#include "chrome/browser/fast_checkout/fast_checkout_personal_data_helper.h"
+#include "chrome/browser/fast_checkout/fast_checkout_trigger_validator.h"
+#include "components/autofill/content/browser/content_autofill_driver.h"
+
+class FastCheckoutTriggerValidatorImpl : public FastCheckoutTriggerValidator {
+ public:
+  FastCheckoutTriggerValidatorImpl(
+      autofill::AutofillClient* autofill_client,
+      FastCheckoutCapabilitiesFetcher* capabilities_fetcher,
+      FastCheckoutPersonalDataHelper* personal_data_helper);
+  ~FastCheckoutTriggerValidatorImpl() override = default;
+
+  FastCheckoutTriggerValidatorImpl(const FastCheckoutTriggerValidatorImpl&) =
+      delete;
+  FastCheckoutTriggerValidatorImpl& operator=(
+      const FastCheckoutTriggerValidatorImpl&) = delete;
+
+  // FastCheckoutTriggerValidator:
+  bool ShouldRun(
+      const autofill::FormData& form,
+      const autofill::FormFieldData& field,
+      const FastCheckoutUIState ui_state,
+      const bool is_running,
+      const autofill::ContentAutofillDriver* autofill_driver) const override;
+  bool HasValidPersonalData() const override;
+
+ private:
+  bool IsTriggerForm(const autofill::FormData& form,
+                     const autofill::FormFieldData& field) const;
+  void LogAutofillInternals(std::string message) const;
+
+  raw_ptr<autofill::AutofillClient> autofill_client_;
+  raw_ptr<FastCheckoutCapabilitiesFetcher> capabilities_fetcher_;
+  raw_ptr<FastCheckoutPersonalDataHelper> personal_data_helper_;
+};
+
+#endif
diff --git a/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl_unittest.cc b/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl_unittest.cc
new file mode 100644
index 0000000..66f558385
--- /dev/null
+++ b/chrome/browser/fast_checkout/fast_checkout_trigger_validator_impl_unittest.cc
@@ -0,0 +1,276 @@
+// Copyright 2023 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/fast_checkout/fast_checkout_trigger_validator_impl.h"
+
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher.h"
+#include "chrome/browser/fast_checkout/fast_checkout_features.h"
+#include "chrome/browser/fast_checkout/fast_checkout_personal_data_helper.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/autofill/content/browser/content_autofill_driver.h"
+#include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/autofill/core/browser/test_autofill_client.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+using ::testing::Return;
+
+class MockContentAutofillDriver : public autofill::ContentAutofillDriver {
+ public:
+  MockContentAutofillDriver()
+      : autofill::ContentAutofillDriver(nullptr, nullptr) {}
+  ~MockContentAutofillDriver() override = default;
+
+  MOCK_METHOD(bool, CanShowAutofillUi, (), (const override));
+};
+
+class MockAutofillClient : public autofill::TestAutofillClient {
+ public:
+  MOCK_METHOD(bool, AreServerCardsSupported, (), (const override));
+  MOCK_METHOD(autofill::LogManager*, GetLogManager, (), (const override));
+};
+
+class MockCapabilitiesFetcher : public FastCheckoutCapabilitiesFetcher {
+ public:
+  MOCK_METHOD(void,
+              FetchAvailability,
+              (const url::Origin& origin, Callback callback),
+              ());
+  MOCK_METHOD(bool,
+              IsTriggerFormSupported,
+              (const url::Origin& origin,
+               autofill::FormSignature form_signature),
+              ());
+};
+
+class MockPersonalDataHelper : public FastCheckoutPersonalDataHelper {
+ public:
+  MockPersonalDataHelper() = default;
+  ~MockPersonalDataHelper() override = default;
+
+  MOCK_METHOD(std::vector<autofill::CreditCard*>,
+              GetValidCreditCards,
+              (bool include_server_cards),
+              (const));
+  MOCK_METHOD(std::vector<autofill::AutofillProfile*>,
+              GetValidAddressProfiles,
+              (),
+              (const));
+  MOCK_METHOD(autofill::PersonalDataManager*,
+              GetPersonalDataManager,
+              (),
+              (const));
+  MOCK_METHOD(std::vector<autofill::AutofillProfile*>,
+              GetProfilesToSuggest,
+              (),
+              (const));
+  MOCK_METHOD(std::vector<autofill::CreditCard*>,
+              GetCreditCardsToSuggest,
+              (bool include_server_cards),
+              (const));
+};
+
+class MockPersonalDataManager : public autofill::PersonalDataManager {
+ public:
+  MockPersonalDataManager() : PersonalDataManager("en-US") {}
+  ~MockPersonalDataManager() override = default;
+
+  MOCK_METHOD(bool, IsAutofillProfileEnabled, (), (const));
+  MOCK_METHOD(bool, IsAutofillCreditCardEnabled, (), (const));
+};
+
+class FastCheckoutTriggerValidatorTest
+    : public ChromeRenderViewHostTestHarness {
+ public:
+  FastCheckoutTriggerValidatorTest() {
+    feature_list_.InitWithFeatures(
+        /*enabled_features=*/{features::kFastCheckout},
+        /*disabled_features=*/{});
+  }
+
+ protected:
+  void SetUp() override {
+    content::RenderViewHostTestHarness::SetUp();
+
+    pdm_ = std::make_unique<MockPersonalDataManager>();
+    autofill_client_ = std::make_unique<MockAutofillClient>();
+    capabilities_fetcher_ = std::make_unique<MockCapabilitiesFetcher>();
+    personal_data_helper_ = std::make_unique<MockPersonalDataHelper>();
+    autofill_driver_ = std::make_unique<MockContentAutofillDriver>();
+    validator_ = std::make_unique<FastCheckoutTriggerValidatorImpl>(
+        autofill_client(), capabilities_fetcher(), personal_data_helper());
+    credit_card_ = autofill::test::GetCreditCard();
+    profile_ = autofill::test::GetFullProfile();
+
+    ON_CALL(*autofill_driver(), CanShowAutofillUi).WillByDefault(Return(true));
+    ON_CALL(*capabilities_fetcher(), IsTriggerFormSupported)
+        .WillByDefault(Return(true));
+    ON_CALL(*personal_data_helper(), GetValidCreditCards)
+        .WillByDefault(
+            Return(std::vector<autofill::CreditCard*>{&credit_card_}));
+    ON_CALL(*personal_data_helper(), GetValidAddressProfiles)
+        .WillByDefault(
+            Return(std::vector<autofill::AutofillProfile*>{&profile_}));
+    ON_CALL(*personal_data_helper(), GetPersonalDataManager)
+        .WillByDefault(Return(pdm()));
+    ON_CALL(*pdm(), IsAutofillCreditCardEnabled).WillByDefault(Return(true));
+    ON_CALL(*pdm(), IsAutofillProfileEnabled).WillByDefault(Return(true));
+  }
+
+  MockPersonalDataManager* pdm() { return pdm_.get(); }
+  MockAutofillClient* autofill_client() { return autofill_client_.get(); }
+  MockCapabilitiesFetcher* capabilities_fetcher() {
+    return capabilities_fetcher_.get();
+  }
+  MockPersonalDataHelper* personal_data_helper() {
+    return personal_data_helper_.get();
+  }
+  MockContentAutofillDriver* autofill_driver() {
+    return autofill_driver_.get();
+  }
+  FastCheckoutTriggerValidatorImpl* validator() { return validator_.get(); }
+
+  bool ShouldRun() {
+    return validator()->ShouldRun(form_, field_, ui_state_, is_running_,
+                                  autofill_driver());
+  }
+
+  // Protected for access in tests below.
+  autofill::FormFieldData field_;
+  FastCheckoutUIState ui_state_ = FastCheckoutUIState::kNotShownYet;
+  bool is_running_ = false;
+  base::HistogramTester histogram_tester_;
+
+ private:
+  autofill::AutofillProfile profile_;
+  autofill::CreditCard credit_card_;
+  autofill::FormData form_;
+  base::test::ScopedFeatureList feature_list_;
+  std::unique_ptr<FastCheckoutTriggerValidatorImpl> validator_;
+  std::unique_ptr<MockAutofillClient> autofill_client_;
+  std::unique_ptr<MockCapabilitiesFetcher> capabilities_fetcher_;
+  std::unique_ptr<MockContentAutofillDriver> autofill_driver_;
+  std::unique_ptr<MockPersonalDataHelper> personal_data_helper_;
+  std::unique_ptr<MockPersonalDataManager> pdm_;
+};
+
+TEST_F(FastCheckoutTriggerValidatorTest, ShouldRun) {
+  EXPECT_TRUE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(kUmaKeyFastCheckoutTriggerOutcome,
+                                       FastCheckoutTriggerOutcome::kSuccess,
+                                       1u);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, FeatureDisabled_NoRun) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndDisableFeature(::features::kFastCheckout);
+
+  EXPECT_FALSE(ShouldRun());
+  EXPECT_EQ(histogram_tester_.GetTotalSum(kUmaKeyFastCheckoutTriggerOutcome),
+            0);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, AlreadyRunning_NoRun) {
+  is_running_ = true;
+
+  EXPECT_FALSE(ShouldRun());
+  EXPECT_EQ(histogram_tester_.GetTotalSum(kUmaKeyFastCheckoutTriggerOutcome),
+            0);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, NoTriggerForm_NoRun) {
+  ON_CALL(*capabilities_fetcher(), IsTriggerFormSupported)
+      .WillByDefault(Return(false));
+
+  EXPECT_FALSE(ShouldRun());
+  EXPECT_EQ(histogram_tester_.GetTotalSum(kUmaKeyFastCheckoutTriggerOutcome),
+            0);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, UiIsShowing_NoRun) {
+  ui_state_ = FastCheckoutUIState::kIsShowing;
+
+  EXPECT_FALSE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(
+      kUmaKeyFastCheckoutTriggerOutcome,
+      FastCheckoutTriggerOutcome::kFailureShownBefore, 1u);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, UiWasShown_NoRun) {
+  ui_state_ = FastCheckoutUIState::kWasShown;
+
+  EXPECT_FALSE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(
+      kUmaKeyFastCheckoutTriggerOutcome,
+      FastCheckoutTriggerOutcome::kFailureShownBefore, 1u);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, FieldNotFocusable_NoRun) {
+  field_.is_focusable = false;
+
+  EXPECT_FALSE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(
+      kUmaKeyFastCheckoutTriggerOutcome,
+      FastCheckoutTriggerOutcome::kFailureFieldNotFocusable, 1u);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, FieldHasValue_NoRun) {
+  field_.value = u"value";
+
+  EXPECT_FALSE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(
+      kUmaKeyFastCheckoutTriggerOutcome,
+      FastCheckoutTriggerOutcome::kFailureFieldNotEmpty, 1u);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, CannotShowAutofillUi_NoRun) {
+  ON_CALL(*autofill_driver(), CanShowAutofillUi).WillByDefault(Return(false));
+
+  EXPECT_FALSE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(
+      kUmaKeyFastCheckoutTriggerOutcome,
+      FastCheckoutTriggerOutcome::kFailureCannotShowAutofillUi, 1u);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, AutofillProfileDisabled_NoRun) {
+  ON_CALL(*pdm(), IsAutofillProfileEnabled).WillByDefault(Return(false));
+
+  EXPECT_FALSE(ShouldRun());
+  EXPECT_EQ(histogram_tester_.GetTotalSum(kUmaKeyFastCheckoutTriggerOutcome),
+            0);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, CreditCardDisabled_NoRun) {
+  ON_CALL(*pdm(), IsAutofillCreditCardEnabled).WillByDefault(Return(false));
+
+  EXPECT_FALSE(ShouldRun());
+  EXPECT_EQ(histogram_tester_.GetTotalSum(kUmaKeyFastCheckoutTriggerOutcome),
+            0);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, NoValidAddressProfiles_NoRun) {
+  ON_CALL(*personal_data_helper(), GetValidAddressProfiles)
+      .WillByDefault(Return(std::vector<autofill::AutofillProfile*>{}));
+
+  EXPECT_FALSE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(
+      kUmaKeyFastCheckoutTriggerOutcome,
+      FastCheckoutTriggerOutcome::kFailureNoValidAutofillProfile, 1u);
+}
+
+TEST_F(FastCheckoutTriggerValidatorTest, NoValidCreditCards_NoRun) {
+  ON_CALL(*personal_data_helper(), GetValidCreditCards)
+      .WillByDefault(Return(std::vector<autofill::CreditCard*>{}));
+
+  EXPECT_FALSE(ShouldRun());
+  histogram_tester_.ExpectUniqueSample(
+      kUmaKeyFastCheckoutTriggerOutcome,
+      FastCheckoutTriggerOutcome::kFailureNoValidCreditCard, 1u);
+}
+
+}  // namespace
diff --git a/chrome/browser/feed/feed_service_factory.cc b/chrome/browser/feed/feed_service_factory.cc
index 68559e95..30f688f3 100644
--- a/chrome/browser/feed/feed_service_factory.cc
+++ b/chrome/browser/feed/feed_service_factory.cc
@@ -10,6 +10,7 @@
 
 #include "base/check.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/feed/rss_links_fetcher_unittest.cc b/chrome/browser/feed/rss_links_fetcher_unittest.cc
index bb3a216..6ce691d 100644
--- a/chrome/browser/feed/rss_links_fetcher_unittest.cc
+++ b/chrome/browser/feed/rss_links_fetcher_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/feed/core/v2/test/callback_receiver.h"
 #include "components/feed/mojom/rss_link_reader.mojom.h"
 #include "mojo/core/embedder/embedder.h"
diff --git a/chrome/browser/feed/web_feed_tab_helper_unittest.cc b/chrome/browser/feed/web_feed_tab_helper_unittest.cc
index 0c7ca8a..2332bd99 100644
--- a/chrome/browser/feed/web_feed_tab_helper_unittest.cc
+++ b/chrome/browser/feed/web_feed_tab_helper_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/feed/feed_feature_list.h"
diff --git a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc
index 54c9d78..4de2a34 100644
--- a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc
+++ b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc
@@ -15,7 +15,6 @@
 #include "content/public/browser/browser_thread.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.h"
 #include "content/public/browser/browser_task_traits.h"
 #endif
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
index 6a71cea..9309792 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
@@ -248,12 +248,19 @@
     // Similar Mac specific blocks.
     {base::DIR_APP_DATA, nullptr, kBlockAllChildren},
     {base::DIR_HOME, FILE_PATH_LITERAL("Library"), kBlockAllChildren},
-    // Allow access to iCloud files.
-    {base::DIR_HOME, FILE_PATH_LITERAL("Library/Mobile Documents"),
-     kDontBlockChildren},
     // Allow access to other cloud files, such as Google Drive.
     {base::DIR_HOME, FILE_PATH_LITERAL("Library/CloudStorage"),
      kDontBlockChildren},
+    // Allow the site to interact with data from its corresponding natively
+    // installed (sandboxed) application. It would be nice to limit a site to
+    // access only _its_ corresponding natively installed application,
+    // but unfortunately there's no straightforward way to do that. See
+    // https://crbug.com/984641#c22.
+    {base::DIR_HOME, FILE_PATH_LITERAL("Library/Containers"),
+     kDontBlockChildren},
+    // Allow access to iCloud files.
+    {base::DIR_HOME, FILE_PATH_LITERAL("Library/Mobile Documents"),
+     kDontBlockChildren},
 #endif
 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
     // On Linux also block access to devices via /dev.
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 90c09ed..34b0ace 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -3546,11 +3546,6 @@
     "expiry_milestone": 86
   },
   {
-    "name": "extension-workflow-justification",
-    "owners": [ "igorruvinov", "zmin" ],
-    "expiry_milestone": 110
-  },
-  {
     "name": "extensions-menu-access-control",
     "owners": [ "emiliapaz" ],
     "expiry_milestone":  112
@@ -4741,6 +4736,11 @@
     "expiry_milestone": 96
   },
   {
+    "name": "native-find-in-page",
+    "owners": ["qpubert@google.com", "djean@google.com"],
+    "expiry_milestone": 115
+  },
+  {
     "name": "nearby-sharing-one-page-onboarding",
     "owners": [ "pushi@google.com", "chromeos-cross-device-eng@google.com" ],
     "expiry_milestone": 103
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 76d3b6aa..630a1adf 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3332,12 +3332,6 @@
     "Use chrome passthrough command decoder instead of validating command "
     "decoder.";
 
-const char kExtensionWorkflowJustificationName[] =
-    "Extension request justification";
-const char kExtensionWorkflowJustificationDescription[] =
-    "Enables users to justify their extension requests by causing a text field "
-    "to appear on the extension request dialog.";
-
 const char kDurableClientHintsCacheName[] = "Persistent client hints";
 const char kDurableClientHintsCacheDescription[] =
     "Persist the client hints cache beyond browser restarts.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 5050978..556bf44de 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1900,9 +1900,6 @@
 extern const char kUsePassthroughCommandDecoderName[];
 extern const char kUsePassthroughCommandDecoderDescription[];
 
-extern const char kExtensionWorkflowJustificationName[];
-extern const char kExtensionWorkflowJustificationDescription[];
-
 extern const char kDurableClientHintsCacheName[];
 extern const char kDurableClientHintsCacheDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 4537e25..917daec 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -103,7 +103,6 @@
     &commerce::kCommerceMerchantViewer,
     &commerce::kCommercePriceTracking,
     &commerce::kShoppingList,
-    &commerce::kShoppingListEnableDesyncResolution,
     &commerce::kShoppingPDPMetrics,
     &content_settings::kDarkenWebsitesCheckboxInThemesSetting,
     &download::features::kDownloadAutoResumptionNative,
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 cd74e22..6e621eb 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
@@ -459,8 +459,7 @@
     public static final String SHARE_CROW_BUTTON_LAUNCH_TAB = "ShareCrowLaunchTab";
     public static final String SHARED_HIGHLIGHTING_AMP = "SharedHighlightingAmp";
     public static final String SHOPPING_LIST = "ShoppingList";
-    public static final String SHOPPING_LIST_ENABLE_DESYNC_RESOLUTION =
-            "ShoppingListEnableDesyncResolution";
+    public static final String SHOW_EXTENDED_PRELOADING_SETTING = "ShowExtendedPreloadingSetting";
     public static final String SHOW_SCROLLABLE_MVT_ON_NTP_ANDROID = "ShowScrollableMVTOnNTPAndroid";
     public static final String SMART_SUGGESTION_FOR_LARGE_DOWNLOADS =
             "SmartSuggestionForLargeDownloads";
diff --git a/chrome/browser/google/google_search_domain_mixing_metrics_emitter.cc b/chrome/browser/google/google_search_domain_mixing_metrics_emitter.cc
index 50741c4..e991718 100644
--- a/chrome/browser/google/google_search_domain_mixing_metrics_emitter.cc
+++ b/chrome/browser/google/google_search_domain_mixing_metrics_emitter.cc
@@ -7,7 +7,7 @@
 #include "base/check.h"
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/history/core/browser/domain_mixing_metrics.h"
 #include "components/history/core/browser/history_backend.h"
diff --git a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc
index d6cd2275..dc28043 100644
--- a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc
+++ b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc
@@ -9,7 +9,6 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_interactive_uitest.cc b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_interactive_uitest.cc
index 5fd45be..a7df7bf 100644
--- a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_interactive_uitest.cc
+++ b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_interactive_uitest.cc
@@ -6,6 +6,7 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/icon_loader_win.cc b/chrome/browser/icon_loader_win.cc
index 79b3fab0..e78ff57 100644
--- a/chrome/browser/icon_loader_win.cc
+++ b/chrome/browser/icon_loader_win.cc
@@ -11,6 +11,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/threading/thread.h"
diff --git a/chrome/browser/image_decoder/image_decoder.cc b/chrome/browser/image_decoder/image_decoder.cc
index 0a96262..699353c9 100644
--- a/chrome/browser/image_decoder/image_decoder.cc
+++ b/chrome/browser/image_decoder/image_decoder.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel.h"
diff --git a/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.h b/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.h
index 3ecd8125..e52ded9 100644
--- a/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.h
+++ b/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.h
@@ -16,7 +16,6 @@
 #include "components/signin/public/identity_manager/access_token_info.h"
 #include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h"
 #include "google_apis/gaia/google_service_auth_error.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/isolation_info.h"
 #include "net/http/http_response_headers.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
diff --git a/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer_unittest.cc b/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer_unittest.cc
index 2e9e8df2..d5e3cd8f 100644
--- a/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer_unittest.cc
+++ b/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer_unittest.cc
@@ -9,6 +9,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_task_environment.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
 #include "services/network/public/mojom/network_context.mojom.h"
diff --git a/chrome/browser/lacros/account_manager/account_cache.cc b/chrome/browser/lacros/account_manager/account_cache.cc
index 17ebb97b..9f74c99 100644
--- a/chrome/browser/lacros/account_manager/account_cache.cc
+++ b/chrome/browser/lacros/account_manager/account_cache.cc
@@ -33,10 +33,10 @@
 // Saves to `prefs` a list of account ids from `accounts`.
 void SetLacrosAccountIdsPref(PrefService* prefs,
                              const AccountCache::AccountByGaiaIdMap& accounts) {
-  base::Value list(base::Value::Type::LIST);
+  base::Value::List list;
   for (const auto& gaia_id_account_pair : accounts)
     list.Append(gaia_id_account_pair.first);
-  prefs->Set(kLacrosAccountIdsPref, list);
+  prefs->SetList(kLacrosAccountIdsPref, std::move(list));
 }
 
 }  // namespace
diff --git a/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc b/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc
index 7597cab..5ec21d7 100644
--- a/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc
+++ b/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc
@@ -449,10 +449,10 @@
 
   void SetLacrosAccountsInLocalState(
       const base::flat_set<std::string>& account_ids) {
-    base::Value list(base::Value::Type::LIST);
+    base::Value::List list;
     for (const auto& gaia_id : account_ids)
       list.Append(gaia_id);
-    local_state()->Set(kLacrosAccountIdsPref, list);
+    local_state()->SetList(kLacrosAccountIdsPref, std::move(list));
   }
 
   base::flat_set<std::string> GetLacrosAccountsFromLocalState() {
diff --git a/chrome/browser/lacros/app_mode/kiosk_session_service_lacros.h b/chrome/browser/lacros/app_mode/kiosk_session_service_lacros.h
index 37889b4..821a236 100644
--- a/chrome/browser/lacros/app_mode/kiosk_session_service_lacros.h
+++ b/chrome/browser/lacros/app_mode/kiosk_session_service_lacros.h
@@ -10,7 +10,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chromeos/crosapi/mojom/kiosk_session_service.mojom.h"
 #include "components/prefs/pref_registry_simple.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "url/gurl.h"
 
 namespace chromeos {
diff --git a/chrome/browser/lacros/browser_service_lacros.cc b/chrome/browser/lacros/browser_service_lacros.cc
index f33350b..1441b1e 100644
--- a/chrome/browser/lacros/browser_service_lacros.cc
+++ b/chrome/browser/lacros/browser_service_lacros.cc
@@ -421,7 +421,7 @@
 void BrowserServiceLacros::OnSystemInformationReady(
     GetFeedbackDataCallback callback,
     std::unique_ptr<system_logs::SystemLogsResponse> sys_info) {
-  base::Value system_log_entries(base::Value::Type::DICTIONARY);
+  base::Value::Dict system_log_entries;
   if (sys_info) {
     std::string user_email = feedback_util::GetSignedInUserEmail();
     const bool google_email = gaia::IsGoogleInternalAccountEmail(user_email);
@@ -433,14 +433,13 @@
       // also stripped later on in the feedback processing for other code paths
       // that don't go through this.
       if (FeedbackCommon::IncludeInSystemLogs(it.first, google_email)) {
-        system_log_entries.SetStringKey(std::move(it.first),
-                                        std::move(it.second));
+        system_log_entries.Set(it.first, std::move(it.second));
       }
     }
   }
 
   DCHECK(!callback.is_null());
-  std::move(callback).Run(std::move(system_log_entries));
+  std::move(callback).Run(base::Value(std::move(system_log_entries)));
 }
 
 void BrowserServiceLacros::OnGetCompressedHistograms(
diff --git a/chrome/browser/lacros/force_installed_tracker_lacros.h b/chrome/browser/lacros/force_installed_tracker_lacros.h
index 3c3d2eb1..5883d39 100644
--- a/chrome/browser/lacros/force_installed_tracker_lacros.h
+++ b/chrome/browser/lacros/force_installed_tracker_lacros.h
@@ -8,7 +8,6 @@
 #include "base/time/time.h"
 #include "chrome/browser/extensions/forced_extensions/force_installed_tracker.h"
 #include "chromeos/crosapi/mojom/force_installed_tracker.mojom.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 
 // Provider of APIs to track the installation status of extensions (listed in
 // ExtensionInstallForceList policy). This class is also responsible for
diff --git a/chrome/browser/lacros/fullscreen_controller_client_lacros_unittest.cc b/chrome/browser/lacros/fullscreen_controller_client_lacros_unittest.cc
index 7bc766c0..edf31d0 100644
--- a/chrome/browser/lacros/fullscreen_controller_client_lacros_unittest.cc
+++ b/chrome/browser/lacros/fullscreen_controller_client_lacros_unittest.cc
@@ -116,10 +116,10 @@
 
   void SetKeepFullscreenWithoutNotificationAllowList(
       const std::string& pattern) {
-    base::Value list(base::Value::Type::LIST);
-    list.Append(base::Value(pattern));
-    profile_->GetPrefs()->Set(
-        prefs::kKeepFullscreenWithoutNotificationUrlAllowList, list);
+    base::Value::List list;
+    list.Append(pattern);
+    profile_->GetPrefs()->SetList(
+        prefs::kKeepFullscreenWithoutNotificationUrlAllowList, std::move(list));
   }
 
   void RunTest(bool expect_should_exit_fullscreen) {
@@ -236,11 +236,11 @@
 TEST_P(FullscreenControllerClientLacrosWebContentsTest,
        KeepFullscreenIfMatchingPref) {
   // Set up the URL exempt list with one matching and one non-matching pattern.
-  base::Value list(base::Value::Type::LIST);
-  list.Append(base::Value(kNonMatchingPattern));
-  list.Append(base::Value(kMatchingPattern));
-  profile_->GetPrefs()->Set(
-      prefs::kKeepFullscreenWithoutNotificationUrlAllowList, list);
+  base::Value::List list;
+  list.Append(kNonMatchingPattern);
+  list.Append(kMatchingPattern);
+  profile_->GetPrefs()->SetList(
+      prefs::kKeepFullscreenWithoutNotificationUrlAllowList, std::move(list));
 
   RunTest(/*expect_should_exit_fullscreen=*/false);
 }
diff --git a/chrome/browser/lacros/net/proxy_config_service_lacros_browsertest.cc b/chrome/browser/lacros/net/proxy_config_service_lacros_browsertest.cc
index 92becb24..c83e55a 100644
--- a/chrome/browser/lacros/net/proxy_config_service_lacros_browsertest.cc
+++ b/chrome/browser/lacros/net/proxy_config_service_lacros_browsertest.cc
@@ -268,11 +268,10 @@
   // Set a proxy via pref.
   base::RunLoop run_loop;
   proxy_monitor_->SetQuitClosure(run_loop.QuitClosure());
-  base::Value proxy_config_wpad(base::Value::Type::DICTIONARY);
-  proxy_config_wpad.SetKey("mode",
-                           base::Value(ProxyPrefs::kAutoDetectProxyModeName));
-  browser()->profile()->GetPrefs()->Set(proxy_config::prefs::kProxy,
-                                        proxy_config_wpad);
+  base::Value::Dict proxy_config_wpad;
+  proxy_config_wpad.Set("mode", ProxyPrefs::kAutoDetectProxyModeName);
+  browser()->profile()->GetPrefs()->SetDict(proxy_config::prefs::kProxy,
+                                            std::move(proxy_config_wpad));
   run_loop.Run();
   // Verify that the pref proxy is applied.
   EXPECT_EQ(proxy_monitor_->cached_proxy_config_.value().ToValue(),
diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.h b/chrome/browser/local_discovery/service_discovery_client_mac.h
index c0dac1b..613bae8e 100644
--- a/chrome/browser/local_discovery/service_discovery_client_mac.h
+++ b/chrome/browser/local_discovery/service_discovery_client_mac.h
@@ -12,7 +12,6 @@
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/local_discovery/service_discovery_shared_client.h"
 
 namespace base {
diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/chrome/browser/local_discovery/service_discovery_client_mac.mm
index 28e1cf5..c360135 100644
--- a/chrome/browser/local_discovery/service_discovery_client_mac.mm
+++ b/chrome/browser/local_discovery/service_discovery_client_mac.mm
@@ -16,6 +16,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "net/base/ip_address.h"
diff --git a/chrome/browser/local_discovery/service_discovery_client_mdns.h b/chrome/browser/local_discovery/service_discovery_client_mdns.h
index 4677941..5799520 100644
--- a/chrome/browser/local_discovery/service_discovery_client_mdns.h
+++ b/chrome/browser/local_discovery/service_discovery_client_mdns.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/local_discovery/service_discovery_client.h"
 #include "chrome/browser/local_discovery/service_discovery_shared_client.h"
 #include "net/dns/mdns_client.h"
diff --git a/chrome/browser/local_discovery/service_discovery_device_lister.cc b/chrome/browser/local_discovery/service_discovery_device_lister.cc
index 4e9fdeb..6e89c8c 100644
--- a/chrome/browser/local_discovery/service_discovery_device_lister.cc
+++ b/chrome/browser/local_discovery/service_discovery_device_lister.cc
@@ -14,7 +14,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace local_discovery {
 
diff --git a/chrome/browser/media/cast_mirroring_service_host.cc b/chrome/browser/media/cast_mirroring_service_host.cc
index b9cf248..00f8960 100644
--- a/chrome/browser/media/cast_mirroring_service_host.cc
+++ b/chrome/browser/media/cast_mirroring_service_host.cc
@@ -16,7 +16,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/media/cast_remoting_connector.h"
 #include "chrome/browser/media/router/discovery/access_code/access_code_cast_feature.h"
diff --git a/chrome/browser/media/history/media_history_keyed_service_unittest.cc b/chrome/browser/media/history/media_history_keyed_service_unittest.cc
index f8efc90..bc7d8a44 100644
--- a/chrome/browser/media/history/media_history_keyed_service_unittest.cc
+++ b/chrome/browser/media/history/media_history_keyed_service_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/mock_callback.h"
diff --git a/chrome/browser/media/media_engagement_contents_observer.h b/chrome/browser/media/media_engagement_contents_observer.h
index 5c76f1f..e9a2742 100644
--- a/chrome/browser/media/media_engagement_contents_observer.h
+++ b/chrome/browser/media/media_engagement_contents_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "content/public/browser/media_player_id.h"
diff --git a/chrome/browser/media/media_engagement_service_unittest.cc b/chrome/browser/media/media_engagement_service_unittest.cc
index 40ce01b..85e80cb 100644
--- a/chrome/browser/media/media_engagement_service_unittest.cc
+++ b/chrome/browser/media/media_engagement_service_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_clock.h"
 #include "base/test/test_mock_time_task_runner.h"
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_discovery_interface.cc b/chrome/browser/media/router/discovery/access_code/access_code_cast_discovery_interface.cc
index 7910799..a7b7136 100644
--- a/chrome/browser/media/router/discovery/access_code/access_code_cast_discovery_interface.cc
+++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_discovery_interface.cc
@@ -13,7 +13,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/media/router/discovery/access_code/access_code_cast_constants.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc
index 95ffa4d..00153dc 100644
--- a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc
+++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.cc
@@ -9,7 +9,6 @@
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/media/router/discovery/access_code/access_code_cast_pref_updater.h"
 #include "chrome/browser/media/router/discovery/access_code/access_code_media_sink_util.h"
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.h b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.h
index 83dd573f..2cd901d 100644
--- a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.h
+++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.h
@@ -9,6 +9,8 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/media/router/discovery/access_code/access_code_cast_discovery_interface.h"
 #include "chrome/browser/media/router/discovery/access_code/access_code_cast_pref_updater.h"
 #include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service_impl.h"
diff --git a/chrome/browser/media/router/discovery/dial/dial_media_sink_service_impl.cc b/chrome/browser/media/router/discovery/dial/dial_media_sink_service_impl.cc
index a5537010..609a413 100644
--- a/chrome/browser/media/router/discovery/dial/dial_media_sink_service_impl.cc
+++ b/chrome/browser/media/router/discovery/dial/dial_media_sink_service_impl.cc
@@ -12,6 +12,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/discovery/dial/dial_device_data.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
 
diff --git a/chrome/browser/media/router/discovery/dial/dial_registry.cc b/chrome/browser/media/router/discovery/dial/dial_registry.cc
index 9e82a56..6a78bf5 100644
--- a/chrome/browser/media/router/discovery/dial/dial_registry.cc
+++ b/chrome/browser/media/router/discovery/dial/dial_registry.cc
@@ -9,6 +9,7 @@
 
 #include "base/functional/bind.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/default_clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/chrome/browser/media/router/discovery/dial/dial_service_impl.cc b/chrome/browser/media/router/discovery/dial/dial_service_impl.cc
index 699ba3c..a66e96b9 100644
--- a/chrome/browser/media/router/discovery/dial/dial_service_impl.cc
+++ b/chrome/browser/media/router/discovery/dial/dial_service_impl.cc
@@ -19,6 +19,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc
index a50328e..d774d29 100644
--- a/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc
+++ b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc
@@ -27,11 +27,12 @@
 
 void ProcessAdditionalDataElement(const base::Value& additional_data_element,
                                   ParsedDialAppInfo* out_app_info) {
-  const base::Value* child_elements =
+  const base::Value::List* child_elements =
       data_decoder::GetXmlElementChildren(additional_data_element);
-  if (!child_elements || !child_elements->is_list())
+  if (!child_elements) {
     return;
-  for (const auto& child_element : child_elements->GetList()) {
+  }
+  for (const auto& child_element : *child_elements) {
     std::string tag_name;
     if (!data_decoder::GetXmlElementTagName(child_element, &tag_name))
       continue;
@@ -125,15 +126,15 @@
       data_decoder::GetXmlElementAttribute(*service_element, "dialVer");
 
   // Fetch all the children of <service> element.
-  const base::Value* child_elements =
+  const base::Value::List* child_elements =
       data_decoder::GetXmlElementChildren(*service_element);
-  if (!child_elements || !child_elements->is_list()) {
+  if (!child_elements) {
     std::move(callback).Run(nullptr, ParsingResult::kInvalidXML);
     return;
   }
 
   ParsingResult parsing_result = ParsingResult::kSuccess;
-  for (const auto& child_element : child_elements->GetList()) {
+  for (const auto& child_element : *child_elements) {
     parsing_result = ProcessChildElement(child_element, app_info.get());
     if (parsing_result != ParsingResult::kSuccess) {
       std::move(callback).Run(nullptr, parsing_result);
diff --git a/chrome/browser/media/router/discovery/discovery_network_monitor.h b/chrome/browser/media/router/discovery/discovery_network_monitor.h
index c40e2d3..b1309d2 100644
--- a/chrome/browser/media/router/discovery/discovery_network_monitor.h
+++ b/chrome/browser/media/router/discovery/discovery_network_monitor.h
@@ -12,6 +12,7 @@
 #include "base/lazy_instance.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/discovery/discovery_network_info.h"
 #include "net/base/ip_address.h"
 #include "services/network/public/cpp/network_connection_tracker.h"
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.h b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
index 445ad2bb..bc356c0 100644
--- a/chrome/browser/media/router/mojo/media_router_mojo_impl.h
+++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
@@ -18,7 +18,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/media/webrtc/desktop_media_picker_controller.h"
 #include "components/media_router/browser/issue_manager.h"
 #include "components/media_router/browser/logger_impl.h"
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
index c180970b..5e82b1d 100644
--- a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
+++ b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
@@ -21,7 +21,6 @@
 #include "base/test/gmock_callback_support.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h"
 #include "chrome/browser/media/router/test/media_router_mojo_test.h"
 #include "chrome/browser/media/router/test/provider_test_helpers.h"
diff --git a/chrome/browser/media/router/providers/cast/cast_app_discovery_service.cc b/chrome/browser/media/router/providers/cast/cast_app_discovery_service.cc
index ad4347a2..e5f7808 100644
--- a/chrome/browser/media/router/providers/cast/cast_app_discovery_service.cc
+++ b/chrome/browser/media/router/providers/cast/cast_app_discovery_service.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "chrome/browser/media/router/providers/cast/cast_media_route_provider_metrics.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_handler.h"
diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc
index d30e96c..c53c6a1 100644
--- a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc
+++ b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc
@@ -12,6 +12,7 @@
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
 #include "base/strings/string_split.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/media_router_feature.h"
 #include "chrome/browser/media/router/providers/cast/cast_activity_manager.h"
 #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h"
diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provider.h b/chrome/browser/media/router/providers/cast/cast_media_route_provider.h
index d72ed91..ceec25e 100644
--- a/chrome/browser/media/router/providers/cast/cast_media_route_provider.h
+++ b/chrome/browser/media/router/providers/cast/cast_media_route_provider.h
@@ -11,6 +11,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/providers/cast/cast_app_discovery_service.h"
 #include "chrome/browser/media/router/providers/cast/dual_media_sink_service.h"
 #include "components/media_router/common/mojom/logger.mojom.h"
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client.h b/chrome/browser/media/router/providers/cast/cast_session_client.h
index 19b15225..827e9468 100644
--- a/chrome/browser/media/router/providers/cast/cast_session_client.h
+++ b/chrome/browser/media/router/providers/cast/cast_session_client.h
@@ -11,8 +11,6 @@
 #include "base/values.h"
 #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h"
 #include "components/media_router/common/mojom/media_router.mojom.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/presentation/presentation.mojom.h"
 
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client_impl.h b/chrome/browser/media/router/providers/cast/cast_session_client_impl.h
index 2a87986..2bc97da 100644
--- a/chrome/browser/media/router/providers/cast/cast_session_client_impl.h
+++ b/chrome/browser/media/router/providers/cast/cast_session_client_impl.h
@@ -9,6 +9,7 @@
 #include "chrome/browser/media/router/providers/cast/cast_session_client.h"
 #include "components/media_router/common/providers/cast/cast_media_source.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_handler.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
 
 namespace media_router {
diff --git a/chrome/browser/media/router/providers/cast/cast_session_tracker.cc b/chrome/browser/media/router/providers/cast/cast_session_tracker.cc
index 1bf6ff65..b7bb43b3 100644
--- a/chrome/browser/media/router/providers/cast/cast_session_tracker.cc
+++ b/chrome/browser/media/router/providers/cast/cast_session_tracker.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/observer_list.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/providers/cast/chrome_cast_message_handler.h"
 #include "chrome/browser/media/router/providers/cast/dual_media_sink_service.h"
 #include "components/media_router/common/providers/cast/channel/cast_socket_service.h"
diff --git a/chrome/browser/media/router/providers/cast/cast_session_tracker.h b/chrome/browser/media/router/providers/cast/cast_session_tracker.h
index 1c39f7731..ff58ace 100644
--- a/chrome/browser/media/router/providers/cast/cast_session_tracker.h
+++ b/chrome/browser/media/router/providers/cast/cast_session_tracker.h
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/observer_list.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/media/router/providers/cast/cast_internal_message_util.h"
 #include "components/media_router/common/discovery/media_sink_internal.h"
diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc
index b258d10..8abac700 100644
--- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc
+++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc
@@ -12,6 +12,7 @@
 #include "base/no_destructor.h"
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/data_decoder_util.h"
 #include "chrome/browser/media/router/providers/dial/dial_media_route_provider_metrics.h"
 #include "components/media_router/common/media_source.h"
diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.h b/chrome/browser/media/router/providers/dial/dial_media_route_provider.h
index a4130574..a1c0bf6 100644
--- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.h
+++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.h
@@ -15,6 +15,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service_impl.h"
 #include "chrome/browser/media/router/providers/common/buffered_message_sender.h"
 #include "chrome/browser/media/router/providers/dial/dial_activity_manager.h"
diff --git a/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.cc b/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.cc
index 0b4339ee..beeae3d 100644
--- a/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.cc
+++ b/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.cc
@@ -12,6 +12,7 @@
 #include "base/check.h"
 #include "base/containers/span.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/base/io_buffer.h"
 #include "net/base/ip_endpoint.h"
 #include "net/third_party/quiche/src/quiche/quic/core/quic_constants.h"
diff --git a/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.h b/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.h
index 48a1930a..afcfcda2 100644
--- a/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.h
+++ b/chrome/browser/media/router/providers/openscreen/network_service_quic_packet_writer.h
@@ -13,6 +13,7 @@
 #include "net/third_party/quiche/src/quiche/quic/core/quic_packets.h"
 #include "net/third_party/quiche/src/quiche/quic/core/quic_types.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/media/router/providers/openscreen/network_service_async_packet_sender.h"
 
 namespace media_router {
diff --git a/chrome/browser/media/router/test/provider_test_helpers.cc b/chrome/browser/media/router/test/provider_test_helpers.cc
index 4155401..a6fb662 100644
--- a/chrome/browser/media/router/test/provider_test_helpers.cc
+++ b/chrome/browser/media/router/test/provider_test_helpers.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/router/discovery/dial/dial_app_discovery_service.h"
 #include "components/media_router/common/media_source.h"
 #include "components/media_router/common/test/test_helper.h"
diff --git a/chrome/browser/media/router/test/provider_test_helpers.h b/chrome/browser/media/router/test/provider_test_helpers.h
index f71062990..6b849ce 100644
--- a/chrome/browser/media/router/test/provider_test_helpers.h
+++ b/chrome/browser/media/router/test/provider_test_helpers.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/values_test_util.h"
 #include "chrome/browser/media/router/discovery/dial/dial_app_discovery_service.h"
 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service.h"
diff --git a/chrome/browser/media/webrtc/capture_policy_utils_unittest.cc b/chrome/browser/media/webrtc/capture_policy_utils_unittest.cc
index cb07667..7d964aa9 100644
--- a/chrome/browser/media/webrtc/capture_policy_utils_unittest.cc
+++ b/chrome/browser/media/webrtc/capture_policy_utils_unittest.cc
@@ -50,60 +50,62 @@
 
 // Test that the FullCapture allowed list overrides |kScreenCaptureAllowed|.
 TEST_F(CapturePolicyUtilsTest, SimpleOverrideUnrestricted) {
-  base::Value matchlist(base::Value::Type::LIST);
+  base::Value::List matchlist;
   matchlist.Append(kTestSite1Pattern);
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
-  prefs()->Set(prefs::kScreenCaptureAllowedByOrigins, matchlist);
+  prefs()->SetList(prefs::kScreenCaptureAllowedByOrigins, std::move(matchlist));
   EXPECT_EQ(AllowedScreenCaptureLevel::kUnrestricted,
             capture_policy::GetAllowedCaptureLevel(GURL(kTestSite1), *prefs()));
 }
 
 // Test that the Window/Tab allowed list overrides |kScreenCaptureAllowed|.
 TEST_F(CapturePolicyUtilsTest, SimpleOverrideWindowTabs) {
-  base::Value matchlist(base::Value::Type::LIST);
+  base::Value::List matchlist;
   matchlist.Append(kTestSite1Pattern);
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
-  prefs()->Set(prefs::kWindowCaptureAllowedByOrigins, matchlist);
+  prefs()->SetList(prefs::kWindowCaptureAllowedByOrigins, std::move(matchlist));
   EXPECT_EQ(AllowedScreenCaptureLevel::kWindow,
             capture_policy::GetAllowedCaptureLevel(GURL(kTestSite1), *prefs()));
 }
 
 // Test that the Tab allowed list overrides |kScreenCaptureAllowed|.
 TEST_F(CapturePolicyUtilsTest, SimpleOverrideTabs) {
-  base::Value matchlist(base::Value::Type::LIST);
+  base::Value::List matchlist;
   matchlist.Append(kTestSite1Pattern);
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
-  prefs()->Set(prefs::kTabCaptureAllowedByOrigins, matchlist);
+  prefs()->SetList(prefs::kTabCaptureAllowedByOrigins, std::move(matchlist));
   EXPECT_EQ(AllowedScreenCaptureLevel::kTab,
             capture_policy::GetAllowedCaptureLevel(GURL(kTestSite1), *prefs()));
 }
 
 // Test that the Same Origin Tab allowed list overrides |kScreenCaptureAllowed|.
 TEST_F(CapturePolicyUtilsTest, SimpleOverrideSameOriginTabs) {
-  base::Value matchlist(base::Value::Type::LIST);
+  base::Value::List matchlist;
   matchlist.Append(kTestSite1Pattern);
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
-  prefs()->Set(prefs::kSameOriginTabCaptureAllowedByOrigins, matchlist);
+  prefs()->SetList(prefs::kSameOriginTabCaptureAllowedByOrigins,
+                   std::move(matchlist));
   EXPECT_EQ(AllowedScreenCaptureLevel::kSameOrigin,
             capture_policy::GetAllowedCaptureLevel(GURL(kTestSite1), *prefs()));
 }
 
 // Test that an item that doesn't match any list still respects the default.
 TEST_F(CapturePolicyUtilsTest, SimpleOverrideNoMatches) {
-  base::Value matchlist(base::Value::Type::LIST);
+  base::Value::List matchlist;
   matchlist.Append(kTestSite1NonMatchingPattern);
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
-  prefs()->Set(prefs::kSameOriginTabCaptureAllowedByOrigins, matchlist);
+  prefs()->SetList(prefs::kSameOriginTabCaptureAllowedByOrigins,
+                   std::move(matchlist));
   EXPECT_EQ(AllowedScreenCaptureLevel::kDisallowed,
             capture_policy::GetAllowedCaptureLevel(GURL(kTestSite1), *prefs()));
 }
 
 // Ensure that a full wildcard policy is accepted.
 TEST_F(CapturePolicyUtilsTest, TestWildcard) {
-  base::Value matchlist(base::Value::Type::LIST);
+  base::Value::List matchlist;
   matchlist.Append("*");
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
-  prefs()->Set(prefs::kTabCaptureAllowedByOrigins, matchlist);
+  prefs()->SetList(prefs::kTabCaptureAllowedByOrigins, std::move(matchlist));
   EXPECT_EQ(AllowedScreenCaptureLevel::kTab,
             capture_policy::GetAllowedCaptureLevel(GURL(kTestSite1), *prefs()));
   EXPECT_EQ(
@@ -126,25 +128,28 @@
 // Ensure that if a URL appears in multiple lists that it returns the most
 // restrictive list that it is included in.
 TEST_F(CapturePolicyUtilsTest, TestOverrideMoreRestrictive) {
-  base::Value fullCaptureList(base::Value::Type::LIST);
-  fullCaptureList.Append("a.com");
-  fullCaptureList.Append("b.com");
-  fullCaptureList.Append("c.com");
+  base::Value::List full_capture_list;
+  full_capture_list.Append("a.com");
+  full_capture_list.Append("b.com");
+  full_capture_list.Append("c.com");
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
-  prefs()->Set(prefs::kScreenCaptureAllowedByOrigins, fullCaptureList);
+  prefs()->SetList(prefs::kScreenCaptureAllowedByOrigins,
+                   std::move(full_capture_list));
 
-  base::Value windowTabList(base::Value::Type::LIST);
-  windowTabList.Append("b.com");
-  prefs()->Set(prefs::kWindowCaptureAllowedByOrigins, windowTabList);
+  base::Value::List window_tab_list;
+  window_tab_list.Append("b.com");
+  prefs()->SetList(prefs::kWindowCaptureAllowedByOrigins,
+                   std::move(window_tab_list));
 
-  base::Value tabList(base::Value::Type::LIST);
-  tabList.Append("c.com");
-  tabList.Append("d.com");
-  prefs()->Set(prefs::kTabCaptureAllowedByOrigins, tabList);
+  base::Value::List tab_list;
+  tab_list.Append("c.com");
+  tab_list.Append("d.com");
+  prefs()->SetList(prefs::kTabCaptureAllowedByOrigins, std::move(tab_list));
 
-  base::Value sameOriginTabList(base::Value::Type::LIST);
-  sameOriginTabList.Append("d.com");
-  prefs()->Set(prefs::kSameOriginTabCaptureAllowedByOrigins, sameOriginTabList);
+  base::Value::List same_origin_tab_list;
+  same_origin_tab_list.Append("d.com");
+  prefs()->SetList(prefs::kSameOriginTabCaptureAllowedByOrigins,
+                   std::move(same_origin_tab_list));
   EXPECT_EQ(
       AllowedScreenCaptureLevel::kUnrestricted,
       capture_policy::GetAllowedCaptureLevel(GURL("https://a.com"), *prefs()));
@@ -167,17 +172,19 @@
 TEST_F(CapturePolicyUtilsTest, TestSubdomainOverrides) {
   prefs()->SetBoolean(prefs::kScreenCaptureAllowed, false);
 
-  base::Value sameOriginTabList(base::Value::Type::LIST);
-  sameOriginTabList.Append("github.io");
-  prefs()->Set(prefs::kSameOriginTabCaptureAllowedByOrigins, sameOriginTabList);
+  base::Value::List same_origin_tab_list;
+  same_origin_tab_list.Append("github.io");
+  prefs()->SetList(prefs::kSameOriginTabCaptureAllowedByOrigins,
+                   std::move(same_origin_tab_list));
 
-  base::Value tabList(base::Value::Type::LIST);
-  tabList.Append("foo.github.io");
-  prefs()->Set(prefs::kTabCaptureAllowedByOrigins, tabList);
+  base::Value::List tab_list;
+  tab_list.Append("foo.github.io");
+  prefs()->SetList(prefs::kTabCaptureAllowedByOrigins, std::move(tab_list));
 
-  base::Value fullCaptureList(base::Value::Type::LIST);
-  fullCaptureList.Append("[*.]github.io");
-  prefs()->Set(prefs::kScreenCaptureAllowedByOrigins, fullCaptureList);
+  base::Value::List full_capture_list;
+  full_capture_list.Append("[*.]github.io");
+  prefs()->SetList(prefs::kScreenCaptureAllowedByOrigins,
+                   std::move(full_capture_list));
 
   EXPECT_EQ(AllowedScreenCaptureLevel::kSameOrigin,
             capture_policy::GetAllowedCaptureLevel(GURL("https://github.io"),
diff --git a/chrome/browser/media/webrtc/current_tab_desktop_media_list.h b/chrome/browser/media/webrtc/current_tab_desktop_media_list.h
index 102e1bd..2efadddd 100644
--- a/chrome/browser/media/webrtc/current_tab_desktop_media_list.h
+++ b/chrome/browser/media/webrtc/current_tab_desktop_media_list.h
@@ -7,6 +7,7 @@
 
 #include "chrome/browser/media/webrtc/desktop_media_list_base.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/web_contents.h"
 
 // Implementation of DesktopMediaList that only follows a single tab.
diff --git a/chrome/browser/media/webrtc/current_tab_desktop_media_list_unittest.cc b/chrome/browser/media/webrtc/current_tab_desktop_media_list_unittest.cc
index 4923682..94fadd02 100644
--- a/chrome/browser/media/webrtc/current_tab_desktop_media_list_unittest.cc
+++ b/chrome/browser/media/webrtc/current_tab_desktop_media_list_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/media/webrtc/desktop_media_list.h"
 #include "chrome/browser/profiles/profile_manager.h"
diff --git a/chrome/browser/media/webrtc/system_media_capture_permissions_mac.mm b/chrome/browser/media/webrtc/system_media_capture_permissions_mac.mm
index bafc005..09430ea 100644
--- a/chrome/browser/media/webrtc/system_media_capture_permissions_mac.mm
+++ b/chrome/browser/media/webrtc/system_media_capture_permissions_mac.mm
@@ -14,6 +14,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/no_destructor.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/webrtc/media_authorization_wrapper_mac.h"
 #include "chrome/browser/media/webrtc/system_media_capture_permissions_stats_mac.h"
diff --git a/chrome/browser/media/webrtc/tab_desktop_media_list.h b/chrome/browser/media/webrtc/tab_desktop_media_list.h
index 007f972..65f6c336 100644
--- a/chrome/browser/media/webrtc/tab_desktop_media_list.h
+++ b/chrome/browser/media/webrtc/tab_desktop_media_list.h
@@ -8,6 +8,7 @@
 #include <map>
 
 #include "base/functional/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/media/webrtc/desktop_media_list_base.h"
 
 // Implementation of DesktopMediaList that shows tab/WebContents.
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_manager.cc b/chrome/browser/media/webrtc/webrtc_event_log_manager.cc
index 8f7fb7f..dd81177e 100644
--- a/chrome/browser/media/webrtc/webrtc_event_log_manager.cc
+++ b/chrome/browser/media/webrtc/webrtc_event_log_manager.cc
@@ -9,6 +9,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_manager.h b/chrome/browser/media/webrtc/webrtc_event_log_manager.h
index 79d0ee7..cc4333b6 100644
--- a/chrome/browser/media/webrtc/webrtc_event_log_manager.h
+++ b/chrome/browser/media/webrtc/webrtc_event_log_manager.h
@@ -16,6 +16,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/updateable_sequenced_task_runner.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_manager_remote.cc b/chrome/browser/media/webrtc/webrtc_event_log_manager_remote.cc
index 28072c5c..635f28e 100644
--- a/chrome/browser/media/webrtc/webrtc_event_log_manager_remote.cc
+++ b/chrome/browser/media/webrtc/webrtc_event_log_manager_remote.cc
@@ -17,6 +17,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/common/chrome_switches.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
index bfbb963..6cd0ba0 100644
--- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
+++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
@@ -8,6 +8,7 @@
 #include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
index b80dd9f..d9ff8000 100644
--- a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
+++ b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
@@ -619,16 +619,16 @@
 
     // We will restrict all pages to "Tab Capture" only. This should force App
     // Windows to show up in the tabs list, and thus make it selectable.
-    base::Value matchlist(base::Value::Type::LIST);
+    base::Value::List matchlist;
     matchlist.Append("*");
-    browser()->profile()->GetPrefs()->Set(prefs::kTabCaptureAllowedByOrigins,
-                                          matchlist);
+    browser()->profile()->GetPrefs()->SetList(
+        prefs::kTabCaptureAllowedByOrigins, std::move(matchlist));
   }
 
   void TearDownOnMainThread() override {
     extensions::PlatformAppBrowserTest::TearDownOnMainThread();
-    browser()->profile()->GetPrefs()->Set(prefs::kTabCaptureAllowedByOrigins,
-                                          base::Value(base::Value::Type::LIST));
+    browser()->profile()->GetPrefs()->SetList(
+        prefs::kTabCaptureAllowedByOrigins, base::Value::List());
   }
 
   extensions::AppWindow* CreateAppWindowWithTitle(const std::u16string& title) {
@@ -685,17 +685,16 @@
     ASSERT_TRUE(embedded_test_server()->Start());
 
     // Restrict all origins to SameOrigin tab capture only.
-    base::Value matchlist(base::Value::Type::LIST);
+    base::Value::List matchlist;
     matchlist.Append("*");
-    browser()->profile()->GetPrefs()->Set(
-        prefs::kSameOriginTabCaptureAllowedByOrigins, matchlist);
+    browser()->profile()->GetPrefs()->SetList(
+        prefs::kSameOriginTabCaptureAllowedByOrigins, std::move(matchlist));
   }
 
   void TearDownOnMainThread() override {
     WebRtcScreenCaptureBrowserTest::TearDownOnMainThread();
-    browser()->profile()->GetPrefs()->Set(
-        prefs::kSameOriginTabCaptureAllowedByOrigins,
-        base::Value(base::Value::Type::LIST));
+    browser()->profile()->GetPrefs()->SetList(
+        prefs::kSameOriginTabCaptureAllowedByOrigins, base::Value::List());
   }
 };
 
@@ -980,10 +979,10 @@
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
     // The picker itself shows previews which are unsupported in Lacros tests.
-    base::Value matchlist(base::Value::Type::LIST);
+    base::Value::List matchlist;
     matchlist.Append("*");
-    browser()->profile()->GetPrefs()->Set(prefs::kTabCaptureAllowedByOrigins,
-                                          matchlist);
+    browser()->profile()->GetPrefs()->SetList(
+        prefs::kTabCaptureAllowedByOrigins, std::move(matchlist));
 #endif
 
     // Fire up the page.
diff --git a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
index 883718fe..70ced9f3 100644
--- a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
+++ b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
@@ -13,6 +13,7 @@
 #include "base/functional/callback.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h"
 #include "chrome/browser/media_galleries/fileapi/mtp_device_async_delegate.h"
diff --git a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h
index 5d31aa5..25ded61 100644
--- a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h
+++ b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "storage/browser/blob/shareable_file_reference.h"
 #include "storage/browser/file_system/async_file_util.h"
 #include "storage/browser/file_system/watcher_manager.h"
diff --git a/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc b/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc
index 08196d2..0961b54 100644
--- a/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc
+++ b/chrome/browser/media_galleries/fileapi/media_file_validator_browsertest.cc
@@ -15,6 +15,7 @@
 #include "base/location.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/memory/enterprise_memory_limit_evaluator.h b/chrome/browser/memory/enterprise_memory_limit_evaluator.h
index 68fe57c0..aad8269 100644
--- a/chrome/browser/memory/enterprise_memory_limit_evaluator.h
+++ b/chrome/browser/memory/enterprise_memory_limit_evaluator.h
@@ -9,7 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/memory_pressure/memory_pressure_voter.h"
 #include "components/performance_manager/public/decorators/process_metrics_decorator.h"
 #include "components/performance_manager/public/graph/graph.h"
diff --git a/chrome/browser/metrics/oom/out_of_memory_reporter_browsertest.cc b/chrome/browser/metrics/oom/out_of_memory_reporter_browsertest.cc
index 3c7cb8f..358523e 100644
--- a/chrome/browser/metrics/oom/out_of_memory_reporter_browsertest.cc
+++ b/chrome/browser/metrics/oom/out_of_memory_reporter_browsertest.cc
@@ -7,6 +7,7 @@
 #include <set>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/metrics/per_user_state_manager_chromeos.h b/chrome/browser/metrics/per_user_state_manager_chromeos.h
index 80c9ec7..6f235eca 100644
--- a/chrome/browser/metrics/per_user_state_manager_chromeos.h
+++ b/chrome/browser/metrics/per_user_state_manager_chromeos.h
@@ -11,6 +11,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/ash/settings/device_settings_service.h"
 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
diff --git a/chrome/browser/metrics/perf/metric_provider.h b/chrome/browser/metrics/perf/metric_provider.h
index d157612..a80195c 100644
--- a/chrome/browser/metrics/perf/metric_provider.h
+++ b/chrome/browser/metrics/perf/metric_provider.h
@@ -12,6 +12,7 @@
 #include "base/functional/callback_forward.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/metrics/perf/metric_collector.h"
 
 namespace base {
diff --git a/chrome/browser/metrics/perf/profile_provider_unittest_main.cc b/chrome/browser/metrics/perf/profile_provider_unittest_main.cc
index 12c0eeb..0084074 100644
--- a/chrome/browser/metrics/perf/profile_provider_unittest_main.cc
+++ b/chrome/browser/metrics/perf/profile_provider_unittest_main.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/statistics_recorder.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/test_suite.h"
diff --git a/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc b/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc
index 28d23fa8..e48069f 100644
--- a/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc
+++ b/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/metrics/perf/windowed_incognito_observer.h"
 
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/test/base/test_browser_window.h"
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
index e0b002a..99d4e16f 100644
--- a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
+++ b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/trace_event_analyzer.h"
diff --git a/chrome/browser/metrics/structured/ash_structured_metrics_recorder.cc b/chrome/browser/metrics/structured/ash_structured_metrics_recorder.cc
index e2e6745a..bfeed0bd 100644
--- a/chrome/browser/metrics/structured/ash_structured_metrics_recorder.cc
+++ b/chrome/browser/metrics/structured/ash_structured_metrics_recorder.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/metrics/structured/ash_structured_metrics_recorder.h"
 #include <memory>
 
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ash/crosapi/crosapi_ash.h"
 #include "chrome/browser/ash/crosapi/crosapi_manager.h"
 #include "chromeos/crosapi/mojom/structured_metrics_service.mojom.h"
diff --git a/chrome/browser/metrics/variations/variations_http_headers_browsertest.cc b/chrome/browser/metrics/variations/variations_http_headers_browsertest.cc
index 3e5a7fe..632426cf 100644
--- a/chrome/browser/metrics/variations/variations_http_headers_browsertest.cc
+++ b/chrome/browser/metrics/variations/variations_http_headers_browsertest.cc
@@ -15,7 +15,6 @@
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_browser_main.h"
diff --git a/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc b/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc
index 646ae9d..1c5e125e0 100644
--- a/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc
+++ b/chrome/browser/navigation_predictor/anchor_element_preloader_browsertest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc
index 7edf2aa..46ed3f2 100644
--- a/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc
+++ b/chrome/browser/navigation_predictor/navigation_predictor_preconnect_client_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/navigation_predictor/search_engine_preconnector_browsertest.cc b/chrome/browser/navigation_predictor/search_engine_preconnector_browsertest.cc
index 1973618..347d0f7 100644
--- a/chrome/browser/navigation_predictor/search_engine_preconnector_browsertest.cc
+++ b/chrome/browser/navigation_predictor/search_engine_preconnector_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "base/containers/contains.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
diff --git a/chrome/browser/nearby_sharing/nearby_file_handler.cc b/chrome/browser/nearby_sharing/nearby_file_handler.cc
index 1af1b7e..88fe545 100644
--- a/chrome/browser/nearby_sharing/nearby_file_handler.cc
+++ b/chrome/browser/nearby_sharing/nearby_file_handler.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/nearby_sharing/nearby_file_handler.h"
 
 #include "base/files/file_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chromeos/ash/services/nearby/public/mojom/nearby_connections_types.mojom.h"
diff --git a/chrome/browser/nearby_sharing/nearby_share_delegate_impl.h b/chrome/browser/nearby_sharing/nearby_share_delegate_impl.h
index e05feae..c84ff7e 100644
--- a/chrome/browser/nearby_sharing/nearby_share_delegate_impl.h
+++ b/chrome/browser/nearby_sharing/nearby_share_delegate_impl.h
@@ -12,7 +12,6 @@
 #include "ash/public/cpp/session/session_observer.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/nearby_sharing/nearby_sharing_service.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 
 namespace ash {
 class NearbyShareController;
diff --git a/chrome/browser/net/chrome_mojo_proxy_resolver_factory.cc b/chrome/browser/net/chrome_mojo_proxy_resolver_factory.cc
index 4798275..cd8cf1e4 100644
--- a/chrome/browser/net/chrome_mojo_proxy_resolver_factory.cc
+++ b/chrome/browser/net/chrome_mojo_proxy_resolver_factory.cc
@@ -10,7 +10,6 @@
 #include "base/functional/bind.h"
 #include "base/no_destructor.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/public/browser/child_process_host.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc
index 390cfd9..0fbe4612 100644
--- a/chrome/browser/net/errorpage_browsertest.cc
+++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -20,7 +20,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/net/file_downloader_unittest.cc b/chrome/browser/net/file_downloader_unittest.cc
index 7be9c6f..60b9de1 100644
--- a/chrome/browser/net/file_downloader_unittest.cc
+++ b/chrome/browser/net/file_downloader_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/functional/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/test/test_utils.h"
 #include "net/http/http_status_code.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
diff --git a/chrome/browser/net/load_timing_browsertest.cc b/chrome/browser/net/load_timing_browsertest.cc
index d05baec..687d46ac 100644
--- a/chrome/browser/net/load_timing_browsertest.cc
+++ b/chrome/browser/net/load_timing_browsertest.cc
@@ -11,7 +11,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/net/profile_network_context_service.h"
diff --git a/chrome/browser/net/net_error_diagnostics_dialog_win.cc b/chrome/browser/net/net_error_diagnostics_dialog_win.cc
index c22bf5d..56c16ff9 100644
--- a/chrome/browser/net/net_error_diagnostics_dialog_win.cc
+++ b/chrome/browser/net/net_error_diagnostics_dialog_win.cc
@@ -21,6 +21,7 @@
 #include "base/native_library.h"
 #include "base/scoped_native_library.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/threading/thread.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/net/network_quality_tracker_browsertest.cc b/chrome/browser/net/network_quality_tracker_browsertest.cc
index 512be29..1779629 100644
--- a/chrome/browser/net/network_quality_tracker_browsertest.cc
+++ b/chrome/browser/net/network_quality_tracker_browsertest.cc
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/task/deferred_sequenced_task_runner.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_impl.h"
 #include "chrome/browser/chrome_content_browser_client.h"
diff --git a/chrome/browser/net/system_network_context_manager_browsertest.cc b/chrome/browser/net/system_network_context_manager_browsertest.cc
index b0af8f24..6361e639 100644
--- a/chrome/browser/net/system_network_context_manager_browsertest.cc
+++ b/chrome/browser/net/system_network_context_manager_browsertest.cc
@@ -12,7 +12,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/values_test_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/notifications/arc_application_notifier_controller.cc b/chrome/browser/notifications/arc_application_notifier_controller.cc
index a0eef725..838a1626 100644
--- a/chrome/browser/notifications/arc_application_notifier_controller.cc
+++ b/chrome/browser/notifications/arc_application_notifier_controller.cc
@@ -8,7 +8,7 @@
 
 #include "ash/public/cpp/notifier_metadata.h"
 #include "base/functional/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/notifications/notifier_dataset.h"
diff --git a/chrome/browser/notifications/notification_permission_context.cc b/chrome/browser/notifications/notification_permission_context.cc
index 87b2e09..b161e516 100644
--- a/chrome/browser/notifications/notification_permission_context.cc
+++ b/chrome/browser/notifications/notification_permission_context.cc
@@ -10,7 +10,6 @@
 #include "base/location.h"
 #include "base/rand_util.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/visibility_timer_tab_helper.h"
diff --git a/chrome/browser/notifications/notification_platform_bridge_linux.cc b/chrome/browser/notifications/notification_platform_bridge_linux.cc
index 3ca9fab..5f45288 100644
--- a/chrome/browser/notifications/notification_platform_bridge_linux.cc
+++ b/chrome/browser/notifications/notification_platform_bridge_linux.cc
@@ -32,6 +32,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/version.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/notifications/pwa_notifier_controller.cc b/chrome/browser/notifications/pwa_notifier_controller.cc
index 16ba228f..7c736761 100644
--- a/chrome/browser/notifications/pwa_notifier_controller.cc
+++ b/chrome/browser/notifications/pwa_notifier_controller.cc
@@ -6,7 +6,7 @@
 
 #include "ash/public/cpp/notifier_metadata.h"
 #include "base/functional/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/notifications/notifier_dataset.h"
diff --git a/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc b/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc
index 3ab4242..09a5fc7 100644
--- a/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc
+++ b/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc
@@ -16,7 +16,6 @@
 #include "base/guid.h"
 #include "base/memory/raw_ref.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/notifications/scheduler/internal/icon_store.h"
 #include "chrome/browser/notifications/scheduler/internal/notification_entry.h"
 #include "chrome/browser/notifications/scheduler/internal/scheduler_config.h"
diff --git a/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc b/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc
index b96bb30..09344629 100644
--- a/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc
+++ b/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc
@@ -12,6 +12,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/offline_pages/android/offline_page_auto_fetcher.h"
 #include "chrome/browser/offline_pages/android/offline_page_auto_fetcher_service.h"
diff --git a/chrome/browser/offline_pages/download_archive_manager.cc b/chrome/browser/offline_pages/download_archive_manager.cc
index 7cb68b25..59b878a 100644
--- a/chrome/browser/offline_pages/download_archive_manager.cc
+++ b/chrome/browser/offline_pages/download_archive_manager.cc
@@ -4,6 +4,7 @@
 
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/offline_pages/download_archive_manager.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc b/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc
index 764c107..6594dd8 100644
--- a/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc
+++ b/chrome/browser/offline_pages/offline_page_tab_helper_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/offline_pages/prefetch/prefetch_service_factory.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/offline_pages/prefetch/gcm_token.cc b/chrome/browser/offline_pages/prefetch/gcm_token.cc
index 1dd78c4..da1c25d6 100644
--- a/chrome/browser/offline_pages/prefetch/gcm_token.cc
+++ b/chrome/browser/offline_pages/prefetch/gcm_token.cc
@@ -9,7 +9,6 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/logging.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/gcm/instance_id/instance_id_profile_service_factory.h"
 #include "components/gcm_driver/instance_id/instance_id.h"
diff --git a/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc b/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc
index 214d8ce2c..b5c90d77 100644
--- a/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc
+++ b/chrome/browser/offline_pages/prefetch/prefetch_service_factory.cc
@@ -11,9 +11,9 @@
 #include "base/files/file_path.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/singleton.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/download/background_download_service_factory.h"
 #include "chrome/browser/image_fetcher/image_fetcher_service_factory.h"
 #include "chrome/browser/net/system_network_context_manager.h"
diff --git a/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.cc b/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.cc
index 17cb5ca7..c3b420e0 100644
--- a/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.cc
+++ b/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.cc
@@ -35,23 +35,3 @@
   optimization_guide::PredictionModelStore::GetInstance()->Initialize(
       g_browser_process->local_state(), model_downloads_dir);
 }
-
-void ChromeBrowserMainExtraPartsOptimizationGuide::PostProfileInit(
-    Profile* profile,
-    bool is_initial_profile) {
-  if (!optimization_guide::features::IsInstallWideModelStoreEnabled())
-    return;
-
-  if (profile->IsOffTheRecord())
-    return;
-
-  auto* optimization_guide_keyed_service =
-      OptimizationGuideKeyedServiceFactory::GetForProfile(profile);
-  if (!optimization_guide_keyed_service)
-    return;
-
-  optimization_guide_keyed_service->GetPredictionManager()
-      ->MaybeInitializeModelDownloads(
-          optimization_guide_keyed_service
-              ->BackgroundDownloadServiceProvider());
-}
diff --git a/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.h b/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.h
index e93db7c..27063fa 100644
--- a/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.h
+++ b/chrome/browser/optimization_guide/chrome_browser_main_extra_parts_optimization_guide.h
@@ -7,8 +7,6 @@
 
 #include "chrome/browser/chrome_browser_main_extra_parts.h"
 
-class Profile;
-
 // This class is used to initialize the optimization guide model store which is
 // install-wide, as part of Chrome browser process startup.
 class ChromeBrowserMainExtraPartsOptimizationGuide
@@ -18,7 +16,6 @@
 
   // ChromeBrowserMainExtraParts implementation:
   void PreCreateThreads() override;
-  void PostProfileInit(Profile* profile, bool is_initial_profile) override;
 };
 
 #endif  // CHROME_BROWSER_OPTIMIZATION_GUIDE_CHROME_BROWSER_MAIN_EXTRA_PARTS_OPTIMIZATION_GUIDE_H_
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
index 903dd708..f6f4a042 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
@@ -262,6 +262,10 @@
           // |this| owns |prediction_manager_|.
           base::Unretained(this)));
 
+  // Register for profile initialization event to initialize the model
+  // downloads.
+  profile_observation_.Observe(profile);
+
   // Some previous paths were written in incorrect locations. Delete the
   // old paths.
   //
@@ -390,6 +394,23 @@
                                                request_context, callback);
 }
 
+void OptimizationGuideKeyedService::OnProfileInitializationComplete(
+    Profile* profile) {
+  DCHECK(profile_observation_.IsObservingSource(profile));
+  profile_observation_.Reset();
+
+  if (!optimization_guide::features::IsInstallWideModelStoreEnabled()) {
+    return;
+  }
+
+  if (profile->IsOffTheRecord()) {
+    return;
+  }
+
+  GetPredictionManager()->MaybeInitializeModelDownloads(
+      BackgroundDownloadServiceProvider());
+}
+
 void OptimizationGuideKeyedService::AddHintForTesting(
     const GURL& url,
     optimization_guide::proto::OptimizationType optimization_type,
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
index 4331c1e..8fc4ce75 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
@@ -9,7 +9,9 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
+#include "base/scoped_observation.h"
 #include "build/build_config.h"
+#include "chrome/browser/profiles/profile_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/optimization_guide/content/browser/optimization_guide_decider.h"
 #include "components/optimization_guide/core/new_optimization_guide_decider.h"
@@ -63,7 +65,8 @@
     : public KeyedService,
       public optimization_guide::NewOptimizationGuideDecider,
       public optimization_guide::OptimizationGuideDecider,
-      public optimization_guide::OptimizationGuideModelProvider {
+      public optimization_guide::OptimizationGuideModelProvider,
+      public ProfileObserver {
  public:
   explicit OptimizationGuideKeyedService(
       content::BrowserContext* browser_context);
@@ -172,6 +175,9 @@
   // KeyedService implementation:
   void Shutdown() override;
 
+  // ProfileObserver implementation:
+  void OnProfileInitializationComplete(Profile* profile) override;
+
   // optimization_guide::OptimizationGuideDecider implementation:
   void CanApplyOptimizationOnDemand(
       const std::vector<GURL>& urls,
@@ -215,6 +221,9 @@
   // The tab URL provider to use for fetching information for the user's active
   // tabs. Will be null if the user is off the record.
   std::unique_ptr<optimization_guide::TabUrlProvider> tab_url_provider_;
+
+  // Used to observe profile initialization event.
+  base::ScopedObservation<Profile, ProfileObserver> profile_observation_{this};
 };
 
 #endif  // CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_KEYED_SERVICE_H_
diff --git a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
index 072569f9..e5ed159 100644
--- a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
+++ b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
@@ -463,15 +463,9 @@
         "OptimizationGuide.PredictionModelUpdateVersion.PainfulPageLoad", 0);
   }
 }
-// Flaky on multiple ASAN bots. See https://crbug.com/1266318
-#if defined(ADDRESS_SANITIZER)
-#define MAYBE_TestIncognitoDoesntFetchModels \
-  DISABLED_TestIncognitoDoesntFetchModels
-#else
-#define MAYBE_TestIncognitoDoesntFetchModels TestIncognitoDoesntFetchModels
-#endif
+
 IN_PROC_BROWSER_TEST_P(PredictionManagerModelDownloadingBrowserTest,
-                       MAYBE_TestIncognitoDoesntFetchModels) {
+                       TestIncognitoDoesntFetchModels) {
   base::HistogramTester histogram_tester;
 
   SetResponseType(PredictionModelsFetcherRemoteResponseType::
@@ -715,14 +709,8 @@
       "OptimizationGuide.PredictionModelLoadedVersion.PainfulPageLoad", 0);
 }
 
-// Flaky on multiple ASAN bots. See https://crbug.com/1266318
-#if defined(ADDRESS_SANITIZER)
-#define MAYBE_TestSwitchProfileDoesntCrash DISABLED_TestSwitchProfileDoesntCrash
-#else
-#define MAYBE_TestSwitchProfileDoesntCrash TestSwitchProfileDoesntCrash
-#endif
 IN_PROC_BROWSER_TEST_P(PredictionManagerModelDownloadingBrowserTest,
-                       MAYBE_TestSwitchProfileDoesntCrash) {
+                       TestSwitchProfileDoesntCrash) {
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   base::FilePath other_path =
       profile_manager->GenerateNextProfileDirectoryPath();
diff --git a/chrome/browser/optimization_guide/prediction/prediction_model_store_browsertest.cc b/chrome/browser/optimization_guide/prediction/prediction_model_store_browsertest.cc
index 306a304c..d6102f7 100644
--- a/chrome/browser/optimization_guide/prediction/prediction_model_store_browsertest.cc
+++ b/chrome/browser/optimization_guide/prediction/prediction_model_store_browsertest.cc
@@ -270,18 +270,10 @@
             model_file_observer_foo.model_info()->GetModelFilePath());
 }
 
-#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
-#define MAYBE_TestDissimilarProfilesNotShareModel \
-  DISABLED_TestDissimilarProfilesNotShareModel
-#else
-#define MAYBE_TestDissimilarProfilesNotShareModel \
-  TestDissimilarProfilesNotShareModel
-#endif
-
 // Tests that two dissimilar profiles do not share the model, and the model will
 // be redownloaded.
 IN_PROC_BROWSER_TEST_F(PredictionModelStoreBrowserTest,
-                       MAYBE_TestDissimilarProfilesNotShareModel) {
+                       TestDissimilarProfilesNotShareModel) {
   ModelFileObserver model_file_observer;
   RegisterAndWaitForModelUpdate(&model_file_observer);
 
@@ -316,10 +308,8 @@
 
 // Tests that two similar profiles share the model, and the model is not
 // redownloaded, based on server returned model cache key.
-IN_PROC_BROWSER_TEST_F(
-    PredictionModelStoreBrowserTest,
-    // TODO(crbug.com/1401928): Re-enable this test
-    DISABLED_TestSimilarProfilesShareModelWithServerModelCacheKey) {
+IN_PROC_BROWSER_TEST_F(PredictionModelStoreBrowserTest,
+                       TestSimilarProfilesShareModelWithServerModelCacheKey) {
   ModelFileObserver model_file_observer_foo, model_file_observer_bar;
   set_server_model_cache_key(CreateModelCacheKey(kTestLocaleFoo));
   {
@@ -356,8 +346,7 @@
 // be redownloaded, based on server returned model cache key.
 IN_PROC_BROWSER_TEST_F(
     PredictionModelStoreBrowserTest,
-    // TODO(crbug.com/1401928): Re-enable this test
-    DISABLED_TestDissimilarProfilesNotShareModelWithServerModelCacheKey) {
+    TestDissimilarProfilesNotShareModelWithServerModelCacheKey) {
   ModelFileObserver model_file_observer_foo, model_file_observer_bar;
   {
     set_server_model_cache_key(CreateModelCacheKey(kTestLocaleFoo));
@@ -399,8 +388,7 @@
 // Tests that when a second similar profile is loaded, model is downloaded when
 // the model version has been updated. The old model should not be used.
 IN_PROC_BROWSER_TEST_F(PredictionModelStoreBrowserTest,
-                       // TODO(crbug.com/1401928): Re-enable this test
-                       DISABLED_TestSimilarProfilesOnModelVersionUpdate) {
+                       TestSimilarProfilesOnModelVersionUpdate) {
   ModelFileObserver model_file_observer_foo, model_file_observer_bar;
   set_server_model_cache_key(CreateModelCacheKey(kTestLocaleFoo));
   {
diff --git a/chrome/browser/password_manager/android/password_store_android_backend.h b/chrome/browser/password_manager/android/password_store_android_backend.h
index d615aa66..7ff1105d 100644
--- a/chrome/browser/password_manager/android/password_store_android_backend.h
+++ b/chrome/browser/password_manager/android/password_store_android_backend.h
@@ -12,6 +12,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/time/time.h"
 #include "base/types/pass_key.h"
diff --git a/chrome/browser/password_manager/android/password_store_android_backend_bridge_helper_impl.h b/chrome/browser/password_manager/android/password_store_android_backend_bridge_helper_impl.h
index 78d538e..ff97c65d 100644
--- a/chrome/browser/password_manager/android/password_store_android_backend_bridge_helper_impl.h
+++ b/chrome/browser/password_manager/android/password_store_android_backend_bridge_helper_impl.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_PASSWORD_STORE_ANDROID_BACKEND_BRIDGE_HELPER_IMPL_H_
 
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/password_manager/android/password_store_android_backend_bridge_helper.h"
 
 namespace password_manager {
diff --git a/chrome/browser/password_manager/password_manager_test_base.cc b/chrome/browser/password_manager/password_manager_test_base.cc
index 4192c49..8fce3cda 100644
--- a/chrome/browser/password_manager/password_manager_test_base.cc
+++ b/chrome/browser/password_manager/password_manager_test_base.cc
@@ -15,6 +15,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/password_manager/account_password_store_factory.h"
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/password_manager/password_store_factory.h"
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc
index ef28ba2..d1e9f21 100644
--- a/chrome/browser/pdf/pdf_extension_test.cc
+++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -28,6 +28,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/icu_test_util.h"
 #include "base/test/metrics/histogram_tester.h"
diff --git a/chrome/browser/performance_manager/mechanisms/page_discarder.cc b/chrome/browser/performance_manager/mechanisms/page_discarder.cc
index 2dedbc4..d015e55 100644
--- a/chrome/browser/performance_manager/mechanisms/page_discarder.cc
+++ b/chrome/browser/performance_manager/mechanisms/page_discarder.cc
@@ -31,14 +31,14 @@
 // UrgentlyDiscardMultiplePages can keep reclaiming until the reclaim target is
 // met or there is no discardable page.
 bool DiscardPagesOnUIThread(
-    const std::vector<std::pair<WebContentsProxy, uint64_t>>& proxies_and_rss) {
+    const std::vector<std::pair<WebContentsProxy, uint64_t>>& proxies_and_pmf) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   if (disabled_for_testing)
     return false;
 
   bool result = false;
-  for (auto proxy : proxies_and_rss) {
+  for (auto proxy : proxies_and_pmf) {
     content::WebContents* const contents = proxy.first.Get();
     if (!contents)
       continue;
@@ -50,7 +50,7 @@
 
     if (lifecycle_unit->DiscardTab(
             resource_coordinator::LifecycleUnitDiscardReason::URGENT,
-            /*resident_set_size_estimate=*/proxy.second)) {
+            /*memory_footprint_estimate=*/proxy.second)) {
       result = true;
     }
   }
@@ -68,15 +68,15 @@
 void PageDiscarder::DiscardPageNodes(
     const std::vector<const PageNode*>& page_nodes,
     base::OnceCallback<void(bool)> post_discard_cb) {
-  std::vector<std::pair<WebContentsProxy, uint64_t>> proxies_and_rss;
-  proxies_and_rss.reserve(page_nodes.size());
+  std::vector<std::pair<WebContentsProxy, uint64_t>> proxies_and_pmf;
+  proxies_and_pmf.reserve(page_nodes.size());
   for (auto* page_node : page_nodes) {
-    proxies_and_rss.emplace_back(page_node->GetContentsProxy(),
-                                 page_node->EstimateResidentSetSize());
+    proxies_and_pmf.emplace_back(page_node->GetContentsProxy(),
+                                 page_node->EstimatePrivateFootprintSize());
   }
   content::GetUIThreadTaskRunner({})->PostTaskAndReplyWithResult(
       FROM_HERE,
-      base::BindOnce(&DiscardPagesOnUIThread, std::move(proxies_and_rss)),
+      base::BindOnce(&DiscardPagesOnUIThread, std::move(proxies_and_pmf)),
       std::move(post_discard_cb));
 }
 
diff --git a/chrome/browser/performance_manager/mechanisms/page_discarder_browsertest.cc b/chrome/browser/performance_manager/mechanisms/page_discarder_browsertest.cc
index 1c3f7e0..b8e37d1c 100644
--- a/chrome/browser/performance_manager/mechanisms/page_discarder_browsertest.cc
+++ b/chrome/browser/performance_manager/mechanisms/page_discarder_browsertest.cc
@@ -44,7 +44,7 @@
              uint64_t* total_ptr) {
             EXPECT_TRUE(page_node);
 
-            // Simulate that there are RSS estimates available for the frames in
+            // Simulate that there are PMF estimates available for the frames in
             // this page.
             performance_manager::GraphOperations::VisitFrameTreePreOrder(
                 page_node.get(),
@@ -52,7 +52,7 @@
                     [](uint64_t* total, const FrameNode* frame_node) {
                       *total += 1;
                       FrameNodeImpl::FromNode(frame_node)
-                          ->SetResidentSetKbEstimate(1);
+                          ->SetPrivateFootprintKbEstimate(1);
                       return true;
                     },
                     total_ptr));
@@ -77,7 +77,7 @@
       performance_manager::user_tuning::UserPerformanceTuningManager::
           PreDiscardResourceUsage::FromWebContents(new_contents);
   EXPECT_TRUE(pre_discard_resource_usage);
-  EXPECT_EQ(total, pre_discard_resource_usage->resident_set_size_estimate_kb());
+  EXPECT_EQ(total, pre_discard_resource_usage->memory_footprint_estimate_kb());
 }
 
 }  // namespace performance_manager
diff --git a/chrome/browser/performance_manager/public/user_tuning/user_performance_tuning_manager.h b/chrome/browser/performance_manager/public/user_tuning/user_performance_tuning_manager.h
index 548211d..9d2c9c5 100644
--- a/chrome/browser/performance_manager/public/user_tuning/user_performance_tuning_manager.h
+++ b/chrome/browser/performance_manager/public/user_tuning/user_performance_tuning_manager.h
@@ -98,19 +98,19 @@
       : public content::WebContentsUserData<PreDiscardResourceUsage> {
    public:
     PreDiscardResourceUsage(content::WebContents* contents,
-                            uint64_t resident_set_size_estimate);
+                            uint64_t memory_footprint_estimate);
     ~PreDiscardResourceUsage() override;
 
     // Returns the resource usage estimate in kilobytes.
-    uint64_t resident_set_size_estimate_kb() const {
-      return resident_set_size_estimate_;
+    uint64_t memory_footprint_estimate_kb() const {
+      return memory_footprint_estimate_;
     }
 
    private:
     friend WebContentsUserData;
     WEB_CONTENTS_USER_DATA_KEY_DECL();
 
-    uint64_t resident_set_size_estimate_ = 0;
+    uint64_t memory_footprint_estimate_ = 0;
   };
 
   static UserPerformanceTuningManager* GetInstance();
diff --git a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc
index 57bec1e7..f1ee6eb8 100644
--- a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc
+++ b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc
@@ -86,9 +86,9 @@
 
 UserPerformanceTuningManager::PreDiscardResourceUsage::PreDiscardResourceUsage(
     content::WebContents* contents,
-    uint64_t resident_set_size_estimate)
+    uint64_t memory_footprint_estimate)
     : content::WebContentsUserData<PreDiscardResourceUsage>(*contents),
-      resident_set_size_estimate_(resident_set_size_estimate) {}
+      memory_footprint_estimate_(memory_footprint_estimate) {}
 
 UserPerformanceTuningManager::PreDiscardResourceUsage::
     ~PreDiscardResourceUsage() = default;
diff --git a/chrome/browser/performance_monitor/system_monitor.h b/chrome/browser/performance_monitor/system_monitor.h
index a96376dc..dbf3596 100644
--- a/chrome/browser/performance_monitor/system_monitor.h
+++ b/chrome/browser/performance_monitor/system_monitor.h
@@ -14,6 +14,7 @@
 #include "base/observer_list.h"
 #include "base/process/process_metrics.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/browser/plugins/plugin_info_host_impl_browsertest.cc b/chrome/browser/plugins/plugin_info_host_impl_browsertest.cc
index 07e1564..bcb0722b 100644
--- a/chrome/browser/plugins/plugin_info_host_impl_browsertest.cc
+++ b/chrome/browser/plugins/plugin_info_host_impl_browsertest.cc
@@ -59,11 +59,6 @@
 using ::testing::IsEmpty;
 using ::testing::SizeIs;
 
-#if BUILDFLAG(ENABLE_PDF)
-constexpr base::FilePath::CharType kPdfViewerExtensionPath[] =
-    FILE_PATH_LITERAL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/");
-#endif  // BUILDFLAG(ENABLE_PDF)
-
 }  // namespace
 
 class PluginInfoHostImplTest : public InProcessBrowserTest {
@@ -124,13 +119,16 @@
 #endif  // BUILDFLAG_ENABLE_NACL)
 
 #if BUILDFLAG(ENABLE_PDF)
-  EXPECT_THAT(plugins,
-              Contains(Field("path", &WebPluginInfo::path,
-                             base::FilePath(kPdfViewerExtensionPath))));
   EXPECT_THAT(
       plugins,
-      Contains(Field("path", &WebPluginInfo::path,
-                     base::FilePath(ChromeContentClient ::kPDFPluginPath))));
+      Contains(
+          Field("path", &WebPluginInfo::path,
+                base::FilePath(ChromeContentClient::kPDFExtensionPluginPath))));
+  EXPECT_THAT(
+      plugins,
+      Contains(
+          Field("path", &WebPluginInfo::path,
+                base::FilePath(ChromeContentClient ::kPDFInternalPluginPath))));
   expected_plugin_count += 2;
 #endif  // BUILDFLAG(ENABLE_PDF)
 
@@ -282,7 +280,8 @@
 
   // `WebPluginInfo` fields.
   EXPECT_EQ(kPluginName, plugin_info->plugin.name);
-  EXPECT_EQ(base::FilePath(kPdfViewerExtensionPath), plugin_info->plugin.path);
+  EXPECT_EQ(base::FilePath(ChromeContentClient::kPDFExtensionPluginPath),
+            plugin_info->plugin.path);
   EXPECT_EQ(u"", plugin_info->plugin.version);
   EXPECT_EQ(u"", plugin_info->plugin.desc);
   EXPECT_EQ(WebPluginInfo::PLUGIN_TYPE_BROWSER_PLUGIN,
@@ -338,7 +337,7 @@
 
   // `WebPluginInfo` fields.
   EXPECT_EQ(kPluginName, plugin_info->plugin.name);
-  EXPECT_EQ(base::FilePath(ChromeContentClient::kPDFPluginPath),
+  EXPECT_EQ(base::FilePath(ChromeContentClient::kPDFInternalPluginPath),
             plugin_info->plugin.path);
   EXPECT_EQ(u"", plugin_info->plugin.version);
   EXPECT_EQ(u"Portable Document Format", plugin_info->plugin.desc);
diff --git a/chrome/browser/policy/browser_dm_token_storage_linux.cc b/chrome/browser/policy/browser_dm_token_storage_linux.cc
index 0a83636..599121c2 100644
--- a/chrome/browser/policy/browser_dm_token_storage_linux.cc
+++ b/chrome/browser/policy/browser_dm_token_storage_linux.cc
@@ -22,7 +22,6 @@
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/common/chrome_paths.h"
 
 namespace policy {
diff --git a/chrome/browser/policy/browser_dm_token_storage_mac.mm b/chrome/browser/policy/browser_dm_token_storage_mac.mm
index c4aedd3..a27c9f8 100644
--- a/chrome/browser/policy/browser_dm_token_storage_mac.mm
+++ b/chrome/browser/policy/browser_dm_token_storage_mac.mm
@@ -26,7 +26,6 @@
 #include "base/syslog_logging.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/common/chrome_paths.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/browser/policy/browser_dm_token_storage_win.cc b/chrome/browser/policy/browser_dm_token_storage_win.cc
index 4ef3428e..6e36b87 100644
--- a/chrome/browser/policy/browser_dm_token_storage_win.cc
+++ b/chrome/browser/policy/browser_dm_token_storage_win.cc
@@ -29,7 +29,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/win/registry.h"
 #include "base/win/scoped_bstr.h"
 #include "build/branding_buildflags.h"
diff --git a/chrome/browser/policy/chrome_browser_cloud_management_controller_android.cc b/chrome/browser/policy/chrome_browser_cloud_management_controller_android.cc
index 44bd31b..1b20f52d 100644
--- a/chrome/browser/policy/chrome_browser_cloud_management_controller_android.cc
+++ b/chrome/browser/policy/chrome_browser_cloud_management_controller_android.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/enterprise/reporting/reporting_delegate_factory_android.h"
 #include "chrome/browser/net/system_network_context_manager.h"
diff --git a/chrome/browser/policy/chrome_browser_cloud_management_controller_android.h b/chrome/browser/policy/chrome_browser_cloud_management_controller_android.h
index 1fd2949..1c5197c 100644
--- a/chrome/browser/policy/chrome_browser_cloud_management_controller_android.h
+++ b/chrome/browser/policy/chrome_browser_cloud_management_controller_android.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_POLICY_CHROME_BROWSER_CLOUD_MANAGEMENT_CONTROLLER_ANDROID_H_
 #define CHROME_BROWSER_POLICY_CHROME_BROWSER_CLOUD_MANAGEMENT_CONTROLLER_ANDROID_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h"
 
 #include <memory>
diff --git a/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.h b/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.h
index 69a5342..bb62e92 100644
--- a/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.h
+++ b/chrome/browser/policy/chrome_browser_cloud_management_controller_desktop.h
@@ -7,6 +7,7 @@
 
 #include "components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/policy/cbcm_invalidations_initializer.h"
 
 class DeviceIdentityProvider;
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc b/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc
index 74018e14..4e47384 100644
--- a/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc
+++ b/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc
@@ -12,7 +12,6 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index e26bbd5..33a4ee8d 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -1379,9 +1379,6 @@
   { key::kDevicePowerAdaptiveChargingEnabled,
     ash::prefs::kPowerAdaptiveChargingEnabled,
     base::Value::Type::BOOLEAN },
-  { key::kDevicePrintingClientNameTemplate,
-    prefs::kPrintingClientNameTemplate,
-    base::Value::Type::STRING },
   { key::kCalendarIntegrationEnabled,
     ash::prefs::kCalendarIntegrationEnabled,
     base::Value::Type::BOOLEAN },
diff --git a/chrome/browser/policy/device_account_initializer.cc b/chrome/browser/policy/device_account_initializer.cc
index 219e0841..a0b66e9 100644
--- a/chrome/browser/policy/device_account_initializer.cc
+++ b/chrome/browser/policy/device_account_initializer.cc
@@ -15,7 +15,6 @@
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/device_identity/device_oauth2_token_service.h"
 #include "chrome/browser/device_identity/device_oauth2_token_service_factory.h"
diff --git a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc
index 0fe02632..cf8a11a 100644
--- a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc
+++ b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/policy/messaging_layer/upload/record_handler_impl.h"
diff --git a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h
index aafee93..cce5b7b 100644
--- a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h
+++ b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc
index a957d6531..7b1406d 100644
--- a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/browser/predictors/autocomplete_action_predictor_table.h b/chrome/browser/predictors/autocomplete_action_predictor_table.h
index 6d91ae32..f9aa60b8 100644
--- a/chrome/browser/predictors/autocomplete_action_predictor_table.h
+++ b/chrome/browser/predictors/autocomplete_action_predictor_table.h
@@ -8,6 +8,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/sqlite_proto/table_manager.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/predictors/preconnect_manager_unittest.cc b/chrome/browser/predictors/preconnect_manager_unittest.cc
index 8c6a7e79..8259fb0 100644
--- a/chrome/browser/predictors/preconnect_manager_unittest.cc
+++ b/chrome/browser/predictors/preconnect_manager_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/predictors/loading_test_util.h"
 #include "chrome/browser/predictors/proxy_lookup_client_impl.h"
 #include "chrome/browser/predictors/resolve_host_client_impl.h"
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc
index 0f7afb3..3c5710a 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc
@@ -10,6 +10,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "chrome/browser/predictors/predictors_features.h"
 #include "sql/statement.h"
diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc
index 4b2d16e..1219a2b 100644
--- a/chrome/browser/prefs/chrome_pref_service_factory.cc
+++ b/chrome/browser/prefs/chrome_pref_service_factory.cc
@@ -17,6 +17,7 @@
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/path_service.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
diff --git a/chrome/browser/prefs/profile_pref_store_manager_unittest.cc b/chrome/browser/prefs/profile_pref_store_manager_unittest.cc
index 72eb13e2..28ce00ca 100644
--- a/chrome/browser/prefs/profile_pref_store_manager_unittest.cc
+++ b/chrome/browser/prefs/profile_pref_store_manager_unittest.cc
@@ -19,6 +19,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/values.h"
diff --git a/chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h b/chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h
index 9f17b27..b6bd1d67 100644
--- a/chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h
+++ b/chrome/browser/preloading/prefetch/no_state_prefetch/chrome_no_state_prefetch_contents_delegate.h
@@ -5,7 +5,6 @@
 #define CHROME_BROWSER_PRELOADING_PREFETCH_NO_STATE_PREFETCH_CHROME_NO_STATE_PREFETCH_CONTENTS_DELEGATE_H_
 
 #include "components/no_state_prefetch/browser/no_state_prefetch_contents_delegate.h"
-#include "mojo/public/cpp/bindings/associated_remote.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
 
 namespace content {
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
index 334e593..4ab9a9be 100644
--- a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_cookie_listener_unittest.cc
@@ -6,8 +6,8 @@
 
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "content/public/browser/storage_partition.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/mojom/network_context.mojom.h"
-
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
index 2df89288..546b886e 100644
--- a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_network_context_client.h
@@ -7,7 +7,6 @@
 
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 
 // This is a NetworkContextClient that purposely does nothing so that no extra
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
index d11545b..8fc83ed 100644
--- a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
@@ -29,8 +29,6 @@
 #include "content/public/browser/speculation_host_delegate.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/isolation_info.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/cpp/url_loader_completion_status.h"
diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
index c6c1a9c..a7d1a8e2 100644
--- a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
+++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_test_utils.cc
@@ -7,7 +7,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/io_buffer.h"
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_errors.h"
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_browser_test_base.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_browser_test_base.cc
index 29f4e0c..7f15be7 100644
--- a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_browser_test_base.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_browser_test_base.cc
@@ -7,6 +7,7 @@
 #include "base/containers/adapters.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/devtools/devtools_window.h"
 #include "chrome/browser/devtools/devtools_window_testing.h"
 #include "chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_request.h"
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc
index 78f8d0d..433b432 100644
--- a/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc
+++ b/chrome/browser/preloading/prefetch/search_prefetch/search_preload_unified_browsertest.cc
@@ -9,6 +9,7 @@
 #include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "build/build_config.h"
 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
diff --git a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc b/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
index 5675c96..27efa83b7 100644
--- a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
+++ b/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
@@ -9,6 +9,7 @@
 #include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/printing/pdf_to_emf_converter.cc b/chrome/browser/printing/pdf_to_emf_converter.cc
index 47a4a45..32b7c83 100644
--- a/chrome/browser/printing/pdf_to_emf_converter.cc
+++ b/chrome/browser/printing/pdf_to_emf_converter.cc
@@ -20,9 +20,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/printing/printing_service.h"
 #include "chrome/services/printing/public/mojom/pdf_to_emf_converter.mojom.h"
 #include "chrome/services/printing/public/mojom/printing_service.mojom.h"
diff --git a/chrome/browser/printing/print_backend_service_test_impl.cc b/chrome/browser/printing/print_backend_service_test_impl.cc
index f9cbb1e8..e4a9162 100644
--- a/chrome/browser/printing/print_backend_service_test_impl.cc
+++ b/chrome/browser/printing/print_backend_service_test_impl.cc
@@ -10,6 +10,7 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/printing/print_backend_service_manager.h"
 #include "printing/backend/test_print_backend.h"
diff --git a/chrome/browser/printing/print_backend_service_test_impl.h b/chrome/browser/printing/print_backend_service_test_impl.h
index 411f4ce0..addd06b 100644
--- a/chrome/browser/printing/print_backend_service_test_impl.h
+++ b/chrome/browser/printing/print_backend_service_test_impl.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/services/printing/print_backend_service_impl.h"
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc
index d09a2aab..d200a3b 100644
--- a/chrome/browser/printing/print_job_worker.cc
+++ b/chrome/browser/printing/print_job_worker.cc
@@ -15,7 +15,6 @@
 #include "base/location.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/printing/print_job_worker.h b/chrome/browser/printing/print_job_worker.h
index c2425ef..3a8b9bef 100644
--- a/chrome/browser/printing/print_job_worker.h
+++ b/chrome/browser/printing/print_job_worker.h
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc b/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc
index 3a73e66..51808f0f 100644
--- a/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc
+++ b/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc
@@ -59,7 +59,7 @@
 
 void CheckPdfPluginForRenderFrame(content::RenderFrameHost* frame) {
   static const base::FilePath kPdfInternalPluginPath(
-      ChromeContentClient::kPDFPluginPath);
+      ChromeContentClient::kPDFInternalPluginPath);
 
   content::WebPluginInfo pdf_internal_plugin_info;
   ASSERT_TRUE(content::PluginService::GetInstance()->GetPluginInfoByPath(
@@ -248,8 +248,7 @@
   // Get the PDF plugin info.
   content::WebPluginInfo pdf_external_plugin_info;
   ASSERT_TRUE(content::PluginService::GetInstance()->GetPluginInfoByPath(
-      base::FilePath(FILE_PATH_LITERAL(
-          "chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/")),
+      base::FilePath(ChromeContentClient::kPDFExtensionPluginPath),
       &pdf_external_plugin_info));
 
   // Disable the PDF plugin.
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogConsentEEAV4.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogConsentEEAV4.java
index b231f67..596a795 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogConsentEEAV4.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogConsentEEAV4.java
@@ -75,6 +75,7 @@
 
         mMoreButton.setOnClickListener(this);
         setOnShowListener(this);
+        setCancelable(false);
 
         mScrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
             if (!mScrollView.canScrollVertically(ScrollView.FOCUS_DOWN)) {
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java
index 1365cc7a..42e2d7a5 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java
@@ -69,6 +69,7 @@
 
         mMoreButton.setOnClickListener(this);
         setOnShowListener(this);
+        setCancelable(false);
 
         mScrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
             if (!mScrollView.canScrollVertically(ScrollView.FOCUS_DOWN)) {
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeROWV4.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeROWV4.java
index f2fcde1..22d21a1 100644
--- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeROWV4.java
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeROWV4.java
@@ -65,6 +65,7 @@
 
         mMoreButton.setOnClickListener(this);
         setOnShowListener(this);
+        setCancelable(false);
 
         mScrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
             if (!mScrollView.canScrollVertically(ScrollView.FOCUS_DOWN)) {
diff --git a/chrome/browser/profile_resetter/reset_report_uploader_unittest.cc b/chrome/browser/profile_resetter/reset_report_uploader_unittest.cc
index 02bc942..f0e71bd 100644
--- a/chrome/browser/profile_resetter/reset_report_uploader_unittest.cc
+++ b/chrome/browser/profile_resetter/reset_report_uploader_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/test/test_utils.h"
 #include "net/http/http_status_code.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc
index f16a213f..45357cf 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.cc
+++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -16,6 +16,7 @@
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/accessibility/accessibility_labels_service.h"
diff --git a/chrome/browser/profiles/profile_browsertest.cc b/chrome/browser/profiles/profile_browsertest.cc
index cf02932e..8a3675a 100644
--- a/chrome/browser/profiles/profile_browsertest.cc
+++ b/chrome/browser/profiles/profile_browsertest.cc
@@ -25,6 +25,7 @@
 #include "base/scoped_multi_source_observation.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc
index 4bc42aa..2465bfaf 100644
--- a/chrome/browser/profiles/profile_manager_unittest.cc
+++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/push_messaging/push_messaging_service_unittest.cc b/chrome/browser/push_messaging/push_messaging_service_unittest.cc
index dcda27b83..efb72ce 100644
--- a/chrome/browser/push_messaging/push_messaging_service_unittest.cc
+++ b/chrome/browser/push_messaging/push_messaging_service_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc
index 03212df..e819aa6 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "chrome/app/chrome_command_ids.h"
diff --git a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc
index f25790d..7004be59 100644
--- a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc
+++ b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
diff --git a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.h b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.h
index 946bbba..716f5f9a 100644
--- a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.h
+++ b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.h
@@ -11,6 +11,7 @@
 #include <string>
 
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "ppapi/c/pp_instance.h"
 #include "ppapi/c/pp_resource.h"
 #include "ppapi/c/private/ppb_isolated_file_system_private.h"
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
index c9495e1b..eee60837 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
@@ -140,8 +140,8 @@
   }
 
   bool DiscardTab(LifecycleUnitDiscardReason reason,
-                  uint64_t resident_set_size_estimate) override {
-    return tab_lifecycle_unit_->Discard(reason, resident_set_size_estimate);
+                  uint64_t memory_footprint_estimate) override {
+    return tab_lifecycle_unit_->Discard(reason, memory_footprint_estimate);
   }
 
   bool IsDiscarded() const override {
@@ -462,7 +462,7 @@
 
 void TabLifecycleUnitSource::TabLifecycleUnit::FinishDiscard(
     LifecycleUnitDiscardReason discard_reason,
-    uint64_t tab_resident_set_size_estimate) {
+    uint64_t tab_memory_footprint_estimate) {
   UMA_HISTOGRAM_BOOLEAN(
       "TabManager.Discarding.DiscardedTabHasBeforeUnloadHandler",
       web_contents()->NeedToFireBeforeUnloadOrUnloadEvents());
@@ -483,7 +483,7 @@
 
   performance_manager::user_tuning::UserPerformanceTuningManager::
       PreDiscardResourceUsage::CreateForWebContents(
-          null_contents.get(), tab_resident_set_size_estimate);
+          null_contents.get(), tab_memory_footprint_estimate);
 
   // Attach the ResourceCoordinatorTabHelper. In production code this has
   // already been attached by now due to AttachTabHelpers, but there's a long
@@ -556,7 +556,7 @@
 
 bool TabLifecycleUnitSource::TabLifecycleUnit::Discard(
     LifecycleUnitDiscardReason reason,
-    uint64_t tab_resident_set_size_estimate) {
+    uint64_t tab_memory_footprint_estimate) {
   // Can't discard a tab when it isn't in a tabstrip.
   if (!tab_strip_model_) {
     // Logs are used to diagnose user feedback reports.
@@ -576,7 +576,7 @@
 
   discard_reason_ = reason;
 
-  FinishDiscard(reason, tab_resident_set_size_estimate);
+  FinishDiscard(reason, tab_memory_footprint_estimate);
 
   return true;
 }
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit.h b/chrome/browser/resource_coordinator/tab_lifecycle_unit.h
index a21c97a5..23d19c3 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit.h
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit.h
@@ -100,7 +100,7 @@
                   DecisionDetails* decision_details) const override;
   LifecycleUnitDiscardReason GetDiscardReason() const override;
   bool Discard(LifecycleUnitDiscardReason discard_reason,
-               uint64_t resident_set_size_estimate) override;
+               uint64_t memory_footprint_estimate) override;
   ukm::SourceId GetUkmSourceId() const override;
 
   // Implementations of some functions from TabLifecycleUnitExternal. These are
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h b/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h
index 3661f101..7f9a126 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h
@@ -42,7 +42,7 @@
 
   // Discards the tab.
   virtual bool DiscardTab(mojom::LifecycleUnitDiscardReason reason,
-                          uint64_t resident_set_size_estimate = 0) = 0;
+                          uint64_t memory_footprint_estimate = 0) = 0;
 
   // Returns true if the tab is discarded.
   virtual bool IsDiscarded() const = 0;
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc
index 30850a1..40ba245 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc
@@ -9,7 +9,6 @@
 #include "base/check_op.h"
 #include "base/functional/bind.h"
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.h"
 #include "chrome/browser/resource_coordinator/lifecycle_unit_source_observer.h"
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc
index 5101335..c67abc6 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_source_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/resource_coordinator/tab_memory_metrics_reporter_unittest.cc b/chrome/browser/resource_coordinator/tab_memory_metrics_reporter_unittest.cc
index bb64f37..dba1c8cf 100644
--- a/chrome/browser/resource_coordinator/tab_memory_metrics_reporter_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_memory_metrics_reporter_unittest.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/timer/timer.h"
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js
index 1f3a552..bc6b58690 100644
--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js
+++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation.js
@@ -531,9 +531,8 @@
   /**
    * Used to increase the NO_FOCUSED_IME_MS timeout to reduce the flakiness of
    * Dictation tests on slower builds. For testing purposes only.
-   * @private
    */
-  increaseNoFocusedImeTimeoutForTesting_() {
+  increaseNoFocusedImeTimeoutForTesting() {
     Dictation.Timeouts.NO_FOCUSED_IME_MS = 20 * 1000;
   }
 
@@ -554,8 +553,8 @@
     return newMacro;
   }
 
-  /** @private */
-  disablePumpkinForTesting_() {
+  /** Disables Pumpkin for tests that use regex-based command parsing. */
+  disablePumpkinForTesting() {
     this.speechParser_.disablePumpkinForTesting();
   }
 }
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation_test_base.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation_test_base.js
index 187a62e..df7ded4 100644
--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation_test_base.js
+++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation_test_base.js
@@ -112,10 +112,10 @@
     await this.setPref(Dictation.DICTATION_LOCALE_PREF, 'en-US');
 
     // By default, Dictation JS tests should use regex parsing.
-    accessibilityCommon.dictation_.disablePumpkinForTesting_();
+    accessibilityCommon.dictation_.disablePumpkinForTesting();
     // Increase Dictation's NO_FOCUSED_IME timeout to reduce flakiness on slower
     // builds.
-    accessibilityCommon.dictation_.increaseNoFocusedImeTimeoutForTesting_();
+    accessibilityCommon.dictation_.increaseNoFocusedImeTimeoutForTesting();
   }
 
   /** @override */
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation_test_support.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation_test_support.js
new file mode 100644
index 0000000..052d8fe
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/dictation_test_support.js
@@ -0,0 +1,99 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/** A class that provides test support for C++ tests. */
+class DictationTestSupport {
+  constructor() {
+    this.dictation_ = accessibilityCommon.dictation_;
+    this.notifyCcTests_();
+  }
+
+  /**
+   * Notifies C++ tests, which wait for the JS side to call
+   * `domAutomationController.send`, that they can continue.
+   * @private
+   */
+  notifyCcTests_() {
+    domAutomationController.send('ready');
+  }
+
+  /** Increases Dictation timeouts for test stability. */
+  increaseNoFocusedImeTimeout() {
+    this.dictation_.increaseNoFocusedImeTimeoutForTesting();
+    this.notifyCcTests_();
+  }
+
+  /** Disables Pumpkin for tests that use regex-based command parsing. */
+  disablePumpkin() {
+    this.dictation_.disablePumpkinForTesting();
+    this.notifyCcTests_();
+  }
+
+  /**
+   * TODO(b:264535324): Remove polling from this method.
+   * Waits for the FocusHandler to initialize.
+   */
+  async waitForFocusHandler() {
+    await new Promise(resolve => {
+      const printErrorMessageTimeoutId = setTimeout(() => {
+        console.error('Still waiting for FocusHandler');
+      }, 3.5 * 1000);
+      const intervalId = setInterval(() => {
+        if (this.dictation_.focusHandler_.isReadyForTesting()) {
+          clearTimeout(printErrorMessageTimeoutId);
+          clearInterval(intervalId);
+          resolve();
+        }
+      }, 500);
+    });
+
+    this.notifyCcTests_();
+  }
+
+  /**
+   * TODO(b:264535324): Remove polling from this method.
+   * Waits for the SandboxedPumpkinTagger to initialize.
+   */
+  async WaitForPumpkinTaggerReady() {
+    await new Promise(resolve => {
+      const printErrorMessageTimeoutId = setTimeout(() => {
+        console.error('Still waiting for SandboxedPumpkinTagger');
+      }, 3.5 * 1000);
+      const intervalId = setInterval(() => {
+        if (this.dictation_.speechParser_.pumpkinParseStrategy_
+                .pumpkinTaggerReady_) {
+          clearTimeout(printErrorMessageTimeoutId);
+          clearInterval(intervalId);
+          resolve();
+        }
+      }, 500);
+    });
+
+    this.notifyCcTests_();
+  }
+
+  /**
+   * TODO(b:264535324): Remove polling from this method.
+   * @param {string} value
+   */
+  async waitForEditableValue(value) {
+    await new Promise(resolve => {
+      const printErrorMessageTimeoutId = setTimeout(() => {
+        console.error('Still waiting for editable value: ' + value);
+      }, 3.5 * 1000);
+      const intervalId = setInterval(() => {
+        const data = this.dictation_.inputController_.getEditableNodeData();
+        if (data && data.value === value) {
+          clearTimeout(printErrorMessageTimeoutId);
+          clearInterval(intervalId);
+          resolve();
+        }
+      }, 500);
+    });
+
+    this.notifyCcTests_();
+  }
+}
+
+globalThis.testSupport = new DictationTestSupport();
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
index ea4baaf..b93c388 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
@@ -115,6 +115,7 @@
   "background/phonetic_data.js",
   "background/pointer_handler.js",
   "background/prefs.js",
+  "background/primary_tts.js",
   "background/range_automation_handler.js",
   "background/smart_sticky_mode.js",
   "background/tts_background.js",
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/abstract_earcons.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/abstract_earcons.js
index d9fc14c..839fd6e 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/abstract_earcons.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/abstract_earcons.js
@@ -39,7 +39,7 @@
    * @return {boolean} True if earcons are enabled.
    */
   get enabled() {
-    return LocalStorage.get('earcons');
+    return LocalStorage.getBoolean('earcons');
   }
 
   /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler_test.js
index 97a8b50..3b33cd9 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler_test.js
@@ -20,7 +20,8 @@
         'ChromeVoxState', '/chromevox/background/chromevox_state.js');
     await importModule('CursorRange', '/common/cursors/range.js');
 
-    window.EventType = chrome.automation.EventType;
+    globalThis.EventType = chrome.automation.EventType;
+    globalThis.RoleType = chrome.automation.RoleType;
     this.forceContextualLastOutput();
   }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
index 3a964781..0a53b16 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -68,13 +68,17 @@
     await importModule('KeyCode', '/common/key_code.js');
     await importModule('LocalStorage', '/common/local_storage.js');
 
-    window.doGesture = this.doGesture;
-    window.simulateHitTestResult = this.simulateHitTestResult;
-    window.press = this.press;
-    window.doDefault = this.doDefault;
-    window.focus = this.focus;
-    window.Mod = constants.ModifierFlag;
-    window.ActionType = chrome.automation.ActionType;
+
+    globalThis.simulateHitTestResult = this.simulateHitTestResult;
+    globalThis.press = this.press;
+    globalThis.doDefault = this.doDefault;
+    globalThis.focus = this.focus;
+
+    globalThis.ActionType = chrome.automation.ActionType;
+    globalThis.EventType = chrome.automation.EventType;
+    globalThis.Gesture = chrome.accessibilityPrivate.Gesture;
+    globalThis.Mod = constants.ModifierFlag;
+    globalThis.RoleType = chrome.automation.RoleType;
 
     this.forceContextualLastOutput();
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js
index e4bcbc9d..67baf2d 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_captions_background.js
@@ -41,7 +41,7 @@
    * @return {boolean}
    */
   static isEnabled() {
-    return LocalStorage.get(BrailleCaptionsBackground.PREF_KEY);
+    return LocalStorage.getBoolean(BrailleCaptionsBackground.PREF_KEY);
   }
 
   /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_translator_manager.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_translator_manager.js
index dc6069e..e2810ba 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_translator_manager.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille/braille_translator_manager.js
@@ -174,7 +174,7 @@
         this.tables_ = tables;
 
         // Initial refresh; set options from user preferences.
-        this.refresh(LocalStorage.get('brailleTable'), undefined, r);
+        this.refresh(LocalStorage.getString('brailleTable', ''), undefined, r);
       });
     });
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
index 9baec2e..b9058fe 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
@@ -54,6 +54,7 @@
 const Dir = constants.Dir;
 const EventType = chrome.automation.EventType;
 const RoleType = chrome.automation.RoleType;
+const SessionType = chrome.chromeosInfoPrivate.SessionType;
 
 /**
  * @typedef {{
@@ -85,27 +86,34 @@
     this.init_();
   }
 
+  /**
+   * @param {boolean} flagEnabled
+   * @private
+   */
+  updateLanguageLoggingEnabled_(flagEnabled) {
+    this.languageLoggingEnabled_ |= flagEnabled;
+  }
+
+  /**
+   * @param {!SessionType} sessionType
+   * @private
+   */
+  updateIsKioskSession_(sessionType) {
+    this.isKioskSession_ = (sessionType === SessionType.KIOSK);
+  }
+
   /** @private */
   init_() {
     chrome.commandLinePrivate.hasSwitch(
-        'enable-experimental-accessibility-language-detection', enabled => {
-          if (enabled) {
-            this.languageLoggingEnabled_ = true;
-          }
-        });
+        'enable-experimental-accessibility-language-detection',
+        enabled => this.updateLanguageLoggingEnabled_(enabled));
     chrome.commandLinePrivate.hasSwitch(
         'enable-experimental-accessibility-language-detection-dynamic',
-        enabled => {
-          if (enabled) {
-            this.languageLoggingEnabled_ = true;
-          }
-        });
+        enabled => this.updateLanguageLoggingEnabled_(enabled));
 
-    chrome.chromeosInfoPrivate.get(['sessionType'], result => {
-      /** @type {boolean} */
-      this.isKioskSession_ = result['sessionType'] ===
-          chrome.chromeosInfoPrivate.SessionType.KIOSK;
-    });
+    chrome.chromeosInfoPrivate.get(
+        ['sessionType'],
+        result => this.updateIsKioskSession_(result['sessionType']));
   }
 
   /** @override */
@@ -1116,7 +1124,7 @@
   /** @private */
   cycleTypingEcho_() {
     LocalStorage.set(
-        'typingEcho', TypingEcho.cycle(LocalStorage.get('typingEcho')));
+        'typingEcho', TypingEcho.cycle(LocalStorage.getNumber('typingEcho')));
     let announce = '';
     switch (LocalStorage.get('typingEcho')) {
       case TypingEcho.CHARACTER:
@@ -1760,7 +1768,7 @@
     LocalStorage.set('brailleTable', LocalStorage.get(brailleTableType));
     LocalStorage.set('brailleTableType', brailleTableType);
     BrailleBackground.instance.getTranslatorManager().refresh(
-        LocalStorage.get(brailleTableType));
+        LocalStorage.getString(brailleTableType));
     new Output().format(output).go();
   }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler_test.js
index 0269be7..9172cc1 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler_test.js
@@ -34,7 +34,10 @@
       });
     });
 
-    window.press = this.press;
+    globalThis.EventType = chrome.automation.EventType;
+    globalThis.RoleType = chrome.automation.RoleType;
+
+    globalThis.press = this.press;
   }
 
   press(keyCode, modifiers) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js
index 0662118..96641c5 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js
@@ -1016,11 +1016,11 @@
     const inputType = range && range.start.node.inputType;
     if (inputType === 'email' || inputType === 'url') {
       BrailleBackground.instance.getTranslatorManager().refresh(
-          LocalStorage.get('brailleTable8'));
+          LocalStorage.getString('brailleTable8'));
       return;
     }
     BrailleBackground.instance.getTranslatorManager().refresh(
-        LocalStorage.get('brailleTable'));
+        LocalStorage.getString('brailleTable', ''));
   }
 }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js
index 40d41936..7df452c9 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js
@@ -33,6 +33,9 @@
     await importModule('EventGenerator', '/common/event_generator.js');
     await importModule('KeyCode', '/common/key_code.js');
     await importModule('LocalStorage', '/common/local_storage.js');
+
+    globalThis.EventType = chrome.automation.EventType;
+    globalThis.RoleType = chrome.automation.RoleType;
   }
 
   press(keyCode, modifiers) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js
index 0c9df64..b7cc840 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/live_regions_test.js
@@ -19,7 +19,8 @@
     await importModule('Output', '/chromevox/background/output/output.js');
     await importModule('QueueMode', '/chromevox/common/tts_types.js');
 
-    window.TreeChangeType = chrome.automation.TreeChangeType;
+    globalThis.RoleType = chrome.automation.RoleType;
+    globalThis.TreeChangeType = chrome.automation.TreeChangeType;
   }
 
   /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/event_stream_logger.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/event_stream_logger.js
index 3712772c..689bdcc 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/event_stream_logger.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/logging/event_stream_logger.js
@@ -33,7 +33,7 @@
         await new Promise(resolve => chrome.automation.getDesktop(resolve));
     EventStreamLogger.instance = new EventStreamLogger(desktop);
     EventStreamLogger.instance.updateAllFilters(
-        LocalStorage.get('enableEventStreamLogging'));
+        LocalStorage.getBoolean('enableEventStreamLogging'));
 
     BridgeHelper.registerHandler(
         TARGET, Action.NOTIFY_EVENT_STREAM_FILTER_CHANGED,
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
index bc52d42..8532e69 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
@@ -152,52 +152,6 @@
   }
 
   /**
-   * For a given automation property, return true if the value
-   * represents something 'truthy', e.g.: for checked:
-   * 'true'|'mixed' -> true
-   * 'false'|undefined -> false
-   */
-  static isTruthy(node, attrib) {
-    switch (attrib) {
-      case 'checked':
-        return node.checked && node.checked !== 'false';
-      case 'hasPopup':
-        return node.hasPopup &&
-            node.hasPopup !== chrome.automation.HasPopup.FALSE;
-
-      // Chrome automatically calculates these attributes.
-      case 'posInSet':
-        return node.htmlAttributes['aria-posinset'] ||
-            (node.root.role !== RoleType.ROOT_WEB_AREA && node.posInSet);
-      case 'setSize':
-        return node.htmlAttributes['aria-setsize'] || node.setSize;
-
-      // These attributes default to false for empty strings.
-      case 'roleDescription':
-        return Boolean(node.roleDescription);
-      case 'value':
-        return Boolean(node.value);
-      case 'selected':
-        return node.selected === true;
-      default:
-        return node[attrib] !== undefined || node.state[attrib];
-    }
-  }
-
-  /**
-   * represents something 'falsey', e.g.: for selected:
-   * node.selected === false
-   */
-  static isFalsey(node, attrib) {
-    switch (attrib) {
-      case 'selected':
-        return node.selected === false;
-      default:
-        return !Output.isTruthy(node, attrib);
-    }
-  }
-
-  /**
    * @return {boolean} True if there's any speech that will be output.
    */
   get hasSpeech() {
@@ -680,7 +634,7 @@
       formatLog.writeToken(token);
       const cond = tree.firstChild;
       const attrib = cond.value.slice(1);
-      if (Output.isTruthy(node, attrib)) {
+      if (AutomationUtil.isTruthy(node, attrib)) {
         formatLog.write(attrib + '==true => ');
         this.format_({
           node,
@@ -688,7 +642,7 @@
           outputBuffer: buff,
           outputFormatLogger: formatLog,
         });
-      } else if (Output.isFalsey(node, attrib)) {
+      } else if (AutomationUtil.isFalsey(node, attrib)) {
         formatLog.write(attrib + '==false => ');
         this.format_({
           node,
@@ -701,7 +655,7 @@
       formatLog.writeToken(token);
       const cond = tree.firstChild;
       const attrib = cond.value.slice(1);
-      if (Output.isFalsey(node, attrib)) {
+      if (AutomationUtil.isFalsey(node, attrib)) {
         formatLog.write(attrib + '==false => ');
         this.format_({
           node,
@@ -709,7 +663,7 @@
           outputBuffer: buff,
           outputFormatLogger: formatLog,
         });
-      } else if (Output.isTruthy(node, attrib)) {
+      } else if (AutomationUtil.isTruthy(node, attrib)) {
         formatLog.write(attrib + '==true => ');
         this.format_({
           node,
@@ -1134,19 +1088,8 @@
     const eventBlock = OutputRule.RULES[rule.event];
     const parentRole =
         (OutputRoleInfo[node.role] || {}).inherits || CustomRole.NO_ROLE;
-    /**
-     * Use OutputRule.RULES for node.role if exists.
-     * If not, use OutputRule.RULES for parentRole if exists.
-     * If not, use OutputRule.RULES for CustomRole.DEFAULT.
-     */
-    if (node.role && (eventBlock[node.role] || {}).speak !== undefined) {
-      rule.role = node.role;
-    } else if ((eventBlock[parentRole] || {}).speak !== undefined) {
-      rule.role = parentRole;
-    } else {
-      rule.role = CustomRole.DEFAULT;
-    }
     rule.output = outputTypes.OutputFormatType.SPEAK;
+    rule.populateRole(node.role, parentRole, rule.output);
     if (this.formatOptions_.braille) {
       // Overwrite rule by braille rule if exists.
       if (node.role && (eventBlock[node.role] || {}).braille !== undefined) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
index 9589848b..32136cf 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
@@ -121,7 +121,8 @@
 
     await importModule('LocalStorage', '/common/local_storage.js');
 
-    window.Dir = AutomationUtil.Dir;
+    globalThis.Dir = AutomationUtil.Dir;
+    globalThis.RoleType = chrome.automation.RoleType;
     this.forceContextualLastOutput();
   }
 };
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/portals_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/portals_test.js
index 4b7b8d0..372d4c9 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/portals_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/portals_test.js
@@ -27,6 +27,9 @@
     // Alphabetical based on file path.
     await importModule(
         'ChromeVoxState', '/chromevox/background/chromevox_state.js');
+
+    globalThis.EventType = chrome.automation.EventType;
+    globalThis.RoleType = chrome.automation.RoleType;
   }
 
   get testServer() {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
index 17cf8b219..4f6a8d4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/prefs.js
@@ -46,7 +46,7 @@
   static init() {
     ChromeVoxPrefs.instance = new ChromeVoxPrefs();
 
-    ChromeVoxPrefs.isStickyPrefOn = LocalStorage.get('sticky');
+    ChromeVoxPrefs.isStickyPrefOn = LocalStorage.getBoolean('sticky');
 
     // Set the default value of any pref that isn't already in LocalStorage.
     for (const pref in ChromeVoxPrefs.DEFAULT_PREFS) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/primary_tts.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/primary_tts.js
new file mode 100644
index 0000000..a12586d
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/primary_tts.js
@@ -0,0 +1,910 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Default implementation for TTS in the background context.
+ */
+import {constants} from '../../common/constants.js';
+import {LocalStorage} from '../../common/local_storage.js';
+import {Msgs} from '../common/msgs.js';
+import {PanelCommand, PanelCommandType} from '../common/panel_command.js';
+import {TtsCapturingEventListener, TtsInterface} from '../common/tts_interface.js';
+import * as ttsTypes from '../common/tts_types.js';
+
+import {AbstractTts} from './abstract_tts.js';
+import {ChromeVox} from './chromevox.js';
+import {PhoneticData} from './phonetic_data.js';
+
+const Utterance = class {
+  /**
+   * @param {string} textString The string of text to be spoken.
+   * @param {Object} properties Speech properties to use for this utterance.
+   */
+  constructor(textString, properties, queueMode) {
+    this.textString = textString;
+    this.properties = properties;
+    this.queueMode = queueMode;
+    this.id = Utterance.nextUtteranceId_++;
+  }
+};
+
+/**
+ * The next utterance id to use.
+ * @type {number}
+ * @private
+ */
+Utterance.nextUtteranceId_ = 1;
+
+/**
+ * This class is the default implementation for TTS in the background context.
+ */
+export class PrimaryTts extends AbstractTts {
+  constructor() {
+    super();
+
+    this.lastEventType = 'end';
+
+    /** @private {number} */
+    this.currentPunctuationEcho_ =
+        LocalStorage.getNumber(ttsTypes.TtsSettings.PUNCTUATION_ECHO, 1);
+
+    /**
+     * A list of punctuation characters that should always be spliced into
+     * output even with literal word substitutions. This is important for tts
+     * prosity.
+     * @type {!Array<string>}
+     * @private
+     */
+    this.retainPunctuation_ = [';', '?', '!', '\''];
+
+    /**
+     * The id of a callback returned by setTimeout.
+     * @type {number|undefined}
+     */
+    this.timeoutId_;
+
+    /**
+     * Capturing tts event listeners.
+     * @type {Array<TtsCapturingEventListener>}
+     * @private
+     */
+    this.capturingTtsEventListeners_ = [];
+
+    /**
+     * The current utterance.
+     * @type {Utterance}
+     * @private
+     */
+    this.currentUtterance_ = null;
+
+    /**
+     * The utterance queue.
+     * @private {!Array<Utterance>}
+     */
+    this.utteranceQueue_ = [];
+
+    /**
+     * Queue of utterances interrupted by interjected utterances.
+     * @private {!Array<Utterance>}
+     */
+    this.utteranceQueueInterruptedByInterjection_ = [];
+
+    /**
+     * The current voice name.
+     * @type {string}
+     */
+    this.currentVoice;
+
+    if (window.speechSynthesis) {
+      window.speechSynthesis.onvoiceschanged = function() {
+        chrome.storage.local.get({voiceName: ''}, function(items) {
+          this.updateVoice_(items.voiceName);
+        }.bind(this));
+      }.bind(this);
+    } else {
+      // SpeechSynthesis API is not available on chromecast. Call
+      // updateVoice_ to set the one and only voice as the current
+      // voice.
+      this.updateVoice_('');
+    }
+
+    chrome.storage.onChanged.addListener(function(changes, namespace) {
+      if (changes.voiceName) {
+        this.updateVoice_(changes.voiceName.newValue);
+      }
+    }.bind(this));
+
+    // Migration: local LocalStorage tts properties -> Chrome pref settings.
+    if (LocalStorage.get('rate')) {
+      chrome.settingsPrivate.setPref(
+          'settings.tts.speech_rate', LocalStorage.get('rate'));
+      LocalStorage.remove('rate');
+    }
+    if (LocalStorage.get('pitch')) {
+      chrome.settingsPrivate.setPref(
+          'settings.tts.speech_pitch', LocalStorage.get('pitch'));
+      LocalStorage.remove('pitch');
+    }
+    if (LocalStorage.get('volume')) {
+      chrome.settingsPrivate.setPref(
+          'settings.tts.speech_volume', LocalStorage.get('volume'));
+      LocalStorage.remove('volume');
+    }
+
+    // At startup.
+    chrome.settingsPrivate.getAllPrefs(this.updateFromPrefs_.bind(this, false));
+
+    // At runtime.
+    chrome.settingsPrivate.onPrefsChanged.addListener(
+        this.updateFromPrefs_.bind(this, true));
+  }
+
+  /**
+   * @param {string} textString The string of text to be spoken.
+   * @param {ttsTypes.QueueMode} queueMode The queue mode to use for speaking.
+   * @param {ttsTypes.TtsSpeechProperties=} properties Speech properties to use
+   *     for this utterance.
+   * @return {TtsInterface} A tts object useful for chaining speak calls.
+   * @override
+   */
+  speak(textString, queueMode, properties) {
+    super.speak(textString, queueMode, properties);
+
+    // |textString| gets manipulated throughout this function. Save the
+    // original value for functions that may need it.
+    const originalTextString = textString;
+
+    if (this.ttsProperties[ttsTypes.TtsSettings.VOLUME] === 0) {
+      return this;
+    }
+
+    if (!properties) {
+      properties = new ttsTypes.TtsSpeechProperties();
+    }
+
+    if (textString.length > constants.OBJECT_MAX_CHARCOUNT) {
+      // The text is too long. Try to split the text into multiple chunks
+      // based on line breaks.
+      this.speakSplittingText_(textString, queueMode, properties);
+      return this;
+    }
+
+    textString = this.preprocess(textString, properties);
+
+    // This pref on LocalStorage gets set by the options page.
+    if (LocalStorage.get('numberReadingStyle') === 'asDigits') {
+      textString = this.getNumberAsDigits_(textString);
+    }
+
+    // TODO(dtseng): some TTS engines don't handle strings that don't produce
+    // any speech very well. Handle empty and whitespace only strings
+    // (including non-breaking space) here to mitigate the issue somewhat.
+    if (PrimaryTts.SKIP_WHITESPACE_.test(textString)) {
+      // Explicitly call start and end callbacks before skipping this text.
+      if (properties.startCallback) {
+        try {
+          properties.startCallback();
+        } catch (e) {
+        }
+      }
+      if (properties.endCallback) {
+        try {
+          properties.endCallback();
+        } catch (e) {
+        }
+      }
+      if (queueMode === ttsTypes.QueueMode.FLUSH) {
+        this.stop();
+      }
+      return this;
+    }
+
+    const mergedProperties = this.mergeProperties(properties);
+
+    if (this.currentVoice && this.currentVoice !== constants.SYSTEM_VOICE) {
+      mergedProperties['voiceName'] = this.currentVoice;
+    }
+
+    const utterance = new Utterance(textString, mergedProperties, queueMode);
+    this.speakUsingQueue_(utterance);
+    // Attempt to queue phonetic speech with property['delay']. This ensures
+    // that phonetic hints are delayed when we process them.
+    this.pronouncePhonetically_(originalTextString, properties);
+    return this;
+  }
+
+  /** @return {!Array<Utterance>} */
+  getUtteranceQueueForTest() {
+    return this.utteranceQueue_;
+  }
+
+  /**
+   * Split the given textString into smaller chunks and call this.speak() for
+   * each chunks.
+   * @param {string} textString The string of text to be spoken.
+   * @param {ttsTypes.QueueMode} queueMode The queue mode to use for speaking.
+   * @param {ttsTypes.TtsSpeechProperties=} properties Speech properties to use
+   *     for this utterance.
+   * @private
+   */
+  speakSplittingText_(textString, queueMode, properties) {
+    const chunks = PrimaryTts.splitUntilSmall(textString, '\n\r ');
+    for (const chunk of chunks) {
+      this.speak(chunk, queueMode, properties);
+      queueMode = ttsTypes.QueueMode.QUEUE;
+    }
+  }
+
+  /**
+   * Splits |text| until each substring's length is smaller than or equal to
+   * constants.OBJECT_MAX_CHARCOUNT.
+   * @param {string} text
+   * @param {string} delimiters
+   * @return {!Array<string>}
+   */
+  static splitUntilSmall(text, delimiters) {
+    if (text.length === 0) {
+      return [];
+    }
+
+    if (text.length <= constants.OBJECT_MAX_CHARCOUNT) {
+      return [text];
+    }
+
+    const midIndex = text.length / 2;
+    if (!delimiters) {
+      return PrimaryTts.splitUntilSmall(text.substring(0, midIndex), delimiters)
+          .concat(PrimaryTts.splitUntilSmall(
+              text.substring(midIndex, text.length), delimiters));
+    }
+
+    const delimiter = delimiters[0];
+    let splitIndex = text.lastIndexOf(delimiter, midIndex);
+    if (splitIndex === -1) {
+      splitIndex = text.indexOf(delimiter, midIndex);
+    }
+
+    if (splitIndex === -1) {
+      delimiters = delimiters.slice(1);
+      return PrimaryTts.splitUntilSmall(text, delimiters);
+    }
+
+    return PrimaryTts.splitUntilSmall(text.substring(0, splitIndex), delimiters)
+        .concat(PrimaryTts.splitUntilSmall(
+            text.substring(splitIndex + 1, text.length), delimiters));
+  }
+
+  /**
+   * Use the speech queue to handle the given speech request.
+   * @param {Utterance} utterance The utterance to speak.
+   * @private
+   */
+  speakUsingQueue_(utterance) {
+    const queueMode = utterance.queueMode;
+
+    // First, take care of removing the current utterance and flushing
+    // anything from the queue we need to. If we remove the current utterance,
+    // make a note that we're going to stop speech.
+    if (queueMode === ttsTypes.QueueMode.FLUSH ||
+        queueMode === ttsTypes.QueueMode.CATEGORY_FLUSH ||
+        queueMode === ttsTypes.QueueMode.INTERJECT) {
+      (new PanelCommand(PanelCommandType.CLEAR_SPEECH)).send();
+
+      if (this.shouldCancel_(this.currentUtterance_, utterance)) {
+        // Clear timeout in case currentUtterance_ is a delayed utterance.
+        this.clearTimeout_();
+        this.cancelUtterance_(this.currentUtterance_);
+        this.currentUtterance_ = null;
+      }
+      let i = 0;
+      while (i < this.utteranceQueue_.length) {
+        if (this.shouldCancel_(this.utteranceQueue_[i], utterance)) {
+          this.cancelUtterance_(this.utteranceQueue_[i]);
+          this.utteranceQueue_.splice(i, 1);
+        } else {
+          i++;
+        }
+      }
+    }
+
+    // Now, some special handling for interjections.
+    if (queueMode === ttsTypes.QueueMode.INTERJECT) {
+      // Move all utterances to a secondary queue to be restored later.
+      this.utteranceQueueInterruptedByInterjection_ = this.utteranceQueue_;
+
+      // The interjection is the only utterance.
+      this.utteranceQueue_ = [utterance];
+
+      // Ensure to clear the current utterance and prepend it for it to repeat
+      // later.
+      if (this.currentUtterance_) {
+        this.utteranceQueueInterruptedByInterjection_.unshift(
+            this.currentUtterance_);
+        this.currentUtterance_ = null;
+      }
+
+      // Restore the interrupted utterances after allowing all other
+      // utterances in this callstack to process.
+      setTimeout(() => {
+        // Utterances on the current queue are now also interjections.
+        for (let i = 0; i < this.utteranceQueue_.length; i++) {
+          this.utteranceQueue_[i].queueMode = ttsTypes.QueueMode.INTERJECT;
+        }
+        this.utteranceQueue_ = this.utteranceQueue_.concat(
+            this.utteranceQueueInterruptedByInterjection_);
+      }, 0);
+    } else {
+      // Next, add the new utterance to the queue.
+      this.utteranceQueue_.push(utterance);
+    }
+
+    // Now start speaking the next item in the queue.
+    this.startSpeakingNextItemInQueue_();
+  }
+
+  /**
+   * If nothing is speaking, pop the first item off the speech queue and
+   * start speaking it. This is called when a speech request is made and
+   * when the current utterance finishes speaking.
+   * @private
+   */
+  startSpeakingNextItemInQueue_() {
+    if (this.currentUtterance_) {
+      return;
+    }
+
+    if (this.utteranceQueue_.length === 0) {
+      return;
+    }
+
+    // There is no voice to speak with (e.g. the tts system has not fully
+    // initialized).
+    if (!this.currentVoice) {
+      return;
+    }
+
+    // Clear timeout for delayed utterances (hints and phonetic speech).
+    this.clearTimeout_();
+
+    // Check top of utteranceQueue for delayed utterance.
+    if (this.utteranceQueue_[0].properties['delay']) {
+      // Remove 'delay' property and set a timeout to process this utterance
+      // after the delay has passed.
+      delete this.utteranceQueue_[0].properties['delay'];
+      this.timeoutId_ = setTimeout(
+          () => this.startSpeakingNextItemInQueue_(),
+          PrimaryTts.hint_delay_ms_);
+
+      return;
+    }
+
+    this.currentUtterance_ = this.utteranceQueue_.shift();
+    const utterance = this.currentUtterance_;
+    const utteranceId = utterance.id;
+
+    utterance.properties['onEvent'] = event => {
+      this.onTtsEvent_(event, utteranceId);
+    };
+
+    const validatedProperties = /** @type {!chrome.tts.TtsOptions} */ ({});
+    for (let i = 0; i < PrimaryTts.ALLOWED_PROPERTIES_.length; i++) {
+      const p = PrimaryTts.ALLOWED_PROPERTIES_[i];
+      if (utterance.properties[p]) {
+        validatedProperties[p] = utterance.properties[p];
+      }
+    }
+
+    // Update the caption panel.
+    if (utterance.properties && utterance.properties['pitch'] &&
+        utterance.properties['pitch'] < this.ttsProperties['pitch']) {
+      (new PanelCommand(
+           PanelCommandType.ADD_ANNOTATION_SPEECH, utterance.textString))
+          .send();
+    } else {
+      (new PanelCommand(
+           PanelCommandType.ADD_NORMAL_SPEECH, utterance.textString))
+          .send();
+    }
+
+    chrome.tts.speak(utterance.textString, validatedProperties);
+  }
+
+  /**
+   * Called when we get a speech event from Chrome. We ignore any event
+   * that doesn't pertain to the current utterance, but when speech starts
+   * or ends we optionally call callback functions, and start speaking the
+   * next utterance if there's another one enqueued.
+   * @param {Object} event The TTS event from chrome.
+   * @param {number} utteranceId The id of the associated utterance.
+   * @private
+   */
+  onTtsEvent_(event, utteranceId) {
+    this.lastEventType = event['type'];
+
+    // Ignore events sent on utterances other than the current one.
+    if (!this.currentUtterance_ || utteranceId !== this.currentUtterance_.id) {
+      return;
+    }
+
+    const utterance = this.currentUtterance_;
+
+    switch (event.type) {
+      case 'start':
+        this.capturingTtsEventListeners_.forEach(
+            listener => listener.onTtsStart());
+        if (utterance.properties['startCallback']) {
+          try {
+            utterance.properties['startCallback']();
+          } catch (e) {
+          }
+        }
+        break;
+      case 'end':
+        // End callbacks could cause additional speech to queue up.
+        this.currentUtterance_ = null;
+        this.capturingTtsEventListeners_.forEach(
+            listener => listener.onTtsEnd());
+        if (utterance.properties['endCallback']) {
+          try {
+            utterance.properties['endCallback']();
+          } catch (e) {
+          }
+        }
+        this.startSpeakingNextItemInQueue_();
+        break;
+      case 'interrupted':
+        this.cancelUtterance_(utterance);
+        this.currentUtterance_ = null;
+        for (let i = 0; i < this.utteranceQueue_.length; i++) {
+          this.cancelUtterance_(this.utteranceQueue_[i]);
+        }
+        this.utteranceQueue_.length = 0;
+        this.capturingTtsEventListeners_.forEach(
+            listener => listener.onTtsInterrupted());
+        break;
+      case 'error':
+        this.onError_(event['errorMessage']);
+        this.currentUtterance_ = null;
+        this.startSpeakingNextItemInQueue_();
+        break;
+    }
+  }
+
+  /**
+   * Determines if |utteranceToCancel| should be canceled (interrupted if
+   * currently speaking, or removed from the queue if not), given the new
+   * utterance we want to speak and the queue mode. If the queue mode is
+   * QUEUE or FLUSH, the logic is straightforward. If the queue mode is
+   * CATEGORY_FLUSH, we only flush utterances with the same category.
+   *
+   * @param {Utterance} utteranceToCancel The utterance in question.
+   * @param {Utterance} newUtterance The new utterance we're enqueueing.
+   * @return {boolean} True if this utterance should be canceled.
+   * @private
+   */
+  shouldCancel_(utteranceToCancel, newUtterance) {
+    if (!utteranceToCancel) {
+      return false;
+    }
+    if (utteranceToCancel.properties['doNotInterrupt']) {
+      return false;
+    }
+    switch (newUtterance.queueMode) {
+      case ttsTypes.QueueMode.QUEUE:
+        return false;
+      case ttsTypes.QueueMode.INTERJECT:
+        return utteranceToCancel.queueMode === ttsTypes.QueueMode.INTERJECT;
+      case ttsTypes.QueueMode.FLUSH:
+        return true;
+      case ttsTypes.QueueMode.CATEGORY_FLUSH:
+        return (
+            utteranceToCancel.properties['category'] ===
+            newUtterance.properties['category']);
+    }
+    return false;
+  }
+
+  /**
+   * Do any cleanup necessary to cancel an utterance, like callings its
+   * callback function if any.
+   * @param {Utterance} utterance The utterance to cancel.
+   * @private
+   */
+  cancelUtterance_(utterance) {
+    if (utterance && utterance.properties['endCallback']) {
+      try {
+        utterance.properties['endCallback'](true);
+      } catch (e) {
+      }
+    }
+  }
+
+  /** @override */
+  increaseOrDecreaseProperty(propertyName, increase) {
+    super.increaseOrDecreaseProperty(propertyName, increase);
+
+    let pref;
+    switch (propertyName) {
+      case ttsTypes.TtsSettings.RATE:
+        pref = 'settings.tts.speech_rate';
+        break;
+      case ttsTypes.TtsSettings.PITCH:
+        pref = 'settings.tts.speech_pitch';
+        break;
+      case ttsTypes.TtsSettings.VOLUME:
+        pref = 'settings.tts.speech_volume';
+        break;
+      default:
+        return;
+    }
+    const value = this.ttsProperties[propertyName];
+    chrome.settingsPrivate.setPref(pref, value);
+  }
+
+  /** @override */
+  isSpeaking() {
+    super.isSpeaking();
+    return Boolean(this.currentUtterance_);
+  }
+
+  /** @override */
+  stop() {
+    super.stop();
+
+    this.cancelUtterance_(this.currentUtterance_);
+    this.currentUtterance_ = null;
+
+    for (let i = 0; i < this.utteranceQueue_.length; i++) {
+      this.cancelUtterance_(this.utteranceQueue_[i]);
+    }
+
+    for (let i = 0; i < this.utteranceQueueInterruptedByInterjection_.length;
+         i++) {
+      this.cancelUtterance_(this.utteranceQueueInterruptedByInterjection_[i]);
+    }
+
+    this.utteranceQueue_.length = 0;
+    this.utteranceQueueInterruptedByInterjection_.length = 0;
+
+    (new PanelCommand(PanelCommandType.CLEAR_SPEECH)).send();
+    chrome.tts.stop();
+
+    this.capturingTtsEventListeners_.forEach(
+        listener => listener.onTtsInterrupted());
+  }
+
+  /** @override */
+  addCapturingEventListener(listener) {
+    this.capturingTtsEventListeners_.push(listener);
+  }
+
+  /** @override */
+  removeCapturingEventListener(listener) {
+    this.capturingTtsEventListeners_ =
+        this.capturingTtsEventListeners_.filter(item => {
+          return item !== listener;
+        });
+  }
+
+  /**
+   * An error handler passed as a callback to chrome.tts.speak.
+   * @param {string} errorMessage Describes the error (set by onEvent).
+   * @private
+   */
+  onError_(errorMessage) {
+    this.updateVoice_(this.currentVoice);
+  }
+
+  /**
+   * @param {string} text
+   * @param {Object=} properties
+   * @override
+   */
+  preprocess(text, properties) {
+    properties = properties ? properties : {};
+
+    // Perform generic processing.
+    text = super.preprocess(text, properties);
+
+    // Perform any remaining processing such as punctuation expansion.
+    let punctEcho = null;
+    if (properties[ttsTypes.TtsSettings.PUNCTUATION_ECHO]) {
+      for (let i = 0; punctEcho = ttsTypes.PunctuationEchoes[i]; i++) {
+        if (properties[ttsTypes.TtsSettings.PUNCTUATION_ECHO] ===
+            punctEcho.name) {
+          break;
+        }
+      }
+    } else {
+      punctEcho = ttsTypes.PunctuationEchoes[this.currentPunctuationEcho_];
+    }
+    text = text.replace(
+        punctEcho.regexp, this.createPunctuationReplace_(punctEcho.clear));
+
+    // Remove all whitespace from the beginning and end, and collapse all
+    // inner strings of whitespace to a single space.
+    text = text.replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '');
+
+    // Look for the pattern [number + lowercase letter], such as in "5g
+    // network". We want to capitalize the letter to prevent it from being
+    // substituted with a unit in the TTS engine; in the above case, the
+    // string would get spoken as "5 grams network", which we want to avoid.
+    // We do not match against the letter "a" in the regular expression
+    // because it is a word and we do not want to capitalize it just because
+    // it comes after a number.
+    text = text.replace(
+        /(\d)(\s*)([b-z])\b/g,
+        (unused, num, whitespace, letter) =>
+            num + whitespace + letter.toUpperCase());
+
+    return text;
+  }
+
+  /** @override */
+  toggleSpeechOnOrOff() {
+    const previousValue = this.ttsProperties[ttsTypes.TtsSettings.VOLUME];
+    const toggle = () => {
+      if (previousValue === 0) {
+        this.ttsProperties[ttsTypes.TtsSettings.VOLUME] = 1;
+      } else {
+        this.ttsProperties[ttsTypes.TtsSettings.VOLUME] = 0;
+        this.stop();
+      }
+    };
+
+    if (previousValue === 0) {
+      toggle();
+    } else {
+      // Let the caller make any last minute announcements in the current call
+      // stack.
+      setTimeout(toggle, 0);
+    }
+
+    return previousValue === 0;
+  }
+
+  /**
+   * Method that updates the punctuation echo level, and also persists setting
+   * to local storage.
+   * @param {number} punctuationEcho The index of the desired punctuation echo
+   * level in ttsTypes.PunctuationEchoes.
+   */
+  updatePunctuationEcho(punctuationEcho) {
+    this.currentPunctuationEcho_ = punctuationEcho;
+    LocalStorage.set(ttsTypes.TtsSettings.PUNCTUATION_ECHO, punctuationEcho);
+  }
+
+  /**
+   * Method that cycles among the available punctuation echo levels.
+   * @return {string} The resulting punctuation level message id.
+   */
+  cyclePunctuationEcho() {
+    this.updatePunctuationEcho(
+        (this.currentPunctuationEcho_ + 1) % ttsTypes.PunctuationEchoes.length);
+    return ttsTypes.PunctuationEchoes[this.currentPunctuationEcho_].msg;
+  }
+
+  /**
+   * Converts a number into space-separated digits.
+   * For numbers containing 4 or fewer digits, we return the original number.
+   * This ensures that numbers like 123,456 or 2011 are not "digitized" while
+   * 123456 is.
+   * @param {string} text The text to process.
+   * @return {string} A string with all numbers converted.
+   * @private
+   */
+  getNumberAsDigits_(text) {
+    return text.replace(/[0-90-9]+/g, function(num) {
+      return num.split('').join(' ');
+    });
+  }
+
+  /**
+   * Constructs a function for string.replace that handles description of a
+   *  punctuation character.
+   * @param {boolean} clear Whether we want to use whitespace in place of
+   *     match.
+   * @return {function(string): string} The replacement function.
+   * @private
+   */
+  createPunctuationReplace_(clear) {
+    return match => {
+      const retain =
+          this.retainPunctuation_.indexOf(match) !== -1 ? match : ' ';
+      return clear ? retain :
+                     ' ' +
+              (new goog.i18n.MessageFormat(
+                   Msgs.getMsg(ttsTypes.CharacterDictionary[match])))
+                  .format({'COUNT': 1}) +
+              retain + ' ';
+    };
+  }
+
+  /**
+   * Queues phonetic disambiguation for characters if disambiguation is found.
+   * @param {string} text The text for which we want to get phonetic data.
+   * @param {!ttsTypes.TtsSpeechProperties} properties Speech properties to use
+   *     for this utterance.
+   * @private
+   */
+  pronouncePhonetically_(text, properties) {
+    // Math should never be pronounced phonetically.
+    if (properties.math) {
+      return;
+    }
+
+    // Only pronounce phonetic hints when explicitly requested.
+    if (!properties.phoneticCharacters) {
+      return;
+    }
+
+    // Remove this property so we don't trap ourselves in a loop.
+    delete properties.phoneticCharacters;
+
+    // If undefined language, use the UI language of the browser as a best
+    // guess.
+    if (!properties.lang) {
+      properties.lang = chrome.i18n.getUILanguage();
+    }
+
+    const phoneticText = PhoneticData.forCharacter(text, properties.lang);
+    if (phoneticText) {
+      properties.delay = true;
+      this.speak(phoneticText, ttsTypes.QueueMode.QUEUE, properties);
+    }
+  }
+
+  /**
+   * Clears the last timeout set via setTimeout.
+   * @private
+   */
+  clearTimeout_() {
+    if (goog.isDef(this.timeoutId_)) {
+      clearTimeout(this.timeoutId_);
+      this.timeoutId_ = undefined;
+    }
+  }
+
+  /**
+   * Update the current voice used to speak based upon values in storage. If
+   * that does not succeed, fallback to use system locale when picking a
+   * voice.
+   * @param {string} voiceName Voice name to set.
+   * @param {function(string) : void=} opt_callback Called when the voice is
+   * determined.
+   * @private
+   */
+  updateVoice_(voiceName, opt_callback) {
+    chrome.tts.getVoices(voices => {
+      const systemVoice = {voiceName: constants.SYSTEM_VOICE};
+      voices.unshift(systemVoice);
+      const newVoice = voices.find(v => {
+        return v.voiceName === voiceName;
+      }) ||
+          systemVoice;
+      if (newVoice && newVoice.voiceName) {
+        this.currentVoice = newVoice.voiceName;
+        this.startSpeakingNextItemInQueue_();
+      }
+      if (opt_callback) {
+        opt_callback(this.currentVoice);
+      }
+    });
+  }
+
+  /**
+   * @param {boolean} announce
+   * @param {Array<chrome.settingsPrivate.PrefObject>} prefs
+   * @private
+   */
+  updateFromPrefs_(announce, prefs) {
+    prefs.forEach(pref => {
+      let msg;
+      let propertyName;
+      switch (pref.key) {
+        case 'settings.tts.speech_rate':
+          propertyName = ttsTypes.TtsSettings.RATE;
+          msg = 'announce_rate';
+          this.setHintDelayMS(/** @type {number} */ (pref.value));
+          break;
+        case 'settings.tts.speech_pitch':
+          propertyName = ttsTypes.TtsSettings.PITCH;
+          msg = 'announce_pitch';
+          break;
+        case 'settings.tts.speech_volume':
+          propertyName = ttsTypes.TtsSettings.VOLUME;
+          msg = 'announce_volume';
+          break;
+        default:
+          return;
+      }
+
+      this.ttsProperties[propertyName] = pref.value;
+
+      if (!announce) {
+        return;
+      }
+
+      const valueAsPercent =
+          Math.round(this.propertyToPercentage(propertyName) * 100);
+      const announcement = Msgs.getMsg(msg, [valueAsPercent]);
+      ChromeVox.tts.speak(
+          announcement, ttsTypes.QueueMode.FLUSH,
+          ttsTypes.Personality.ANNOTATION);
+    });
+  }
+
+  /** @override */
+  resetTextToSpeechSettings() {
+    super.resetTextToSpeechSettings();
+
+    const rate = ChromeVox.tts.getDefaultProperty('rate');
+    const pitch = ChromeVox.tts.getDefaultProperty('pitch');
+    const volume = ChromeVox.tts.getDefaultProperty('volume');
+    chrome.settingsPrivate.setPref('settings.tts.speech_rate', rate);
+    chrome.settingsPrivate.setPref('settings.tts.speech_pitch', pitch);
+    chrome.settingsPrivate.setPref('settings.tts.speech_volume', volume);
+    chrome.storage.local.remove('voiceName');
+    this.updateVoice_('', () => {
+      // Ensure this announcement doesn't get cut off by speech triggered by
+      // updateFromPrefs_().
+      // Copy properties from ttsTypes.Personality.ANNOTATION and add the
+      // doNotInterrupt property.
+      const speechProperties = {};
+      const sourceProperties = ttsTypes.Personality.ANNOTATION || {};
+      for (const [key, value] of Object.entries(sourceProperties)) {
+        speechProperties[key] = value;
+      }
+      speechProperties['doNotInterrupt'] = true;
+
+      ChromeVox.tts.speak(
+          Msgs.getMsg('announce_tts_default_settings'),
+          ttsTypes.QueueMode.FLUSH,
+          new ttsTypes.TtsSpeechProperties(speechProperties));
+    });
+  }
+
+  /**
+   * Sets |hint_delay_ms_| given the speech rate.
+   * We want an inverse relationship between the speech rate and the hint
+   * delay; the faster the speech rate, the shorter the delay should be.
+   * Default speech rate (value of 1) should map to a delay of 1000 MS.
+   * @param {number} rate
+   */
+  setHintDelayMS(rate) {
+    PrimaryTts.hint_delay_ms_ = 1000 / rate;
+  }
+}
+
+
+/**
+ * The amount of time, in milliseconds, to wait before speaking a hint.
+ * @type {number}
+ * @private
+ */
+PrimaryTts.hint_delay_ms_ = 1000;
+
+/**
+ * The list of properties allowed to be passed to the chrome.tts.speak API.
+ * Anything outside this list will be stripped.
+ * @type {Array<string>}
+ * @private
+ * @const
+ */
+PrimaryTts.ALLOWED_PROPERTIES_ = [
+  'desiredEventTypes',
+  'enqueue',
+  'extensionId',
+  'gender',
+  'lang',
+  'onEvent',
+  'pitch',
+  'rate',
+  'requiredEventTypes',
+  'voiceName',
+  'volume',
+];
+
+/** @private {RegExp} */
+PrimaryTts.SKIP_WHITESPACE_ = /^[\s\u00a0]*$/;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js
index 1694500..bfcc9c6 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background.js
@@ -7,20 +7,14 @@
  * extension API.
  */
 
-import {constants} from '../../common/constants.js';
-import {LocalStorage} from '../../common/local_storage.js';
 import {BridgeConstants} from '../common/bridge_constants.js';
 import {BridgeHelper} from '../common/bridge_helper.js';
-import {Msgs} from '../common/msgs.js';
-import {PanelCommand, PanelCommandType} from '../common/panel_command.js';
-import {TtsCapturingEventListener, TtsInterface} from '../common/tts_interface.js';
-import * as ttsTypes from '../common/tts_types.js';
+import {TtsInterface} from '../common/tts_interface.js';
 
-import {AbstractTts} from './abstract_tts.js';
 import {ChromeVox} from './chromevox.js';
 import {CompositeTts} from './composite_tts.js';
 import {ConsoleTts} from './console_tts.js';
-import {PhoneticData} from './phonetic_data.js';
+import {PrimaryTts} from './primary_tts.js';
 
 const Action = BridgeConstants.TtsBackground.Action;
 const TARGET = BridgeConstants.TtsBackground.TARGET;
@@ -81,896 +75,3 @@
 TtsBackground.consoleTts_;
 /** @private {PrimaryTts} */
 TtsBackground.primaryTts_;
-
-const Utterance = class {
-  /**
-   * @param {string} textString The string of text to be spoken.
-   * @param {Object} properties Speech properties to use for this utterance.
-   */
-  constructor(textString, properties, queueMode) {
-    this.textString = textString;
-    this.properties = properties;
-    this.queueMode = queueMode;
-    this.id = Utterance.nextUtteranceId_++;
-  }
-};
-
-/**
- * The next utterance id to use.
- * @type {number}
- * @private
- */
-Utterance.nextUtteranceId_ = 1;
-
-/**
- * This class is the default implementation for TTS in the background context.
- */
-export class PrimaryTts extends AbstractTts {
-  constructor() {
-    super();
-
-    this.lastEventType = 'end';
-
-    /** @private {number} */
-    this.currentPunctuationEcho_ =
-        LocalStorage.get(ttsTypes.TtsSettings.PUNCTUATION_ECHO) || 1;
-
-    /**
-     * A list of punctuation characters that should always be spliced into
-     * output even with literal word substitutions. This is important for tts
-     * prosity.
-     * @type {!Array<string>}
-     * @private
-     */
-    this.retainPunctuation_ = [';', '?', '!', '\''];
-
-    /**
-     * The id of a callback returned by setTimeout.
-     * @type {number|undefined}
-     */
-    this.timeoutId_;
-
-    /**
-     * Capturing tts event listeners.
-     * @type {Array<TtsCapturingEventListener>}
-     * @private
-     */
-    this.capturingTtsEventListeners_ = [];
-
-    /**
-     * The current utterance.
-     * @type {Utterance}
-     * @private
-     */
-    this.currentUtterance_ = null;
-
-    /**
-     * The utterance queue.
-     * @private {!Array<Utterance>}
-     */
-    this.utteranceQueue_ = [];
-
-    /**
-     * Queue of utterances interrupted by interjected utterances.
-     * @private {!Array<Utterance>}
-     */
-    this.utteranceQueueInterruptedByInterjection_ = [];
-
-    /**
-     * The current voice name.
-     * @type {string}
-     */
-    this.currentVoice;
-
-    if (window.speechSynthesis) {
-      window.speechSynthesis.onvoiceschanged = function() {
-        chrome.storage.local.get({voiceName: ''}, function(items) {
-          this.updateVoice_(items.voiceName);
-        }.bind(this));
-      }.bind(this);
-    } else {
-      // SpeechSynthesis API is not available on chromecast. Call
-      // updateVoice_ to set the one and only voice as the current
-      // voice.
-      this.updateVoice_('');
-    }
-
-    chrome.storage.onChanged.addListener(function(changes, namespace) {
-      if (changes.voiceName) {
-        this.updateVoice_(changes.voiceName.newValue);
-      }
-    }.bind(this));
-
-    // Migration: local LocalStorage tts properties -> Chrome pref settings.
-    if (LocalStorage.get('rate')) {
-      chrome.settingsPrivate.setPref(
-          'settings.tts.speech_rate', LocalStorage.get('rate'));
-      LocalStorage.remove('rate');
-    }
-    if (LocalStorage.get('pitch')) {
-      chrome.settingsPrivate.setPref(
-          'settings.tts.speech_pitch', LocalStorage.get('pitch'));
-      LocalStorage.remove('pitch');
-    }
-    if (LocalStorage.get('volume')) {
-      chrome.settingsPrivate.setPref(
-          'settings.tts.speech_volume', LocalStorage.get('volume'));
-      LocalStorage.remove('volume');
-    }
-
-    // At startup.
-    chrome.settingsPrivate.getAllPrefs(this.updateFromPrefs_.bind(this, false));
-
-    // At runtime.
-    chrome.settingsPrivate.onPrefsChanged.addListener(
-        this.updateFromPrefs_.bind(this, true));
-  }
-
-  /**
-   * @param {string} textString The string of text to be spoken.
-   * @param {ttsTypes.QueueMode} queueMode The queue mode to use for speaking.
-   * @param {ttsTypes.TtsSpeechProperties=} properties Speech properties to use
-   *     for this utterance.
-   * @return {TtsInterface} A tts object useful for chaining speak calls.
-   * @override
-   */
-  speak(textString, queueMode, properties) {
-    super.speak(textString, queueMode, properties);
-
-    // |textString| gets manipulated throughout this function. Save the
-    // original value for functions that may need it.
-    const originalTextString = textString;
-
-    if (this.ttsProperties[ttsTypes.TtsSettings.VOLUME] === 0) {
-      return this;
-    }
-
-    if (!properties) {
-      properties = new ttsTypes.TtsSpeechProperties();
-    }
-
-    if (textString.length > constants.OBJECT_MAX_CHARCOUNT) {
-      // The text is too long. Try to split the text into multiple chunks
-      // based on line breaks.
-      this.speakSplittingText_(textString, queueMode, properties);
-      return this;
-    }
-
-    textString = this.preprocess(textString, properties);
-
-    // This pref on LocalStorage gets set by the options page.
-    if (LocalStorage.get('numberReadingStyle') === 'asDigits') {
-      textString = this.getNumberAsDigits_(textString);
-    }
-
-    // TODO(dtseng): some TTS engines don't handle strings that don't produce
-    // any speech very well. Handle empty and whitespace only strings
-    // (including non-breaking space) here to mitigate the issue somewhat.
-    if (PrimaryTts.SKIP_WHITESPACE_.test(textString)) {
-      // Explicitly call start and end callbacks before skipping this text.
-      if (properties.startCallback) {
-        try {
-          properties.startCallback();
-        } catch (e) {
-        }
-      }
-      if (properties.endCallback) {
-        try {
-          properties.endCallback();
-        } catch (e) {
-        }
-      }
-      if (queueMode === ttsTypes.QueueMode.FLUSH) {
-        this.stop();
-      }
-      return this;
-    }
-
-    const mergedProperties = this.mergeProperties(properties);
-
-    if (this.currentVoice && this.currentVoice !== constants.SYSTEM_VOICE) {
-      mergedProperties['voiceName'] = this.currentVoice;
-    }
-
-    const utterance = new Utterance(textString, mergedProperties, queueMode);
-    this.speakUsingQueue_(utterance);
-    // Attempt to queue phonetic speech with property['delay']. This ensures
-    // that phonetic hints are delayed when we process them.
-    this.pronouncePhonetically_(originalTextString, properties);
-    return this;
-  }
-
-  /** @return {!Array<Utterance>} */
-  getUtteranceQueueForTest() {
-    return this.utteranceQueue_;
-  }
-
-  /**
-   * Split the given textString into smaller chunks and call this.speak() for
-   * each chunks.
-   * @param {string} textString The string of text to be spoken.
-   * @param {ttsTypes.QueueMode} queueMode The queue mode to use for speaking.
-   * @param {ttsTypes.TtsSpeechProperties=} properties Speech properties to use
-   *     for this utterance.
-   * @private
-   */
-  speakSplittingText_(textString, queueMode, properties) {
-    const chunks = PrimaryTts.splitUntilSmall(textString, '\n\r ');
-    for (const chunk of chunks) {
-      this.speak(chunk, queueMode, properties);
-      queueMode = ttsTypes.QueueMode.QUEUE;
-    }
-  }
-
-  /**
-   * Splits |text| until each substring's length is smaller than or equal to
-   * constants.OBJECT_MAX_CHARCOUNT.
-   * @param {string} text
-   * @param {string} delimiters
-   * @return {!Array<string>}
-   */
-  static splitUntilSmall(text, delimiters) {
-    if (text.length === 0) {
-      return [];
-    }
-
-    if (text.length <= constants.OBJECT_MAX_CHARCOUNT) {
-      return [text];
-    }
-
-    const midIndex = text.length / 2;
-    if (!delimiters) {
-      return PrimaryTts.splitUntilSmall(text.substring(0, midIndex), delimiters)
-          .concat(PrimaryTts.splitUntilSmall(
-              text.substring(midIndex, text.length), delimiters));
-    }
-
-    const delimiter = delimiters[0];
-    let splitIndex = text.lastIndexOf(delimiter, midIndex);
-    if (splitIndex === -1) {
-      splitIndex = text.indexOf(delimiter, midIndex);
-    }
-
-    if (splitIndex === -1) {
-      delimiters = delimiters.slice(1);
-      return PrimaryTts.splitUntilSmall(text, delimiters);
-    }
-
-    return PrimaryTts.splitUntilSmall(text.substring(0, splitIndex), delimiters)
-        .concat(PrimaryTts.splitUntilSmall(
-            text.substring(splitIndex + 1, text.length), delimiters));
-  }
-
-  /**
-   * Use the speech queue to handle the given speech request.
-   * @param {Utterance} utterance The utterance to speak.
-   * @private
-   */
-  speakUsingQueue_(utterance) {
-    const queueMode = utterance.queueMode;
-
-    // First, take care of removing the current utterance and flushing
-    // anything from the queue we need to. If we remove the current utterance,
-    // make a note that we're going to stop speech.
-    if (queueMode === ttsTypes.QueueMode.FLUSH ||
-        queueMode === ttsTypes.QueueMode.CATEGORY_FLUSH ||
-        queueMode === ttsTypes.QueueMode.INTERJECT) {
-      (new PanelCommand(PanelCommandType.CLEAR_SPEECH)).send();
-
-      if (this.shouldCancel_(this.currentUtterance_, utterance)) {
-        // Clear timeout in case currentUtterance_ is a delayed utterance.
-        this.clearTimeout_();
-        this.cancelUtterance_(this.currentUtterance_);
-        this.currentUtterance_ = null;
-      }
-      let i = 0;
-      while (i < this.utteranceQueue_.length) {
-        if (this.shouldCancel_(this.utteranceQueue_[i], utterance)) {
-          this.cancelUtterance_(this.utteranceQueue_[i]);
-          this.utteranceQueue_.splice(i, 1);
-        } else {
-          i++;
-        }
-      }
-    }
-
-    // Now, some special handling for interjections.
-    if (queueMode === ttsTypes.QueueMode.INTERJECT) {
-      // Move all utterances to a secondary queue to be restored later.
-      this.utteranceQueueInterruptedByInterjection_ = this.utteranceQueue_;
-
-      // The interjection is the only utterance.
-      this.utteranceQueue_ = [utterance];
-
-      // Ensure to clear the current utterance and prepend it for it to repeat
-      // later.
-      if (this.currentUtterance_) {
-        this.utteranceQueueInterruptedByInterjection_.unshift(
-            this.currentUtterance_);
-        this.currentUtterance_ = null;
-      }
-
-      // Restore the interrupted utterances after allowing all other
-      // utterances in this callstack to process.
-      setTimeout(() => {
-        // Utterances on the current queue are now also interjections.
-        for (let i = 0; i < this.utteranceQueue_.length; i++) {
-          this.utteranceQueue_[i].queueMode = ttsTypes.QueueMode.INTERJECT;
-        }
-        this.utteranceQueue_ = this.utteranceQueue_.concat(
-            this.utteranceQueueInterruptedByInterjection_);
-      }, 0);
-    } else {
-      // Next, add the new utterance to the queue.
-      this.utteranceQueue_.push(utterance);
-    }
-
-    // Now start speaking the next item in the queue.
-    this.startSpeakingNextItemInQueue_();
-  }
-
-  /**
-   * If nothing is speaking, pop the first item off the speech queue and
-   * start speaking it. This is called when a speech request is made and
-   * when the current utterance finishes speaking.
-   * @private
-   */
-  startSpeakingNextItemInQueue_() {
-    if (this.currentUtterance_) {
-      return;
-    }
-
-    if (this.utteranceQueue_.length === 0) {
-      return;
-    }
-
-    // There is no voice to speak with (e.g. the tts system has not fully
-    // initialized).
-    if (!this.currentVoice) {
-      return;
-    }
-
-    // Clear timeout for delayed utterances (hints and phonetic speech).
-    this.clearTimeout_();
-
-    // Check top of utteranceQueue for delayed utterance.
-    if (this.utteranceQueue_[0].properties['delay']) {
-      // Remove 'delay' property and set a timeout to process this utterance
-      // after the delay has passed.
-      delete this.utteranceQueue_[0].properties['delay'];
-      this.timeoutId_ = setTimeout(
-          () => this.startSpeakingNextItemInQueue_(),
-          PrimaryTts.hint_delay_ms_);
-
-      return;
-    }
-
-    this.currentUtterance_ = this.utteranceQueue_.shift();
-    const utterance = this.currentUtterance_;
-    const utteranceId = utterance.id;
-
-    utterance.properties['onEvent'] = event => {
-      this.onTtsEvent_(event, utteranceId);
-    };
-
-    const validatedProperties = /** @type {!chrome.tts.TtsOptions} */ ({});
-    for (let i = 0; i < PrimaryTts.ALLOWED_PROPERTIES_.length; i++) {
-      const p = PrimaryTts.ALLOWED_PROPERTIES_[i];
-      if (utterance.properties[p]) {
-        validatedProperties[p] = utterance.properties[p];
-      }
-    }
-
-    // Update the caption panel.
-    if (utterance.properties && utterance.properties['pitch'] &&
-        utterance.properties['pitch'] < this.ttsProperties['pitch']) {
-      (new PanelCommand(
-           PanelCommandType.ADD_ANNOTATION_SPEECH, utterance.textString))
-          .send();
-    } else {
-      (new PanelCommand(
-           PanelCommandType.ADD_NORMAL_SPEECH, utterance.textString))
-          .send();
-    }
-
-    chrome.tts.speak(utterance.textString, validatedProperties);
-  }
-
-  /**
-   * Called when we get a speech event from Chrome. We ignore any event
-   * that doesn't pertain to the current utterance, but when speech starts
-   * or ends we optionally call callback functions, and start speaking the
-   * next utterance if there's another one enqueued.
-   * @param {Object} event The TTS event from chrome.
-   * @param {number} utteranceId The id of the associated utterance.
-   * @private
-   */
-  onTtsEvent_(event, utteranceId) {
-    this.lastEventType = event['type'];
-
-    // Ignore events sent on utterances other than the current one.
-    if (!this.currentUtterance_ || utteranceId !== this.currentUtterance_.id) {
-      return;
-    }
-
-    const utterance = this.currentUtterance_;
-
-    switch (event.type) {
-      case 'start':
-        this.capturingTtsEventListeners_.forEach(
-            listener => listener.onTtsStart());
-        if (utterance.properties['startCallback']) {
-          try {
-            utterance.properties['startCallback']();
-          } catch (e) {
-          }
-        }
-        break;
-      case 'end':
-        // End callbacks could cause additional speech to queue up.
-        this.currentUtterance_ = null;
-        this.capturingTtsEventListeners_.forEach(
-            listener => listener.onTtsEnd());
-        if (utterance.properties['endCallback']) {
-          try {
-            utterance.properties['endCallback']();
-          } catch (e) {
-          }
-        }
-        this.startSpeakingNextItemInQueue_();
-        break;
-      case 'interrupted':
-        this.cancelUtterance_(utterance);
-        this.currentUtterance_ = null;
-        for (let i = 0; i < this.utteranceQueue_.length; i++) {
-          this.cancelUtterance_(this.utteranceQueue_[i]);
-        }
-        this.utteranceQueue_.length = 0;
-        this.capturingTtsEventListeners_.forEach(
-            listener => listener.onTtsInterrupted());
-        break;
-      case 'error':
-        this.onError_(event['errorMessage']);
-        this.currentUtterance_ = null;
-        this.startSpeakingNextItemInQueue_();
-        break;
-    }
-  }
-
-  /**
-   * Determines if |utteranceToCancel| should be canceled (interrupted if
-   * currently speaking, or removed from the queue if not), given the new
-   * utterance we want to speak and the queue mode. If the queue mode is
-   * QUEUE or FLUSH, the logic is straightforward. If the queue mode is
-   * CATEGORY_FLUSH, we only flush utterances with the same category.
-   *
-   * @param {Utterance} utteranceToCancel The utterance in question.
-   * @param {Utterance} newUtterance The new utterance we're enqueueing.
-   * @return {boolean} True if this utterance should be canceled.
-   * @private
-   */
-  shouldCancel_(utteranceToCancel, newUtterance) {
-    if (!utteranceToCancel) {
-      return false;
-    }
-    if (utteranceToCancel.properties['doNotInterrupt']) {
-      return false;
-    }
-    switch (newUtterance.queueMode) {
-      case ttsTypes.QueueMode.QUEUE:
-        return false;
-      case ttsTypes.QueueMode.INTERJECT:
-        return utteranceToCancel.queueMode === ttsTypes.QueueMode.INTERJECT;
-      case ttsTypes.QueueMode.FLUSH:
-        return true;
-      case ttsTypes.QueueMode.CATEGORY_FLUSH:
-        return (
-            utteranceToCancel.properties['category'] ===
-            newUtterance.properties['category']);
-    }
-    return false;
-  }
-
-  /**
-   * Do any cleanup necessary to cancel an utterance, like callings its
-   * callback function if any.
-   * @param {Utterance} utterance The utterance to cancel.
-   * @private
-   */
-  cancelUtterance_(utterance) {
-    if (utterance && utterance.properties['endCallback']) {
-      try {
-        utterance.properties['endCallback'](true);
-      } catch (e) {
-      }
-    }
-  }
-
-  /** @override */
-  increaseOrDecreaseProperty(propertyName, increase) {
-    super.increaseOrDecreaseProperty(propertyName, increase);
-
-    let pref;
-    switch (propertyName) {
-      case ttsTypes.TtsSettings.RATE:
-        pref = 'settings.tts.speech_rate';
-        break;
-      case ttsTypes.TtsSettings.PITCH:
-        pref = 'settings.tts.speech_pitch';
-        break;
-      case ttsTypes.TtsSettings.VOLUME:
-        pref = 'settings.tts.speech_volume';
-        break;
-      default:
-        return;
-    }
-    const value = this.ttsProperties[propertyName];
-    chrome.settingsPrivate.setPref(pref, value);
-  }
-
-  /** @override */
-  isSpeaking() {
-    super.isSpeaking();
-    return Boolean(this.currentUtterance_);
-  }
-
-  /** @override */
-  stop() {
-    super.stop();
-
-    this.cancelUtterance_(this.currentUtterance_);
-    this.currentUtterance_ = null;
-
-    for (let i = 0; i < this.utteranceQueue_.length; i++) {
-      this.cancelUtterance_(this.utteranceQueue_[i]);
-    }
-
-    for (let i = 0; i < this.utteranceQueueInterruptedByInterjection_.length;
-         i++) {
-      this.cancelUtterance_(this.utteranceQueueInterruptedByInterjection_[i]);
-    }
-
-    this.utteranceQueue_.length = 0;
-    this.utteranceQueueInterruptedByInterjection_.length = 0;
-
-    (new PanelCommand(PanelCommandType.CLEAR_SPEECH)).send();
-    chrome.tts.stop();
-
-    this.capturingTtsEventListeners_.forEach(
-        listener => listener.onTtsInterrupted());
-  }
-
-  /** @override */
-  addCapturingEventListener(listener) {
-    this.capturingTtsEventListeners_.push(listener);
-  }
-
-  /** @override */
-  removeCapturingEventListener(listener) {
-    this.capturingTtsEventListeners_ =
-        this.capturingTtsEventListeners_.filter(item => {
-          return item !== listener;
-        });
-  }
-
-  /**
-   * An error handler passed as a callback to chrome.tts.speak.
-   * @param {string} errorMessage Describes the error (set by onEvent).
-   * @private
-   */
-  onError_(errorMessage) {
-    this.updateVoice_(this.currentVoice);
-  }
-
-  /**
-   * @param {string} text
-   * @param {Object=} properties
-   * @override
-   */
-  preprocess(text, properties) {
-    properties = properties ? properties : {};
-
-    // Perform generic processing.
-    text = super.preprocess(text, properties);
-
-    // Perform any remaining processing such as punctuation expansion.
-    let punctEcho = null;
-    if (properties[ttsTypes.TtsSettings.PUNCTUATION_ECHO]) {
-      for (let i = 0; punctEcho = ttsTypes.PunctuationEchoes[i]; i++) {
-        if (properties[ttsTypes.TtsSettings.PUNCTUATION_ECHO] ===
-            punctEcho.name) {
-          break;
-        }
-      }
-    } else {
-      punctEcho = ttsTypes.PunctuationEchoes[this.currentPunctuationEcho_];
-    }
-    text = text.replace(
-        punctEcho.regexp, this.createPunctuationReplace_(punctEcho.clear));
-
-    // Remove all whitespace from the beginning and end, and collapse all
-    // inner strings of whitespace to a single space.
-    text = text.replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '');
-
-    // Look for the pattern [number + lowercase letter], such as in "5g
-    // network". We want to capitalize the letter to prevent it from being
-    // substituted with a unit in the TTS engine; in the above case, the
-    // string would get spoken as "5 grams network", which we want to avoid.
-    // We do not match against the letter "a" in the regular expression
-    // because it is a word and we do not want to capitalize it just because
-    // it comes after a number.
-    text = text.replace(
-        /(\d)(\s*)([b-z])\b/g,
-        (unused, num, whitespace, letter) =>
-            num + whitespace + letter.toUpperCase());
-
-    return text;
-  }
-
-  /** @override */
-  toggleSpeechOnOrOff() {
-    const previousValue = this.ttsProperties[ttsTypes.TtsSettings.VOLUME];
-    const toggle = () => {
-      if (previousValue === 0) {
-        this.ttsProperties[ttsTypes.TtsSettings.VOLUME] = 1;
-      } else {
-        this.ttsProperties[ttsTypes.TtsSettings.VOLUME] = 0;
-        this.stop();
-      }
-    };
-
-    if (previousValue === 0) {
-      toggle();
-    } else {
-      // Let the caller make any last minute announcements in the current call
-      // stack.
-      setTimeout(toggle, 0);
-    }
-
-    return previousValue === 0;
-  }
-
-  /**
-   * Method that updates the punctuation echo level, and also persists setting
-   * to local storage.
-   * @param {number} punctuationEcho The index of the desired punctuation echo
-   * level in ttsTypes.PunctuationEchoes.
-   */
-  updatePunctuationEcho(punctuationEcho) {
-    this.currentPunctuationEcho_ = punctuationEcho;
-    LocalStorage.set(ttsTypes.TtsSettings.PUNCTUATION_ECHO, punctuationEcho);
-  }
-
-  /**
-   * Method that cycles among the available punctuation echo levels.
-   * @return {string} The resulting punctuation level message id.
-   */
-  cyclePunctuationEcho() {
-    this.updatePunctuationEcho(
-        (this.currentPunctuationEcho_ + 1) % ttsTypes.PunctuationEchoes.length);
-    return ttsTypes.PunctuationEchoes[this.currentPunctuationEcho_].msg;
-  }
-
-  /**
-   * Converts a number into space-separated digits.
-   * For numbers containing 4 or fewer digits, we return the original number.
-   * This ensures that numbers like 123,456 or 2011 are not "digitized" while
-   * 123456 is.
-   * @param {string} text The text to process.
-   * @return {string} A string with all numbers converted.
-   * @private
-   */
-  getNumberAsDigits_(text) {
-    return text.replace(/[0-90-9]+/g, function(num) {
-      return num.split('').join(' ');
-    });
-  }
-
-  /**
-   * Constructs a function for string.replace that handles description of a
-   *  punctuation character.
-   * @param {boolean} clear Whether we want to use whitespace in place of
-   *     match.
-   * @return {function(string): string} The replacement function.
-   * @private
-   */
-  createPunctuationReplace_(clear) {
-    return match => {
-      const retain =
-          this.retainPunctuation_.indexOf(match) !== -1 ? match : ' ';
-      return clear ? retain :
-                     ' ' +
-              (new goog.i18n.MessageFormat(
-                   Msgs.getMsg(ttsTypes.CharacterDictionary[match])))
-                  .format({'COUNT': 1}) +
-              retain + ' ';
-    };
-  }
-
-  /**
-   * Queues phonetic disambiguation for characters if disambiguation is found.
-   * @param {string} text The text for which we want to get phonetic data.
-   * @param {!ttsTypes.TtsSpeechProperties} properties Speech properties to use
-   *     for this utterance.
-   * @private
-   */
-  pronouncePhonetically_(text, properties) {
-    // Math should never be pronounced phonetically.
-    if (properties.math) {
-      return;
-    }
-
-    // Only pronounce phonetic hints when explicitly requested.
-    if (!properties.phoneticCharacters) {
-      return;
-    }
-
-    // Remove this property so we don't trap ourselves in a loop.
-    delete properties.phoneticCharacters;
-
-    // If undefined language, use the UI language of the browser as a best
-    // guess.
-    if (!properties.lang) {
-      properties.lang = chrome.i18n.getUILanguage();
-    }
-
-    const phoneticText = PhoneticData.forCharacter(text, properties.lang);
-    if (phoneticText) {
-      properties.delay = true;
-      this.speak(phoneticText, ttsTypes.QueueMode.QUEUE, properties);
-    }
-  }
-
-  /**
-   * Clears the last timeout set via setTimeout.
-   * @private
-   */
-  clearTimeout_() {
-    if (goog.isDef(this.timeoutId_)) {
-      clearTimeout(this.timeoutId_);
-      this.timeoutId_ = undefined;
-    }
-  }
-
-  /**
-   * Update the current voice used to speak based upon values in storage. If
-   * that does not succeed, fallback to use system locale when picking a
-   * voice.
-   * @param {string} voiceName Voice name to set.
-   * @param {function(string) : void=} opt_callback Called when the voice is
-   * determined.
-   * @private
-   */
-  updateVoice_(voiceName, opt_callback) {
-    chrome.tts.getVoices(voices => {
-      const systemVoice = {voiceName: constants.SYSTEM_VOICE};
-      voices.unshift(systemVoice);
-      const newVoice = voices.find(v => {
-        return v.voiceName === voiceName;
-      }) ||
-          systemVoice;
-      if (newVoice && newVoice.voiceName) {
-        this.currentVoice = newVoice.voiceName;
-        this.startSpeakingNextItemInQueue_();
-      }
-      if (opt_callback) {
-        opt_callback(this.currentVoice);
-      }
-    });
-  }
-
-  /**
-   * @param {boolean} announce
-   * @param {Array<chrome.settingsPrivate.PrefObject>} prefs
-   * @private
-   */
-  updateFromPrefs_(announce, prefs) {
-    prefs.forEach(pref => {
-      let msg;
-      let propertyName;
-      switch (pref.key) {
-        case 'settings.tts.speech_rate':
-          propertyName = ttsTypes.TtsSettings.RATE;
-          msg = 'announce_rate';
-          this.setHintDelayMS(/** @type {number} */ (pref.value));
-          break;
-        case 'settings.tts.speech_pitch':
-          propertyName = ttsTypes.TtsSettings.PITCH;
-          msg = 'announce_pitch';
-          break;
-        case 'settings.tts.speech_volume':
-          propertyName = ttsTypes.TtsSettings.VOLUME;
-          msg = 'announce_volume';
-          break;
-        default:
-          return;
-      }
-
-      this.ttsProperties[propertyName] = pref.value;
-
-      if (!announce) {
-        return;
-      }
-
-      const valueAsPercent =
-          Math.round(this.propertyToPercentage(propertyName) * 100);
-      const announcement = Msgs.getMsg(msg, [valueAsPercent]);
-      ChromeVox.tts.speak(
-          announcement, ttsTypes.QueueMode.FLUSH,
-          ttsTypes.Personality.ANNOTATION);
-    });
-  }
-
-  /** @override */
-  resetTextToSpeechSettings() {
-    super.resetTextToSpeechSettings();
-
-    const rate = ChromeVox.tts.getDefaultProperty('rate');
-    const pitch = ChromeVox.tts.getDefaultProperty('pitch');
-    const volume = ChromeVox.tts.getDefaultProperty('volume');
-    chrome.settingsPrivate.setPref('settings.tts.speech_rate', rate);
-    chrome.settingsPrivate.setPref('settings.tts.speech_pitch', pitch);
-    chrome.settingsPrivate.setPref('settings.tts.speech_volume', volume);
-    chrome.storage.local.remove('voiceName');
-    this.updateVoice_('', () => {
-      // Ensure this announcement doesn't get cut off by speech triggered by
-      // updateFromPrefs_().
-      // Copy properties from ttsTypes.Personality.ANNOTATION and add the
-      // doNotInterrupt property.
-      const speechProperties = {};
-      const sourceProperties = ttsTypes.Personality.ANNOTATION || {};
-      for (const [key, value] of Object.entries(sourceProperties)) {
-        speechProperties[key] = value;
-      }
-      speechProperties['doNotInterrupt'] = true;
-
-      ChromeVox.tts.speak(
-          Msgs.getMsg('announce_tts_default_settings'),
-          ttsTypes.QueueMode.FLUSH,
-          new ttsTypes.TtsSpeechProperties(speechProperties));
-    });
-  }
-
-  /**
-   * Sets |hint_delay_ms_| given the speech rate.
-   * We want an inverse relationship between the speech rate and the hint
-   * delay; the faster the speech rate, the shorter the delay should be.
-   * Default speech rate (value of 1) should map to a delay of 1000 MS.
-   * @param {number} rate
-   */
-  setHintDelayMS(rate) {
-    PrimaryTts.hint_delay_ms_ = 1000 / rate;
-  }
-}
-
-
-/**
- * The amount of time, in milliseconds, to wait before speaking a hint.
- * @type {number}
- * @private
- */
-PrimaryTts.hint_delay_ms_ = 1000;
-
-/**
- * The list of properties allowed to be passed to the chrome.tts.speak API.
- * Anything outside this list will be stripped.
- * @type {Array<string>}
- * @private
- * @const
- */
-PrimaryTts.ALLOWED_PROPERTIES_ = [
-  'desiredEventTypes',
-  'enqueue',
-  'extensionId',
-  'gender',
-  'lang',
-  'onEvent',
-  'pitch',
-  'rate',
-  'requiredEventTypes',
-  'voiceName',
-  'volume',
-];
-
-/** @private {RegExp} */
-PrimaryTts.SKIP_WHITESPACE_ = /^[\s\u00a0]*$/;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js
index b96d8c1..0524195a 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/tts_background_test.js
@@ -17,7 +17,7 @@
     await importModule(
         'CommandHandlerInterface',
         '/chromevox/background/command_handler_interface.js');
-    await importModule('PrimaryTts', '/chromevox/background/tts_background.js');
+    await importModule('PrimaryTts', '/chromevox/background/primary_tts.js');
     await importModule(
         ['QueueMode', 'TtsSpeechProperties'], '/chromevox/common/tts_types.js');
     await importModule('LocalStorage', '/common/local_storage.js');
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor_test.js
index db2af84..5241da2f 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/user_action_monitor_test.js
@@ -25,6 +25,8 @@
         'ChromeVoxKbHandler', '/chromevox/common/keyboard_handler.js');
     await importModule('KeySequence', '/chromevox/common/key_sequence.js');
     await importModule('KeyCode', '/common/key_code.js');
+
+    globalThis.Gesture = chrome.accessibilityPrivate.Gesture;
   }
 
   /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/earcon_id.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/earcon_id.js
index 19f1570..ecf66b9 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/earcon_id.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/earcon_id.js
@@ -25,6 +25,7 @@
   LIST_ITEM: 'list_item',
   LONG_DESC: 'long_desc',
   MATH: 'math',
+  NO_POINTER_ANCHOR: 'no_pointer_anchor',
   OBJECT_CLOSE: 'object_close',
   OBJECT_ENTER: 'object_enter',
   OBJECT_EXIT: 'object_exit',
@@ -40,7 +41,6 @@
   SLIDER: 'slider',
   SMART_STICKY_MODE_OFF: 'smart_sticky_mode_off',
   SMART_STICKY_MODE_ON: 'smart_sticky_mode_on',
-  NO_POINTER_ANCHOR: 'no_pointer_anchor',
   WRAP: 'wrap',
   WRAP_EDGE: 'wrap_edge',
 };
@@ -57,12 +57,16 @@
   [EarconId.BUTTON]: 'button_earcon_description',
   [EarconId.CHECK_OFF]: 'check_off_earcon_description',
   [EarconId.CHECK_ON]: 'check_on_earcon_description',
+  [EarconId.CHROMEVOX_LOADING]: 'chromevox_loading_earcon_description',
   [EarconId.EDITABLE_TEXT]: 'editable_text_earcon_description',
   [EarconId.INVALID_KEYPRESS]: 'invalid_keypress_earcon_description',
   [EarconId.LINK]: 'link_earcon_description',
   [EarconId.LISTBOX]: 'listbox_earcon_description',
+  [EarconId.NO_POINTER_ANCHOR]: 'no_pointer_anchor_earcon_description',
   [EarconId.PAGE_START_LOADING]: 'page_start_loading_earcon_description',
   [EarconId.POP_UP_BUTTON]: 'pop_up_button_earcon_description',
   [EarconId.SLIDER]: 'slider_earcon_description',
+  [EarconId.SMART_STICKY_MODE_OFF]: 'smart_sticky_mode_off_earcon_description',
+  [EarconId.SMART_STICKY_MODE_ON]: 'smart_sticky_mode_on_earcon_description',
   [EarconId.WRAP]: 'wrap_earcon_description',
 };
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js
index ed0232e..41f05300 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/learn_mode/learn_mode_test.js
@@ -13,10 +13,13 @@
 ChromeVoxLearnModeTest = class extends ChromeVoxE2ETest {
   constructor() {
     super();
-    window.doKeyDown = this.doKeyDown.bind(this);
-    window.doKeyUp = this.doKeyUp.bind(this);
-    window.doLearnModeGesture = this.doLearnModeGesture.bind(this);
-    window.doBrailleKeyEvent = this.doBrailleKeyEvent.bind(this);
+    globalThis.EventType = chrome.automation.EventType;
+    globalThis.Gesture = chrome.accessibilityPrivate.Gesture;
+
+    globalThis.doKeyDown = this.doKeyDown.bind(this);
+    globalThis.doKeyUp = this.doKeyUp.bind(this);
+    globalThis.doLearnModeGesture = this.doLearnModeGesture.bind(this);
+    globalThis.doBrailleKeyEvent = this.doBrailleKeyEvent.bind(this);
   }
 
   /** @override */
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/options/bluetooth_braille_display_manager.js b/chrome/browser/resources/chromeos/accessibility/chromevox/options/bluetooth_braille_display_manager.js
index c8686c1..a6a870b 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/options/bluetooth_braille_display_manager.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/options/bluetooth_braille_display_manager.js
@@ -99,10 +99,10 @@
     /**
      * The display explicitly preferred by a caller via connect. Only one such
      * display exists at a time.
-     * @private {string?}
+     * @private {?string}
      */
-    this.preferredDisplayAddress_ =
-        LocalStorage.get('preferredBrailleDisplayAddress');
+    this.preferredDisplayAddress_ = /** @type {?string} */ (
+        LocalStorage.get('preferredBrailleDisplayAddress'));
 
     /**
      * Tracks whether the preferred display is connected.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js
index 7cfdb78..dbab73b 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.js
@@ -97,8 +97,8 @@
     }
 
     if (LocalStorage.get(TtsSettings.PUNCTUATION_ECHO)) {
-      const currentPunctuationEcho =
-          PunctuationEchoes[LocalStorage.get(TtsSettings.PUNCTUATION_ECHO)];
+      const currentPunctuationEcho = PunctuationEchoes[LocalStorage.getNumber(
+          TtsSettings.PUNCTUATION_ECHO)];
       for (let i = 0, opt; opt = $('punctuationEcho').options[i]; ++i) {
         if (opt.id === currentPunctuationEcho.name) {
           opt.setAttribute('selected', '');
@@ -208,7 +208,8 @@
             'capitalStrategy', 'announceCapitals');
       } else {
         $('increasePitch').disabled = false;
-        const capitalStrategyBackup = LocalStorage.get('capitalStrategyBackup');
+        const capitalStrategyBackup =
+            LocalStorage.getString('capitalStrategyBackup');
         if (capitalStrategyBackup) {
           // Restore original capitalStrategy setting.
           $('announceCapitals').selected =
@@ -344,7 +345,7 @@
         LocalStorage.set('brailleTable', sel.id);
         LocalStorage.set(node.id, sel.id);
         BackgroundBridge.BrailleBackground.refreshBrailleTable(
-            LocalStorage.get('brailleTable'));
+            LocalStorage.getString('brailleTable', ''));
       };
     };
 
@@ -377,7 +378,7 @@
             Msgs.getMsg('options_braille_table_type_8');
       }
       BackgroundBridge.BrailleBackground.refreshBrailleTable(
-          LocalStorage.get('brailleTable'));
+          LocalStorage.getString('brailleTable', ''));
     };
     updateTableType(false);
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options_test.js
index 8f5d5b8..d8276d8 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options_test.js
@@ -13,7 +13,9 @@
 ChromeVoxOptionsTest = class extends ChromeVoxE2ETest {
   constructor() {
     super();
-    window.press = this.press;
+    globalThis.EventType = chrome.automation.EventType;
+    globalThis.RoleType = chrome.automation.RoleType;
+    globalThis.press = this.press;
   }
 
   /** @override */
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/menu_manager.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/menu_manager.js
index d153dbc4..4b275bd5 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/menu_manager.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/menu_manager.js
@@ -7,7 +7,7 @@
  */
 import {Command, CommandStore} from '../common/command_store.js';
 
-import {PanelMenu} from './panel_menu.js';
+import {PanelMenu, PanelSearchMenu} from './panel_menu.js';
 
 export class MenuManager {
   constructor() {
@@ -16,6 +16,9 @@
      * @private {!Array<PanelMenu>}
      */
     this.menus_ = [];
+
+    /** @private {?PanelSearchMenu} */
+    this.searchMenu_ = null;
   }
 
   /** Disables menu items that are prohibited without a signed-in user. */
@@ -32,9 +35,24 @@
 
   /**
    * Temporary method during migration from panel.js.
-   * @return {!Array<PanelMenu>}
+   * @return {!Array<!PanelMenu>}
    */
   get menus() {
     return this.menus_;
   }
+
+  /**
+   * Temporary method during migration from panel.js.
+   * @return {?PanelSearchMenu}
+   */
+  get searchMenu() {
+    return this.searchMenu_;
+  }
+  /**
+   * Temporary method during migration from panel.js.
+   * @param {?PanelSearchMenu} menu
+   */
+  set searchMenu(menu) {
+    this.searchMenu_ = menu;
+  }
 }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
index 70777261..fb6fde4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
@@ -62,9 +62,6 @@
     /** @private {?(function(): !Promise)} */
     this.pendingCallback_ = null;
 
-    /** @private {?PanelSearchMenu} */
-    this.searchMenu_ = null;
-
     /** @private {string} */
     this.sessionState_ = '';
 
@@ -519,14 +516,15 @@
 
       // Activate either the specified menu or the search menu.
       // Search menu can be null, since it is hidden behind a flag.
-      let selectedMenu = this.searchMenu_ || this.menuManager_.menus[0];
+      let selectedMenu =
+          this.menuManager_.searchMenu || this.menuManager_.menus[0];
       for (let i = 0; i < this.menuManager_.menus.length; i++) {
         if (this.menuManager_.menus[i].menuMsg === opt_activateMenuTitle) {
           selectedMenu = this.menuManager_.menus[i];
         }
       }
 
-      const activateFirstItem = (selectedMenu !== this.searchMenu_);
+      const activateFirstItem = (selectedMenu !== this.menuManager_.searchMenu);
       this.activateMenu_(selectedMenu, activateFirstItem);
     };
 
@@ -762,30 +760,34 @@
    * @private
    */
   addSearchMenu_(menuMsg) {
-    this.searchMenu_ = new PanelSearchMenu(menuMsg);
+    this.menuManager_.searchMenu = new PanelSearchMenu(menuMsg);
     // Add event listeners to search bar.
-    this.searchMenu_.searchBar.addEventListener(
+    this.menuManager_.searchMenu.searchBar.addEventListener(
         'input', event => this.onSearchBarQuery_(event), false);
-    this.searchMenu_.searchBar.addEventListener('mouseup', event => {
-      // Clicking in the panel causes us to either activate an item or close the
-      // menus altogether. Prevent that from happening if we click the search
-      // bar.
-      event.preventDefault();
-      event.stopPropagation();
-    }, false);
+    this.menuManager_.searchMenu.searchBar.addEventListener(
+        'mouseup', event => {
+          // Clicking in the panel causes us to either activate an item or close
+          // the menus altogether. Prevent that from happening if we click the
+          // search bar.
+          event.preventDefault();
+          event.stopPropagation();
+        }, false);
 
-    $('menu-bar').appendChild(this.searchMenu_.menuBarItemElement);
-    this.searchMenu_.menuBarItemElement.addEventListener(
+    $('menu-bar').appendChild(this.menuManager_.searchMenu.menuBarItemElement);
+    this.menuManager_.searchMenu.menuBarItemElement.addEventListener(
         'mouseover',
-        () =>
-            this.activateMenu_(this.searchMenu_, false /* activateFirstItem */),
+        () => this.activateMenu_(
+            this.menuManager_.searchMenu, false /* activateFirstItem */),
         false);
-    this.searchMenu_.menuBarItemElement.addEventListener(
-        'mouseup', event => this.onMouseUpOnMenuTitle_(this.searchMenu_, event),
+    this.menuManager_.searchMenu.menuBarItemElement.addEventListener(
+        'mouseup',
+        event =>
+            this.onMouseUpOnMenuTitle_(this.menuManager_.searchMenu, event),
         false);
-    $('menus_background').appendChild(this.searchMenu_.menuContainerElement);
-    this.menuManager_.menus.push(this.searchMenu_);
-    return this.searchMenu_;
+    $('menus_background')
+        .appendChild(this.menuManager_.searchMenu.menuContainerElement);
+    this.menuManager_.menus.push(this.menuManager_.searchMenu);
+    return this.menuManager_.searchMenu;
   }
 
   /**
@@ -961,7 +963,8 @@
     // If left/right arrow are pressed, we should adjust the search bar's
     // cursor. We only want to advance the active menu if we are at the
     // beginning/end of the search bar's contents.
-    if (this.searchMenu_ && event.target === this.searchMenu_.searchBar) {
+    if (this.menuManager_.searchMenu &&
+        event.target === this.menuManager_.searchMenu.searchBar) {
       switch (event.key) {
         case 'ArrowLeft':
         case 'ArrowRight':
@@ -1216,18 +1219,20 @@
    * @private
    */
   onSearchBarQuery_(event) {
-    if (!this.searchMenu_) {
-      throw Error('Panel.instance_.searchMenu_ must be defined');
+    if (!this.menuManager_.searchMenu) {
+      throw Error('MenuManager.searchMenu_ must be defined');
     }
     const query = event.target.value.toLowerCase();
-    this.searchMenu_.clear();
+    this.menuManager_.searchMenu.clear();
     // Show the search results menu.
-    this.activateMenu_(this.searchMenu_, false /* activateFirstItem */);
+    this.activateMenu_(
+        this.menuManager_.searchMenu, false /* activateFirstItem */);
     // Populate.
     if (query) {
       for (let i = 0; i < this.menuManager_.menus.length; ++i) {
         const menu = this.menuManager_.menus[i];
-        if (menu === this.searchMenu_ || menu instanceof PanelNodeMenu) {
+        if (menu === this.menuManager_.searchMenu ||
+            menu instanceof PanelNodeMenu) {
           continue;
         }
         const items = menu.items;
@@ -1243,17 +1248,17 @@
                Msgs.getMsg('panel_menu_item_none').toLowerCase()) &&
               item.enabled;
           if (match) {
-            this.searchMenu_.copyAndAddMenuItem(item);
+            this.menuManager_.searchMenu.copyAndAddMenuItem(item);
           }
         }
       }
     }
 
-    if (this.searchMenu_.items.length === 0) {
-      this.searchMenu_.addMenuItem(
+    if (this.menuManager_.searchMenu.items.length === 0) {
+      this.menuManager_.searchMenu.addMenuItem(
           Msgs.getMsg('panel_menu_item_none'), '', '', '', function() {});
     }
-    this.searchMenu_.activateItem(0);
+    this.menuManager_.searchMenu.activateItem(0);
   }
 
   /** @private */
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js
index 2568a64c..71f6e40c 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js
@@ -29,6 +29,9 @@
         '/chromevox/common/panel_command.js');
     await importModule('CursorRange', '/common/cursors/range.js');
     await importModule('LocalStorage', '/common/local_storage.js');
+
+    globalThis.Gesture = chrome.accessibilityPrivate.Gesture;
+    globalThis.RoleType = chrome.automation.RoleType;
   }
 
   fireMockEvent(key) {
@@ -82,7 +85,7 @@
   }
 
   assertActiveSearchMenuItem(menuItemTitle) {
-    const searchMenu = this.getPanel().instance_.searchMenu_;
+    const searchMenu = this.getPanel().instance_.menuManager_.searchMenu;
     const activeIndex = searchMenu.activeIndex_;
     const activeItem = searchMenu.items_[activeIndex];
     assertEquals(menuItemTitle, activeItem.menuItemTitle);
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial_test.js
index f7767e3de..ae16950 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/tutorial_test.js
@@ -27,6 +27,8 @@
         ['PanelCommand', 'PanelCommandType'],
         '/chromevox/common/panel_command.js');
     await importModule('KeyCode', '/common/key_code.js');
+
+    globalThis.Gesture = chrome.accessibilityPrivate.Gesture;
   }
 
   assertActiveLessonIndex(expectedIndex) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js
index fd75f10..b2c8e88 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/chromevox_e2e_test_base.js
@@ -32,12 +32,8 @@
 
   /** @override */
   setUp() {
-    window.EventType = chrome.automation.EventType;
-    window.RoleType = chrome.automation.RoleType;
-    window.TreeChangeType = chrome.automation.TreeChangeType;
-    window.doCmd = this.doCmd;
-    window.doGesture = this.doGesture;
-    window.Gesture = chrome.accessibilityPrivate.Gesture;
+    globalThis.doCmd = this.doCmd;
+    globalThis.doGesture = this.doGesture;
 
     super.setUp();
   }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js
index 967b3a6..50eb0eb 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/testing/mock_feedback_test.js
@@ -31,11 +31,6 @@
     await super.setUpDeferred();
 
     // Alphabetical based on file path.
-    await importModule(
-        'AbstractEarcons', '/chromevox/background/abstract_earcons.js');
-    await importModule(
-        'BrailleInterface',
-        '/chromevox/background/braille/braille_interface.js');
     await importModule('ChromeVox', '/chromevox/background/chromevox.js');
     await importModule(
         'NavBraille', '/chromevox/common/braille/nav_braille.js');
diff --git a/chrome/browser/resources/chromeos/accessibility/common/automation_util.js b/chrome/browser/resources/chromeos/accessibility/common/automation_util.js
index 23292f8..252ce5f7 100644
--- a/chrome/browser/resources/chromeos/accessibility/common/automation_util.js
+++ b/chrome/browser/resources/chromeos/accessibility/common/automation_util.js
@@ -11,7 +11,9 @@
 import {AutomationTreeWalker, AutomationTreeWalkerRestriction} from './tree_walker.js';
 
 const AutomationNode = chrome.automation.AutomationNode;
+const HasPopup = chrome.automation.HasPopup;
 const RoleType = chrome.automation.RoleType;
+const StateType = chrome.automation.StateType;
 
 export class AutomationUtil {
   /**
@@ -46,6 +48,67 @@
   }
 
   /**
+   * For a given automation property, return true if the value
+   * represents something 'truthy', e.g.: for checked:
+   * 'true'|'mixed' -> true
+   * 'false'|undefined -> false
+   * @param {AutomationNode} node
+   * @param {string} attrib
+   * @return {boolean}
+   */
+  static isTruthy(node, attrib) {
+    if (!node) {
+      return false;
+    }
+    switch (attrib) {
+      case 'checked':
+        return Boolean(node.checked) && node.checked !== 'false';
+      case 'hasPopup':
+        return Boolean(node.hasPopup) && node.hasPopup !== HasPopup.FALSE;
+
+      // Chrome automatically calculates these attributes.
+      case 'posInSet':
+        return Boolean(node.htmlAttributes['aria-posinset']) ||
+            (node.root.role !== RoleType.ROOT_WEB_AREA &&
+             Boolean(node.posInSet));
+      case 'setSize':
+        return Boolean(node.htmlAttributes['aria-setsize']) ||
+            Boolean(node.setSize);
+
+      // These attributes default to false for empty strings.
+      case 'roleDescription':
+        return Boolean(node.roleDescription);
+      case 'value':
+        return Boolean(node.value);
+      case 'selected':
+        return node.selected === true;
+      default:
+        return node[attrib] !== undefined ||
+            Boolean(node.state[/** @type {StateType} */ (attrib)]);
+    }
+  }
+
+  /**
+   * represents something 'falsey', e.g.: for selected:
+   * node.selected === false
+   * @param {AutomationNode} node
+   * @param {string} attrib
+   * @return {boolean}
+   */
+  static isFalsey(node, attrib) {
+    if (!node) {
+      return false;
+    }
+    switch (attrib) {
+      case 'selected':
+        return node.selected === false;
+      default:
+        return !AutomationUtil.isTruthy(node, attrib);
+    }
+  }
+
+
+  /**
    * Find a node in subtree of |cur| satisfying |pred| using post-order
    * traversal.
    * @param {AutomationNode} cur Node to begin the search
diff --git a/chrome/browser/resources/chromeos/accessibility/common/local_storage.js b/chrome/browser/resources/chromeos/accessibility/common/local_storage.js
index e11c2357..c937439 100644
--- a/chrome/browser/resources/chromeos/accessibility/common/local_storage.js
+++ b/chrome/browser/resources/chromeos/accessibility/common/local_storage.js
@@ -11,6 +11,8 @@
   constructor(onInit) {
     /** @private {?Object} */
     this.values_ = null;
+    /** @private {!Object<string, Function>} */
+    this.keyCallbacks_ = {};
 
     chrome.storage.local.get(
         null /* get all values */,
@@ -35,10 +37,78 @@
     return;
   }
 
-  /** @param {string} key */
-  static get(key) {
+  /**
+   * @param {string} key
+   * @param {Function} callback
+   */
+  static addListenerForKey(key, callback) {
+    LocalStorage.instance.keyCallbacks_[key] = callback;
+  }
+
+  /**
+   * @param {string} key
+   * @param {*=} defaultValue
+   * @return {*}
+   */
+  static get(key, defaultValue = undefined) {
     LocalStorage.assertReady_();
-    return LocalStorage.instance.values_[key];
+    const value = LocalStorage.instance.values_[key];
+    if (value !== undefined) {
+      return value;
+    }
+    return defaultValue;
+  }
+
+  /**
+   * @param {string} key
+   * @param {string|Function} type A string (for primitives) or type constructor
+   *     (for classes) corresponding to the expected type
+   * @param {*=} defaultValue
+   * @return {*}
+   */
+  static getTypeChecked(key, type, defaultValue) {
+    const value = LocalStorage.get(key, defaultValue);
+    if ((typeof type === 'string') && (typeof value === type)) {
+      return value;
+    }
+    if ((typeof type === 'function') && (value instanceof type)) {
+      return value;
+    }
+    throw new Error(
+        'Value in LocalStorage for key "' + key + '" is not a ' + type);
+  }
+
+  /**
+   * @param {string} key
+   * @param {boolean=} defaultValue
+   * @return {boolean}
+   */
+  static getBoolean(key, defaultValue) {
+    const value = LocalStorage.getTypeChecked(key, 'boolean', defaultValue);
+    return Boolean(value);
+  }
+
+  /**
+   * @param {string} key
+   * @param {number=} default_value
+   * @return {number}
+   */
+  static getNumber(key, default_value) {
+    const value = LocalStorage.getTypeChecked(key, 'number', default_value);
+    if (isNaN(value)) {
+      throw new Error('Value in LocalStorage for key "' + key + '" is NaN');
+    }
+    return Number(value);
+  }
+
+  /**
+   * @param {string} key
+   * @param {string=} default_value
+   * @return {string}
+   */
+  static getString(key, default_value) {
+    const value = LocalStorage.getTypeChecked(key, 'string', default_value);
+    return String(value);
   }
 
   /** @param {string} key */
@@ -87,6 +157,9 @@
   update_(updates) {
     for (const key in updates) {
       this.values_[key] = updates[key].newValue;
+      if (this.keyCallbacks_[key]) {
+        this.keyCallbacks_[key](updates[key].newValue);
+      }
     }
   }
 
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp
index 46b0a54..ebb1cf9a 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp
+++ b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp
@@ -2210,6 +2210,9 @@
   <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_CHECK_ON_EARCON_DESCRIPTION">
     A checked checkbox
   </message>
+  <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_CHROMEVOX_LOADING_EARCON_DESCRIPTION">
+    ChromeVox is loading
+  </message>
   <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_EDITABLE_TEXT_EARCON_DESCRIPTION">
     An editable text field
   </message>
@@ -2222,6 +2225,9 @@
   <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_LISTBOX_EARCON_DESCRIPTION">
     A listbox or combo box
   </message>
+  <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_NO_POINTER_ANCHOR_EARCON_DESCRIPTION">
+    No pointer anchor
+  </message>
   <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_PAGE_START_LOADING_EARCON_DESCRIPTION">
     A page load in progress
   </message>
@@ -2231,6 +2237,12 @@
   <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_SLIDER_EARCON_DESCRIPTION">
     A slider
   </message>
+  <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_SMART_STICKY_MODE_OFF_EARCON_DESCRIPTION">
+    Smart sticky mode off
+  </message>
+  <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_SMART_STICKY_MODE_ON_EARCON_DESCRIPTION">
+    Smart sticky mode on
+  </message>
   <message desc="Describes an audio clip that gets played for a specific event or control type. Use the default string as a guide to what the audio clip represents or conveys." name="IDS_CHROMEVOX_WRAP_EARCON_DESCRIPTION">
     Wrap from beginning to end or end to beginning inside of a page, dialog, or other container
   </message>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_CHROMEVOX_LOADING_EARCON_DESCRIPTION.png.sha1 b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_CHROMEVOX_LOADING_EARCON_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..9e86a70
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_CHROMEVOX_LOADING_EARCON_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+bacdc4870bc98a6cf86af9034f6b6bafa89be5e0
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_NO_POINTER_ANCHOR_EARCON_DESCRIPTION.png.sha1 b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_NO_POINTER_ANCHOR_EARCON_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..9e86a70
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_NO_POINTER_ANCHOR_EARCON_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+bacdc4870bc98a6cf86af9034f6b6bafa89be5e0
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_SMART_STICKY_MODE_OFF_EARCON_DESCRIPTION.png.sha1 b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_SMART_STICKY_MODE_OFF_EARCON_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..9e86a70
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_SMART_STICKY_MODE_OFF_EARCON_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+bacdc4870bc98a6cf86af9034f6b6bafa89be5e0
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_SMART_STICKY_MODE_ON_EARCON_DESCRIPTION.png.sha1 b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_SMART_STICKY_MODE_ON_EARCON_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..9e86a70
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings_grdp/IDS_CHROMEVOX_SMART_STICKY_MODE_ON_EARCON_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+bacdc4870bc98a6cf86af9034f6b6bafa89be5e0
\ No newline at end of file
diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.html b/chrome/browser/resources/settings/privacy_page/cookies_page.html
index 81dc66c..6e64172 100644
--- a/chrome/browser/resources/settings/privacy_page/cookies_page.html
+++ b/chrome/browser/resources/settings/privacy_page/cookies_page.html
@@ -94,9 +94,11 @@
                 <iron-icon icon="settings:cookie"></iron-icon>
                 <div class="secondary">$i18n{privacyPageTitle}</div>
               </div>
-              <div class="bullet-line">
+              <div class="bullet-line" id="cookiePageBlockThirdIncognitoBulTwo">
                 <iron-icon icon="settings:block"></iron-icon>
-                <div class="secondary">$i18n{privacyPageTitle}</div>
+                <div class="secondary">
+                  [[getCookiePageBlockThirdIncognitoBulTwoLabel()]]
+                </div>
               </div>
             </div>
           </settings-collapse-radio-button>
@@ -166,10 +168,10 @@
                       $i18n{cookiePageBlockThirdIncognitoBulOne}
                 </div>
               </div>
-              <div class="bullet-line">
+              <div class="bullet-line" id="cookiePageBlockThirdIncognitoBulTwo">
                 <iron-icon icon="settings:block"></iron-icon>
                 <div class="secondary">
-                      $i18n{cookiePageBlockThirdIncognitoBulTwo}
+                  [[getCookiePageBlockThirdIncognitoBulTwoLabel()]]
                 </div>
               </div>
             </div>
diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.ts b/chrome/browser/resources/settings/privacy_page/cookies_page.ts
index 88ba5b4..0996281 100644
--- a/chrome/browser/resources/settings/privacy_page/cookies_page.ts
+++ b/chrome/browser/resources/settings/privacy_page/cookies_page.ts
@@ -163,6 +163,7 @@
   private exceptionListsReadOnly_: boolean;
   private blockAllPref_: chrome.settingsPrivate.PrefObject;
   focusConfig: FocusConfig;
+  private enableFirstPartySetsUI_: boolean;
   private isPrivacySandboxSettings4_: boolean;
 
   private metricsBrowserProxy_: MetricsBrowserProxy =
@@ -187,6 +188,13 @@
     }
   }
 
+  private getCookiePageBlockThirdIncognitoBulTwoLabel(): string {
+    return this.i18n(
+        this.enableFirstPartySetsUI_ ?
+            'cookiePageBlockThirdIncognitoBulTwoFps' :
+            'cookiePageBlockThirdIncognitoBulTwo');
+  }
+
   // <if expr="not chromeos_ash">
   private getClearOnExitSubLabel_(): string {
     // <if expr="chromeos_lacros">
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html
index 88b1bdd..cb3c9471 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -395,9 +395,8 @@
       </template>
       <template is="dom-if" if="[[isPrivacySandboxSettings4_]]">
         <template is="dom-if" route-path="/content/siteData" no-search>
-          <!-- TODO(crbug/1378703): Update site data strings. -->
-          <settings-subpage page-title="$i18n{privacyPageTitle}"
-                search-label="$i18n{privacyPageTitle}"
+          <settings-subpage page-title="$i18n{siteDataPageTitle}"
+                search-label="$i18n{siteSettingsAllSitesSearch}"
                 search-term="{{searchFilter_}}">
             <settings-site-data prefs="{{prefs}}"
                 search-term="[[searchFilter_]]">
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.html b/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.html
index a194ad55..3a4508ef 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.html
@@ -74,55 +74,59 @@
     sub-label="$i18n{fledgePageToggleSubLabel}"
     on-settings-boolean-control-change="onToggleChange_">
 </settings-toggle-button>
-<div id="currentSitesSection">
-  <div id="currentSitesSectionWrapper" class="hr">
-    <h2 id="currentSitesHeading">
-      $i18n{fledgePageCurrentSitesHeading}
-    </h2>
-    <template is="dom-if" if="[[isFledgeEnabledAndLoaded_(
-        prefs.privacy_sandbox.m1.fledge_enabled.value, isSitesListLoaded_)]]"
-        restamp>
-      <div id="currentSitesDescription" class="cr-secondary-text"
-          hidden="[[isSitesListEmpty_(sitesList_.length)]]">
-        $i18n{fledgePageCurrentSitesDescription}
-        <!-- TODO(b/264024469): Add "Learn more" into current sites description
-             string. -->
-        <button id="learnMoreLink" on-click="onLearnMoreClick_" aria-label=
-            "$i18n{fledgePageCurrentSitesDescriptionLearnMoreA11yLabel}">
-          $i18n{fledgePageCurrentSitesDescriptionLearnMore}
-        </button>
-      </div>
-      <template is="dom-repeat" items="[[mainSitesList_]]">
-        <privacy-sandbox-interest-item interest="[[item]]"
-            on-interest-changed="onInterestChanged_">
-        </privacy-sandbox-interest-item>
+<template is="dom-if" if="[[!isFledgePrefManaged_(
+    prefs.privacy_sandbox.m1.fledge_enabled.enforcement)]]" restamp>
+  <div id="currentSitesSection">
+    <div id="currentSitesSectionWrapper" class="hr">
+      <h2 id="currentSitesHeading">
+        $i18n{fledgePageCurrentSitesHeading}
+      </h2>
+      <template is="dom-if" if="[[isFledgeEnabledAndLoaded_(
+          prefs.privacy_sandbox.m1.fledge_enabled.value, isSitesListLoaded_)]]"
+          restamp>
+        <div id="currentSitesDescription" class="cr-secondary-text"
+            hidden="[[isSitesListEmpty_(sitesList_.length)]]">
+          $i18n{fledgePageCurrentSitesDescription}
+          <!-- TODO(b/264024469): Add "Learn more" into current sites
+               description string. -->
+          <button id="learnMoreLink" on-click="onLearnMoreClick_" aria-label=
+              "$i18n{fledgePageCurrentSitesDescriptionLearnMoreA11yLabel}">
+            $i18n{fledgePageCurrentSitesDescriptionLearnMore}
+          </button>
+        </div>
+        <template is="dom-repeat" items="[[mainSitesList_]]">
+          <privacy-sandbox-interest-item interest="[[item]]"
+              on-interest-changed="onInterestChanged_">
+          </privacy-sandbox-interest-item>
+        </template>
+        <template is="dom-if" if="[[!isRemainingSitesListEmpty_(
+            remainingSitesList_.length)]]" restamp>
+          <cr-expand-button id="seeAllSites"
+              expanded="{{seeAllSitesExpanded_}}">
+            $i18n{fledgePageSeeAllSitesLabel}
+          </cr-expand-button>
+          <iron-collapse opened="[[seeAllSitesExpanded_]]">
+            <template is="dom-repeat" items="[[remainingSitesList_]]">
+              <privacy-sandbox-interest-item interest="[[item]]"
+                  on-interest-changed="onInterestChanged_">
+              </privacy-sandbox-interest-item>
+            </template>
+          </iron-collapse>
+        </template>
+        <div id="currentSitesDescriptionEmpty"
+            class="no-sites cr-secondary-text"
+            hidden="[[!isSitesListEmpty_(sitesList_.length)]]">
+          $i18n{fledgePageCurrentSitesDescriptionEmpty}
+        </div>
       </template>
-      <template is="dom-if" if="[[!isRemainingSitesListEmpty_(
-          remainingSitesList_.length)]]" restamp>
-        <cr-expand-button id="seeAllSites" expanded="{{seeAllSitesExpanded_}}">
-          $i18n{fledgePageSeeAllSitesLabel}
-        </cr-expand-button>
-        <iron-collapse opened="[[seeAllSitesExpanded_]]">
-          <template is="dom-repeat" items="[[remainingSitesList_]]">
-            <privacy-sandbox-interest-item interest="[[item]]"
-                on-interest-changed="onInterestChanged_">
-            </privacy-sandbox-interest-item>
-          </template>
-        </iron-collapse>
-      </template>
-      <div id="currentSitesDescriptionEmpty"
+      <div id="currentSitesDescriptionDisabled"
           class="no-sites cr-secondary-text"
-          hidden="[[!isSitesListEmpty_(sitesList_.length)]]">
-        $i18n{fledgePageCurrentSitesDescriptionEmpty}
+          hidden="[[prefs.privacy_sandbox.m1.fledge_enabled.value]]">
+        $i18n{fledgePageCurrentSitesDescriptionDisabled}
       </div>
-    </template>
-    <div id="currentSitesDescriptionDisabled"
-        class="no-sites cr-secondary-text"
-        hidden="[[prefs.privacy_sandbox.m1.fledge_enabled.value]]">
-      $i18n{fledgePageCurrentSitesDescriptionDisabled}
     </div>
   </div>
-</div>
+</template>
 <cr-expand-button id="blockedSitesRow" class="cr-row"
     expanded="{{blockedSitesExpanded_}}">
   $i18n{fledgePageBlockedSitesHeading}
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.ts b/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.ts
index 03e2857f..8fb05d2 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.ts
+++ b/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_fledge_subpage.ts
@@ -145,6 +145,16 @@
         state => this.onFledgeStateChanged_(state));
   }
 
+  private isFledgePrefManaged_(): boolean {
+    const fledgeEnabledPref = this.getPref('privacy_sandbox.m1.fledge_enabled');
+    if (fledgeEnabledPref.enforcement ===
+        chrome.settingsPrivate.Enforcement.ENFORCED) {
+      assert(!fledgeEnabledPref.value);
+      return true;
+    }
+    return false;
+  }
+
   private onFledgeStateChanged_(state: FledgeState) {
     this.sitesList_ = state.joiningSites.map(site => {
       return {site, removed: false};
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_topics_subpage.html b/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_topics_subpage.html
index 9af42873..7205353e 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_topics_subpage.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_sandbox/privacy_sandbox_topics_subpage.html
@@ -86,7 +86,7 @@
                 description string. -->
             <button id="learnMoreLink" on-click="onLearnMoreClick_" aria-label=
                 "$i18n{topicsPageCurrentTopicsDescriptionLearnMoreA11yLabel}">
-              $i18n{topicsPageCurrentTopicsDescriptionLearnMore}
+              $i18n{topicsPageCurrentTopicsDescriptionLearnMoreLink}
             </button>
           </div>
           <template is="dom-repeat" items="[[topicsList_]]">
diff --git a/chrome/browser/resources/settings/site_settings/site_data.html b/chrome/browser/resources/settings/site_settings/site_data.html
index 921c67e..9b384f26b 100644
--- a/chrome/browser/resources/settings/site_settings/site_data.html
+++ b/chrome/browser/resources/settings/site_settings/site_data.html
@@ -29,11 +29,14 @@
     padding-bottom: 10px;
   }
 </style>
-<!-- TODO(crbug.com/1378703): Update all strings in this page. -->
-<div class="content-settings-header secondary">$i18n{privacyPageTitle}</div>
+<div class="content-settings-header secondary">
+  $i18n{siteDataPageDescription}
+</div>
 <div class="radio-group">
-  <h2>$i18n{privacyPageTitle}</h2>
-  <div class="secondary radio-group-sub-heading">$i18n{privacyPageTitle}</div>
+  <h2>$i18n{siteDataPageDefaultBehavior}</h2>
+  <div class="secondary radio-group-sub-heading">
+    $i18n{siteDataPagedefaultBehaviorDescription}
+  </div>
   <settings-radio-group id="defaultGroup" no-set-pref
       pref="{{prefs.generated.cookie_default_content_setting}}"
       selectable-elements="cr-radio-button, settings-collapse-radio-button"
@@ -41,39 +44,38 @@
     <settings-collapse-radio-button id="defaultAllow" no-collapse
         name="[[contentSettingEnum_.ALLOW]]"
         pref="[[prefs.generated.cookie_default_content_setting]]"
-        label="$i18n{privacyPageTitle}"
-        sub-label="$i18n{privacyPageTitle}"
+        label="$i18n{siteDataPageAllowRadioLabel}"
+        sub-label="$i18n{siteDataPageAllowRadioSubLabel}"
         icon="settings:database">
     </settings-collapse-radio-button>
     <settings-collapse-radio-button id="defaultSessionOnly" no-collapse
         class="two-line"
         name="[[contentSettingEnum_.SESSION_ONLY]]"
         pref="[[prefs.generated.cookie_default_content_setting]]"
-        label="$i18n{privacyPageTitle}"
-        sub-label="$i18n{privacyPageTitle}"
+        label="$i18n{siteDataPageClearOnExitRadioLabel}"
+        sub-label="$i18n{siteDataPageClearOnExitRadioSubLabel}"
         icon="settings:database">
     </settings-collapse-radio-button>
     <settings-collapse-radio-button id="defaultBlock" no-collapse
         class="two-line"
         name="[[contentSettingEnum_.BLOCK]]"
         pref="[[prefs.generated.cookie_default_content_setting]]"
-        label="$i18n{privacyPageTitle}"
-        sub-label="$i18n{privacyPageTitle}"
+        label="$i18n{siteDataPageBlockRadioLabel}"
+        sub-label="$i18n{siteDataPageBlockRadioSublabel}"
         icon="settings:database-off">
     </settings-collapse-radio-button>
   </settings-radio-group>
 </div>
 <div id="exceptionHeader">
-  <!-- TODO(crbug.com/1378703): Update all strings in this page. -->
-  <h2>$i18n{privacyPageTitle}</h2>
+  <h2>$i18n{siteDataPageCustomizedBehaviorHeading}</h2>
   <div id="exceptionHeaderSubLabel" class="secondary">
-    $i18n{privacyPageTitle}
+    $i18n{siteDataPageCustomizedBehaviorDescription}
   </div>
 </div>
 <site-list id="allowExceptionsList"
     category="[[cookiesContentSettingType_]]"
     category-subtype="[[contentSettingEnum_.ALLOW]]"
-    category-header="$i18n{privacyPageTitle}"
+    category-header="$i18n{siteDataPageAllowExceptionsSubHeading}"
     read-only-list="[[exceptionListsReadOnly_]]"
     search-filter="[[searchTerm]]"
     cookies-exception-type="site-data">
@@ -81,7 +83,7 @@
 <site-list id="sessionOnlyExceptionsList"
     category="[[cookiesContentSettingType_]]"
     category-subtype="[[contentSettingEnum_.SESSION_ONLY]]"
-    category-header="$i18n{privacyPageTitle}"
+    category-header="$i18n{siteDataPageClearOnExitExceptionsSubHeading}"
     read-only-list="[[exceptionListsReadOnly_]]"
     search-filter="[[searchTerm]]"
     cookies-exception-type="site-data">
@@ -90,24 +92,23 @@
 <site-list id="blockExceptionsList"
     category="[[cookiesContentSettingType_]]"
     category-subtype="[[contentSettingEnum_.BLOCK]]"
-    category-header="$i18n{privacyPageTitle}"
+    category-header="$i18n{siteDataPageBlockExceptionsSubHeading}"
     read-only-list="[[exceptionListsReadOnly_]]"
     search-filter="[[searchTerm]]"
     cookies-exception-type="combined">
 </site-list>
 <template is="dom-if" if="[[showDefaultBlockDialog_]]" restamp>
-  <cr-dialog id="defaultBlockDialog" show-on-attach
-      close-text="$i18n{privacyPageTitle}">
-    <div slot="title">$i18n{privacyPageTitle}</div>
-    <div slot="body">$i18n{privacyPageTitle}</div>
+  <cr-dialog id="defaultBlockDialog" show-on-attach>
+    <div slot="title">$i18n{siteDataPageBlockConfirmDialogTitle}</div>
+    <div slot="body">$i18n{siteDataPageBlockConfirmDialogDescription}</div>
     <div slot="button-container">
     <cr-button id="defaultBlockDialogCancel" class="cancel-button"
         on-click="onDefaultBlockDialogCancel_">
-        $i18n{privacyPageTitle}
+        $i18n{siteDataPageBlockConfirmDialogCancelButton}
     </cr-button>
     <cr-button id="defaultBlockDialogConfirm" class="action-button"
         on-click="onDefaultBlockDialogConfirm_">
-        $i18n{privacyPageTitle}
+        $i18n{siteDataPageBlockConfirmDialogConfirmButton}
     </cr-button>
     </div>
   </cr-dialog>
diff --git a/chrome/browser/resources_integrity.cc b/chrome/browser/resources_integrity.cc
index d4d829c..7f693fb 100644
--- a/chrome/browser/resources_integrity.cc
+++ b/chrome/browser/resources_integrity.cc
@@ -6,6 +6,7 @@
 
 #include <array>
 
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_WIN)
diff --git a/chrome/browser/resources_integrity.h b/chrome/browser/resources_integrity.h
index 78a1e32c5a..7e85a7d 100644
--- a/chrome/browser/resources_integrity.h
+++ b/chrome/browser/resources_integrity.h
@@ -8,6 +8,7 @@
 #include "base/containers/span.h"
 #include "base/files/file_path.h"
 #include "base/functional/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/buildflags.h"
 #include "crypto/sha2.h"
 
diff --git a/chrome/browser/safe_browsing/certificate_reporting_service_test_utils.cc b/chrome/browser/safe_browsing/certificate_reporting_service_test_utils.cc
index 92306ebd..2a25fdd 100644
--- a/chrome/browser/safe_browsing/certificate_reporting_service_test_utils.cc
+++ b/chrome/browser/safe_browsing/certificate_reporting_service_test_utils.cc
@@ -8,7 +8,6 @@
 
 #include "base/functional/bind.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/encrypted_messages/encrypted_message.pb.h"
 #include "components/encrypted_messages/message_encrypter.h"
 #include "components/security_interstitials/content/certificate_error_report.h"
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_prompt_channel_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_prompt_channel_win.cc
index 14bffd8..6714006 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_prompt_channel_win.cc
+++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_prompt_channel_win.cc
@@ -22,6 +22,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/unguessable_token.h"
 #include "base/win/win_util.h"
diff --git a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc
index 5b97c83..0c344a8 100644
--- a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc
+++ b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.h"
 
 #include "base/functional/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/enterprise/connectors/connectors_service.h"
 #include "chrome/browser/policy/dm_token_utils.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.h b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.h
index 36dd8fd..a592306 100644
--- a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.h
+++ b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/enterprise/connectors/connectors_service.h"
 #include "components/safe_browsing/core/browser/realtime/url_lookup_service_base.h"
 #include "components/safe_browsing/core/browser/safe_browsing_token_fetcher.h"
diff --git a/chrome/browser/safe_browsing/download_protection/download_feedback_unittest.cc b/chrome/browser/safe_browsing/download_protection/download_feedback_unittest.cc
index 2b86b28f..1e05126 100644
--- a/chrome/browser/safe_browsing/download_protection/download_feedback_unittest.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_feedback_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/safe_browsing/download_protection/two_phase_uploader.h"
diff --git a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
index 34a436c..b051441 100644
--- a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
@@ -35,7 +35,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
diff --git a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc
index 4a2ce5c1..437c53d 100644
--- a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc
+++ b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/task/bind_post_task.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/sequence_bound.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/safe_browsing/test_safe_browsing_database_helper.cc b/chrome/browser/safe_browsing/test_safe_browsing_database_helper.cc
index f0f4bdf..4cbb952 100644
--- a/chrome/browser/safe_browsing/test_safe_browsing_database_helper.cc
+++ b/chrome/browser/safe_browsing/test_safe_browsing_database_helper.cc
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
 #include "chrome/browser/safe_browsing/test_safe_browsing_service.h"
 #include "components/safe_browsing/core/browser/db/v4_database.h"
diff --git a/chrome/browser/segmentation_platform/segmentation_platform_config.cc b/chrome/browser/segmentation_platform/segmentation_platform_config.cc
index c28327f..2c9ac57 100644
--- a/chrome/browser/segmentation_platform/segmentation_platform_config.cc
+++ b/chrome/browser/segmentation_platform/segmentation_platform_config.cc
@@ -80,10 +80,8 @@
   if (!base::FeatureList::IsEnabled(features::kContextualPageActions))
     return false;
 
-  bool is_price_tracking_enabled =
-      base::FeatureList::IsEnabled(
-          features::kContextualPageActionPriceTracking) &&
-      base::FeatureList::IsEnabled(commerce::kShoppingList);
+  bool is_price_tracking_enabled = base::FeatureList::IsEnabled(
+      features::kContextualPageActionPriceTracking);
 
   bool is_reader_mode_enabled =
       base::FeatureList::IsEnabled(features::kContextualPageActionReaderMode);
diff --git a/chrome/browser/sessions/closed_tab_cache.cc b/chrome/browser/sessions/closed_tab_cache.cc
index 97fda22..94885a5b 100644
--- a/chrome/browser/sessions/closed_tab_cache.cc
+++ b/chrome/browser/sessions/closed_tab_cache.cc
@@ -9,6 +9,7 @@
 #include "base/functional/bind.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc
index a23dd21f..4c517d0 100644
--- a/chrome/browser/sessions/session_restore_browsertest.cc
+++ b/chrome/browser/sessions/session_restore_browsertest.cc
@@ -19,6 +19,7 @@
 #include "base/process/launch.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/browser/sessions/session_service_base.cc b/chrome/browser/sessions/session_service_base.cc
index 839b0503..4ef75b9 100644
--- a/chrome/browser/sessions/session_service_base.cc
+++ b/chrome/browser/sessions/session_service_base.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/apps/app_service/web_contents_app_id_utils.h"
diff --git a/chrome/browser/sessions/session_service_base_test_helper.cc b/chrome/browser/sessions/session_service_base_test_helper.cc
index de28d0b..36dc9b02 100644
--- a/chrome/browser/sessions/session_service_base_test_helper.cc
+++ b/chrome/browser/sessions/session_service_base_test_helper.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/sessions/session_service_base_test_helper.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sessions/session_service_base.h"
 #include "chrome/browser/sessions/session_service_factory.h"
@@ -134,4 +135,4 @@
     const SessionID& tab_id,
     std::pair<int, int>* range) {
   return service_->GetAvailableRangeForTest(tab_id, range);
-}
\ No newline at end of file
+}
diff --git a/chrome/browser/sessions/session_service_test_helper.cc b/chrome/browser/sessions/session_service_test_helper.cc
index 1306df8..304fdc1 100644
--- a/chrome/browser/sessions/session_service_test_helper.cc
+++ b/chrome/browser/sessions/session_service_test_helper.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/sessions/session_service_test_helper.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/sessions/session_service.h"
 #include "chrome/browser/sessions/session_service_factory.h"
 #include "components/sessions/core/command_storage_backend.h"
diff --git a/chrome/browser/sessions/tab_loader.cc b/chrome/browser/sessions/tab_loader.cc
index 29d8f2d..387603f0 100644
--- a/chrome/browser/sessions/tab_loader.cc
+++ b/chrome/browser/sessions/tab_loader.cc
@@ -12,7 +12,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/no_destructor.h"
 #include "base/system/sys_info.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/memory_pressure_level_proto.h"
 #include "base/trace_event/typed_macros.h"
diff --git a/chrome/browser/shell_integration.cc b/chrome/browser/shell_integration.cc
index 588c5831..923e394d 100644
--- a/chrome/browser/shell_integration.cc
+++ b/chrome/browser/shell_integration.cc
@@ -279,17 +279,11 @@
     case SET_DEFAULT_INTERACTIVE:
 #if BUILDFLAG(IS_WIN)
       if (interactive_permitted_) {
-        switch (ShellUtil::GetInteractiveSetDefaultMode()) {
-          case ShellUtil::INTENT_PICKER:
-            win::SetAsDefaultBrowserUsingIntentPicker();
-            break;
-          case ShellUtil::SYSTEM_SETTINGS:
-            win::SetAsDefaultBrowserUsingSystemSettings(
-                std::move(on_finished_callback));
-            // Early return because the function above takes care of calling
-            // |on_finished_callback|.
-            return;
-        }
+        win::SetAsDefaultBrowserUsingSystemSettings(
+            std::move(on_finished_callback));
+        // Early return because the function above takes care of calling
+        // `on_finished_callback`.
+        return;
       }
 #endif  // BUILDFLAG(IS_WIN)
       break;
@@ -372,17 +366,11 @@
     case SET_DEFAULT_INTERACTIVE:
 #if BUILDFLAG(IS_WIN)
       if (interactive_permitted_) {
-        switch (ShellUtil::GetInteractiveSetDefaultMode()) {
-          case ShellUtil::INTENT_PICKER:
-            win::SetAsDefaultClientForSchemeUsingIntentPicker(scheme_);
-            break;
-          case ShellUtil::SYSTEM_SETTINGS:
-            win::SetAsDefaultClientForSchemeUsingSystemSettings(
-                scheme_, std::move(on_finished_callback));
-            // Early return because the function above takes care of calling
-            // |on_finished_callback|.
-            return;
-        }
+        win::SetAsDefaultClientForSchemeUsingSystemSettings(
+            scheme_, std::move(on_finished_callback));
+        // Early return because the function above takes care of calling
+        // `on_finished_callback`.
+        return;
       }
 #endif  // BUILDFLAG(IS_WIN)
       break;
diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc
index 254459a..329e532 100644
--- a/chrome/browser/shell_integration_win.cc
+++ b/chrome/browser/shell_integration_win.cc
@@ -804,25 +804,6 @@
 
 namespace win {
 
-bool SetAsDefaultBrowserUsingIntentPicker() {
-  base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
-                                                base::BlockingType::MAY_BLOCK);
-
-  base::FilePath chrome_exe;
-  if (!base::PathService::Get(base::FILE_EXE, &chrome_exe)) {
-    NOTREACHED() << "Error getting app exe path";
-    return false;
-  }
-
-  if (!ShellUtil::ShowMakeChromeDefaultSystemUI(chrome_exe)) {
-    LOG(ERROR) << "Failed to launch the set-default-browser Windows UI.";
-    return false;
-  }
-
-  VLOG(1) << "Set-default-browser Windows UI completed.";
-  return true;
-}
-
 void SetAsDefaultBrowserUsingSystemSettings(
     base::OnceClosure on_finished_callback) {
   base::FilePath chrome_exe;
@@ -848,27 +829,6 @@
                                std::move(on_finished_callback)));
 }
 
-bool SetAsDefaultClientForSchemeUsingIntentPicker(const std::string& scheme) {
-  base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
-                                                base::BlockingType::MAY_BLOCK);
-
-  base::FilePath chrome_exe;
-  if (!base::PathService::Get(base::FILE_EXE, &chrome_exe)) {
-    NOTREACHED() << "Error getting app exe path";
-    return false;
-  }
-
-  std::wstring wscheme(base::UTF8ToWide(scheme));
-  if (!ShellUtil::ShowMakeChromeDefaultProtocolClientSystemUI(chrome_exe,
-                                                              wscheme)) {
-    LOG(ERROR) << "Failed to launch the set-default-client Windows UI.";
-    return false;
-  }
-
-  VLOG(1) << "Set-default-client Windows UI completed.";
-  return true;
-}
-
 void SetAsDefaultClientForSchemeUsingSystemSettings(
     const std::string& scheme,
     base::OnceClosure on_finished_callback) {
diff --git a/chrome/browser/shell_integration_win.h b/chrome/browser/shell_integration_win.h
index 8e455c77..4ab7f43 100644
--- a/chrome/browser/shell_integration_win.h
+++ b/chrome/browser/shell_integration_win.h
@@ -22,28 +22,12 @@
 struct ShortcutProperties;
 enum class ShortcutOperation;
 
-// Initiates an OS shell flow which (if followed by the user) should set
-// Chrome as the default browser. Returns false if the flow cannot be
-// initialized, if it is not supported (introduced for Windows 8) or if the
-// user cancels the operation. This is a blocking call and requires a FILE
-// thread. If Chrome is already default browser, no interactive dialog will be
-// shown and this method returns true.
-bool SetAsDefaultBrowserUsingIntentPicker();
-
 // Initiates the interaction with the system settings for the default browser.
 // The function takes care of making sure |on_finished_callback| will get called
 // exactly once when the interaction is finished.
 void SetAsDefaultBrowserUsingSystemSettings(
     base::OnceClosure on_finished_callback);
 
-// Initiates an OS shell flow which (if followed by the user) should set
-// Chrome as the default handler for |scheme|. Returns false if the flow
-// cannot be initialized, if it is not supported (introduced for Windows 8)
-// or if the user cancels the operation. This is a blocking call and requires
-// a FILE thread. If Chrome is already default for |scheme|, no interactive
-// dialog will be shown and this method returns true.
-bool SetAsDefaultClientForSchemeUsingIntentPicker(const std::string& scheme);
-
 // Initiates the interaction with the system settings for the default handler of
 // |scheme|. The function takes care of making sure |on_finished_callback|
 // will get called exactly once when the interaction is finished.
diff --git a/chrome/browser/shutdown_signal_handlers_posix.cc b/chrome/browser/shutdown_signal_handlers_posix.cc
index cbbcda6..4efef986 100644
--- a/chrome/browser/shutdown_signal_handlers_posix.cc
+++ b/chrome/browser/shutdown_signal_handlers_posix.cc
@@ -17,7 +17,6 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace {
 
diff --git a/chrome/browser/signin/dice_response_handler.cc b/chrome/browser/signin/dice_response_handler.cc
index 1fbe572..703db65e 100644
--- a/chrome/browser/signin/dice_response_handler.cc
+++ b/chrome/browser/signin/dice_response_handler.cc
@@ -10,6 +10,7 @@
 #include "base/memory/singleton.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc b/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc
index eb658c5..58b3292 100644
--- a/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc
+++ b/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_file_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
diff --git a/chrome/browser/signin/primary_account_policy_manager.cc b/chrome/browser/signin/primary_account_policy_manager.cc
index a11be81..ba3f03d 100644
--- a/chrome/browser/signin/primary_account_policy_manager.cc
+++ b/chrome/browser/signin/primary_account_policy_manager.cc
@@ -6,6 +6,7 @@
 
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/delete_profile_helper.h"
diff --git a/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc b/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc
index aa871f6..1dd4ae4f 100644
--- a/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc
+++ b/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/speech/extension_api/tts_extension_api_ash_browsertest.cc b/chrome/browser/speech/extension_api/tts_extension_api_ash_browsertest.cc
index 3126312..60b971d 100644
--- a/chrome/browser/speech/extension_api/tts_extension_api_ash_browsertest.cc
+++ b/chrome/browser/speech/extension_api/tts_extension_api_ash_browsertest.cc
@@ -6,6 +6,7 @@
 #include <vector>
 
 #include "ash/constants/ash_features.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/unguessable_token.h"
 #include "chrome/browser/ash/crosapi/ash_requires_lacros_extension_apitest.h"
diff --git a/chrome/browser/speech/extension_api/tts_extension_api_lacros_browsertest.cc b/chrome/browser/speech/extension_api/tts_extension_api_lacros_browsertest.cc
index 512ecbcf..dffe3228 100644
--- a/chrome/browser/speech/extension_api/tts_extension_api_lacros_browsertest.cc
+++ b/chrome/browser/speech/extension_api/tts_extension_api_lacros_browsertest.cc
@@ -5,6 +5,7 @@
 #include <vector>
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/speech/extension_api/tts_engine_extension_api.h"
 #include "chrome/browser/speech/tts_crosapi_util.h"
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc
index 225ae076..36e3072d 100644
--- a/chrome/browser/ssl/ssl_browsertest.cc
+++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -35,7 +35,6 @@
 #include "base/test/simple_test_clock.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc b/chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc
index 825e0b9..1228e5f 100644
--- a/chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc
+++ b/chrome/browser/ssl/typed_navigation_upgrade_throttle_browsertest.cc
@@ -5,6 +5,7 @@
 #include <vector>
 
 #include "base/containers/contains.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/app/chrome_command_ids.h"
diff --git a/chrome/browser/startup_data.cc b/chrome/browser/startup_data.cc
index 47911d68..0cd401d 100644
--- a/chrome/browser/startup_data.cc
+++ b/chrome/browser/startup_data.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/startup_data.h"
 
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "chrome/browser/metrics/chrome_feature_list_creator.h"
diff --git a/chrome/browser/storage/shared_storage_browsertest.cc b/chrome/browser/storage/shared_storage_browsertest.cc
index c2222b1..9b336e06 100644
--- a/chrome/browser/storage/shared_storage_browsertest.cc
+++ b/chrome/browser/storage/shared_storage_browsertest.cc
@@ -10,6 +10,7 @@
 #include "base/containers/contains.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc
index a6a188d2..6eb4194 100644
--- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc
+++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/json/json_writer.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "components/signin/public/base/consent_level.h"
diff --git a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc
index 2e11c9cf..95dba0b1 100644
--- a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc
+++ b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/functional/bind.h"
 #include "base/json/json_writer.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "components/signin/public/identity_manager/identity_test_environment.h"
 #include "net/base/net_errors.h"
diff --git a/chrome/browser/supervised_user/supervised_user_settings_service.cc b/chrome/browser/supervised_user/supervised_user_settings_service.cc
index 3c9b1b8..c51863a 100644
--- a/chrome/browser/supervised_user/supervised_user_settings_service.cc
+++ b/chrome/browser/supervised_user/supervised_user_settings_service.cc
@@ -17,6 +17,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
 #include "chrome/browser/supervised_user/supervised_user_url_filter.h"
diff --git a/chrome/browser/support_tool/ash/chrome_user_logs_data_collector.cc b/chrome/browser/support_tool/ash/chrome_user_logs_data_collector.cc
index a11371b..c4c85132 100644
--- a/chrome/browser/support_tool/ash/chrome_user_logs_data_collector.cc
+++ b/chrome/browser/support_tool/ash/chrome_user_logs_data_collector.cc
@@ -266,15 +266,14 @@
     base::RepeatingClosure barrier_closure,
     base::FilePath path_in_temp_dir,
     PIIMap detected_pii) {
-  task_runner_for_redaction_tool_.reset();
-  redaction_tool_container_.reset();
-
   pii_in_log_files_.emplace(path_in_temp_dir, GetPIITypesInMap(detected_pii));
   MergePIIMaps(pii_map_, detected_pii);
   std::move(barrier_closure).Run();
 }
 
 void ChromeUserLogsDataCollector::OnAllUserLogFilesReadAndDetected() {
+  task_runner_for_redaction_tool_.reset();
+  redaction_tool_container_.reset();
   if (errors_.empty()) {
     std::move(on_data_collector_done_callback_).Run(absl::nullopt);
     return;
diff --git a/chrome/browser/support_tool/ash/chrome_user_logs_data_collector_unittest.cc b/chrome/browser/support_tool/ash/chrome_user_logs_data_collector_unittest.cc
index 4d8802aa..608454a3 100644
--- a/chrome/browser/support_tool/ash/chrome_user_logs_data_collector_unittest.cc
+++ b/chrome/browser/support_tool/ash/chrome_user_logs_data_collector_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_file_util.h"
diff --git a/chrome/browser/support_tool/ash/network_health_data_collector_unittest.cc b/chrome/browser/support_tool/ash/network_health_data_collector_unittest.cc
index 8bc0db105..35be3ef 100644
--- a/chrome/browser/support_tool/ash/network_health_data_collector_unittest.cc
+++ b/chrome/browser/support_tool/ash/network_health_data_collector_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/test_future.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/browser/support_tool/ash/network_routes_data_collector_unittest.cc b/chrome/browser/support_tool/ash/network_routes_data_collector_unittest.cc
index b25fd87..a93e4ff 100644
--- a/chrome/browser/support_tool/ash/network_routes_data_collector_unittest.cc
+++ b/chrome/browser/support_tool/ash/network_routes_data_collector_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/chrome/browser/support_tool/ash/shill_data_collector_unittest.cc b/chrome/browser/support_tool/ash/shill_data_collector_unittest.cc
index fc6c8cc..3b6f692 100644
--- a/chrome/browser/support_tool/ash/shill_data_collector_unittest.cc
+++ b/chrome/browser/support_tool/ash/shill_data_collector_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/browser/support_tool/ash/system_logs_data_collector_unittest.cc b/chrome/browser/support_tool/ash/system_logs_data_collector_unittest.cc
index dd50fb5..57ecd2d 100644
--- a/chrome/browser/support_tool/ash/system_logs_data_collector_unittest.cc
+++ b/chrome/browser/support_tool/ash/system_logs_data_collector_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/chrome/browser/support_tool/ash/system_state_data_collector_unittest.cc b/chrome/browser/support_tool/ash/system_state_data_collector_unittest.cc
index 58deac0..a9da86f 100644
--- a/chrome/browser/support_tool/ash/system_state_data_collector_unittest.cc
+++ b/chrome/browser/support_tool/ash/system_state_data_collector_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/chrome/browser/support_tool/support_tool_handler.cc b/chrome/browser/support_tool/support_tool_handler.cc
index da451ed3..7bf9477 100644
--- a/chrome/browser/support_tool/support_tool_handler.cc
+++ b/chrome/browser/support_tool/support_tool_handler.cc
@@ -26,7 +26,6 @@
 #include "base/task/bind_post_task.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/support_tool/data_collector.h"
 #include "chrome/browser/support_tool/support_packet_metadata.h"
 #include "components/feedback/pii_types.h"
diff --git a/chrome/browser/support_tool/support_tool_handler_unittest.cc b/chrome/browser/support_tool/support_tool_handler_unittest.cc
index 3f55b84d..3305ebb8 100644
--- a/chrome/browser/support_tool/support_tool_handler_unittest.cc
+++ b/chrome/browser/support_tool/support_tool_handler_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/functional/callback.h"
 #include "base/run_loop.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/browser/support_tool/system_log_source_data_collector_adaptor_unittest.cc b/chrome/browser/support_tool/system_log_source_data_collector_adaptor_unittest.cc
index 47cadc7..e9f749f 100644
--- a/chrome/browser/support_tool/system_log_source_data_collector_adaptor_unittest.cc
+++ b/chrome/browser/support_tool/system_log_source_data_collector_adaptor_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/browser/sync/chrome_sync_client.cc b/chrome/browser/sync/chrome_sync_client.cc
index 19d1c9c..3d2d0fa 100644
--- a/chrome/browser/sync/chrome_sync_client.cc
+++ b/chrome/browser/sync/chrome_sync_client.cc
@@ -147,7 +147,6 @@
 #include "chrome/browser/ash/printing/printers_sync_bridge.h"
 #include "chrome/browser/ash/printing/synced_printers_manager.h"
 #include "chrome/browser/ash/printing/synced_printers_manager_factory.h"
-#include "chrome/browser/ash/sync/app_settings_model_type_controller.h"
 #include "chrome/browser/ash/sync/os_syncable_service_model_type_controller.h"
 #include "chrome/browser/sync/desk_sync_service_factory.h"
 #include "chrome/browser/sync/wifi_configuration_sync_service_factory.h"
@@ -219,6 +218,17 @@
 
   return true;
 }
+
+bool ShouldSyncAppsTypesInTransportMode() {
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+  // When apps sync controlled by Ash Sync settings, allow running apps-related
+  // types (WEB_APPS, APPS and APP_SETTINGS) in transport-only mode using the
+  // same `delegate`.
+  return base::FeatureList::IsEnabled(syncer::kSyncChromeOSAppsToggleSharing);
+#else
+  return false;
+#endif
+}
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
 }  // namespace
@@ -415,14 +425,18 @@
     // Extension sync is enabled by default.
     controllers.push_back(std::make_unique<ExtensionModelTypeController>(
         syncer::EXTENSIONS, model_type_store_factory,
-        GetSyncableServiceForType(syncer::EXTENSIONS), dump_stack, profile_));
+        GetSyncableServiceForType(syncer::EXTENSIONS), dump_stack,
+        ExtensionModelTypeController::DelegateMode::kFullSyncModeOnly,
+        profile_));
 
     // Extension setting sync is enabled by default.
     controllers.push_back(std::make_unique<ExtensionSettingModelTypeController>(
         syncer::EXTENSION_SETTINGS, model_type_store_factory,
         extensions::settings_sync_util::GetSyncableServiceProvider(
             profile_, syncer::EXTENSION_SETTINGS),
-        dump_stack, profile_));
+        dump_stack,
+        ExtensionSettingModelTypeController::DelegateMode::kFullSyncModeOnly,
+        profile_));
 
     if (IsAppSyncEnabled(profile_)) {
       controllers.push_back(CreateAppsModelTypeController());
@@ -440,7 +454,9 @@
     // Theme sync is enabled by default.
     controllers.push_back(std::make_unique<ExtensionModelTypeController>(
         syncer::THEMES, model_type_store_factory,
-        GetSyncableServiceForType(syncer::THEMES), dump_stack, profile_));
+        GetSyncableServiceForType(syncer::THEMES), dump_stack,
+        ExtensionModelTypeController::DelegateMode::kFullSyncModeOnly,
+        profile_));
 
     // Search Engine sync is enabled by default.
     controllers.push_back(
@@ -717,27 +733,32 @@
 #if BUILDFLAG(ENABLE_EXTENSIONS)
 std::unique_ptr<syncer::ModelTypeController>
 ChromeSyncClient::CreateAppsModelTypeController() {
+  auto delegate_mode =
+      ExtensionModelTypeController::DelegateMode::kFullSyncModeOnly;
+  if (ShouldSyncAppsTypesInTransportMode()) {
+    delegate_mode = ExtensionModelTypeController::DelegateMode::
+        kTransportModeWithSingleModel;
+  }
   return std::make_unique<ExtensionModelTypeController>(
       syncer::APPS, GetModelTypeStoreService()->GetStoreFactory(),
-      GetSyncableServiceForType(syncer::APPS), GetDumpStackClosure(), profile_);
+      GetSyncableServiceForType(syncer::APPS), GetDumpStackClosure(),
+      delegate_mode, profile_);
 }
 
 std::unique_ptr<syncer::ModelTypeController>
 ChromeSyncClient::CreateAppSettingsModelTypeController(
     syncer::SyncService* sync_service) {
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-  return std::make_unique<AppSettingsModelTypeController>(
-      GetModelTypeStoreService()->GetStoreFactory(),
-      extensions::settings_sync_util::GetSyncableServiceProvider(
-          profile_, syncer::APP_SETTINGS),
-      GetDumpStackClosure(), profile_, sync_service);
-#else
+  auto delegate_mode =
+      ExtensionSettingModelTypeController::DelegateMode::kFullSyncModeOnly;
+  if (ShouldSyncAppsTypesInTransportMode()) {
+    delegate_mode = ExtensionSettingModelTypeController::DelegateMode::
+        kTransportModeWithSingleModel;
+  }
   return std::make_unique<ExtensionSettingModelTypeController>(
       syncer::APP_SETTINGS, GetModelTypeStoreService()->GetStoreFactory(),
       extensions::settings_sync_util::GetSyncableServiceProvider(
           profile_, syncer::APP_SETTINGS),
-      GetDumpStackClosure(), profile_);
-#endif
+      GetDumpStackClosure(), delegate_mode, profile_);
 }
 
 std::unique_ptr<syncer::ModelTypeController>
@@ -745,25 +766,19 @@
   syncer::ModelTypeControllerDelegate* delegate =
       GetControllerDelegateForModelType(syncer::WEB_APPS).get();
 
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-  if (base::FeatureList::IsEnabled(syncer::kSyncChromeOSAppsToggleSharing)) {
-    // When apps sync controlled by Ash Sync settings, allow running WEB_APPS in
-    // transport-only mode using the same `delegate`.
-    return std::make_unique<syncer::ModelTypeController>(
-        syncer::WEB_APPS,
-        /*delegate_for_full_sync_mode=*/
+  std::unique_ptr<syncer::ModelTypeControllerDelegate>
+      delegate_for_transport_mode = nullptr;
+  if (ShouldSyncAppsTypesInTransportMode()) {
+    delegate_for_transport_mode =
         std::make_unique<syncer::ForwardingModelTypeControllerDelegate>(
-            delegate),
-        /*delegate_for_transport_mode=*/
-        std::make_unique<syncer::ForwardingModelTypeControllerDelegate>(
-            delegate));
+            delegate);
   }
-#endif
-
   return std::make_unique<syncer::ModelTypeController>(
       syncer::WEB_APPS,
-      std::make_unique<syncer::ForwardingModelTypeControllerDelegate>(
-          delegate));
+      /*delegate_for_full_sync_mode=*/
+      std::make_unique<syncer::ForwardingModelTypeControllerDelegate>(delegate),
+      /*delegate_for_transport_mode=*/
+      std::move(delegate_for_transport_mode));
 }
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
diff --git a/chrome/browser/sync/glue/extension_model_type_controller.cc b/chrome/browser/sync/glue/extension_model_type_controller.cc
index aef928c..894cdd3 100644
--- a/chrome/browser/sync/glue/extension_model_type_controller.cc
+++ b/chrome/browser/sync/glue/extension_model_type_controller.cc
@@ -16,11 +16,13 @@
     syncer::OnceModelTypeStoreFactory store_factory,
     base::WeakPtr<syncer::SyncableService> syncable_service,
     const base::RepeatingClosure& dump_stack,
+    DelegateMode delegate_mode,
     Profile* profile)
     : SyncableServiceBasedModelTypeController(type,
                                               std::move(store_factory),
                                               syncable_service,
-                                              dump_stack),
+                                              dump_stack,
+                                              delegate_mode),
       profile_(profile) {
   DCHECK(type == syncer::EXTENSIONS || type == syncer::APPS ||
          type == syncer::THEMES);
diff --git a/chrome/browser/sync/glue/extension_model_type_controller.h b/chrome/browser/sync/glue/extension_model_type_controller.h
index f8a1eaf..9a54a7c1 100644
--- a/chrome/browser/sync/glue/extension_model_type_controller.h
+++ b/chrome/browser/sync/glue/extension_model_type_controller.h
@@ -23,6 +23,7 @@
       syncer::OnceModelTypeStoreFactory store_factory,
       base::WeakPtr<syncer::SyncableService> syncable_service,
       const base::RepeatingClosure& dump_stack,
+      DelegateMode delegate_mode,
       Profile* profile);
 
   ExtensionModelTypeController(const ExtensionModelTypeController&) = delete;
diff --git a/chrome/browser/sync/glue/extension_setting_model_type_controller.cc b/chrome/browser/sync/glue/extension_setting_model_type_controller.cc
index 1725d06..500854c2 100644
--- a/chrome/browser/sync/glue/extension_setting_model_type_controller.cc
+++ b/chrome/browser/sync/glue/extension_setting_model_type_controller.cc
@@ -17,13 +17,15 @@
     syncer::OnceModelTypeStoreFactory store_factory,
     SyncableServiceProvider syncable_service_provider,
     const base::RepeatingClosure& dump_stack,
+    DelegateMode delegate_mode,
     Profile* profile)
     : NonUiSyncableServiceBasedModelTypeController(
           type,
           std::move(store_factory),
           std::move(syncable_service_provider),
           dump_stack,
-          extensions::GetBackendTaskRunner()),
+          extensions::GetBackendTaskRunner(),
+          delegate_mode),
       profile_(profile) {
   DCHECK(profile_);
   DCHECK(type == syncer::EXTENSION_SETTINGS || type == syncer::APP_SETTINGS);
diff --git a/chrome/browser/sync/glue/extension_setting_model_type_controller.h b/chrome/browser/sync/glue/extension_setting_model_type_controller.h
index 1969b15..e5bb2c28 100644
--- a/chrome/browser/sync/glue/extension_setting_model_type_controller.h
+++ b/chrome/browser/sync/glue/extension_setting_model_type_controller.h
@@ -27,6 +27,7 @@
       syncer::OnceModelTypeStoreFactory store_factory,
       SyncableServiceProvider syncable_service_provider,
       const base::RepeatingClosure& dump_stack,
+      DelegateMode delegate_mode,
       Profile* profile);
 
   ExtensionSettingModelTypeController(
diff --git a/chrome/browser/sync/test/integration/apps_helper.cc b/chrome/browser/sync/test/integration/apps_helper.cc
index b41a4bf..3ef5677 100644
--- a/chrome/browser/sync/test/integration/apps_helper.cc
+++ b/chrome/browser/sync/test/integration/apps_helper.cc
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
diff --git a/chrome/browser/sync/test/integration/autofill_helper.cc b/chrome/browser/sync/test/integration/autofill_helper.cc
index acbe971..c9278b4a 100644
--- a/chrome/browser/sync/test/integration/autofill_helper.cc
+++ b/chrome/browser/sync/test/integration/autofill_helper.cc
@@ -13,6 +13,7 @@
 #include "base/guid.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/sync/test/integration/extensions_helper.cc b/chrome/browser/sync/test/integration/extensions_helper.cc
index ad713f14..3a1d6b97 100644
--- a/chrome/browser/sync/test/integration/extensions_helper.cc
+++ b/chrome/browser/sync/test/integration/extensions_helper.cc
@@ -6,6 +6,7 @@
 
 #include "base/check.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/updater/extension_updater.h"
diff --git a/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.cc b/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.cc
index 12a84b6..2135c8c 100644
--- a/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.cc
+++ b/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/browser/sync/test/integration/sessions_helper.cc b/chrome/browser/sync/test/integration/sessions_helper.cc
index 382e516..53c4b04 100644
--- a/chrome/browser/sync/test/integration/sessions_helper.cc
+++ b/chrome/browser/sync/test/integration/sessions_helper.cc
@@ -16,7 +16,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/session_sync_service_factory.h"
diff --git a/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc b/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc
index 8a82589..a2f7d9a 100644
--- a/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_app_list_sync_test.cc
@@ -244,7 +244,6 @@
   EXPECT_TRUE(SyncItemsMatch(service, &compare_service));
 }
 
-// Tests for SyncSettingsCategorization.
 class SingleClientAppListOsSyncTest : public SyncTest {
  public:
   SingleClientAppListOsSyncTest() : SyncTest(SINGLE_CLIENT) {}
diff --git a/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc b/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc
index f69a9b3..899742fc 100644
--- a/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc
@@ -6,6 +6,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc b/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc
index 04811f8..069ae956 100644
--- a/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc
@@ -103,7 +103,7 @@
   syncer::SyncUserSettings* settings = service->GetUserSettings();
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-  // Apps is an OS type on Ash if SyncSettingsCategorization is enabled.
+  // Apps is an OS type on Ash.
   ASSERT_TRUE(
       settings->GetSelectedOsTypes().Has(UserSelectableOsType::kOsApps));
   EXPECT_TRUE(service->GetActiveDataTypes().Has(syncer::WEB_APPS));
diff --git a/chrome/browser/sync/test/integration/two_client_extension_settings_and_app_settings_sync_test.cc b/chrome/browser/sync/test/integration/two_client_extension_settings_and_app_settings_sync_test.cc
index 2384d15..9a7dd13 100644
--- a/chrome/browser/sync/test/integration/two_client_extension_settings_and_app_settings_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_extension_settings_and_app_settings_sync_test.cc
@@ -237,8 +237,8 @@
 }
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-// Tests for SyncSettingsCategorization, which uses a different
-// ModelTypeController for syncer::APP_SETTINGS.
+// Tests for ChromeOS-Ash, which uses a different ModelTypeController for
+// syncer::APP_SETTINGS.
 class TwoClientAppSettingsOsSyncTest : public SyncTest {
  public:
   TwoClientAppSettingsOsSyncTest() : SyncTest(TWO_CLIENT) {}
diff --git a/chrome/browser/sync/test/integration/wallet_helper.cc b/chrome/browser/sync/test/integration/wallet_helper.cc
index 09ce314..8a690a5 100644
--- a/chrome/browser/sync/test/integration/wallet_helper.cc
+++ b/chrome/browser/sync/test/integration/wallet_helper.cc
@@ -9,6 +9,7 @@
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
diff --git a/chrome/browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc b/chrome/browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc
index 8bfd3c95..253661b3 100644
--- a/chrome/browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc
+++ b/chrome/browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc
@@ -23,23 +23,25 @@
 // exposed by SyncService crosapi).
 const uint32_t kMinCrosapiVersionWithSyncUserSettingsClient = 80;
 
-class WebAppsSyncActiveStateChecker : public SingleClientStatusChangeChecker {
+class DatatypeSyncActiveStateChecker : public SingleClientStatusChangeChecker {
  public:
-  WebAppsSyncActiveStateChecker(bool expected_state,
-                                syncer::SyncServiceImpl* sync_service)
+  DatatypeSyncActiveStateChecker(syncer::ModelType type,
+                                 bool expected_state,
+                                 syncer::SyncServiceImpl* sync_service)
       : SingleClientStatusChangeChecker(sync_service),
+        type_(type),
         expected_state_(expected_state) {}
-  ~WebAppsSyncActiveStateChecker() override = default;
+  ~DatatypeSyncActiveStateChecker() override = default;
 
   bool IsExitConditionSatisfied(std::ostream* os) override {
-    *os << "Waiting for WebApps sync active state to become: "
-        << expected_state_;
-    return service()->GetActiveDataTypes().Has(syncer::WEB_APPS) ==
-           expected_state_;
+    *os << "Waiting for " << syncer::ModelTypeToDebugString(type_)
+        << " sync active state to become: " << expected_state_;
+    return service()->GetActiveDataTypes().Has(type_) == expected_state_;
   }
 
  private:
-  bool expected_state_;
+  const syncer::ModelType type_;
+  const bool expected_state_;
 };
 
 class SyncAppsToggleSharingLacrosBrowserTest : public SyncTest {
@@ -134,18 +136,18 @@
   }
   ASSERT_TRUE(SetupSync());
   client_ash().SetAppsSyncIsEnabled(/*enabled=*/true);
-  EXPECT_TRUE(
-      WebAppsSyncActiveStateChecker(/*expected_state=*/true, GetSyncService(0))
-          .Wait());
+  EXPECT_TRUE(DatatypeSyncActiveStateChecker(
+                  syncer::WEB_APPS, /*expected_state=*/true, GetSyncService(0))
+                  .Wait());
 
   client_ash().SetAppsSyncIsEnabled(/*enabled=*/false);
-  EXPECT_TRUE(
-      WebAppsSyncActiveStateChecker(/*expected_state=*/false, GetSyncService(0))
-          .Wait());
+  EXPECT_TRUE(DatatypeSyncActiveStateChecker(
+                  syncer::WEB_APPS, /*expected_state=*/false, GetSyncService(0))
+                  .Wait());
 }
 
 IN_PROC_BROWSER_TEST_F(SyncAppsToggleSharingLacrosBrowserTest,
-                       ShouldEnableWebAppsInTransportOnlyMode) {
+                       ShouldEnableAppsTypeInTransportOnlyMode) {
   if (!IsServiceAvailable()) {
     GTEST_SKIP() << "Unsupported Ash version.";
   }
@@ -158,12 +160,19 @@
 
   ASSERT_FALSE(GetSyncService(0)->IsSyncFeatureEnabled());
 
-  // By enabling apps sync in ash settings, WEB_APPS should become enabled even
-  // in transport-only mode.
+  // By enabling apps sync in ash settings, apps types should become enabled
+  // even in transport-only mode.
   client_ash().SetAppsSyncIsEnabled(/*enabled=*/true);
-  EXPECT_TRUE(
-      WebAppsSyncActiveStateChecker(/*expected_state=*/true, GetSyncService(0))
-          .Wait());
+  EXPECT_TRUE(DatatypeSyncActiveStateChecker(
+                  syncer::WEB_APPS, /*expected_state=*/true, GetSyncService(0))
+                  .Wait());
+  EXPECT_TRUE(DatatypeSyncActiveStateChecker(
+                  syncer::APPS, /*expected_state=*/true, GetSyncService(0))
+                  .Wait());
+  EXPECT_TRUE(DatatypeSyncActiveStateChecker(syncer::APP_SETTINGS,
+                                             /*expected_state=*/true,
+                                             GetSyncService(0))
+                  .Wait());
 }
 
 }  // namespace
diff --git a/chrome/browser/sync_file_system/drive_backend/callback_helper_unittest.cc b/chrome/browser/sync_file_system/drive_backend/callback_helper_unittest.cc
index c3ea6bac..42eeacc4f 100644
--- a/chrome/browser/sync_file_system/drive_backend/callback_helper_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/callback_helper_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/functional/callback.h"
 #include "base/location.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc
index 07f8ac1..aa274c6 100644
--- a/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc
+++ b/chrome/browser/sync_file_system/drive_backend/drive_service_on_worker.cc
@@ -10,6 +10,7 @@
 #include "base/check.h"
 #include "base/functional/bind.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/sync_file_system/drive_backend/callback_helper.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/drive_uploader_on_worker.cc b/chrome/browser/sync_file_system/drive_backend/drive_uploader_on_worker.cc
index b0c0cebd..b2ad7d7 100644
--- a/chrome/browser/sync_file_system/drive_backend/drive_uploader_on_worker.cc
+++ b/chrome/browser/sync_file_system/drive_backend/drive_uploader_on_worker.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/sync_file_system/drive_backend/callback_helper.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_uploader_wrapper.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
index 362588d..3157c33 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -21,7 +21,6 @@
 #include "base/strings/string_util.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc
index 83e9cbb..f7381ab8 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/remote_change_processor_on_worker.cc b/chrome/browser/sync_file_system/drive_backend/remote_change_processor_on_worker.cc
index 72a1709..fbe7bbbb 100644
--- a/chrome/browser/sync_file_system/drive_backend/remote_change_processor_on_worker.cc
+++ b/chrome/browser/sync_file_system/drive_backend/remote_change_processor_on_worker.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/sync_file_system/drive_backend/callback_helper.h"
 #include "chrome/browser/sync_file_system/drive_backend/remote_change_processor_wrapper.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
index 17b0e8f..59898d1c 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
@@ -11,6 +11,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.h b/chrome/browser/sync_file_system/drive_backend/sync_engine.h
index 82f9cab..822aa9f 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine.h
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.h
@@ -13,6 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/sync_file_system/drive_backend/callback_tracker.h"
 #include "chrome/browser/sync_file_system/local_change_processor.h"
 #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
index 102195c..9ff5d0e 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/sync_file_system/drive_backend/callback_helper.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc b/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc
index f8a99fa..5fdfd9a 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
diff --git a/chrome/browser/task_manager/providers/vm/vm_process_task_provider.cc b/chrome/browser/task_manager/providers/vm/vm_process_task_provider.cc
index 6143d7fa..95898c9 100644
--- a/chrome/browser/task_manager/providers/vm/vm_process_task_provider.cc
+++ b/chrome/browser/task_manager/providers/vm/vm_process_task_provider.cc
@@ -11,7 +11,6 @@
 #include "base/process/process_iterator.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "chrome/browser/ash/crostini/crostini_util.h"
 #include "chrome/browser/ash/process_snapshot_server.h"
diff --git a/chrome/browser/task_manager/sampling/shared_sampler_stub.cc b/chrome/browser/task_manager/sampling/shared_sampler_stub.cc
index e28cb4c..6dd6b40 100644
--- a/chrome/browser/task_manager/sampling/shared_sampler_stub.cc
+++ b/chrome/browser/task_manager/sampling/shared_sampler_stub.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/task_manager/sampling/shared_sampler.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/browser_thread.h"
 
 namespace task_manager {
diff --git a/chrome/browser/task_manager/sampling/shared_sampler_win.cc b/chrome/browser/task_manager/sampling/shared_sampler_win.cc
index db1018f49..21e59cd 100644
--- a/chrome/browser/task_manager/sampling/shared_sampler_win.cc
+++ b/chrome/browser/task_manager/sampling/shared_sampler_win.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/path_service.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/platform_thread.h"
 #include "base/time/time.h"
 #include "chrome/browser/task_manager/sampling/shared_sampler_win_defines.h"
diff --git a/chrome/browser/task_manager/sampling/task_group.h b/chrome/browser/task_manager/sampling/task_group.h
index e61409d..2ca6f2b5 100644
--- a/chrome/browser/task_manager/sampling/task_group.h
+++ b/chrome/browser/task_manager/sampling/task_group.h
@@ -13,6 +13,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/process/process_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/task_manager/sampling/task_group_sampler.cc b/chrome/browser/task_manager/sampling/task_group_sampler.cc
index 755fd21..79f0612 100644
--- a/chrome/browser/task_manager/sampling/task_group_sampler.cc
+++ b/chrome/browser/task_manager/sampling/task_group_sampler.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/process/process_metrics.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/task_manager/task_manager_observer.h"
diff --git a/chrome/browser/themes/theme_service_browsertest.cc b/chrome/browser/themes/theme_service_browsertest.cc
index 617857a..2791954c 100644
--- a/chrome/browser/themes/theme_service_browsertest.cc
+++ b/chrome/browser/themes/theme_service_browsertest.cc
@@ -185,8 +185,12 @@
 
   {
     test::ThemeServiceChangedWaiter waiter(theme_service);
+    // ThemeService::OnThemeBuiltFromExtension will disable the previous theme
+    // but does so with tasks posted to the thread pool which will execute
+    // non-deterministically; thus, don't check the `expected_change` value.
     InstallExtension(
-        test_data_dir_.AppendASCII("theme_test_toolbar_button_tint/"), 1);
+        test_data_dir_.AppendASCII("theme_test_toolbar_button_tint/"),
+        absl::nullopt);
     waiter.WaitForThemeChanged();
   }
 
diff --git a/chrome/browser/thumbnail/generator/android/thumbnail_media_parser_impl.cc b/chrome/browser/thumbnail/generator/android/thumbnail_media_parser_impl.cc
index dfccbcc9..f0866f19 100644
--- a/chrome/browser/thumbnail/generator/android/thumbnail_media_parser_impl.cc
+++ b/chrome/browser/thumbnail/generator/android/thumbnail_media_parser_impl.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_util.h"
 #include "base/functional/bind.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "cc/paint/skia_paint_canvas.h"
diff --git a/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context.cc b/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context.cc
index 3a586a2a..2f203467 100644
--- a/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context.cc
+++ b/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/profiles/profile.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_constraints.h"
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/content_settings/core/common/content_settings_utils.h"
 #include "components/permissions/permission_request_id.h"
@@ -52,6 +53,21 @@
          outcome == CookieRequestOutcome::kDeniedByFirstPartySet;
 }
 
+content_settings::ContentSettingConstraints ComputeConstraints(
+    CookieRequestOutcome outcome,
+    bool implicit_result) {
+  if (!implicit_result) {
+    return {content_settings::GetConstraintExpiration(kExplicitGrantDuration),
+            content_settings::SessionModel::Durable};
+  }
+  if (outcome == CookieRequestOutcome::kGrantedByFirstPartySet) {
+    return {content_settings::GetConstraintExpiration(kImplicitGrantDuration),
+            content_settings::SessionModel::NonRestorableUserSession};
+  }
+  return {content_settings::GetConstraintExpiration(kImplicitGrantDuration),
+          content_settings::SessionModel::UserSession};
+}
+
 // Converts a ContentSetting to the corresponding CookieRequestOutcome. This
 // assumes that the request was not answered implicitly; i.e., that a prompt was
 // shown to the user (at some point - not necessarily for this request).
@@ -300,13 +316,6 @@
   DCHECK(settings_map);
   DCHECK(persist);
 
-  static const content_settings::ContentSettingConstraints ephemeral_grant = {
-      content_settings::GetConstraintExpiration(kImplicitGrantDuration),
-      content_settings::SessionModel::UserSession};
-  static const content_settings::ContentSettingConstraints durable_grant = {
-      content_settings::GetConstraintExpiration(kExplicitGrantDuration),
-      content_settings::SessionModel::Durable};
-
   // This permission was allowed so store it either ephemerally or more
   // permanently depending on if the allow came from a prompt or automatic
   // grant.
@@ -323,7 +332,7 @@
   settings_map->SetContentSettingCustomScope(
       ContentSettingsPattern::FromURLNoWildcard(requesting_origin),
       secondary_site_pattern, ContentSettingsType::TOP_LEVEL_STORAGE_ACCESS,
-      content_setting, implicit_result ? ephemeral_grant : durable_grant);
+      content_setting, ComputeConstraints(outcome, implicit_result));
 
   ContentSettingsForOneType grants;
   settings_map->GetSettingsForOneType(
diff --git a/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context_unittest.cc b/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context_unittest.cc
index 5d6935f..372efa1d 100644
--- a/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context_unittest.cc
+++ b/chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context_unittest.cc
@@ -4,17 +4,28 @@
 
 #include "chrome/browser/top_level_storage_access_api/top_level_storage_access_permission_context.h"
 
+#include "base/barrier_callback.h"
+#include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/test/test_future.h"
+#include "base/version.h"
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
+#include "chrome/browser/first_party_sets/scoped_mock_first_party_sets_handler.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/permissions/permission_request_id.h"
 #include "components/permissions/permission_request_manager.h"
 #include "components/permissions/permission_util.h"
 #include "components/permissions/test/mock_permission_prompt_factory.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/content_features.h"
 #include "content/public/test/web_contents_tester.h"
 #include "net/base/features.h"
+#include "net/base/schemeful_site.h"
+#include "net/first_party_sets/first_party_set_entry.h"
+#include "net/first_party_sets/global_first_party_sets.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
@@ -42,12 +53,6 @@
               base::NumberToString(dummy_id) + ".com");
 }
 
-void SaveResult(ContentSetting* content_setting_result,
-                ContentSetting content_setting) {
-  DCHECK(content_setting_result);
-  *content_setting_result = content_setting;
-}
-
 }  // namespace
 
 class TopLevelStorageAccessPermissionContextTest
@@ -101,17 +106,22 @@
     permissions::PermissionRequestManager* manager =
         permissions::PermissionRequestManager::FromWebContents(web_contents());
     DCHECK(manager);
-    for (int grant_id = 0;
-         grant_id < net::features::kStorageAccessAPIDefaultImplicitGrantLimit;
-         grant_id++) {
-      ContentSetting result = CONTENT_SETTING_DEFAULT;
+    const int implicit_grant_limit =
+        net::features::kStorageAccessAPIDefaultImplicitGrantLimit;
+    base::RunLoop run_loop;
+    auto barrier = base::BarrierCallback<ContentSetting>(
+        implicit_grant_limit,
+        base::BindLambdaForTesting(
+            [&](const std::vector<ContentSetting>& results) {
+              run_loop.Quit();
+            }));
+    for (int grant_id = 0; grant_id < implicit_grant_limit; grant_id++) {
       permission_context.DecidePermissionForTesting(
           fake_id, requesting_origin, GetDummyEmbeddingUrl(grant_id),
-          /*user_gesture=*/true, base::BindOnce(&SaveResult, &result));
-      base::RunLoop().RunUntilIdle();
-
-      EXPECT_FALSE(manager->IsRequestInProgress());
+          /*user_gesture=*/true, barrier);
     }
+    run_loop.Run();
+    EXPECT_FALSE(manager->IsRequestInProgress());
   }
 
   permissions::PermissionRequestID CreateFakeID() {
@@ -152,11 +162,11 @@
   TopLevelStorageAccessPermissionContext permission_context(profile());
   permissions::PermissionRequestID fake_id = CreateFakeID();
 
-  ContentSetting result = CONTENT_SETTING_DEFAULT;
+  base::test::TestFuture<ContentSetting> future;
   permission_context.DecidePermissionForTesting(
       fake_id, GetRequesterURL(), GetTopLevelURL(),
-      /*user_gesture=*/true, base::BindOnce(&SaveResult, &result));
-  EXPECT_EQ(CONTENT_SETTING_BLOCK, result);
+      /*user_gesture=*/true, future.GetCallback());
+  EXPECT_EQ(CONTENT_SETTING_BLOCK, future.Get());
 }
 
 class TopLevelStorageAccessPermissionContextTestAPIEnabledTest
@@ -180,10 +190,12 @@
 
   ExhaustImplicitGrants(GetRequesterURL(), permission_context);
 
-  ContentSetting result = CONTENT_SETTING_DEFAULT;
+  base::test::TestFuture<ContentSetting> future;
   permission_context.DecidePermissionForTesting(
       fake_id, GetRequesterURL(), GetTopLevelURL(),
-      /*user_gesture=*/true, base::BindOnce(&SaveResult, &result));
+      /*user_gesture=*/true, future.GetCallback());
+
+  // Run until the prompt is ready.
   base::RunLoop().RunUntilIdle();
 
   permissions::PermissionRequestManager* manager =
@@ -199,8 +211,7 @@
   EXPECT_EQ(GetTopLevelURL(), manager->GetEmbeddingOrigin());
 
   manager->Dismiss();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(CONTENT_SETTING_ASK, result);
+  EXPECT_EQ(CONTENT_SETTING_ASK, future.Get());
   EXPECT_EQ(
       histogram_tester().GetBucketCount(kRequestOutcomeHistogram,
                                         CookieRequestOutcome::kDismissedByUser),
@@ -213,11 +224,11 @@
   TopLevelStorageAccessPermissionContext permission_context(profile());
   permissions::PermissionRequestID fake_id = CreateFakeID();
 
-  ContentSetting result = CONTENT_SETTING_DEFAULT;
+  base::test::TestFuture<ContentSetting> future;
   permission_context.DecidePermissionForTesting(
       fake_id, GetRequesterURL(), GetTopLevelURL(),
-      /*user_gesture=*/false, base::BindOnce(&SaveResult, &result));
-  EXPECT_EQ(CONTENT_SETTING_BLOCK, result);
+      /*user_gesture=*/false, future.GetCallback());
+  EXPECT_EQ(CONTENT_SETTING_BLOCK, future.Get());
   EXPECT_EQ(histogram_tester().GetBucketCount(
                 kRequestOutcomeHistogram,
                 CookieRequestOutcome::kDeniedByPrerequisites),
@@ -264,22 +275,27 @@
           kRequestOutcomeHistogram, CookieRequestOutcome::kGrantedByAllowance),
       5);
 
-  ContentSetting result = CONTENT_SETTING_DEFAULT;
-  permission_context.DecidePermissionForTesting(
-      fake_id, GetRequesterURL(), GetTopLevelURL(),
-      /*user_gesture=*/true, base::BindOnce(&SaveResult, &result));
-  base::RunLoop().RunUntilIdle();
-
   permissions::PermissionRequestManager* manager =
       permissions::PermissionRequestManager::FromWebContents(web_contents());
   ASSERT_TRUE(manager);
-  ASSERT_TRUE(manager->IsRequestInProgress());
 
-  // Close the prompt and validate we get the expected setting back in our
-  // callback.
-  manager->Dismiss();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(CONTENT_SETTING_ASK, result);
+  {
+    base::test::TestFuture<ContentSetting> future;
+    permission_context.DecidePermissionForTesting(
+        fake_id, GetRequesterURL(), GetTopLevelURL(),
+        /*user_gesture=*/true, future.GetCallback());
+
+    // Run until the prompt is ready.
+    base::RunLoop().RunUntilIdle();
+
+    ASSERT_TRUE(manager->IsRequestInProgress());
+
+    // Close the prompt and validate we get the expected setting back in our
+    // callback.
+    manager->Dismiss();
+    EXPECT_EQ(CONTENT_SETTING_ASK, future.Get());
+  }
+
   EXPECT_EQ(
       histogram_tester().GetBucketCount(kRequestOutcomeHistogram,
                                         CookieRequestOutcome::kDismissedByUser),
@@ -297,15 +313,14 @@
 
   // However now if a different requesting origin makes a request we should see
   // it gets auto-granted as the limit has not been reached for it yet.
-  result = CONTENT_SETTING_DEFAULT;
+  base::test::TestFuture<ContentSetting> future;
   permission_context.DecidePermissionForTesting(
       fake_id, alternate_requester_url, GetTopLevelURL(),
-      /*user_gesture=*/true, base::BindOnce(&SaveResult, &result));
-  base::RunLoop().RunUntilIdle();
+      /*user_gesture=*/true, future.GetCallback());
 
   // We should have no prompts still and our latest result should be an allow.
+  EXPECT_EQ(CONTENT_SETTING_ALLOW, future.Get());
   EXPECT_FALSE(manager->IsRequestInProgress());
-  EXPECT_EQ(CONTENT_SETTING_ALLOW, result);
   EXPECT_EQ(
       histogram_tester().GetBucketCount(
           kRequestOutcomeHistogram, CookieRequestOutcome::kGrantedByAllowance),
@@ -330,7 +345,6 @@
 
   permissions::PermissionRequestManager* manager =
       permissions::PermissionRequestManager::FromWebContents(web_contents());
-  ContentSetting result = CONTENT_SETTING_DEFAULT;
 
   content::WebContentsTester::For(web_contents())
       ->NavigateAndCommit(GetDummyEmbeddingUrlWithSubdomain());
@@ -339,16 +353,16 @@
   // that is same site with an existing grant should still be auto-granted. The
   // call is to `RequestPermission`, which checks for existing grants, while
   // `DecidePermission` does not.
+  base::test::TestFuture<ContentSetting> future;
   permission_context.RequestPermission(CreateFakeID(), GetRequesterURL(), true,
-                                       base::BindOnce(&SaveResult, &result));
-  base::RunLoop().RunUntilIdle();
+                                       future.GetCallback());
 
   int implicit_grant_limit =
       net::features::kStorageAccessAPIDefaultImplicitGrantLimit;
 
   // We should have no prompts still and our latest result should be an allow.
   EXPECT_FALSE(manager->IsRequestInProgress());
-  EXPECT_EQ(CONTENT_SETTING_ALLOW, result);
+  EXPECT_EQ(CONTENT_SETTING_ALLOW, future.Get());
   EXPECT_EQ(
       histogram_tester().GetBucketCount(
           kRequestOutcomeHistogram, CookieRequestOutcome::kGrantedByAllowance),
@@ -373,10 +387,12 @@
   histogram_tester().ExpectBucketCount(kGrantIsImplicitHistogram,
                                        /*sample=*/true, 5);
 
-  ContentSetting result = CONTENT_SETTING_DEFAULT;
+  base::test::TestFuture<ContentSetting> future;
   permission_context.DecidePermissionForTesting(
       fake_id, GetRequesterURL(), GetTopLevelURL(),
-      /*user_gesture=*/true, base::BindOnce(&SaveResult, &result));
+      /*user_gesture=*/true, future.GetCallback());
+
+  // Run until the prompt is ready.
   base::RunLoop().RunUntilIdle();
 
   permissions::PermissionRequestManager* manager =
@@ -387,8 +403,7 @@
   // Deny the prompt and validate we get the expected setting back in our
   // callback.
   manager->Deny();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(CONTENT_SETTING_BLOCK, result);
+  EXPECT_EQ(CONTENT_SETTING_BLOCK, future.Get());
 
   histogram_tester().ExpectTotalCount(kGrantIsImplicitHistogram, 5);
   histogram_tester().ExpectBucketCount(kGrantIsImplicitHistogram,
@@ -415,10 +430,12 @@
   histogram_tester().ExpectBucketCount(kGrantIsImplicitHistogram,
                                        /*sample=*/true, 5);
 
-  ContentSetting result = CONTENT_SETTING_DEFAULT;
+  base::test::TestFuture<ContentSetting> future;
   permission_context.DecidePermissionForTesting(
       fake_id, GetRequesterURL(), GetTopLevelURL(),
-      /*user_gesture=*/true, base::BindOnce(&SaveResult, &result));
+      /*user_gesture=*/true, future.GetCallback());
+
+  // Run until the prompt is ready.
   base::RunLoop().RunUntilIdle();
 
   permissions::PermissionRequestManager* manager =
@@ -429,8 +446,7 @@
   // Accept the prompt and validate we get the expected setting back in our
   // callback.
   manager->Accept();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(CONTENT_SETTING_ALLOW, result);
+  EXPECT_EQ(CONTENT_SETTING_ALLOW, future.Get());
 
   histogram_tester().ExpectTotalCount(kGrantIsImplicitHistogram, 6);
   histogram_tester().ExpectBucketCount(kGrantIsImplicitHistogram,
@@ -445,3 +461,79 @@
                 kRequestOutcomeHistogram, CookieRequestOutcome::kGrantedByUser),
             1);
 }
+
+class TopLevelStorageAccessPermissionContextAPIWithFirstPartySetsTest
+    : public TopLevelStorageAccessPermissionContextTestAPIEnabledTest {
+ public:
+  TopLevelStorageAccessPermissionContextAPIWithFirstPartySetsTest() {
+    features_.InitWithFeaturesAndParameters(
+        /*enabled_features=*/
+        {{features::kFirstPartySets, {}},
+         {net::features::kStorageAccessAPI,
+          {
+              {
+                  "storage_access_api_auto_grant_in_fps",
+                  "true",
+              },
+              {
+                  "storage_access_api_auto_deny_outside_fps",
+                  "false",
+              },
+          }}},
+        /*disabled_features=*/{});
+  }
+  void SetUp() override {
+    TopLevelStorageAccessPermissionContextTestAPIEnabledTest::SetUp();
+
+    // Create a FPS with https://requester.example.com as the member and
+    // https://embedder.example.com as the primary.
+    first_party_sets_handler_.SetGlobalSets(net::GlobalFirstPartySets(
+        base::Version("1.2.3"),
+        /*entries=*/
+        {{net::SchemefulSite(GetRequesterURL()),
+          {net::FirstPartySetEntry(net::SchemefulSite(GetTopLevelURL()),
+                                   net::SiteType::kAssociated, 0)}}},
+        /*aliases=*/{}));
+  }
+
+ private:
+  base::test::ScopedFeatureList features_;
+  first_party_sets::ScopedMockFirstPartySetsHandler first_party_sets_handler_;
+};
+
+TEST_F(TopLevelStorageAccessPermissionContextAPIWithFirstPartySetsTest,
+       ImplicitGrant_AutograntedWithinFPS) {
+  TopLevelStorageAccessPermissionContext permission_context(profile());
+  permissions::PermissionRequestID fake_id = CreateFakeID();
+
+  HostContentSettingsMap* settings_map =
+      HostContentSettingsMapFactory::GetForProfile(profile());
+  DCHECK(settings_map);
+
+  // Check no `SessionModel::NonRestorableUserSession` setting exists yet.
+  ContentSettingsForOneType non_restorable_grants;
+  settings_map->GetSettingsForOneType(
+      ContentSettingsType::TOP_LEVEL_STORAGE_ACCESS, &non_restorable_grants,
+      content_settings::SessionModel::NonRestorableUserSession);
+  EXPECT_EQ(0u, non_restorable_grants.size());
+
+  base::test::TestFuture<ContentSetting> future;
+  permission_context.DecidePermissionForTesting(
+      fake_id, GetRequesterURL(), GetTopLevelURL(),
+      /*user_gesture=*/true, future.GetCallback());
+
+  EXPECT_EQ(CONTENT_SETTING_ALLOW, future.Get());
+  EXPECT_EQ(histogram_tester().GetBucketCount(
+                kRequestOutcomeHistogram,
+                CookieRequestOutcome::kGrantedByFirstPartySet),
+            1);
+  histogram_tester().ExpectTotalCount(kGrantIsImplicitHistogram, 1);
+  histogram_tester().ExpectBucketCount(kGrantIsImplicitHistogram,
+                                       /*sample=*/true, 1);
+
+  // Check the `SessionModel::NonRestorableUserSession` settings granted by FPS.
+  settings_map->GetSettingsForOneType(
+      ContentSettingsType::TOP_LEVEL_STORAGE_ACCESS, &non_restorable_grants,
+      content_settings::SessionModel::NonRestorableUserSession);
+  EXPECT_EQ(1u, non_restorable_grants.size());
+}
diff --git a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java
index db364489..dcdc7f3 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java
+++ b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java
@@ -15,13 +15,10 @@
 import androidx.annotation.Px;
 import androidx.recyclerview.widget.RecyclerView;
 
-import org.chromium.base.Callback;
 import org.chromium.chrome.browser.touch_to_fill.TouchToFillProperties.ItemType;
 import org.chromium.chrome.browser.touch_to_fill.common.ItemDividerBase;
 import org.chromium.chrome.browser.touch_to_fill.common.TouchToFillViewBase;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
-import org.chromium.components.browser_ui.bottomsheet.BottomSheetObserver;
-import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver;
 
 /**
  * This class is responsible for rendering the bottom sheet which displays the touch to fill
@@ -31,7 +28,6 @@
 class TouchToFillView extends TouchToFillViewBase {
     private final BottomSheetController mBottomSheetController;
     private final RecyclerView mSheetItemListView;
-    private Callback<Integer> mDismissHandler;
 
     private static class HorizontalDividerItemDecoration extends ItemDividerBase {
         HorizontalDividerItemDecoration(int horizontalMargin, Context context) {
@@ -68,25 +64,6 @@
         }
     }
 
-    private final BottomSheetObserver mBottomSheetObserver = new EmptyBottomSheetObserver() {
-        @Override
-        public void onSheetClosed(@BottomSheetController.StateChangeReason int reason) {
-            super.onSheetClosed(reason);
-            assert mDismissHandler != null;
-            mDismissHandler.onResult(reason);
-            mBottomSheetController.removeObserver(mBottomSheetObserver);
-        }
-
-        @Override
-        public void onSheetStateChanged(int newState, int reason) {
-            super.onSheetStateChanged(newState, reason);
-            if (newState != BottomSheetController.SheetState.HIDDEN) return;
-            // This is a fail-safe for cases where onSheetClosed isn't triggered.
-            mDismissHandler.onResult(BottomSheetController.StateChangeReason.NONE);
-            mBottomSheetController.removeObserver(mBottomSheetObserver);
-        }
-    };
-
     /**
      * Constructs a TouchToFillView which creates, modifies, and shows the bottom sheet.
      *
@@ -108,35 +85,6 @@
         }
     }
 
-    /**
-     * Sets a new listener that reacts to events like item selection or dismissal.
-     *
-     * @param dismissHandler A {@link Callback<Integer>}.
-     */
-    void setDismissHandler(Callback<Integer> dismissHandler) {
-        mDismissHandler = dismissHandler;
-    }
-
-    /**
-     * If set to true, requests to show the bottom sheet. Otherwise, requests to hide the sheet.
-     *
-     * @param isVisible A boolean describing whether to show or hide the sheet.
-     * @return True if the request was successful, false otherwise.
-     */
-    boolean setVisible(boolean isVisible) {
-        if (isVisible) {
-            remeasure(false);
-            mBottomSheetController.addObserver(mBottomSheetObserver);
-            if (!mBottomSheetController.requestShowContent(this, true)) {
-                mBottomSheetController.removeObserver(mBottomSheetObserver);
-                return false;
-            }
-        } else {
-            mBottomSheetController.hideContent(this, true);
-        }
-        return true;
-    }
-
     void setOnManagePasswordClick(Runnable runnable) {
         getContentView()
                 .findViewById(R.id.touch_to_fill_sheet_manage_passwords)
@@ -148,12 +96,6 @@
         view.setText(buttonText);
     }
 
-    // TODO(crbug.com/1247698): Move this method to the base class.
-    @Override
-    public void destroy() {
-        mBottomSheetController.removeObserver(mBottomSheetObserver);
-    }
-
     @Override
     public int getVerticalScrollOffset() {
         return mSheetItemListView.computeVerticalScrollOffset();
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd
index 3a00bbdea..d5eb346 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd
@@ -200,7 +200,7 @@
         List of credentials to be filled on touch opened at full height.
       </message>
       <message name="IDS_TOUCH_TO_FILL_SHEET_CLOSED" desc="Accessibility string read when the Touch To Fill bottom sheet showing a list of the user's credentials is closed.">
-        List of credentials to be filled on touch is closed.
+        List of credentials is closed.
       </message>
       <message name="IDS_MANAGE_PASSWORDS" desc="Title of the button at the end of a touch to fill sheet that will open the password preferences when tapped.">
         Manage passwords
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1 b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1
index f21889cc1..701ecfb7 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1
@@ -1 +1 @@
-5c2d04c928c95b168528a69cc3f53e433c66eb7d
\ No newline at end of file
+5398e19aefd97fe1274fd9eb7ea89bc0639d55f2
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillRenderTest.java b/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillRenderTest.java
index a91a49a..ed0e4da9 100644
--- a/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillRenderTest.java
+++ b/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillRenderTest.java
@@ -101,7 +101,7 @@
     @Rule
     public final ChromeRenderTestRule mRenderTestRule =
             ChromeRenderTestRule.Builder.withPublicCorpus()
-                    .setRevision(1)
+                    .setRevision(2)
                     .setBugComponent(Component.UI_BROWSER_AUTOFILL)
                     .build();
     @Rule
@@ -306,4 +306,4 @@
                                 .with(SHOW_SUBMIT_BUTTON, true)
                                 .build()));
     }
-}
\ No newline at end of file
+}
diff --git a/chrome/browser/touch_to_fill/common/android/BUILD.gn b/chrome/browser/touch_to_fill/common/android/BUILD.gn
index 5382fdc..2b9fcad 100644
--- a/chrome/browser/touch_to_fill/common/android/BUILD.gn
+++ b/chrome/browser/touch_to_fill/common/android/BUILD.gn
@@ -19,6 +19,7 @@
 android_library("java") {
   deps = [
     ":java_resources",
+    "//base:base_java",
     "//components/browser_ui/bottomsheet/android:java",
     "//third_party/androidx:androidx_annotation_annotation_jvm_java",
     "//third_party/androidx:androidx_appcompat_appcompat_resources_java",
diff --git a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern.xml b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern.xml
index 432a8048..08915ef 100644
--- a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern.xml
+++ b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern.xml
@@ -8,4 +8,6 @@
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:shape="rectangle"
-     app:surfaceElevation="@dimen/default_elevation_1"/>
+     app:surfaceElevation="@dimen/default_elevation_1">
+  <corners android:radius="@dimen/card_rounded_corner_small_radius"/>
+</org.chromium.components.browser_ui.widget.SurfaceColorDrawable>
diff --git a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_all.xml b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_all.xml
index 8662683..f2b6b9e4a 100644
--- a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_all.xml
+++ b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_all.xml
@@ -9,8 +9,5 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:shape="rectangle"
     app:surfaceElevation="@dimen/default_elevation_1">
-  <corners android:topLeftRadius="@dimen/card_rounded_corner_radius"
-      android:topRightRadius="@dimen/card_rounded_corner_radius"
-      android:bottomLeftRadius="@dimen/card_rounded_corner_radius"
-      android:bottomRightRadius="@dimen/card_rounded_corner_radius"/>
+  <corners android:radius="@dimen/card_rounded_corner_radius"/>
 </org.chromium.components.browser_ui.widget.SurfaceColorDrawable>
diff --git a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_down.xml b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_down.xml
index fedfabf..2a167e7 100644
--- a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_down.xml
+++ b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_down.xml
@@ -10,5 +10,7 @@
     android:shape="rectangle"
     app:surfaceElevation="@dimen/default_elevation_1">
     <corners android:bottomLeftRadius="@dimen/card_rounded_corner_radius"
-    android:bottomRightRadius="@dimen/card_rounded_corner_radius"/>
+    android:bottomRightRadius="@dimen/card_rounded_corner_radius"
+    android:topLeftRadius="@dimen/card_rounded_corner_small_radius"
+    android:topRightRadius="@dimen/card_rounded_corner_small_radius"/>
 </org.chromium.components.browser_ui.widget.SurfaceColorDrawable>
diff --git a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_up.xml b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_up.xml
index 20b9356c..a6cf381 100644
--- a/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_up.xml
+++ b/chrome/browser/touch_to_fill/common/android/java/res/drawable/touch_to_fill_credential_background_modern_rounded_up.xml
@@ -10,5 +10,7 @@
     android:shape="rectangle"
     app:surfaceElevation="@dimen/default_elevation_1">
     <corners android:topLeftRadius="@dimen/card_rounded_corner_radius"
-    android:topRightRadius="@dimen/card_rounded_corner_radius"/>
+    android:topRightRadius="@dimen/card_rounded_corner_radius"
+    android:bottomLeftRadius="@dimen/card_rounded_corner_small_radius"
+    android:bottomRightRadius="@dimen/card_rounded_corner_small_radius"/>
 </org.chromium.components.browser_ui.widget.SurfaceColorDrawable>
diff --git a/chrome/browser/touch_to_fill/common/android/java/src/org/chromium/chrome/browser/touch_to_fill/common/TouchToFillViewBase.java b/chrome/browser/touch_to_fill/common/android/java/src/org/chromium/chrome/browser/touch_to_fill/common/TouchToFillViewBase.java
index f230db9..551ac993 100644
--- a/chrome/browser/touch_to_fill/common/android/java/src/org/chromium/chrome/browser/touch_to_fill/common/TouchToFillViewBase.java
+++ b/chrome/browser/touch_to_fill/common/android/java/src/org/chromium/chrome/browser/touch_to_fill/common/TouchToFillViewBase.java
@@ -15,8 +15,11 @@
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import org.chromium.base.Callback;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
+import org.chromium.components.browser_ui.bottomsheet.BottomSheetObserver;
+import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver;
 import org.chromium.ui.base.LocalizationUtils;
 import org.chromium.ui.base.ViewUtils;
 
@@ -29,6 +32,26 @@
     private final BottomSheetController mBottomSheetController;
     private final RelativeLayout mContentView;
     private final RecyclerView mSheetItemListView;
+    private Callback<Integer> mDismissHandler;
+
+    private final BottomSheetObserver mBottomSheetObserver = new EmptyBottomSheetObserver() {
+        @Override
+        public void onSheetClosed(@BottomSheetController.StateChangeReason int reason) {
+            super.onSheetClosed(reason);
+            assert mDismissHandler != null;
+            mDismissHandler.onResult(reason);
+            mBottomSheetController.removeObserver(mBottomSheetObserver);
+        }
+
+        @Override
+        public void onSheetStateChanged(int newState, int reason) {
+            super.onSheetStateChanged(newState, reason);
+            if (newState != BottomSheetController.SheetState.HIDDEN) return;
+            // This is a fail-safe for cases where onSheetClosed isn't triggered.
+            mDismissHandler.onResult(BottomSheetController.StateChangeReason.NONE);
+            mBottomSheetController.removeObserver(mBottomSheetObserver);
+        }
+    };
 
     /**
      * Used to access the handlebar to measure it.
@@ -96,6 +119,35 @@
     }
 
     /**
+     * If set to true, requests to show the bottom sheet. Otherwise, requests to hide the sheet.
+     *
+     * @param isVisible A boolean describing whether to show or hide the sheet.
+     * @return True if the request was successful, false otherwise.
+     */
+    public boolean setVisible(boolean isVisible) {
+        if (isVisible) {
+            remeasure(false);
+            mBottomSheetController.addObserver(mBottomSheetObserver);
+            if (!mBottomSheetController.requestShowContent(this, true)) {
+                mBottomSheetController.removeObserver(mBottomSheetObserver);
+                return false;
+            }
+        } else {
+            mBottomSheetController.hideContent(this, true);
+        }
+        return true;
+    }
+
+    /**
+     * Sets a new listener that reacts to events like item selection or dismissal.
+     *
+     * @param dismissHandler A {@link Callback<Integer>}.
+     */
+    public void setDismissHandler(Callback<Integer> dismissHandler) {
+        mDismissHandler = dismissHandler;
+    }
+
+    /**
      * Returns the height of the full state. Must show the footer items permanently. For up to three
      * suggestions, the sheet usually cannot fill the screen.
      *
@@ -267,4 +319,9 @@
     public boolean hideOnScroll() {
         return false;
     }
+
+    @Override
+    public void destroy() {
+        mBottomSheetController.removeObserver(mBottomSheetObserver);
+    }
 }
diff --git a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardRenderTest.java b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardRenderTest.java
index 6702e7dfe..ea361f35 100644
--- a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardRenderTest.java
+++ b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardRenderTest.java
@@ -10,7 +10,6 @@
 import static org.chromium.content_public.browser.test.util.TestThreadUtils.runOnUiThreadBlocking;
 import static org.chromium.ui.base.LocalizationUtils.setRtlForTesting;
 
-import android.os.Build.VERSION_CODES;
 import android.view.View;
 
 import androidx.test.filters.MediumTest;
@@ -30,7 +29,6 @@
 import org.chromium.base.test.params.ParameterizedRunner;
 import org.chromium.base.test.util.Batch;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.Feature;
 import org.chromium.chrome.browser.autofill.AutofillTestHelper;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
@@ -53,7 +51,6 @@
 @RunWith(ParameterizedRunner.class)
 @Batch(Batch.PER_CLASS)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
-@DisableIf.Build(sdk_is_less_than = VERSION_CODES.O_MR1, message = "https://crbug.com/1404413")
 public class TouchToFillCreditCardRenderTest {
     @ParameterAnnotations.ClassParameter
     private static List<ParameterSet> sClassParams =
@@ -69,7 +66,7 @@
     @Rule
     public final ChromeRenderTestRule mRenderTestRule =
             ChromeRenderTestRule.Builder.withPublicCorpus()
-                    .setRevision(1)
+                    .setRevision(2)
                     .setBugComponent(Component.UI_BROWSER_AUTOFILL)
                     .build();
 
diff --git a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardView.java b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardView.java
index cb86c65..3e679e4 100644
--- a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardView.java
+++ b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardView.java
@@ -12,13 +12,10 @@
 import androidx.annotation.Px;
 import androidx.recyclerview.widget.RecyclerView;
 
-import org.chromium.base.Callback;
 import org.chromium.chrome.browser.touch_to_fill.common.ItemDividerBase;
 import org.chromium.chrome.browser.touch_to_fill.common.TouchToFillViewBase;
 import org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardProperties.ItemType;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
-import org.chromium.components.browser_ui.bottomsheet.BottomSheetObserver;
-import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver;
 
 /**
  * This class is responsible for rendering the bottom sheet which displays the
@@ -28,7 +25,6 @@
 class TouchToFillCreditCardView extends TouchToFillViewBase {
     private final BottomSheetController mBottomSheetController;
     private final RecyclerView mSheetItemListView;
-    private Callback<Integer> mDismissHandler;
     private Runnable mScanCreditCardHandler;
 
     private static class HorizontalDividerItemDecoration extends ItemDividerBase {
@@ -62,26 +58,6 @@
         }
     }
 
-    // TODO(crbug.com/1247698): Reuse this logic between different sheets.
-    private final BottomSheetObserver mBottomSheetObserver = new EmptyBottomSheetObserver() {
-        @Override
-        public void onSheetClosed(@BottomSheetController.StateChangeReason int reason) {
-            super.onSheetClosed(reason);
-            assert mDismissHandler != null;
-            mDismissHandler.onResult(reason);
-            mBottomSheetController.removeObserver(mBottomSheetObserver);
-        }
-
-        @Override
-        public void onSheetStateChanged(int newState, int reason) {
-            super.onSheetStateChanged(newState, reason);
-            if (newState != BottomSheetController.SheetState.HIDDEN) return;
-            // This is a fail-safe for cases where onSheetClosed isn't triggered.
-            mDismissHandler.onResult(BottomSheetController.StateChangeReason.NONE);
-            mBottomSheetController.removeObserver(mBottomSheetObserver);
-        }
-    };
-
     /**
      * Constructs a TouchToFillCreditCardView which creates, modifies, and shows the bottom sheet.
      *
@@ -112,15 +88,6 @@
         }
     }
 
-    /**
-     * Sets a new listener that reacts to a dismisal event.
-     *
-     * @param dismissHandler A {@link Callback<Integer>}.
-     */
-    void setDismissHandler(Callback<Integer> dismissHandler) {
-        mDismissHandler = dismissHandler;
-    }
-
     void setScanCreditCardCallback(Runnable callback) {
         mScanCreditCardHandler = callback;
     }
@@ -131,35 +98,6 @@
         managePaymentMethodsButton.setOnClickListener(unused -> callback.run());
     }
 
-    /**
-     * If set to true, requests to show the bottom sheet. Otherwise, requests to hide the sheet.
-     *
-     * @param isVisible A boolean describing whether to show or hide the sheet.
-     * @return True if the request was successful, false otherwise.
-     */
-    boolean setVisible(boolean isVisible) {
-        // TODO(crbug.com/1247698): Move this method to the base class.
-        if (isVisible) {
-            remeasure(false);
-        } else {
-            mBottomSheetController.hideContent(this, true);
-            return true;
-        }
-
-        mBottomSheetController.addObserver(mBottomSheetObserver);
-        if (!mBottomSheetController.requestShowContent(this, true)) {
-            mBottomSheetController.removeObserver(mBottomSheetObserver);
-            return false;
-        }
-        return true;
-    }
-
-    // TODO(crbug.com/1247698): Move this method to the base class.
-    @Override
-    public void destroy() {
-        mBottomSheetController.removeObserver(mBottomSheetObserver);
-    }
-
     @Override
     public int getVerticalScrollOffset() {
         return mSheetItemListView.computeVerticalScrollOffset();
@@ -167,26 +105,22 @@
 
     @Override
     public int getSheetContentDescriptionStringId() {
-        // TODO(crbug.com/1247698): Introduce and use proper payments string.
-        return android.R.string.ok;
+        return R.string.autofill_credit_card_bottom_sheet_content_description;
     }
 
     @Override
     public int getSheetHalfHeightAccessibilityStringId() {
-        // TODO(crbug.com/1247698): Introduce and use proper payments string.
-        return android.R.string.ok;
+        return R.string.autofill_credit_card_bottom_sheet_half_height;
     }
 
     @Override
     public int getSheetFullHeightAccessibilityStringId() {
-        // TODO(crbug.com/1247698): Introduce and use proper payments string.
-        return android.R.string.ok;
+        return R.string.autofill_credit_card_bottom_sheet_full_height;
     }
 
     @Override
     public int getSheetClosedAccessibilityStringId() {
-        // TODO(crbug.com/1247698): Introduce and use proper payments string.
-        return android.R.string.ok;
+        return R.string.autofill_credit_card_bottom_sheet_closed;
     }
 
     @Override
diff --git a/chrome/browser/tracing/chrome_tracing_delegate.cc b/chrome/browser/tracing/chrome_tracing_delegate.cc
index 7e6f6d2..213cacc 100644
--- a/chrome/browser/tracing/chrome_tracing_delegate.cc
+++ b/chrome/browser/tracing/chrome_tracing_delegate.cc
@@ -16,7 +16,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index fba1fe89..6d48b50 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -455,6 +455,7 @@
     "//components/client_hints/browser",
     "//components/commerce/content/browser",
     "//components/commerce/core:feature_list",
+    "//components/commerce/core:shopping_service",
     "//components/consent_auditor/",
     "//components/content_settings/browser",
     "//components/content_settings/common:mojom",
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.h b/chrome/browser/ui/android/passwords/manual_filling_view_android.h
index 8d814eb..7fb6616 100644
--- a/chrome/browser/ui/android/passwords/manual_filling_view_android.h
+++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.h
@@ -10,6 +10,7 @@
 #include "base/android/scoped_java_ref.h"
 #include "base/functional/callback_forward.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/autofill/manual_filling_view_interface.h"
 #include "components/autofill/core/browser/ui/accessory_sheet_data.h"
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index f32028b7..a39a62e 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1110,56 +1110,23 @@
       </message>
 
       <!-- Privacy Sandbox v4 - Topics Page -->
-      <message name="IDS_SETTINGS_TOPICS_PAGE_TITLE" translateable="false" desc="Title for the Topics preferences page.">
-        Topics title
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_TOGGLE_LABEL" translateable="false" desc="Title for the Topics toggle.">
-        Nunc gravida condimentum consectetur
-      </message>
-      <!-- TODO(http://b/254412601): Format link.-->
-      <message name="IDS_SETTINGS_TOPICS_PAGE_TOGGLE_SUB_LABEL" translateable="false" desc="Description for the Topics toggle.">
-        Vivamus nibh turpis, varius quis nisi vel, porta laoreet tellus.
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_HEADING" translateable="false" desc="Section title for the current Topics list.">
-        Mauris at lectus
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION" translateable="false" desc="Section description for the current Topics list.">
-        Nulla tincidunt iaculis nulla, sit amet viverra massa luctus nec. Integer eget pellentesque magna, et venenatis lorem. Integer a porta elit, eget bibendum neque.  <ph name="BEGIN_LINK">&lt;link&gt;</ph>Learn more<ph name="END_LINK">&lt;/link&gt;</ph>
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_DISABLED" translateable="false" desc="Description which appears when Topics are disabled.">
-        Sed porta viverra lacus ut euismod. Integer a cursus metus, ac ultricies libero.
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_EMPTY" translateable="false" desc="Description which appears when the Topics list is empty.">
-        Curabitur sagittis sapien ut turpis interdum, vitae porttitor sem pretium. Vestibulum sem mauris, ultrices ac massa sit amet, sodales aliquet est.
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_HEADING" translateable="false" desc="Title for the blocked Topics preference.">
-        Integer faucibus metus
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_DESCRIPTION" translateable="false" desc="">
-        Donec fringilla justo vel ligula finibus, ut rutrum lectus vestibulum. Suspendisse vestibulum lorem lacinia nulla consequat auctor.
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_DESCRIPTION_EMPTY" translateable="false" desc="">
-        Diam maecenas sed
-      </message>
+      <!-- Where possible, these strings have been unified on Desktop & Android in privacy_sandox_strings.grdp. The strings here either only appear on one platform, or have platform specific requirements, e.g. the format of placeholders, and so cannot be unified. For the latter case, they have corresponding _CANONICAL representations used when consent is recorded on either platform, and so they must stay in sync -->
       <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_SUB_PAGE_TITLE" translateable="false" desc="">
         Integer faucibus metus
       </message>
       <!-- TODO(http://b/254412601): Format links.-->
+      <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION" translateable="false" desc="Section description for the current Topics list.">
+        Nulla tincidunt iaculis nulla, sit amet viverra massa luctus nec. Integer eget pellentesque magna, et venenatis lorem. Integer a porta elit, eget bibendum neque.  <ph name="BEGIN_LINK">&lt;link&gt;</ph>Learn more<ph name="END_LINK">&lt;/link&gt;</ph>
+      </message>
+      <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_DISABLED" translateable="false" desc="Section description for the current Topics list when Topics is disabled in the Topics preferences page.">
+        Sed porta viverra lacus ut euismod. Integer a cursus metus, ac ultricies libero. |Insert learn more link here|.
+      </message>
+      <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_EMPTY" translateable="false" desc="Section description for the current Topics list when the Topics list is empty in the Topics preferences page.">
+        Curabitur sagittis sapien ut turpis interdum, vitae porttitor sem pretium. Vestibulum sem mauris, ultrices ac massa sit amet, sodales aliquet est. |Insert learn more link here|
+      </message>
       <message name="IDS_SETTINGS_TOPICS_PAGE_FOOTER" translateable="false" desc="Footer for the Topics preference page.">
         Fledge footer. Quisque eu auctor purus, id tempus nulla. Pellentesque porta orci purus. Donec dictum, <ph name="BEGIN_LINK_1">&lt;link1&gt;</ph>fledge settings<ph name="END_LINK_1">&lt;/link1&gt;</ph>, <ph name="BEGIN_LINK_2">&lt;link2&gt;</ph>cookie settings<ph name="END_LINK_2">&lt;/link2&gt;</ph>, sit amet molestie quam arcu id urna. Donec vulputate dui ut lorem egestas, ac sollicitudin metus fermentum.
       </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_HEADING" translateable="false" desc="">
-        Vivamus nibh turpis
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_1" translateable="false" desc="">
-        Vivamus nibh turpis, varius quis nisi vel, porta laoreet tellus. Mauris porta imperdiet venenatis
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_2" translateable="false" desc="">
-        Vivamus nibh turpis, varius quis nisi vel, porta laoreet tellus. Mauris porta imperdiet venenatis
-      </message>
-      <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_3" translateable="false" desc="">
-        Vivamus nibh turpis, varius quis nisi vel, porta laoreet tellus. Mauris porta imperdiet venenatis
-      </message>
 
       <!-- Privacy Sandbox v4 - Fledge Page -->
       <message name="IDS_SETTINGS_FLEDGE_PAGE_TITLE" translateable="false" desc="Title for the Fledge preferences page.">
diff --git a/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc b/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc
index 6e39522..08c1559 100644
--- a/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc
+++ b/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc
@@ -16,6 +16,7 @@
 #include "base/files/file_path.h"
 #include "base/files/safe_base_name.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/intent_util.h"
diff --git a/chrome/browser/ui/ash/assistant/assistant_setup.h b/chrome/browser/ui/ash/assistant/assistant_setup.h
index 6e760bfd..335de1f 100644
--- a/chrome/browser/ui/ash/assistant/assistant_setup.h
+++ b/chrome/browser/ui/ash/assistant/assistant_setup.h
@@ -13,7 +13,6 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.h"
 #include "chromeos/ash/services/assistant/public/cpp/assistant_service.h"
-#include "mojo/public/cpp/bindings/remote.h"
 
 // AssistantSetup is the class responsible for start Assistant OptIn flow.
 class AssistantSetup : public ash::AssistantSetup,
diff --git a/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.h b/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.h
index 30ce4c8b..031f0bc 100644
--- a/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.h
+++ b/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.h
@@ -10,7 +10,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/cpp/data_decoder.h"
 
 namespace network {
diff --git a/chrome/browser/ui/ash/capture_mode/recording_overlay_view_impl.cc b/chrome/browser/ui/ash/capture_mode/recording_overlay_view_impl.cc
index 77817d5..4788dda 100644
--- a/chrome/browser/ui/ash/capture_mode/recording_overlay_view_impl.cc
+++ b/chrome/browser/ui/ash/capture_mode/recording_overlay_view_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/functional/bind.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/projector/projector_client_impl.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
diff --git a/chrome/browser/ui/ash/desks/desks_client.cc b/chrome/browser/ui/ash/desks/desks_client.cc
index 19470a0..f26b2a6 100644
--- a/chrome/browser/ui/ash/desks/desks_client.cc
+++ b/chrome/browser/ui/ash/desks/desks_client.cc
@@ -28,6 +28,7 @@
 #include "base/guid.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/scoped_observation.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "base/values.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
diff --git a/chrome/browser/ui/ash/desks/desks_templates_app_launch_handler.cc b/chrome/browser/ui/ash/desks/desks_templates_app_launch_handler.cc
index 46ed2c1..ca6f3cd7 100644
--- a/chrome/browser/ui/ash/desks/desks_templates_app_launch_handler.cc
+++ b/chrome/browser/ui/ash/desks/desks_templates_app_launch_handler.cc
@@ -11,7 +11,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
 #include "base/numerics/safe_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/ash/app_restore/app_launch_handler.h"
diff --git a/chrome/browser/ui/ash/feature_discovery_duration_reporter_browsertest.cc b/chrome/browser/ui/ash/feature_discovery_duration_reporter_browsertest.cc
index c1898e3..bf2929fb 100644
--- a/chrome/browser/ui/ash/feature_discovery_duration_reporter_browsertest.cc
+++ b/chrome/browser/ui/ash/feature_discovery_duration_reporter_browsertest.cc
@@ -5,6 +5,7 @@
 #include "ash/public/cpp/feature_discovery_duration_reporter.h"
 #include "ash/public/cpp/feature_discovery_metric_util.h"
 #include "base/json/values_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/login/login_manager_test.h"
 #include "chrome/browser/ash/login/test/login_manager_mixin.h"
 #include "chrome/browser/ash/login/ui/user_adding_screen.h"
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.h b/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.h
index 637c965..6206094c 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.h
+++ b/chrome/browser/ui/ash/holding_space/holding_space_file_system_delegate.h
@@ -13,6 +13,7 @@
 #include "ash/components/arc/session/connection_observer.h"
 #include "base/functional/callback.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/file_manager/volume_manager.h"
 #include "chrome/browser/ash/file_manager/volume_manager_observer.h"
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
index 6ae16cf..83c03749 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_browsertest.cc
@@ -26,7 +26,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_path_override.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/unguessable_token.h"
 #include "chrome/browser/ash/crosapi/crosapi_ash.h"
 #include "chrome/browser/ash/crosapi/crosapi_manager.h"
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc b/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
index fa189b2..71b8d35 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_ui_browsertest.cc
@@ -30,6 +30,7 @@
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/scoped_locale.h"
diff --git a/chrome/browser/ui/ash/projector/pending_screencast_manager.h b/chrome/browser/ui/ash/projector/pending_screencast_manager.h
index 9248d9d..4559b94 100644
--- a/chrome/browser/ui/ash/projector/pending_screencast_manager.h
+++ b/chrome/browser/ui/ash/projector/pending_screencast_manager.h
@@ -14,6 +14,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/ash/extensions/file_manager/scoped_suppress_drive_notifications_for_path.h"
 #include "chrome/browser/ui/ash/projector/projector_drivefs_provider.h"
diff --git a/chrome/browser/ui/ash/projector/screencast_manager.cc b/chrome/browser/ui/ash/projector/screencast_manager.cc
index 86b0d29..3aa2cd96 100644
--- a/chrome/browser/ui/ash/projector/screencast_manager.cc
+++ b/chrome/browser/ui/ash/projector/screencast_manager.cc
@@ -18,6 +18,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/browser/ash/drive/drive_integration_service.h"
 #include "chrome/browser/ash/extensions/file_manager/scoped_suppress_drive_notifications_for_path.h"
diff --git a/chrome/browser/ui/ash/shelf/chrome_shelf_controller.h b/chrome/browser/ui/ash/shelf/chrome_shelf_controller.h
index bdcdef0..6718db0 100644
--- a/chrome/browser/ui/ash/shelf/chrome_shelf_controller.h
+++ b/chrome/browser/ui/ash/shelf/chrome_shelf_controller.h
@@ -17,6 +17,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/ash/app_list/app_list_syncable_service.h"
 #include "chrome/browser/ui/app_icon_loader_delegate.h"
 #include "chrome/browser/ui/ash/shelf/settings_window_observer.h"
diff --git a/chrome/browser/ui/ash/shelf/chrome_shelf_prefs.h b/chrome/browser/ui/ash/shelf/chrome_shelf_prefs.h
index 502743b1..0457221 100644
--- a/chrome/browser/ui/ash/shelf/chrome_shelf_prefs.h
+++ b/chrome/browser/ui/ash/shelf/chrome_shelf_prefs.h
@@ -74,8 +74,7 @@
                       const std::vector<ash::ShelfID>& shelf_ids_after);
 
   // Makes GetPinnedAppsFromSync() return an empty list. Avoids test failures
-  // with SyncSettingsCategorization due to an untitled Play Store icon in the
-  // shelf.
+  // due to an untitled Play Store icon in the shelf.
   // https://crbug.com/1085597
   static void SkipPinnedAppsFromSyncForTest();
 
diff --git a/chrome/browser/ui/ash/vpn_list_forwarder.cc b/chrome/browser/ui/ash/vpn_list_forwarder.cc
index 1d2db8b..c9c24ec15 100644
--- a/chrome/browser/ui/ash/vpn_list_forwarder.cc
+++ b/chrome/browser/ui/ash/vpn_list_forwarder.cc
@@ -8,7 +8,6 @@
 #include "base/check_op.h"
 #include "base/functional/bind.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/crosapi/crosapi_ash.h"
 #include "chrome/browser/ash/crosapi/crosapi_manager.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
diff --git a/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc b/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc
index 26a98c4..a319996 100644
--- a/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc
+++ b/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc
@@ -30,7 +30,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/unguessable_token.h"
 #include "base/values.h"
 #include "chrome/browser/apps/app_service/app_launch_params.h"
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc
index d044ce8..0046d9b 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -24,8 +24,6 @@
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/autofill/strike_database_factory.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher.h"
-#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.h"
 #include "chrome/browser/fast_checkout/fast_checkout_features.h"
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/password_manager/password_manager_settings_service_factory.h"
@@ -66,8 +64,6 @@
 #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h"
 #include "components/autofill/core/browser/ui/popup_item_ids.h"
 #include "components/autofill/core/common/autofill_features.h"
-#include "components/autofill/core/common/autofill_internals/log_message.h"
-#include "components/autofill/core/common/autofill_internals/logging_scope.h"
 #include "components/autofill/core/common/autofill_payments_features.h"
 #include "components/autofill/core/common/autofill_prefs.h"
 #include "components/autofill/core/common/autofill_switches.h"
@@ -117,7 +113,6 @@
 #include "components/autofill/core/browser/payments/autofill_save_card_infobar_mobile.h"
 #include "components/autofill/core/browser/ui/payments/card_expiration_date_fix_flow_view.h"
 #include "components/autofill/core/browser/ui/payments/card_name_fix_flow_view.h"
-#include "components/autofill/core/common/logging/log_macros.h"
 #include "components/infobars/content/content_infobar_manager.h"
 #include "components/infobars/core/infobar.h"
 #include "components/messages/android/messages_feature.h"
@@ -693,111 +688,39 @@
                                               std::move(callback));
 }
 
-bool ChromeAutofillClient::IsFastCheckoutSupported() {
+bool ChromeAutofillClient::TryToShowFastCheckout(const FormData& form,
+                                                 const FormFieldData& field,
+                                                 AutofillDriver* driver) {
 #if BUILDFLAG(IS_ANDROID)
-  if (!base::FeatureList::IsEnabled(::features::kFastCheckout)) {
-    LOG_AF(log_manager_.get())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because FastCheckout flag is disabled.";
-    return false;
-  }
-
-  // Not supported if MakeSearchesAndBrowsingBetter is not enabled. This has
-  // been done to allow for consequent hash dances during consent-less flows.
-  if (!GetPrefs()->GetBoolean(
-          unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled)) {
-    LOG_AF(log_manager_.get())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because the client is not MSBB.";
-    return false;
-  }
-
-  if (!GetPersonalDataManager()->IsAutofillProfileEnabled()) {
-    LOG_AF(log_manager_.get())
-        << LoggingScope::kFastCheckout << autofill::LogMessage::kFastCheckout
-        << "not triggered because Autofill profile is disabled.";
-    return false;
-  }
-
-  if (!GetPersonalDataManager()->IsAutofillCreditCardEnabled()) {
-    LOG_AF(log_manager_.get())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "if disabled, not triggered Autofill credit card is disabled.";
-    return false;
-  }
-
-  // Not supported on CCTs.
-  auto* tab_android = TabAndroid::FromWebContents(web_contents());
-  if (tab_android && tab_android->IsCustomTab()) {
-    LOG_AF(log_manager_.get())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because the tab is CCT.";
-    return false;
-  }
-
-  return true;
-#else
-  return false;
-#endif
-}
-
-bool ChromeAutofillClient::IsFastCheckoutTriggerForm(
-    const FormData& form,
-    const FormFieldData& field) {
-#if BUILDFLAG(IS_ANDROID)
-  FastCheckoutCapabilitiesFetcher* fetcher =
-      FastCheckoutCapabilitiesFetcherFactory::GetForBrowserContext(
-          GetProfile());
-  if (!fetcher) {
-    return false;
-  }
-  // TODO(crbug.com/1356498): Stop calculating the signature once the form
-  // signature has been moved to `form_data`.
-  // Check browser form's signature and renderer form's signature.
-  FormSignature form_signature = CalculateFormSignature(form);
-  bool is_trigger_form =
-      fetcher->IsTriggerFormSupported(form.main_frame_origin, form_signature) ||
-      fetcher->IsTriggerFormSupported(form.main_frame_origin,
-                                      field.host_form_signature);
-  if (!is_trigger_form) {
-    LOG_AF(log_manager_.get())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because there is no Fast Checkout support for form "
-           "signatures {"
-        << form_signature.value() << ", " << field.host_form_signature.value()
-        << "} on origin " << form.main_frame_origin.Serialize() << ".";
-  }
-  return is_trigger_form;
-#else
-  NOTREACHED();
-  return false;
-#endif
-}
-
-bool ChromeAutofillClient::ShowFastCheckout(
-    base::WeakPtr<FastCheckoutDelegate> delegate) {
-#if BUILDFLAG(IS_ANDROID)
-  if (delegate->IsShowingFastCheckoutUI()) {
-    LOG_AF(log_manager_.get())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because Fast Checkout UI is already showing.";
-    return false;
-  }
-
   const GURL& url = web_contents()->GetLastCommittedURL();
   return FastCheckoutClient::GetOrCreateForWebContents(web_contents())
-      ->Start(delegate, url);
+      ->TryToStart(url, form, field, driver);
 #else
-  NOTREACHED();
   return false;
 #endif
 }
 
-void ChromeAutofillClient::HideFastCheckout() {
+void ChromeAutofillClient::HideFastCheckout(bool allow_further_runs) {
 #if BUILDFLAG(IS_ANDROID)
-  FastCheckoutClient::GetOrCreateForWebContents(web_contents())->Stop();
+  FastCheckoutClient::GetOrCreateForWebContents(web_contents())
+      ->Stop(/*allow_further_runs=*/allow_further_runs);
+#endif
+}
+
+bool ChromeAutofillClient::IsFastCheckoutSupported() {
+#if BUILDFLAG(IS_ANDROID)
+  return base::FeatureList::IsEnabled(::features::kFastCheckout);
 #else
-  NOTREACHED();
+  return false;
+#endif
+}
+
+bool ChromeAutofillClient::IsShowingFastCheckoutUI() {
+#if BUILDFLAG(IS_ANDROID)
+  return FastCheckoutClient::GetOrCreateForWebContents(web_contents())
+      ->IsShowing();
+#else
+  return false;
 #endif
 }
 
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h
index 58b15b38..578edf2f 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.h
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -179,11 +179,12 @@
       AddressProfileSavePromptCallback callback) override;
   bool HasCreditCardScanFeature() override;
   void ScanCreditCard(CreditCardScanCallback callback) override;
+  bool TryToShowFastCheckout(const FormData& form,
+                             const FormFieldData& field,
+                             AutofillDriver* driver) override;
+  void HideFastCheckout(bool allow_further_runs) override;
   bool IsFastCheckoutSupported() override;
-  bool IsFastCheckoutTriggerForm(const FormData& form,
-                                 const FormFieldData& field) override;
-  bool ShowFastCheckout(base::WeakPtr<FastCheckoutDelegate> delegate) override;
-  void HideFastCheckout() override;
+  bool IsShowingFastCheckoutUI() override;
   bool IsTouchToFillCreditCardSupported() override;
   bool ShowTouchToFillCreditCard(
       base::WeakPtr<TouchToFillDelegate> delegate,
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc b/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc
index ba42076..f2187e0 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client_unittest.cc
@@ -8,19 +8,40 @@
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
+#include "chrome/browser/fast_checkout/fast_checkout_client_impl.h"
 #include "chrome/browser/fast_checkout/fast_checkout_features.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
+#include "components/autofill/core/browser/test_autofill_driver.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/autofill/core/common/form_interactions_flow.h"
 #include "components/prefs/pref_service.h"
 #include "components/unified_consent/pref_names.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::test::ScopedFeatureList;
 
 namespace autofill {
 
+#if BUILDFLAG(IS_ANDROID)
+class MockFastCheckoutClient : public FastCheckoutClientImpl {
+ public:
+  explicit MockFastCheckoutClient(content::WebContents* web_contents)
+      : FastCheckoutClientImpl(web_contents) {}
+  ~MockFastCheckoutClient() override = default;
+
+  MOCK_METHOD(
+      bool,
+      TryToStart,
+      (const GURL&, const FormData&, const FormFieldData&, AutofillDriver*),
+      (override));
+  MOCK_METHOD(void, Stop, (bool reset), (override));
+  MOCK_METHOD(bool, IsRunning, (), (const override));
+  MOCK_METHOD(bool, IsShowing, (), (const override));
+};
+#endif
+
 class ChromeAutofillClientTest : public ChromeRenderViewHostTestHarness {
  public:
   void SetUp() override {
@@ -30,6 +51,15 @@
     ChromeAutofillClient::CreateForWebContents(web_contents());
     chrome_autofill_client_ =
         ChromeAutofillClient::FromWebContents(web_contents());
+
+#if BUILDFLAG(IS_ANDROID)
+    auto fast_checkout_client =
+        std::make_unique<MockFastCheckoutClient>(web_contents());
+    fast_checkout_client_ = fast_checkout_client.get();
+    const void* key =
+        content::WebContentsUserData<FastCheckoutClientImpl>::UserDataKey();
+    web_contents()->SetUserData(key, std::move(fast_checkout_client));
+#endif
   }
 
  protected:
@@ -38,6 +68,14 @@
     return personal_data_manager_;
   }
 
+  TestAutofillDriver* autofill_driver() { return &test_autofill_driver_; }
+
+#if BUILDFLAG(IS_ANDROID)
+  MockFastCheckoutClient* fast_checkout_client() {
+    return fast_checkout_client_;
+  }
+#endif
+
  private:
   void PreparePersonalDataManager() {
     personal_data_manager_ =
@@ -58,6 +96,11 @@
 
   raw_ptr<ChromeAutofillClient> chrome_autofill_client_ = nullptr;
   raw_ptr<TestPersonalDataManager> personal_data_manager_ = nullptr;
+  TestAutofillDriver test_autofill_driver_;
+
+#if BUILDFLAG(IS_ANDROID)
+  raw_ptr<MockFastCheckoutClient> fast_checkout_client_;
+#endif
 };
 
 TEST_F(ChromeAutofillClientTest, GetFormInteractionsFlowId_BelowMaxFlowTime) {
@@ -122,28 +165,22 @@
   EXPECT_FALSE(client()->IsFastCheckoutSupported());
 }
 
-TEST_F(ChromeAutofillClientTest,
-       IsFastCheckoutSupportedWithDisabledPersonalDataManager) {
-  ScopedFeatureList feature_list;
-  feature_list.InitWithFeatures({::features::kFastCheckout}, {});
-
-  personal_data_manager()->SetAutofillCreditCardEnabled(false);
-  EXPECT_FALSE(client()->IsFastCheckoutSupported());
-
-  personal_data_manager()->SetAutofillCreditCardEnabled(true);
-  personal_data_manager()->SetAutofillProfileEnabled(false);
-  EXPECT_FALSE(client()->IsFastCheckoutSupported());
+TEST_F(ChromeAutofillClientTest, HideFastCheckout) {
+  EXPECT_CALL(*fast_checkout_client(), Stop(true));
+  client()->HideFastCheckout(/*allow_further_runs=*/true);
 }
 
-TEST_F(ChromeAutofillClientTest, NoFastCheckoutSupportWithDisabledMSBB) {
-  ScopedFeatureList feature_list;
-  feature_list.InitWithFeatures({::features::kFastCheckout}, {});
+TEST_F(ChromeAutofillClientTest, IsShowingFastCheckoutUI) {
+  EXPECT_CALL(*fast_checkout_client(), IsShowing)
+      .WillOnce(testing::Return(true));
+  EXPECT_TRUE(client()->IsShowingFastCheckoutUI());
+}
 
-  // If MSBB has been explicitly turned off, Fast Checkout is not supported.
-  profile()->GetPrefs()->SetBoolean(
-      unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled, false);
-
-  EXPECT_FALSE(client()->IsFastCheckoutSupported());
+TEST_F(ChromeAutofillClientTest, TryToShowFastCheckout) {
+  EXPECT_CALL(*fast_checkout_client(), TryToStart)
+      .WillOnce(testing::Return(true));
+  EXPECT_TRUE(client()->TryToShowFastCheckout(FormData(), FormFieldData(),
+                                              autofill_driver()));
 }
 #endif  // BUILDFLAG(IS_ANDROID)
 
diff --git a/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm b/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
index 42579f25..6186975f 100644
--- a/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
+++ b/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
@@ -8,7 +8,6 @@
 #include "base/mac/scoped_nsautorelease_pool.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/apps/app_shim/app_shim_manager_mac.h"
 #include "chrome/browser/apps/platform_apps/app_window_registry_util.h"
diff --git a/chrome/browser/ui/cocoa/first_run_dialog_cocoa.mm b/chrome/browser/ui/cocoa/first_run_dialog_cocoa.mm
index 31295a60..d4cc11e6 100644
--- a/chrome/browser/ui/cocoa/first_run_dialog_cocoa.mm
+++ b/chrome/browser/ui/cocoa/first_run_dialog_cocoa.mm
@@ -13,6 +13,7 @@
 #include "base/run_loop.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/current_thread.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/browser_process_impl.h"
 #include "chrome/browser/first_run/first_run.h"
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.mm b/chrome/browser/ui/cocoa/history_menu_bridge.mm
index 127fbae..756814a 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge.mm
+++ b/chrome/browser/ui/cocoa/history_menu_bridge.mm
@@ -12,6 +12,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/app/chrome_command_ids.h"  // IDC_HISTORY_MENU
 #include "chrome/app/vector_icons/vector_icons.h"
diff --git a/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm b/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
index 7e351ead..54d8cdd4 100644
--- a/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
+++ b/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/functional/bind.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/infobars/confirm_infobar_creator.h"
diff --git a/chrome/browser/ui/cocoa/tab_contents/web_contents_view_mac_interactive_uitest.mm b/chrome/browser/ui/cocoa/tab_contents/web_contents_view_mac_interactive_uitest.mm
index 10a890216..c18a4bf 100644
--- a/chrome/browser/ui/cocoa/tab_contents/web_contents_view_mac_interactive_uitest.mm
+++ b/chrome/browser/ui/cocoa/tab_contents/web_contents_view_mac_interactive_uitest.mm
@@ -6,6 +6,7 @@
 
 #import "base/mac/scoped_nsobject.h"
 #include "base/run_loop.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/browser/ui/commerce/price_tracking/shopping_list_ui_tab_helper.cc b/chrome/browser/ui/commerce/price_tracking/shopping_list_ui_tab_helper.cc
index 0763324c..71dbe84 100644
--- a/chrome/browser/ui/commerce/price_tracking/shopping_list_ui_tab_helper.cc
+++ b/chrome/browser/ui/commerce/price_tracking/shopping_list_ui_tab_helper.cc
@@ -72,8 +72,20 @@
   } else {
     CHECK_IS_TEST();
   }
-  scoped_observation_.Observe(
-      BookmarkModelFactory::GetForBrowserContext(content->GetBrowserContext()));
+
+  bookmarks::BookmarkModel* bookmark_model =
+      BookmarkModelFactory::GetForBrowserContext(content->GetBrowserContext());
+
+  if (bookmark_model) {
+    scoped_observation_.Observe(BookmarkModelFactory::GetForBrowserContext(
+        content->GetBrowserContext()));
+  } else {
+    CHECK_IS_TEST();
+  }
+
+  if (!shopping_service_) {
+    CHECK_IS_TEST();
+  }
 }
 
 ShoppingListUiTabHelper::~ShoppingListUiTabHelper() = default;
@@ -136,7 +148,7 @@
 }
 
 bool ShoppingListUiTabHelper::ShouldShowPriceTrackingIconView() {
-  return shopping_service_->IsShoppingListEligible() &&
+  return shopping_service_ && shopping_service_->IsShoppingListEligible() &&
          !last_fetched_image_.IsEmpty();
 }
 
diff --git a/chrome/browser/ui/global_media_controls/media_notification_device_monitor_unittest.cc b/chrome/browser/ui/global_media_controls/media_notification_device_monitor_unittest.cc
index 73d269f1b..f22b19d86 100644
--- a/chrome/browser/ui/global_media_controls/media_notification_device_monitor_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/media_notification_device_monitor_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/ui/global_media_controls/media_notification_device_monitor.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/global_media_controls/media_notification_device_provider.h"
diff --git a/chrome/browser/ui/hats/hats_service_browsertest.cc b/chrome/browser/ui/hats/hats_service_browsertest.cc
index f3791f40..d22e155 100644
--- a/chrome/browser/ui/hats/hats_service_browsertest.cc
+++ b/chrome/browser/ui/hats/hats_service_browsertest.cc
@@ -8,7 +8,6 @@
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/version.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/ui/page_info/page_info_unittest.cc b/chrome/browser/ui/page_info/page_info_unittest.cc
index 61620eac..cd1faa1 100644
--- a/chrome/browser/ui/page_info/page_info_unittest.cc
+++ b/chrome/browser/ui/page_info/page_info_unittest.cc
@@ -1402,6 +1402,26 @@
   EXPECT_TRUE(showing_setting(last_permission_info_list()));
 }
 
+TEST_F(PageInfoTest, IsolatedWebAppStatus) {
+  EXPECT_CALL(*mock_ui(), SetPermissionInfoStub());
+  EXPECT_CALL(*mock_ui(), SetCookieInfo(_));
+  /*
+    SetIdentityInfo() is expected to be called 3 times:
+    1. PageInfo::InitializeUiState() inside page_info()
+    2. page_info()->SetIsolatedWebAppNameForTesting()
+    3. page_info()->UpdateSecurityState()
+  */
+  EXPECT_CALL(*mock_ui(), SetIdentityInfo(_)).Times(3);
+
+  page_info()->SetIsolatedWebAppNameForTesting(std::u16string());
+  page_info()->UpdateSecurityState();
+
+  EXPECT_EQ(PageInfo::SITE_CONNECTION_STATUS_ISOLATED_WEB_APP,
+            page_info()->site_connection_status());
+  EXPECT_EQ(PageInfo::SITE_IDENTITY_STATUS_ISOLATED_WEB_APP,
+            page_info()->site_identity_status());
+}
+
 #if !BUILDFLAG(IS_ANDROID)
 
 // Unit tests with the unified autoplay sound settings UI enabled. When enabled
diff --git a/chrome/browser/ui/performance_controls/tab_discard_tab_helper.cc b/chrome/browser/ui/performance_controls/tab_discard_tab_helper.cc
index 550dab1..59fc4eb 100644
--- a/chrome/browser/ui/performance_controls/tab_discard_tab_helper.cc
+++ b/chrome/browser/ui/performance_controls/tab_discard_tab_helper.cc
@@ -43,7 +43,7 @@
           PreDiscardResourceUsage::FromWebContents(&GetWebContents());
   return pre_discard_resource_usage == nullptr
              ? 0
-             : pre_discard_resource_usage->resident_set_size_estimate_kb() *
+             : pre_discard_resource_usage->memory_footprint_estimate_kb() *
                    kKiloByte;
 }
 
diff --git a/chrome/browser/ui/renderer_event_injection_browsertest.cc b/chrome/browser/ui/renderer_event_injection_browsertest.cc
index 243029eb..f34087c6 100644
--- a/chrome/browser/ui/renderer_event_injection_browsertest.cc
+++ b/chrome/browser/ui/renderer_event_injection_browsertest.cc
@@ -5,7 +5,6 @@
 #include "base/command_line.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "cc/base/switches.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/ui/startup/credential_provider_signin_dialog_win.cc b/chrome/browser/ui/startup/credential_provider_signin_dialog_win.cc
index 24a0c42b..13888d6 100644
--- a/chrome/browser/ui/startup/credential_provider_signin_dialog_win.cc
+++ b/chrome/browser/ui/startup/credential_provider_signin_dialog_win.cc
@@ -16,6 +16,7 @@
 #include "base/json/json_writer.h"
 #include "base/memory/raw_ptr.h"
 #include "base/syslog_logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/win/win_util.h"
 #include "chrome/browser/signin/signin_promo.h"
 #include "chrome/browser/ui/browser_dialogs.h"
diff --git a/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc b/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
index 2266e41..983afa4 100644
--- a/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
+++ b/chrome/browser/ui/sync/profile_signin_confirmation_helper_unittest.cc
@@ -103,10 +103,10 @@
     const std::string& name,
     const std::string& id,
     extensions::mojom::ManifestLocation location) {
-  base::DictionaryValue manifest;
-  manifest.SetStringPath(extensions::manifest_keys::kVersion, "1.0.0.0");
-  manifest.SetIntPath(extensions::manifest_keys::kManifestVersion, 2);
-  manifest.SetStringPath(extensions::manifest_keys::kName, name);
+  base::Value::Dict manifest;
+  manifest.SetByDottedPath(extensions::manifest_keys::kVersion, "1.0.0.0");
+  manifest.SetByDottedPath(extensions::manifest_keys::kManifestVersion, 2);
+  manifest.SetByDottedPath(extensions::manifest_keys::kName, name);
   std::string error;
   scoped_refptr<extensions::Extension> extension =
       extensions::Extension::Create(
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
index d1f7fc57..58db723 100644
--- a/chrome/browser/ui/tab_helpers.cc
+++ b/chrome/browser/ui/tab_helpers.cc
@@ -109,6 +109,7 @@
 #include "components/client_hints/browser/client_hints_web_contents_observer.h"
 #include "components/commerce/content/browser/commerce_tab_helper.h"
 #include "components/commerce/core/commerce_feature_list.h"
+#include "components/commerce/core/shopping_service.h"
 #include "components/content_settings/browser/page_specific_content_settings.h"
 #include "components/dom_distiller/core/dom_distiller_features.h"
 #include "components/download/content/factory/navigation_monitor_factory.h"
@@ -552,11 +553,15 @@
   if (user_notes::IsUserNotesEnabled() && !profile->IsOffTheRecord()) {
     user_notes::UserNotesTabHelper::CreateForWebContents(web_contents);
   }
-  if (base::FeatureList::IsEnabled(commerce::kShoppingList)) {
+
+  commerce::ShoppingService* shopping_service =
+      commerce::ShoppingServiceFactory::GetInstance()->GetForBrowserContext(
+          profile);
+  // The shopping service can be null in tests and is critical for the tab
+  // helper to be functional. If there's no service, don't create the helper.
+  if (shopping_service) {
     commerce::ShoppingListUiTabHelper::CreateForWebContents(
-        web_contents,
-        commerce::ShoppingServiceFactory::GetInstance()->GetForBrowserContext(
-            profile),
+        web_contents, shopping_service,
         ImageFetcherServiceFactory::GetForKey(profile->GetProfileKey()),
         profile->GetPrefs());
   }
diff --git a/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h b/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h
index 771fe54..b3a5efc 100644
--- a/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h
+++ b/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h
@@ -14,7 +14,6 @@
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 class BackgroundThumbnailCapturer;
diff --git a/chrome/browser/ui/toolbar/toolbar_actions_model.cc b/chrome/browser/ui/toolbar/toolbar_actions_model.cc
index ee25d8e0..c895d33b 100644
--- a/chrome/browser/ui/toolbar/toolbar_actions_model.cc
+++ b/chrome/browser/ui/toolbar/toolbar_actions_model.cc
@@ -20,7 +20,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/extensions/extension_management.h"
 #include "chrome/browser/extensions/extension_message_bubble_controller.h"
 #include "chrome/browser/extensions/extension_tab_util.h"
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_base_view.cc b/chrome/browser/ui/views/autofill/autofill_popup_base_view.cc
index a6570ff2..1c25be2 100644
--- a/chrome/browser/ui/views/autofill/autofill_popup_base_view.cc
+++ b/chrome/browser/ui/views/autofill/autofill_popup_base_view.cc
@@ -12,7 +12,6 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/platform_util.h"
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/ui/browser_finder.h"
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc b/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc
index 23b38996..21e1cb1 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc
@@ -13,7 +13,6 @@
 #include "base/scoped_observation.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/current_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ui/views/commerce/price_tracking_entry_point_feature_flag_browser_test.cc b/chrome/browser/ui/views/commerce/price_tracking_entry_point_feature_flag_browser_test.cc
deleted file mode 100644
index e308c64..0000000
--- a/chrome/browser/ui/views/commerce/price_tracking_entry_point_feature_flag_browser_test.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// 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/commerce/price_tracking_icon_view.h"
-
-#include "chrome/browser/ui/browser_element_identifiers.h"
-#include "chrome/browser/ui/commerce/price_tracking/shopping_list_ui_tab_helper.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
-#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "components/commerce/core/commerce_feature_list.h"
-#include "content/public/test/browser_test.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/interaction/element_identifier.h"
-#include "ui/base/interaction/element_tracker.h"
-#include "ui/views/interaction/element_tracker_views.h"
-
-namespace {
-const char kTestURL[] = "about:blank";
-}  // namespace
-
-class PriceTrackingEntryPointFeatureFlagTest
-    : public InProcessBrowserTest,
-      public testing::WithParamInterface<bool> {
- public:
-  PriceTrackingEntryPointFeatureFlagTest() {
-    const bool is_feature_enabled = GetParam();
-    if (is_feature_enabled) {
-      test_features_.InitAndEnableFeature(commerce::kShoppingList);
-    } else {
-      test_features_.InitAndDisableFeature(commerce::kShoppingList);
-    }
-  }
-
-  PriceTrackingEntryPointFeatureFlagTest(
-      const PriceTrackingEntryPointFeatureFlagTest&) = delete;
-  PriceTrackingEntryPointFeatureFlagTest& operator=(
-      const PriceTrackingEntryPointFeatureFlagTest&) = delete;
-
-  ~PriceTrackingEntryPointFeatureFlagTest() override = default;
-
-  static std::string DescribeParams(
-      const ::testing::TestParamInfo<ParamType>& info) {
-    return info.param ? "ShoppingListEnabled" : "ShoppingListDisabled";
-  }
-
-  PriceTrackingIconView* GetChip() {
-    auto* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
-    auto* location_bar_view = browser_view->toolbar()->location_bar();
-    const ui::ElementContext context =
-        views::ElementTrackerViews::GetContextForView(location_bar_view);
-    views::View* matched_view =
-        views::ElementTrackerViews::GetInstance()->GetFirstMatchingView(
-            kPriceTrackingChipElementId, context);
-
-    return matched_view
-               ? views::AsViewClass<PriceTrackingIconView>(matched_view)
-               : nullptr;
-  }
-
- private:
-  base::test::ScopedFeatureList test_features_;
-};
-
-INSTANTIATE_TEST_SUITE_P(
-    All,
-    PriceTrackingEntryPointFeatureFlagTest,
-    testing::Bool(),
-    &PriceTrackingEntryPointFeatureFlagTest::DescribeParams);
-
-IN_PROC_BROWSER_TEST_P(PriceTrackingEntryPointFeatureFlagTest,
-                       ShoppingListUiTabHelperCreation) {
-  ASSERT_TRUE(AddTabAtIndex(0, GURL(kTestURL), ui::PAGE_TRANSITION_TYPED));
-
-  auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
-  auto* tab_helper =
-      commerce::ShoppingListUiTabHelper::FromWebContents(web_contents);
-
-  const bool is_feature_enabled = GetParam();
-  if (is_feature_enabled) {
-    EXPECT_TRUE(tab_helper);
-  } else {
-    EXPECT_FALSE(tab_helper);
-  }
-}
-
-IN_PROC_BROWSER_TEST_P(PriceTrackingEntryPointFeatureFlagTest,
-                       PriceTrackingPageActionIconCreation) {
-  auto* chip = GetChip();
-
-  const bool is_feature_enabled = GetParam();
-  if (is_feature_enabled) {
-    EXPECT_TRUE(chip);
-  } else {
-    EXPECT_FALSE(chip);
-  }
-}
diff --git a/chrome/browser/ui/views/crostini/crostini_recovery_view.cc b/chrome/browser/ui/views/crostini/crostini_recovery_view.cc
index c4cba30..8c8c64b 100644
--- a/chrome/browser/ui/views/crostini/crostini_recovery_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_recovery_view.cc
@@ -6,6 +6,7 @@
 
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/crostini/crostini_features.h"
 #include "chrome/browser/ash/crostini/crostini_manager.h"
 #include "chrome/browser/ash/crostini/crostini_util.h"
diff --git a/chrome/browser/ui/views/crostini/crostini_uninstaller_view_browsertest.cc b/chrome/browser/ui/views/crostini/crostini_uninstaller_view_browsertest.cc
index fd1d216..d19f568 100644
--- a/chrome/browser/ui/views/crostini/crostini_uninstaller_view_browsertest.cc
+++ b/chrome/browser/ui/views/crostini/crostini_uninstaller_view_browsertest.cc
@@ -7,6 +7,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_base.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "chrome/browser/ash/app_list/app_list_client_impl.h"
 #include "chrome/browser/ash/app_list/test/chrome_app_list_test_support.h"
diff --git a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc
index 1399581..ed78d23 100644
--- a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/crostini/crostini_features.h"
 #include "chrome/browser/ash/crostini/crostini_manager.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
index 02d3723..2cb385b 100644
--- a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
+++ b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
@@ -24,6 +24,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
index 6c8c766..6ec4f065 100644
--- a/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/ui/views/extensions/chooser_dialog_view.h"
 
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/extensions/api/chrome_device_permissions_prompt.h"
 #include "chrome/browser/extensions/chrome_extension_chooser_dialog.h"
 #include "chrome/browser/extensions/device_permissions_dialog_controller.h"
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 92d593e..8fd14cf 100644
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -24,7 +24,6 @@
 #include "chrome/browser/ui/views/extensions/expandable_container_view.h"
 #include "chrome/browser/ui/views/extensions/extension_permissions_view.h"
 #include "chrome/common/buildflags.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/constrained_window/constrained_window_views.h"
@@ -535,8 +534,7 @@
 
   bool expect_justification =
       prompt_->type() ==
-          ExtensionInstallPrompt::PromptType::EXTENSION_REQUEST_PROMPT &&
-      base::FeatureList::IsEnabled(features::kExtensionWorkflowJustification);
+      ExtensionInstallPrompt::PromptType::EXTENSION_REQUEST_PROMPT;
   DCHECK(expect_justification == !!justification_view_);
 
   UpdateInstallResultHistogram(true);
@@ -673,11 +671,9 @@
                         std::make_unique<ExpandableContainerView>(details)});
   }
 
-  const bool is_justification_field_enabled =
-      prompt_->type() ==
-          ExtensionInstallPrompt::PromptType::EXTENSION_REQUEST_PROMPT &&
-      base::FeatureList::IsEnabled(features::kExtensionWorkflowJustification);
-  if (sections.empty() && !is_justification_field_enabled) {
+  if (sections.empty() &&
+      prompt_->type() !=
+          ExtensionInstallPrompt::PromptType::EXTENSION_REQUEST_PROMPT) {
     // Use a smaller margin between the title area and buttons, since there
     // isn't any content.
     set_margins(
@@ -705,7 +701,8 @@
   // Add separate section for user justification. This section isn't added to
   // the |sections| vector since it is later referenced to extract the textfield
   // string.
-  if (is_justification_field_enabled) {
+  if (prompt_->type() ==
+      ExtensionInstallPrompt::PromptType::EXTENSION_REQUEST_PROMPT) {
     justification_view_ =
         extension_info_and_justification_container->AddChildView(
             std::make_unique<ExtensionJustificationView>(this));
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc
index 6c3ff661..a05ce68b 100644
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc
@@ -31,7 +31,6 @@
 #include "chrome/browser/ui/tabs/tab_enums.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/test/test_browser_dialog.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/extensions/extension_test_util.h"
 #include "chrome/grit/generated_resources.h"
@@ -481,21 +480,6 @@
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeUi_FromWebstore) {
-  set_type(ExtensionInstallPrompt::WEBSTORE_WIDGET_PROMPT);
-  set_from_webstore();
-  ShowAndVerifyUi();
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeUi_FromWebstoreWithPermission) {
-  set_type(ExtensionInstallPrompt::WEBSTORE_WIDGET_PROMPT);
-  set_from_webstore();
-  AddPermission("Example permission");
-  ShowAndVerifyUi();
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
                        InvokeUi_MultilinePermission) {
   AddPermission(
       "In the shade of the house, in the sunshine of the riverbank "
@@ -777,10 +761,7 @@
 class ExtensionInstallDialogViewRequestTest
     : public ExtensionInstallDialogViewTestBase {
  public:
-  ExtensionInstallDialogViewRequestTest() {
-    feature_list_.InitAndEnableFeature(
-        features::kExtensionWorkflowJustification);
-  }
+  ExtensionInstallDialogViewRequestTest() = default;
   ExtensionInstallDialogViewRequestTest(
       const ExtensionInstallDialogViewRequestTest&) = delete;
   ExtensionInstallDialogViewRequestTest& operator=(
@@ -809,9 +790,6 @@
 
     return delegate_view;
   }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewRequestTest, NotifyDelegate) {
diff --git a/chrome/browser/ui/views/extensions/request_file_system_dialog_view.cc b/chrome/browser/ui/views/extensions/request_file_system_dialog_view.cc
index c007d5c8..9c41e361 100644
--- a/chrome/browser/ui/views/extensions/request_file_system_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/request_file_system_dialog_view.cc
@@ -9,7 +9,6 @@
 #include <cstdlib>
 
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/constrained_window/constrained_window_views.h"
diff --git a/chrome/browser/ui/views/frame/test_with_browser_view.cc b/chrome/browser/ui/views/frame/test_with_browser_view.cc
index ce4d935..8153f79 100644
--- a/chrome/browser/ui/views/frame/test_with_browser_view.cc
+++ b/chrome/browser/ui/views/frame/test_with_browser_view.cc
@@ -8,7 +8,6 @@
 
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc b/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc
index 54ab0dba..768587f1 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_interactive_uitest.cc
@@ -37,7 +37,6 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "base/scoped_observation.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ui/frame/immersive/immersive_fullscreen_controller.h"
 #include "chromeos/ui/frame/immersive/immersive_fullscreen_controller_test_api.h"
 #include "ui/aura/client/drag_drop_client.h"
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index 64c602c6..0d320d3 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -76,7 +76,6 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "components/autofill/core/common/autofill_payments_features.h"
-#include "components/commerce/core/commerce_feature_list.h"
 #include "components/content_settings/core/common/features.h"
 #include "components/dom_distiller/core/dom_distiller_features.h"
 #include "components/favicon/content/content_favicon_driver.h"
@@ -296,9 +295,7 @@
     // first so that they appear on the left side of the icon container.
     // TODO(crbug.com/1318890): Improve the ordering heuristics for page action
     // icons and determine a way to handle simultaneous icon animations.
-    if (base::FeatureList::IsEnabled(commerce::kShoppingList)) {
-      params.types_enabled.push_back(PageActionIconType::kPriceTracking);
-    }
+    params.types_enabled.push_back(PageActionIconType::kPriceTracking);
 
     if (side_search::IsDSESupportEnabled(profile_) &&
         side_search::IsEnabledForBrowser(browser_)) {
diff --git a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
index 212c11f..f08794a70 100644
--- a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
+++ b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
@@ -5,7 +5,6 @@
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/media/router/media_router_feature.h"
diff --git a/chrome/browser/ui/views/media_router/media_router_ui_interactive_uitest.cc b/chrome/browser/ui/views/media_router/media_router_ui_interactive_uitest.cc
index 7afcff5..d7e4f16 100644
--- a/chrome/browser/ui/views/media_router/media_router_ui_interactive_uitest.cc
+++ b/chrome/browser/ui/views/media_router/media_router_ui_interactive_uitest.cc
@@ -5,7 +5,6 @@
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/prefs/browser_prefs.h"
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
index 8fbd327..cb9872c8 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -19,6 +19,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/escape.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
index 87f741d..bfbbd1ec 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_dialog_browsertest.cc
@@ -875,6 +875,7 @@
     std::u16string app_name = u"Google IWA";
     bubble_view->presenter_for_testing()->SetIsolatedWebAppNameForTesting(
         app_name);
+    bubble_view->presenter_for_testing()->UpdateSecurityState();
     // For Isolated Web Apps, normal site name gets overridden by app name.
     ASSERT_EQ(
         bubble_view->presenter_for_testing()->GetSiteNameOrAppNameToDisplay(),
@@ -890,8 +891,11 @@
   net::EmbeddedTestServer https_server_{net::EmbeddedTestServer::TYPE_HTTPS};
 };
 
+// Test renamed, as currently Skia Gold doesn't support resetting test
+// expectation for tests run on windows.
+// crbug.com/1403038
 IN_PROC_BROWSER_TEST_F(
     PageInfoBubbleViewIsolatedWebAppBrowserTest,
-    InvokeUi_AppNameIsDisplayedInsteadOfOriginForIsolatedWebApps) {
+    InvokeUi_AppNameIsDisplayedInsteadOfOriginForIsolatedWebApps_REV1) {
   ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc
index 1133fb0..b1b6f54 100644
--- a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc
@@ -12,7 +12,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/history/history_test_utils.h"
diff --git a/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view_browsertest.cc b/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view_browsertest.cc
index 44286f8c..a297781 100644
--- a/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view_browsertest.cc
+++ b/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/files/file_util.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_restrictions.h"
 #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc
index d8f4145..07732f2 100644
--- a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/test/test_browser_dialog.h"
 #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/ui/views/profiles/profile_management_utils.cc b/chrome/browser/ui/views/profiles/profile_management_utils.cc
index b5a08e4f..6f09e99 100644
--- a/chrome/browser/ui/views/profiles/profile_management_utils.cc
+++ b/chrome/browser/ui/views/profiles/profile_management_utils.cc
@@ -6,6 +6,7 @@
 
 #include "base/auto_reset.h"
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile_attributes_entry.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
diff --git a/chrome/browser/ui/views/status_bubble_views_browsertest.cc b/chrome/browser/ui/views/status_bubble_views_browsertest.cc
index 9cda4740..c0b14c9 100644
--- a/chrome/browser/ui/views/status_bubble_views_browsertest.cc
+++ b/chrome/browser/ui/views/status_bubble_views_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc b/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc
index 86c053bd..62d6316 100644
--- a/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc
+++ b/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ui/views/tab_search_bubble_host.h"
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
diff --git a/chrome/browser/ui/views/tabs/tab_search_button_browsertest.cc b/chrome/browser/ui/views/tabs/tab_search_button_browsertest.cc
index ad7f0d5..17de737 100644
--- a/chrome/browser/ui/views/tabs/tab_search_button_browsertest.cc
+++ b/chrome/browser/ui/views/tabs/tab_search_button_browsertest.cc
@@ -8,6 +8,7 @@
 
 #include "base/feature_list.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/ui/views/test/view_event_test_base.h b/chrome/browser/ui/views/test/view_event_test_base.h
index f35547bb..f928d78 100644
--- a/chrome/browser/ui/views/test/view_event_test_base.h
+++ b/chrome/browser/ui/views/test/view_event_test_base.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_UI_VIEWS_TEST_VIEW_EVENT_TEST_BASE_H_
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 
 // We only want to use ViewEventTestBase in test targets which properly
 // isolate each test case by running each test in a separate process.
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
index e99b2eca..658b49c 100644
--- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
+++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
@@ -9,7 +9,6 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/chromeos_buildflags.h"
 #include "cc/paint/paint_flags.h"
diff --git a/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc b/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc
index 36174aaf..5c6e896 100644
--- a/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc
+++ b/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc
@@ -6,7 +6,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/browser/ui/views/user_education/help_bubble_view_interactive_uitest.cc b/chrome/browser/ui/views/user_education/help_bubble_view_interactive_uitest.cc
index 980b8e00..400476d1 100644
--- a/chrome/browser/ui/views/user_education/help_bubble_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/user_education/help_bubble_view_interactive_uitest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ui/browser_element_identifiers.h"
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
index b28e23b..872ec39 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -23,6 +23,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/test_future.h"
 #include "base/values.h"
@@ -413,6 +414,27 @@
   raw_ptr<Browser> browser_added_ = nullptr;
 };
 
+class PageLoadWaiter final : public content::WebContentsObserver {
+ public:
+  explicit PageLoadWaiter(content::WebContents* web_contents)
+      : WebContentsObserver(web_contents) {}
+  ~PageLoadWaiter() override = default;
+
+  void Wait() { run_loop_.Run(); }
+
+  void DocumentOnLoadCompletedInPrimaryMainFrame() override {
+    run_loop_.Quit();
+  }
+
+  void WebContentsDestroyed() override {
+    Observe(nullptr);
+    run_loop_.Quit();
+  }
+
+ private:
+  base::RunLoop run_loop_;
+};
+
 Browser* GetBrowserForAppId(const Profile* profile, const AppId& app_id) {
   const BrowserList* browser_list = BrowserList::GetInstance();
   for (auto it = browser_list->begin_browsers_ordered_by_activation();
@@ -2785,6 +2807,17 @@
   FlushShortcutTasks();
   provider()->command_manager().AwaitAllCommandsCompleteForTesting();
   AwaitManifestSystemIdle();
+  auto* browser_list = BrowserList::GetInstance();
+  for (Browser* browser : *browser_list) {
+    for (int i = 0; i < browser->tab_strip_model()->GetTabCount(); i++) {
+      content::WebContents* web_contents =
+          browser->tab_strip_model()->GetWebContentsAt(i);
+      if (!web_contents->IsDocumentOnLoadCompletedInPrimaryMainFrame()) {
+        PageLoadWaiter page_load_waiter(web_contents);
+        page_load_waiter.Wait();
+      }
+    }
+  }
   after_state_change_action_state_ = ConstructStateSnapshot();
 }
 
diff --git a/chrome/browser/ui/views/web_dialog_view_browsertest.cc b/chrome/browser/ui/views/web_dialog_view_browsertest.cc
index 3cdda3c8d..86780e1 100644
--- a/chrome/browser/ui/views/web_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/web_dialog_view_browsertest.cc
@@ -8,7 +8,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc b/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc
index e8dc952..5ada2fb 100644
--- a/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc
+++ b/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc
@@ -17,6 +17,7 @@
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gtest_util.h"
 #include "build/build_config.h"
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc
index 5bb1ce56..419f051 100644
--- a/chrome/browser/ui/web_applications/web_app_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -14,6 +14,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/metrics/user_action_tester.h"
diff --git a/chrome/browser/ui/web_applications/web_app_dialog_manager.cc b/chrome/browser/ui/web_applications/web_app_dialog_manager.cc
index 48dafceb..37f0b37 100644
--- a/chrome/browser/ui/web_applications/web_app_dialog_manager.cc
+++ b/chrome/browser/ui/web_applications/web_app_dialog_manager.cc
@@ -7,7 +7,6 @@
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/browser/ui/web_applications/web_app_metrics.cc b/chrome/browser/ui/web_applications/web_app_metrics.cc
index c58fef1..4c0512f 100644
--- a/chrome/browser/ui/web_applications/web_app_metrics.cc
+++ b/chrome/browser/ui/web_applications/web_app_metrics.cc
@@ -9,6 +9,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/power_monitor/power_monitor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/browser/after_startup_task_utils.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
index 6e84d00..e357b58 100644
--- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
+++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
@@ -4,10 +4,12 @@
 
 #include "chrome/browser/ui/web_applications/web_app_ui_manager_impl.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/functional/callback.h"
 #include "base/functional/callback_helpers.h"
+#include "base/memory/weak_ptr.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -27,7 +29,7 @@
 #include "chrome/browser/ui/web_applications/web_app_metrics.h"
 #include "chrome/browser/ui/webui/web_app_internals/web_app_internals_source.h"
 #include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h"
-#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
+#include "chrome/browser/web_applications/locks/app_lock.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_sub_manager.h"
 #include "chrome/browser/web_applications/os_integration/web_app_shortcut.h"
@@ -70,16 +72,6 @@
 
 namespace {
 
-bool IsAppInstalled(Profile* profile, const AppId& app_id) {
-  bool installed = false;
-  auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile);
-  proxy->AppRegistryCache().ForOneApp(
-      app_id, [&installed](const apps::AppUpdate& update) {
-        installed = apps_util::IsInstalled(update.Readiness());
-      });
-  return installed;
-}
-
 #if BUILDFLAG(IS_WIN)
 // ScopedKeepAlive not only keeps the process from terminating early
 // during uninstall, it also ensures the process will terminate when it
@@ -120,25 +112,6 @@
 
 #endif  // BUILDFLAG(IS_WIN)
 
-mojom::UserDisplayMode GetExtensionUserDisplayMode(
-    Profile* profile,
-    const extensions::Extension* extension) {
-  // Platform apps always open in an app window and their user preference is
-  // meaningless.
-  if (extension->is_platform_app())
-    return mojom::UserDisplayMode::kStandalone;
-
-  switch (extensions::GetLaunchContainer(
-      extensions::ExtensionPrefs::Get(profile), extension)) {
-    case apps::LaunchContainer::kLaunchContainerWindow:
-    case apps::LaunchContainer::kLaunchContainerPanelDeprecated:
-      return mojom::UserDisplayMode::kStandalone;
-    case apps::LaunchContainer::kLaunchContainerTab:
-    case apps::LaunchContainer::kLaunchContainerNone:
-      return mojom::UserDisplayMode::kBrowser;
-  }
-}
-
 }  // namespace
 
 // static
@@ -225,147 +198,12 @@
   windows_closed_requests_map_[app_id].push_back(std::move(callback));
 }
 
-bool WebAppUiManagerImpl::UninstallAndReplaceIfExists(
-    const std::vector<AppId>& from_apps,
-    const AppId& to_app) {
-  bool has_migrated_ui = false;
-  bool uninstall_triggered = false;
-  for (const AppId& from_app : from_apps) {
-    if (!IsAppInstalled(profile_, from_app))
-      continue;
-
-    if (!has_migrated_ui) {
-      has_migrated_ui = true;
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-      // Grid position in app list.
-      auto* app_list_syncable_service =
-          app_list::AppListSyncableServiceFactory::GetForProfile(profile_);
-      bool to_app_in_shelf =
-          app_list_syncable_service->GetPinPosition(to_app).IsValid();
-      // If the new app is already pinned to the shelf don't transfer UI prefs
-      // across as that could cause it to become unpinned.
-      if (!to_app_in_shelf)
-        app_list_syncable_service->TransferItemAttributes(from_app, to_app);
-#endif
-
-      // If migration of user/UI data is required for other app types consider
-      // generalising this operation to be part of app service.
-      const extensions::Extension* from_extension =
-          extensions::ExtensionRegistry::Get(profile_)
-              ->enabled_extensions()
-              .GetByID(from_app);
-      if (from_extension) {
-        // Grid position in chrome://apps.
-        extensions::AppSorting* app_sorting =
-            extensions::ExtensionSystem::Get(profile_)->app_sorting();
-        app_sorting->SetAppLaunchOrdinal(
-            to_app, app_sorting->GetAppLaunchOrdinal(from_app));
-        app_sorting->SetPageOrdinal(to_app,
-                                    app_sorting->GetPageOrdinal(from_app));
-
-        sync_bridge_->SetAppUserDisplayMode(
-            to_app,
-
-            GetExtensionUserDisplayMode(profile_, from_extension),
-            /*is_user_action=*/false);
-
-        auto shortcut_info = web_app::ShortcutInfoForExtensionAndProfile(
-            from_extension, profile_);
-        auto callback =
-            base::BindOnce(&WebAppUiManagerImpl::OnShortcutLocationGathered,
-                           weak_ptr_factory_.GetWeakPtr(), from_app, to_app);
-        os_integration_manager_->GetAppExistingShortCutLocation(
-            std::move(callback), std::move(shortcut_info));
-        uninstall_triggered = true;
-        continue;
-      }
-
-      // The from_app could be a web app.
-      os_integration_manager_->GetShortcutInfoForApp(
-          from_app,
-          base::BindOnce(&WebAppUiManagerImpl::
-                             OnShortcutInfoReceivedSearchShortcutLocations,
-                         weak_ptr_factory_.GetWeakPtr(), from_app, to_app));
-      uninstall_triggered = true;
-      continue;
-    }
-
-    auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_);
-    proxy->UninstallSilently(from_app, apps::UninstallSource::kMigration);
-    uninstall_triggered = true;
-  }
-
-  return uninstall_triggered;
-}
-
 void WebAppUiManagerImpl::OnExtensionSystemReady() {
   extensions::ExtensionSystem::Get(profile_)
       ->app_sorting()
       ->InitializePageOrdinalMapFromWebApps();
 }
 
-void WebAppUiManagerImpl::OnShortcutInfoReceivedSearchShortcutLocations(
-    const AppId& from_app,
-    const AppId& app_id,
-    std::unique_ptr<ShortcutInfo> shortcut_info) {
-  if (!shortcut_info) {
-    // The shortcut info couldn't be found, simply uninstall.
-    auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_);
-    proxy->UninstallSilently(from_app, apps::UninstallSource::kMigration);
-    return;
-  }
-  auto callback =
-      base::BindOnce(&WebAppUiManagerImpl::OnShortcutLocationGathered,
-                     weak_ptr_factory_.GetWeakPtr(), from_app, app_id);
-  os_integration_manager_->GetAppExistingShortCutLocation(
-      std::move(callback), std::move(shortcut_info));
-}
-
-void WebAppUiManagerImpl::OnShortcutLocationGathered(
-    const AppId& from_app,
-    const AppId& app_id,
-    ShortcutLocations locations) {
-  auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_);
-
-  const bool is_extension = proxy->AppRegistryCache().GetAppType(from_app) ==
-                            apps::AppType::kChromeApp;
-  if (is_extension) {
-    WaitForExtensionShortcutsDeleted(
-        from_app,
-        base::BindOnce(&WebAppUiManagerImpl::InstallOsHooksForReplacementApp,
-                       weak_ptr_factory_.GetWeakPtr(), app_id, locations));
-  }
-
-  proxy->UninstallSilently(from_app, apps::UninstallSource::kMigration);
-
-  if (!is_extension)
-    InstallOsHooksForReplacementApp(app_id, locations);
-}
-
-void WebAppUiManagerImpl::InstallOsHooksForReplacementApp(
-    const AppId& app_id,
-    ShortcutLocations locations) {
-  InstallOsHooksOptions options;
-  options.os_hooks[OsHookType::kShortcuts] =
-      locations.on_desktop || locations.applications_menu_location ||
-      locations.in_quick_launch_bar || locations.in_startup;
-  options.add_to_desktop = locations.on_desktop;
-  options.add_to_quick_launch_bar = locations.in_quick_launch_bar;
-  options.os_hooks[OsHookType::kRunOnOsLogin] = locations.in_startup;
-  options.reason = SHORTCUT_CREATION_AUTOMATED;
-  // TODO(crbug.com/1401125): Remove InstallOsHooks() once OS integration
-  // sub managers have been implemented.
-  os_integration_manager_->InstallOsHooks(app_id, base::DoNothing(), nullptr,
-                                          options);
-
-  SynchronizeOsOptions synchronize_options;
-  synchronize_options.add_shortcut_to_desktop = options.add_to_desktop;
-  synchronize_options.add_to_quick_launch_bar = options.add_to_quick_launch_bar;
-  synchronize_options.reason = options.reason;
-  os_integration_manager_->Synchronize(app_id, base::DoNothing(),
-                                       synchronize_options);
-}
-
 bool WebAppUiManagerImpl::CanAddAppToQuickLaunchBar() const {
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   return true;
@@ -461,6 +299,24 @@
                                  std::move(callback), lock);
 }
 
+void WebAppUiManagerImpl::MaybeTransferAppAttributes(
+    const AppId& from_extension_or_app,
+    const AppId& to_app) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // Grid position in app list.
+  auto* app_list_syncable_service =
+      app_list::AppListSyncableServiceFactory::GetForProfile(profile_);
+  bool to_app_in_shelf =
+      app_list_syncable_service->GetPinPosition(to_app).IsValid();
+  // If the new app is already pinned to the shelf don't transfer UI prefs
+  // across as that could cause it to become unpinned.
+  if (!to_app_in_shelf) {
+    app_list_syncable_service->TransferItemAttributes(from_extension_or_app,
+                                                      to_app);
+  }
+#endif
+}
+
 void WebAppUiManagerImpl::OnBrowserAdded(Browser* browser) {
   DCHECK(started_);
   if (!IsBrowserForInstalledApp(browser))
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h
index d9a6594..285716b 100644
--- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h
+++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h
@@ -48,8 +48,6 @@
   size_t GetNumWindowsForApp(const AppId& app_id) override;
   void NotifyOnAllAppWindowsClosed(const AppId& app_id,
                                    base::OnceClosure callback) override;
-  bool UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps,
-                                   const AppId& to_app) override;
   bool CanAddAppToQuickLaunchBar() const override;
   void AddAppToQuickLaunchBar(const AppId& app_id) override;
   bool IsAppInQuickLaunchBar(const AppId& app_id) const override;
@@ -80,6 +78,8 @@
                            Profile& profile,
                            LaunchWebAppCallback callback,
                            AppLock& lock) override;
+  void MaybeTransferAppAttributes(const AppId& from_extension_or_app,
+                                  const AppId& to_app) override;
 
   // BrowserListObserver:
   void OnBrowserAdded(Browser* browser) override;
@@ -101,17 +101,6 @@
 
   void OnExtensionSystemReady();
 
-  void OnShortcutInfoReceivedSearchShortcutLocations(
-      const AppId& from_app,
-      const AppId& app_id,
-      std::unique_ptr<ShortcutInfo> shortcut_info);
-
-  void OnShortcutLocationGathered(const AppId& from_app,
-                                  const AppId& app_id,
-                                  ShortcutLocations locations);
-  void InstallOsHooksForReplacementApp(const AppId& app_id,
-                                       ShortcutLocations locations);
-
   std::unique_ptr<WebAppDialogManager> dialog_manager_;
 
   const raw_ptr<Profile> profile_;
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc b/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc
index c33f0b75..2eb01626 100644
--- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl_browsertest.cc
@@ -4,13 +4,9 @@
 
 #include "chrome/browser/ui/web_applications/web_app_ui_manager_impl.h"
 
-#include "base/barrier_closure.h"
 #include "base/memory/raw_ptr.h"
 #include "base/test/bind.h"
 #include "build/chromeos_buildflags.h"
-#include "chrome/browser/apps/app_service/app_service_proxy.h"
-#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
-#include "chrome/browser/apps/app_service/publishers/built_in_chromeos_apps.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
@@ -18,9 +14,7 @@
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
-#include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #include "chrome/browser/web_applications/web_app_id.h"
-#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -30,11 +24,9 @@
 #include "url/gurl.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-#include "ash/public/cpp/app_list/internal_app_id_constants.h"
-#include "chrome/browser/ash/app_list/app_list_model_updater.h"
 #include "chrome/browser/ash/app_list/app_list_syncable_service.h"
 #include "chrome/browser/ash/app_list/app_list_syncable_service_factory.h"
-#include "chrome/browser/ash/app_list/test/chrome_app_list_test_support.h"
+#include "chrome/browser/web_applications/test/web_app_test_observers.h"
 #endif
 
 namespace web_app {
@@ -196,71 +188,27 @@
   }
 }
 
-#if !BUILDFLAG(IS_CHROMEOS_LACROS)
-// Regression test for crbug.com/1182030
-IN_PROC_BROWSER_TEST_F(WebAppUiManagerImplBrowserTest,
-                       WebAppMigrationPreservesShortcutStates) {
-  const GURL kOldAppUrl("https://old.app.com");
-  // Install an old app to be replaced.
-  AppId old_app_id = InstallWebApp(kOldAppUrl);
-
-  // Set up the existing shortcuts.
-  auto shortcut_info = std::make_unique<ShortcutInfo>();
-  shortcut_info->url = kOldAppUrl;
-  shortcut_manager_->SetShortcutInfoForApp(old_app_id,
-                                           std::move(shortcut_info));
-  ShortcutLocations locations;
-  locations.on_desktop = true;
-  locations.in_startup = true;
-  shortcut_manager_->SetAppExistingShortcuts(kOldAppUrl, locations);
-
-  // Install a new app to migrate the old one to.
-  AppId new_app_id = InstallWebApp(GURL("https://new.app.com"));
-  ui_manager().UninstallAndReplaceIfExists({old_app_id}, new_app_id);
-
-  EXPECT_TRUE(os_integration_manager_->did_add_to_desktop());
-  auto options = os_integration_manager_->get_last_install_options();
-  EXPECT_TRUE(options->os_hooks[OsHookType::kRunOnOsLogin]);
-  EXPECT_FALSE(options->add_to_quick_launch_bar);
-}
-#endif  // !BUILDFLAG(IS_CHROMEOS_LACROS)
-
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-// Tests that app migrations use the UI preferences of the replaced app but only
-// if it's present.
-IN_PROC_BROWSER_TEST_F(WebAppUiManagerImplBrowserTest, DoubleMigration) {
+IN_PROC_BROWSER_TEST_F(WebAppUiManagerImplBrowserTest, MigrateAppAttribute) {
   app_list::AppListSyncableService* app_list_service =
       app_list::AppListSyncableServiceFactory::GetForProfile(
           browser()->profile());
 
   // Install an old app to be replaced.
-  AppId old_app_id = InstallWebApp(GURL("https://old.app.com"));
+  AppId old_app_id = test::InstallDummyWebApp(profile(), "old_app",
+                                              GURL("https://old.app.com"));
   app_list_service->SetPinPosition(old_app_id,
                                    syncer::StringOrdinal("positionold"));
 
   // Install a new app to migrate the old one to.
-  AppId new_app_id = InstallWebApp(GURL("https://new.app.com"));
-  {
-    WebAppTestUninstallObserver waiter(browser()->profile());
-    waiter.BeginListening({old_app_id});
-    ui_manager().UninstallAndReplaceIfExists({old_app_id}, new_app_id);
-    waiter.Wait();
-  }
+  AppId new_app_id = test::InstallDummyWebApp(profile(), "new_app",
+                                              GURL("https://new.app.com"));
+  ui_manager().MaybeTransferAppAttributes(old_app_id, new_app_id);
 
   // New app should acquire old app's pin position.
   EXPECT_EQ(app_list_service->GetSyncItem(new_app_id)
                 ->item_pin_ordinal.ToDebugString(),
             "positionold");
-
-  // Change the new app's pin position.
-  app_list_service->SetPinPosition(new_app_id,
-                                   syncer::StringOrdinal("positionnew"));
-
-  // Do migration again. New app should not move.
-  ui_manager().UninstallAndReplaceIfExists({old_app_id}, new_app_id);
-  EXPECT_EQ(app_list_service->GetSyncItem(new_app_id)
-                ->item_pin_ordinal.ToDebugString(),
-            "positionnew");
 }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
diff --git a/chrome/browser/ui/webui/ash/image_source.cc b/chrome/browser/ui/webui/ash/image_source.cc
index 2a28267..a0c0fae 100644
--- a/chrome/browser/ui/webui/ash/image_source.cc
+++ b/chrome/browser/ui/webui/ash/image_source.cc
@@ -16,7 +16,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ash/login/users/avatar/user_image_loader.h"
 #include "chrome/common/url_constants.h"
 #include "components/user_manager/user_image/user_image.h"
diff --git a/chrome/browser/ui/webui/ash/lock_screen_reauth/lock_screen_reauth_dialogs.cc b/chrome/browser/ui/webui/ash/lock_screen_reauth/lock_screen_reauth_dialogs.cc
index 37f0d9f2..9ca9f6be 100644
--- a/chrome/browser/ui/webui/ash/lock_screen_reauth/lock_screen_reauth_dialogs.cc
+++ b/chrome/browser/ui/webui/ash/lock_screen_reauth/lock_screen_reauth_dialogs.cc
@@ -13,6 +13,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/json/json_writer.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ash/login/helper.h"
 #include "chrome/browser/ash/login/profile_auth_data.h"
 #include "chrome/browser/ash/login/ui/oobe_dialog_size_utils.h"
diff --git a/chrome/browser/ui/webui/ash/login/assistant_optin_flow_screen_handler.h b/chrome/browser/ui/webui/ash/login/assistant_optin_flow_screen_handler.h
index 5265355b..ade9e814 100644
--- a/chrome/browser/ui/webui/ash/login/assistant_optin_flow_screen_handler.h
+++ b/chrome/browser/ui/webui/ash/login/assistant_optin_flow_screen_handler.h
@@ -18,8 +18,6 @@
 #include "chrome/browser/ui/webui/ash/login/base_screen_handler.h"
 #include "chromeos/ash/services/assistant/public/cpp/assistant_settings.h"
 #include "components/sync/protocol/user_consent_types.pb.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
 
 namespace ash {
 
diff --git a/chrome/browser/ui/webui/ash/login/core_oobe_handler.h b/chrome/browser/ui/webui/ash/login/core_oobe_handler.h
index 9e32317..fc57d85 100644
--- a/chrome/browser/ui/webui/ash/login/core_oobe_handler.h
+++ b/chrome/browser/ui/webui/ash/login/core_oobe_handler.h
@@ -19,7 +19,6 @@
 #include "chrome/browser/ash/tpm_firmware_update.h"
 #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.h"
 #include "chrome/browser/ui/webui/ash/login/base_webui_handler.h"
-#include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/events/event_source.h"
 
diff --git a/chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui_browsertest.cc b/chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui_browsertest.cc
index 59510675..2a2e0de 100644
--- a/chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/webui/autofill_and_password_manager_internals/internals_ui_handler.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
diff --git a/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc b/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc
index 3cfdbe27d..a8813255b 100644
--- a/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc
+++ b/chrome/browser/ui/webui/certificate_provisioning_ui_handler.cc
@@ -9,7 +9,6 @@
 
 #include "base/containers/span.h"
 #include "base/functional/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_platform_part.h"
diff --git a/chrome/browser/ui/webui/image_editor/image_editor_ui.h b/chrome/browser/ui/webui/image_editor/image_editor_ui.h
index 4071b24..2533e43 100644
--- a/chrome/browser/ui/webui/image_editor/image_editor_ui.h
+++ b/chrome/browser/ui/webui/image_editor/image_editor_ui.h
@@ -8,8 +8,6 @@
 #include "base/memory/raw_ptr.h"
 #include "chrome/browser/ui/webui/image_editor/image_editor.mojom.h"
 #include "content/public/browser/web_ui_controller.h"
-#include "mojo/public/cpp/bindings/generic_pending_receiver.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/mojom/browser_interface_broker.mojom.h"
 
 class Profile;
diff --git a/chrome/browser/ui/webui/print_preview/local_printer_handler_default_unittest.cc b/chrome/browser/ui/webui/print_preview/local_printer_handler_default_unittest.cc
index 14acaa95..425fc8f 100644
--- a/chrome/browser/ui/webui/print_preview/local_printer_handler_default_unittest.cc
+++ b/chrome/browser/ui/webui/print_preview/local_printer_handler_default_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "chrome/common/printing/printer_capabilities.h"
 #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc
index 137ae64c..6577df1 100644
--- a/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc
+++ b/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc
@@ -20,7 +20,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "chrome/browser/ash/printing/cups_printers_manager.h"
 #include "chrome/browser/ash/printing/ppd_provider_factory.h"
diff --git a/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h b/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h
index f41836c2..2ac2ba7 100644
--- a/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h
+++ b/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h
@@ -7,7 +7,6 @@
 
 #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
 #include "chromeos/ash/components/audio/cras_audio_handler.h"
-#include "mojo/public/cpp/bindings/remote.h"
 
 namespace ash::settings {
 
diff --git a/chrome/browser/ui/webui/settings/ash/people_section.cc b/chrome/browser/ui/webui/settings/ash/people_section.cc
index 1ef7926a..f5f7efd 100644
--- a/chrome/browser/ui/webui/settings/ash/people_section.cc
+++ b/chrome/browser/ui/webui/settings/ash/people_section.cc
@@ -688,7 +688,7 @@
   RegisterNestedSettingBulk(mojom::Subpage::kSyncSetup, kSyncSettings,
                             generator);
 
-  // TODO(crbug.com/1227417): Remove after SyncSettingsCategorization launch.
+  // TODO(crbug.com/1249845): Remove this.
   generator->RegisterNestedSubpage(
       IDS_SETTINGS_SYNC_ADVANCED_PAGE_TITLE,
       mojom::Subpage::kSyncDeprecatedAdvanced, mojom::Subpage::kSyncSetup,
diff --git a/chrome/browser/ui/webui/settings/ash/search/per_session_settings_user_action_tracker.h b/chrome/browser/ui/webui/settings/ash/search/per_session_settings_user_action_tracker.h
index 26f38f6..de2120206 100644
--- a/chrome/browser/ui/webui/settings/ash/search/per_session_settings_user_action_tracker.h
+++ b/chrome/browser/ui/webui/settings/ash/search/per_session_settings_user_action_tracker.h
@@ -6,8 +6,6 @@
 #define CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_SEARCH_PER_SESSION_SETTINGS_USER_ACTION_TRACKER_H_
 
 #include "base/time/time.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 
 namespace ash::settings {
 
diff --git a/chrome/browser/ui/webui/settings/hats_handler.cc b/chrome/browser/ui/webui/settings/hats_handler.cc
index 139107e..f57cb4f 100644
--- a/chrome/browser/ui/webui/settings/hats_handler.cc
+++ b/chrome/browser/ui/webui/settings/hats_handler.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/ui/webui/settings/hats_handler.h"
 
 #include "base/functional/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/hats/hats_service.h"
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index e9d5e53e..b158de8 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2012,8 +2012,8 @@
        IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_HEADING},
       {"topicsPageCurrentTopicsDescription",
        IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION},
-      {"topicsPageCurrentTopicsDescriptionLearnMore",
-       IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_LEARN_MORE},
+      {"topicsPageCurrentTopicsDescriptionLearnMoreLink",
+       IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_LEARN_MORE_LINK},
       {"topicsPageLearnMoreHeading",
        IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_HEADING},
       {"topicsPageLearnMoreBullet1",
@@ -2487,6 +2487,8 @@
      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_ONE},
     {"cookiePageBlockThirdIncognitoBulTwo",
      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO},
+    {"cookiePageBlockThirdIncognitoBulTwoFps",
+     IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_INCOGNITO_BULLET_TWO_FPS},
     {"cookiePageBlockThird", IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY},
     {"cookiePageBlockThirdExpandA11yLabel",
      IDS_SETTINGS_COOKIES_BLOCK_THIRD_PARTY_EXPAND_A11Y_LABEL},
@@ -3263,6 +3265,49 @@
   html_source->AddString("addSiteExceptionPlaceholder", "[*.]example.com");
 }
 
+void AddSiteDataPageStrings(content::WebUIDataSource* html_source,
+                            Profile* profile) {
+  static constexpr webui::LocalizedString kLocalizedStrings[] = {
+      {"siteDataPageTitle", IDS_SETTINGS_SITE_DATA_PAGE_TITLE},
+      {"siteDataPageDescription", IDS_SETTINGS_SITE_DATA_PAGE_DESCRIPTION},
+      {"siteDataPageDefaultBehavior",
+       IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_HEADING},
+      {"siteDataPagedefaultBehaviorDescription",
+       IDS_SETTINGS_SITE_DATA_PAGE_DEFAULT_BEHAVIOR_DESCRIPTION},
+      {"siteDataPageAllowRadioLabel",
+       IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_LABEL},
+      {"siteDataPageAllowRadioSubLabel",
+       IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_RADIO_SUB_LABEL},
+      {"siteDataPageClearOnExitRadioLabel",
+       IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_LABEL},
+      {"siteDataPageClearOnExitRadioSubLabel",
+       IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_RADIO_SUBLABEL},
+      {"siteDataPageBlockRadioLabel",
+       IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_LABEL},
+      {"siteDataPageBlockRadioSublabel",
+       IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_RADIO_SUB_LABEL},
+      {"siteDataPageCustomizedBehaviorHeading",
+       IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_HEADING},
+      {"siteDataPageCustomizedBehaviorDescription",
+       IDS_SETTINGS_SITE_DATA_PAGE_CUSTOMIZED_BEHAVIOR_DESCRIPTION},
+      {"siteDataPageAllowExceptionsSubHeading",
+       IDS_SETTINGS_SITE_DATA_PAGE_ALLOW_EXCEPTIONS_SUB_HEADING},
+      {"siteDataPageClearOnExitExceptionsSubHeading",
+       IDS_SETTINGS_SITE_DATA_PAGE_CLEAR_ON_EXIT_EXCEPTIONS_SUB_HEADING},
+      {"siteDataPageBlockExceptionsSubHeading",
+       IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_EXCEPTIONS_SUB_HEADING},
+      {"siteDataPageBlockConfirmDialogTitle",
+       IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_TITLE},
+      {"siteDataPageBlockConfirmDialogDescription",
+       IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_DESCRIPTION},
+      {"siteDataPageBlockConfirmDialogConfirmButton",
+       IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CONFIRM_BUTTON},
+      {"siteDataPageBlockConfirmDialogCancelButton",
+       IDS_SETTINGS_SITE_DATA_PAGE_BLOCK_CONFIRM_DIALOG_CANCEL_BUTTON},
+  };
+  html_source->AddLocalizedStrings(kLocalizedStrings);
+}
+
 #if !BUILDFLAG(IS_CHROMEOS_ASH)
 void AddSystemStrings(content::WebUIDataSource* html_source) {
   static constexpr webui::LocalizedString kLocalizedStrings[] = {
@@ -3483,6 +3528,7 @@
   AddSearchInSettingsStrings(html_source);
   AddSearchStrings(html_source);
   AddSiteSettingsStrings(html_source, profile);
+  AddSiteDataPageStrings(html_source, profile);
 
 #if !BUILDFLAG(IS_CHROMEOS)
   AddDefaultBrowserStrings(html_source);
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
index 0274b1a..6c55a98 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
@@ -9,7 +9,6 @@
 #include "base/functional/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/consent_auditor/consent_auditor_factory.h"
 #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc
index 8e1226e..a26e708 100644
--- a/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc
+++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc
@@ -18,6 +18,7 @@
 #include "base/metrics/user_metrics_action.h"
 #include "base/no_destructor.h"
 #include "base/supports_user_data.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/enterprise/browser_management/management_service_factory.h"
 #include "chrome/browser/enterprise/util/managed_browser_utils.h"
 #include "chrome/browser/policy/cloud/user_policy_signin_service.h"
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc
index fb8fdfb..299ac8d 100644
--- a/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc
+++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_file_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/enterprise/browser_management/management_service_factory.h"
diff --git a/chrome/browser/updater/browser_updater_helper_client_mac.mm b/chrome/browser/updater/browser_updater_helper_client_mac.mm
index 9ff8abd..29b674a 100644
--- a/chrome/browser/updater/browser_updater_helper_client_mac.mm
+++ b/chrome/browser/updater/browser_updater_helper_client_mac.mm
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/bind_post_task.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/browser/updater/browser_updater_client_util.h"
 #include "chrome/updater/mac/privileged_helper/service_protocol.h"
diff --git a/chrome/browser/updates/announcement_notification/announcement_notification_service.cc b/chrome/browser/updates/announcement_notification/announcement_notification_service.cc
index 04355154..d9f015f 100644
--- a/chrome/browser/updates/announcement_notification/announcement_notification_service.cc
+++ b/chrome/browser/updates/announcement_notification/announcement_notification_service.cc
@@ -9,7 +9,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/field_trial_params.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/upgrade_detector/installed_version_poller.cc b/chrome/browser/upgrade_detector/installed_version_poller.cc
index 6df52c0e..64f4ee9 100644
--- a/chrome/browser/upgrade_detector/installed_version_poller.cc
+++ b/chrome/browser/upgrade_detector/installed_version_poller.cc
@@ -16,7 +16,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/upgrade_detector/build_state.h"
 #include "chrome/browser/upgrade_detector/get_installed_version.h"
 #include "chrome/browser/upgrade_detector/installed_version_monitor.h"
diff --git a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc b/chrome/browser/upgrade_detector/upgrade_detector_impl.cc
index 1055fffb..ae24d2d8 100644
--- a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc
+++ b/chrome/browser/upgrade_detector/upgrade_detector_impl.cc
@@ -17,7 +17,6 @@
 #include "base/notreached.h"
 #include "base/ranges/algorithm.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
diff --git a/chrome/browser/video_tutorials/internal/tutorial_manager_impl.cc b/chrome/browser/video_tutorials/internal/tutorial_manager_impl.cc
index ee0e04f7..b6f9a89 100644
--- a/chrome/browser/video_tutorials/internal/tutorial_manager_impl.cc
+++ b/chrome/browser/video_tutorials/internal/tutorial_manager_impl.cc
@@ -8,7 +8,6 @@
 #include <vector>
 
 #include "base/functional/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/prefs/pref_service.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/browser/vr/base_scheduler_delegate.h b/chrome/browser/vr/base_scheduler_delegate.h
index 51f5a52..3745b95 100644
--- a/chrome/browser/vr/base_scheduler_delegate.h
+++ b/chrome/browser/vr/base_scheduler_delegate.h
@@ -7,6 +7,7 @@
 
 #include "base/cancelable_callback.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/vr/scheduler_delegate.h"
 #include "chrome/browser/vr/vr_export.h"
 #include "device/vr/util/fps_meter.h"
diff --git a/chrome/browser/vr/speech_recognizer_unittest.cc b/chrome/browser/vr/speech_recognizer_unittest.cc
index 24a11c7a..ec162a6 100644
--- a/chrome/browser/vr/speech_recognizer_unittest.cc
+++ b/chrome/browser/vr/speech_recognizer_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/notreached.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/mock_timer.h"
 #include "chrome/browser/vr/browser_ui_interface.h"
 #include "chrome/browser/vr/test/mock_browser_ui_interface.h"
diff --git a/chrome/browser/vr/test/gl_test_environment_cmd_buffer.cc b/chrome/browser/vr/test/gl_test_environment_cmd_buffer.cc
index cdaaff02..47a23b7 100644
--- a/chrome/browser/vr/test/gl_test_environment_cmd_buffer.cc
+++ b/chrome/browser/vr/test/gl_test_environment_cmd_buffer.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/vr/test/gl_test_environment.h"
 
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "gpu/command_buffer/client/gles2_implementation.h"
 #include "gpu/command_buffer/client/gles2_lib.h"
 #include "gpu/command_buffer/client/shared_memory_limits.h"
diff --git a/chrome/browser/vr/test/ui_utils.cc b/chrome/browser/vr/test/ui_utils.cc
index 15025b2..cb93954 100644
--- a/chrome/browser/vr/test/ui_utils.cc
+++ b/chrome/browser/vr/test/ui_utils.cc
@@ -4,6 +4,7 @@
 
 #include "base/functional/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/platform_thread.h"
 #include "build/build_config.h"
 #if BUILDFLAG(IS_WIN)
diff --git a/chrome/browser/vr/test/ui_utils.h b/chrome/browser/vr/test/ui_utils.h
index 4f3e7bd..5183a76 100644
--- a/chrome/browser/vr/test/ui_utils.h
+++ b/chrome/browser/vr/test/ui_utils.h
@@ -7,6 +7,7 @@
 
 #include "base/functional/callback.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "chrome/browser/vr/ui_test_input.h"
 
diff --git a/chrome/browser/vr/test/xr_browser_test.cc b/chrome/browser/vr/test/xr_browser_test.cc
index 8b8ed5b..b3f5e29e 100644
--- a/chrome/browser/vr/test/xr_browser_test.cc
+++ b/chrome/browser/vr/test/xr_browser_test.cc
@@ -15,6 +15,7 @@
 #include "base/path_service.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/vr/ui_host/vr_ui_host_impl.cc b/chrome/browser/vr/ui_host/vr_ui_host_impl.cc
index e37d912..6d4927a1 100644
--- a/chrome/browser/vr/ui_host/vr_ui_host_impl.cc
+++ b/chrome/browser/vr/ui_host/vr_ui_host_impl.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
 #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
diff --git a/chrome/browser/vr/win/vr_browser_renderer_thread_win.cc b/chrome/browser/vr/win/vr_browser_renderer_thread_win.cc
index 66384856..360a6c5c8f 100644
--- a/chrome/browser/vr/win/vr_browser_renderer_thread_win.cc
+++ b/chrome/browser/vr/win/vr_browser_renderer_thread_win.cc
@@ -7,6 +7,7 @@
 #include <vector>
 
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/vr/audio_delegate.h"
 #include "chrome/browser/vr/browser_renderer.h"
 #include "chrome/browser/vr/content_input_delegate.h"
diff --git a/chrome/browser/vr/win/vr_browser_renderer_thread_win.h b/chrome/browser/vr/win/vr_browser_renderer_thread_win.h
index 8a75207..6e3d591 100644
--- a/chrome/browser/vr/win/vr_browser_renderer_thread_win.h
+++ b/chrome/browser/vr/win/vr_browser_renderer_thread_win.h
@@ -9,6 +9,7 @@
 
 #include "base/cancelable_callback.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "chrome/browser/vr/browser_renderer.h"
 #include "chrome/browser/vr/model/capturing_state_model.h"
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 533d106..0304ff3 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -240,6 +240,7 @@
     "web_app_translation_manager.h",
     "web_app_ui_manager.cc",
     "web_app_ui_manager.h",
+    "web_app_uninstall_and_replace_job.h",
     "web_app_uninstall_job.cc",
     "web_app_uninstall_job.h",
     "web_app_url_loader.cc",
diff --git a/chrome/browser/web_applications/commands/externally_managed_install_command.cc b/chrome/browser/web_applications/commands/externally_managed_install_command.cc
index 2a4d5584..675fce1 100644
--- a/chrome/browser/web_applications/commands/externally_managed_install_command.cc
+++ b/chrome/browser/web_applications/commands/externally_managed_install_command.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_utils.h"
 #include "chrome/browser/web_applications/web_app_logging.h"
+#include "chrome/browser/web_applications/web_app_uninstall_and_replace_job.h"
 #include "chrome/common/chrome_features.h"
 #include "components/webapps/browser/features.h"
 #include "components/webapps/browser/installable/installable_logging.h"
@@ -30,16 +31,19 @@
 namespace web_app {
 
 ExternallyManagedInstallCommand::ExternallyManagedInstallCommand(
+    Profile* profile,
     const ExternalInstallOptions& external_install_options,
-    OnceInstallCallback callback,
+    InstallAndReplaceCallback callback,
     base::WeakPtr<content::WebContents> contents,
     std::unique_ptr<WebAppDataRetriever> data_retriever)
     : WebAppCommandTemplate<NoopLock>("ExternallyManagedInstallCommand"),
+      profile_(profile),
       noop_lock_description_(std::make_unique<NoopLockDescription>()),
       install_params_(
           ConvertExternalInstallOptionsToParams(external_install_options)),
       install_surface_(ConvertExternalInstallSourceToInstallSource(
           external_install_options.install_source)),
+      apps_to_uninstall_(external_install_options.uninstall_and_replace),
       install_callback_(std::move(callback)),
       web_contents_(contents),
       data_retriever_(std::move(data_retriever)),
@@ -101,7 +105,8 @@
   webapps::InstallableMetrics::TrackInstallResult(false);
   SignalCompletionAndSelfDestruct(
       CommandResult::kFailure,
-      base::BindOnce(std::move(install_callback_), AppId(), code));
+      base::BindOnce(std::move(install_callback_), AppId(), code,
+                     /*did_uninstall_and_replace=*/false));
 }
 
 void ExternallyManagedInstallCommand::OnGetWebAppInstallInfoInCommand(
@@ -251,7 +256,6 @@
     finalize_options.skip_icon_writes_on_download_failure =
         icon_download_failed_;
   }
-
   app_lock_->install_finalizer().FinalizeInstall(
       *web_app_info_, finalize_options,
       base::BindOnce(&ExternallyManagedInstallCommand::OnInstallFinalized,
@@ -293,9 +297,24 @@
   }
 
   webapps::InstallableMetrics::TrackInstallResult(webapps::IsSuccess(code));
+
+  DCHECK(app_lock_);
+  uninstall_and_replace_job_.emplace(
+      profile_, app_lock_->AsWeakPtr(), apps_to_uninstall_, app_id,
+      base::BindOnce(&ExternallyManagedInstallCommand::OnUninstallAndReplaced,
+                     weak_factory_.GetWeakPtr(), app_id, code));
+  uninstall_and_replace_job_->Start();
+}
+
+void ExternallyManagedInstallCommand::OnUninstallAndReplaced(
+    const AppId& app_id,
+    webapps::InstallResultCode code,
+    bool did_uninstall_and_replace) {
+  debug_value_.Set("did_uninstall_and_replace", did_uninstall_and_replace);
   SignalCompletionAndSelfDestruct(
       CommandResult::kSuccess,
-      base::BindOnce(std::move(install_callback_), app_id, code));
+      base::BindOnce(std::move(install_callback_), app_id, code,
+                     did_uninstall_and_replace));
 }
 
 void ExternallyManagedInstallCommand::SetOnLockUpgradedCallbackForTesting(
diff --git a/chrome/browser/web_applications/commands/externally_managed_install_command.h b/chrome/browser/web_applications/commands/externally_managed_install_command.h
index 05dc9b0d..b1205df 100644
--- a/chrome/browser/web_applications/commands/externally_managed_install_command.h
+++ b/chrome/browser/web_applications/commands/externally_managed_install_command.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <variant>
 
+#include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/values.h"
 #include "chrome/browser/web_applications/commands/web_app_command.h"
@@ -15,9 +16,11 @@
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/web_app_install_params.h"
 #include "chrome/browser/web_applications/web_app_logging.h"
+#include "chrome/browser/web_applications/web_app_uninstall_and_replace_job.h"
 #include "components/webapps/browser/install_result_code.h"
 #include "components/webapps/browser/installable/installable_logging.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace content {
 class WebContents;
@@ -35,9 +38,14 @@
 // Command to install web_apps from param by the ExternallyInstalledAppsManager
 class ExternallyManagedInstallCommand : public WebAppCommandTemplate<NoopLock> {
  public:
+  using InstallAndReplaceCallback =
+      base::OnceCallback<void(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace)>;
   ExternallyManagedInstallCommand(
+      Profile* profile,
       const ExternalInstallOptions& external_install_options,
-      OnceInstallCallback callback,
+      InstallAndReplaceCallback callback,
       base::WeakPtr<content::WebContents> contents,
       std::unique_ptr<WebAppDataRetriever> data_retriever);
   ~ExternallyManagedInstallCommand() override;
@@ -71,6 +79,11 @@
   void OnInstallFinalized(const AppId& app_id,
                           webapps::InstallResultCode code,
                           OsHooksErrors os_hooks_errors);
+  void OnUninstallAndReplaced(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace);
+
+  const raw_ptr<Profile> profile_;
 
   std::unique_ptr<NoopLockDescription> noop_lock_description_;
   std::unique_ptr<AppLockDescription> app_lock_description_;
@@ -80,7 +93,8 @@
 
   WebAppInstallParams install_params_;
   webapps::WebappInstallSource install_surface_;
-  OnceInstallCallback install_callback_;
+  const std::vector<AppId> apps_to_uninstall_;
+  InstallAndReplaceCallback install_callback_;
 
   base::WeakPtr<content::WebContents> web_contents_;
 
@@ -90,6 +104,8 @@
   std::unique_ptr<WebAppDataRetriever> data_retriever_;
   std::unique_ptr<WebAppInstallInfo> web_app_info_;
 
+  absl::optional<WebAppUninstallAndReplaceJob> uninstall_and_replace_job_;
+
   base::Value::Dict debug_value_;
   InstallErrorLogEntry install_error_log_entry_;
 
diff --git a/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc b/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc
index 96d3f671..7426755 100644
--- a/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc
+++ b/chrome/browser/web_applications/commands/externally_managed_install_command_browsertest.cc
@@ -62,12 +62,11 @@
       /*user_display_mode=*/absl::nullopt,
       ExternalInstallSource::kInternalDefault);
 
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options, future.GetCallback(),
-          browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options, future.GetCallback(),
+      browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& app_id = future.Get<0>();
   webapps::InstallResultCode result_code = future.Get<1>();
@@ -85,12 +84,11 @@
   ExternalInstallOptions install_options(
       kWebAppUrl, mojom::UserDisplayMode::kStandalone,
       ExternalInstallSource::kExternalDefault);
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options, future.GetCallback(),
-          browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options, future.GetCallback(),
+      browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& app_id = future.Get<0>();
   webapps::InstallResultCode result_code = future.Get<1>();
@@ -112,13 +110,12 @@
       kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kInternalDefault);
 
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
+  provider().scheduler().InstallExternallyManagedApp(
 
-          install_options, future.GetCallback(),
-          browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+      install_options, future.GetCallback(),
+      browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& app_id = future.Get<0>();
   webapps::InstallResultCode result_code = future.Get<1>();
@@ -139,13 +136,12 @@
   ExternalInstallOptions install_options(
       kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
 
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options, future.GetCallback(),
-          browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options, future.GetCallback(),
+      browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& app_id = future.Get<0>();
   webapps::InstallResultCode result_code = future.Get<1>();
@@ -160,16 +156,15 @@
   const GURL kWebAppUrl("https://external_app.com");
   EXPECT_FALSE(NavigateAndAwaitInstallabilityCheck(browser(), kWebAppUrl));
 
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
   ExternalInstallOptions install_options(
       kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
   auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
 
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options, future.GetCallback(), web_contents->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options, future.GetCallback(), web_contents->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   // Create a new tab to ensure that the browser isn't destroyed with the web
   // contents closing.
@@ -186,7 +181,7 @@
   const GURL kWebAppUrl("https://external_app.com");
   EXPECT_FALSE(NavigateAndAwaitInstallabilityCheck(browser(), kWebAppUrl));
 
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
   ExternalInstallOptions install_options(
       kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
@@ -195,10 +190,9 @@
   install_options.require_manifest = true;
   auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
 
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options, future.GetCallback(), web_contents->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options, future.GetCallback(), web_contents->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& app_id = future.Get<0>();
   webapps::InstallResultCode result_code = future.Get<1>();
@@ -214,17 +208,16 @@
       "manifest_test_page.html");
   EXPECT_TRUE(NavigateAndAwaitInstallabilityCheck(browser(), kWebAppUrl));
 
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode>
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool>
       future_first_install;
   ExternalInstallOptions install_options(
       kWebAppUrl, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kInternalDefault);
 
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options, future_first_install.GetCallback(),
-          browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options, future_first_install.GetCallback(),
+      browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& first_app_id = future_first_install.Get<0>();
   webapps::InstallResultCode first_install_code = future_first_install.Get<1>();
@@ -244,17 +237,16 @@
   EXPECT_TRUE(
       ui_test_utils::NavigateToURL(browser(), kWebAppUrlDifferentManifest));
 
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode>
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool>
       future_second_install;
   ExternalInstallOptions install_options_policy(
       kWebAppUrlDifferentManifest, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
 
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options_policy, future_second_install.GetCallback(),
-          browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options_policy, future_second_install.GetCallback(),
+      browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& second_app_id = future_second_install.Get<0>();
   webapps::InstallResultCode second_install_code =
@@ -320,17 +312,16 @@
   EXPECT_TRUE(
       ui_test_utils::NavigateToURL(browser(), kWebAppUrlDifferentManifest));
 
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode>
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool>
       future_second_install;
   ExternalInstallOptions install_options_policy(
       kWebAppUrlDifferentManifest, mojom::UserDisplayMode::kBrowser,
       ExternalInstallSource::kExternalPolicy);
 
-  provider().command_manager().ScheduleCommand(
-      std::make_unique<ExternallyManagedInstallCommand>(
-          install_options_policy, future_second_install.GetCallback(),
-          browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
-          std::make_unique<WebAppDataRetriever>()));
+  provider().scheduler().InstallExternallyManagedApp(
+      install_options_policy, future_second_install.GetCallback(),
+      browser()->tab_strip_model()->GetActiveWebContents()->GetWeakPtr(),
+      std::make_unique<WebAppDataRetriever>());
 
   const AppId& second_app_id = future_second_install.Get<0>();
   webapps::InstallResultCode second_install_code =
diff --git a/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc b/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc
index 27d7029b..6b286570 100644
--- a/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/externally_managed_install_command_unittest.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/web_applications/locks/app_lock.h"
 #include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/test/fake_data_retriever.h"
+#include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
@@ -59,11 +60,12 @@
   InstallResult InstallAndWait(
       const ExternalInstallOptions& install_options,
       std::unique_ptr<WebAppDataRetriever> data_retriever) {
-    base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
+    base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool>
+        future;
     provider()->command_manager().ScheduleCommand(
         std::make_unique<ExternallyManagedInstallCommand>(
-            install_options, future.GetCallback(), web_contents()->GetWeakPtr(),
-            std::move(data_retriever)));
+            profile(), install_options, future.GetCallback(),
+            web_contents()->GetWeakPtr(), std::move(data_retriever)));
     InstallResult result{.installed_app_id = future.Get<0>(),
                          .install_code = future.Get<1>()};
     return result;
@@ -80,6 +82,12 @@
 
   void SetUp() override {
     WebAppTest::SetUp();
+    auto shortcut_manager = std::make_unique<TestShortcutManager>(profile());
+    shortcut_manager_ = shortcut_manager.get();
+    FakeWebAppProvider::Get(profile())
+        ->GetOsIntegrationManager()
+        .AsTestOsIntegrationManager()
+        ->SetShortcutManager(std::move(shortcut_manager));
 
     test::AwaitStartWebAppProviderAndSubsystems(profile());
   }
@@ -149,8 +157,16 @@
     return colors;
   }
 
+  FakeOsIntegrationManager* os_integration_manager() {
+    return WebAppProvider::GetForTest(profile())
+        ->os_integration_manager()
+        .AsTestOsIntegrationManager();
+  }
+  TestShortcutManager* shortcut_manager() { return shortcut_manager_; }
+
  private:
   base::flat_map<AppId, BitmapData> app_to_icons_data_;
+  raw_ptr<TestShortcutManager> shortcut_manager_;
 };
 
 TEST_F(ExternallyManagedInstallCommandTest, Success) {
@@ -299,13 +315,14 @@
   base::RunLoop run_loop;
   InstallResult result;
   auto command = std::make_unique<ExternallyManagedInstallCommand>(
-      install_options,
-      base::BindLambdaForTesting(
-          [&](const AppId& app_id, webapps::InstallResultCode code) {
-            result.install_code = code;
-            result.installed_app_id = app_id;
-            run_loop.Quit();
-          }),
+      profile(), install_options,
+      base::BindLambdaForTesting([&](const AppId& app_id,
+                                     webapps::InstallResultCode code,
+                                     bool did_uninstall_and_replace) {
+        result.install_code = code;
+        result.installed_app_id = app_id;
+        run_loop.Quit();
+      }),
       web_contents()->GetWeakPtr(), std::move(data_retriever));
 
   // Schedules another callback command that acquires the same app lock after
@@ -591,5 +608,51 @@
   }
 }
 
+#if !BUILDFLAG(IS_CHROMEOS_LACROS)
+TEST_F(ExternallyManagedInstallCommandTest, SuccessWithUninstallAndReplace) {
+  GURL old_app_url("http://old-app.com");
+  const AppId old_app =
+      test::InstallDummyWebApp(profile(), "old_app", old_app_url);
+  auto shortcut_info = std::make_unique<ShortcutInfo>();
+  shortcut_info->url = old_app_url;
+  shortcut_manager()->SetShortcutInfoForApp(old_app, std::move(shortcut_info));
+
+  ShortcutLocations shortcut_locations;
+  shortcut_locations.on_desktop = false;
+  shortcut_locations.in_quick_launch_bar = true;
+  shortcut_locations.in_startup = true;
+  shortcut_manager()->SetAppExistingShortcuts(old_app_url, shortcut_locations);
+
+  ExternalInstallOptions install_options(
+      kWebAppUrl, mojom::UserDisplayMode::kStandalone,
+      ExternalInstallSource::kExternalDefault);
+  install_options.uninstall_and_replace = {old_app};
+
+  auto data_retriever = std::make_unique<FakeDataRetriever>();
+  data_retriever->BuildDefaultDataToRetrieve(kWebAppUrl, kWebAppScope);
+
+  auto result = InstallAndWait(install_options, std::move(data_retriever));
+  EXPECT_EQ(result.install_code,
+            webapps::InstallResultCode::kSuccessNewInstall);
+  EXPECT_TRUE(provider()->registrar_unsafe().IsLocallyInstalled(
+      result.installed_app_id));
+
+  EXPECT_TRUE(os_integration_manager()->did_add_to_desktop());
+  auto options = os_integration_manager()->get_last_install_options();
+  EXPECT_FALSE(options->add_to_desktop);
+  EXPECT_TRUE(options->add_to_quick_launch_bar);
+  EXPECT_TRUE(options->os_hooks[OsHookType::kRunOnOsLogin]);
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider()->registrar_unsafe().GetAppCurrentOsIntegrationState(
+            result.installed_app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_TRUE(os_state->has_shortcut());
+    EXPECT_EQ(os_state->run_on_os_login().run_on_os_login_mode(),
+              proto::RunOnOsLoginMode::WINDOWED);
+  }
+}
+#endif  // !BUILDFLAG(IS_CHROMEOS_LACROS)
+
 }  // namespace
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/commands/install_from_info_command.cc b/chrome/browser/web_applications/commands/install_from_info_command.cc
index 0dae179e..9f436c4 100644
--- a/chrome/browser/web_applications/commands/install_from_info_command.cc
+++ b/chrome/browser/web_applications/commands/install_from_info_command.cc
@@ -13,21 +13,25 @@
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/web_applications/locks/app_lock.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_utils.h"
+#include "chrome/browser/web_applications/web_app_uninstall_and_replace_job.h"
 #include "components/webapps/browser/install_result_code.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
 
 namespace web_app {
 
 InstallFromInfoCommand::InstallFromInfoCommand(
+    Profile* profile,
     std::unique_ptr<WebAppInstallInfo> install_info,
     bool overwrite_existing_manifest_fields,
     webapps::WebappInstallSource install_surface,
     OnceInstallCallback install_callback)
     : WebAppCommandTemplate<AppLock>("InstallFromInfoCommand"),
+      profile_(profile),
       lock_description_(
           std::make_unique<AppLockDescription, base::flat_set<AppId>>(
               {GenerateAppId(install_info->manifest_id,
@@ -37,17 +41,59 @@
       install_info_(std::move(install_info)),
       overwrite_existing_manifest_fields_(overwrite_existing_manifest_fields),
       install_surface_(install_surface),
-      install_callback_(std::move(install_callback)) {
+      install_callback_(base::BindOnce(
+          [](OnceInstallCallback install_callback,
+             const AppId& app_id,
+             webapps::InstallResultCode code,
+             bool _) { std::move(install_callback).Run(app_id, code); },
+          std::move(install_callback))) {
   PopulateInitialDebugInfo();
 }
 
 InstallFromInfoCommand::InstallFromInfoCommand(
+    Profile* profile,
     std::unique_ptr<WebAppInstallInfo> install_info,
     bool overwrite_existing_manifest_fields,
     webapps::WebappInstallSource install_surface,
     OnceInstallCallback install_callback,
     const WebAppInstallParams& install_params)
     : WebAppCommandTemplate<AppLock>("InstallFromInfoCommand"),
+      profile_(profile),
+      lock_description_(
+          std::make_unique<AppLockDescription, base::flat_set<AppId>>(
+              {GenerateAppId(install_info->manifest_id,
+                             install_info->start_url)})),
+      app_id_(
+          GenerateAppId(install_info->manifest_id, install_info->start_url)),
+      install_info_(std::move(install_info)),
+      overwrite_existing_manifest_fields_(overwrite_existing_manifest_fields),
+      install_surface_(install_surface),
+      install_callback_(base::BindOnce(
+          [](OnceInstallCallback install_callback,
+             const AppId& app_id,
+             webapps::InstallResultCode code,
+             bool _) { std::move(install_callback).Run(app_id, code); },
+          std::move(install_callback))),
+      install_params_(install_params) {
+  if (!install_params.locally_installed) {
+    DCHECK(!install_params.add_to_applications_menu);
+    DCHECK(!install_params.add_to_desktop);
+    DCHECK(!install_params.add_to_quick_launch_bar);
+  }
+  DCHECK(install_info_->start_url.is_valid());
+  PopulateInitialDebugInfo();
+}
+
+InstallFromInfoCommand::InstallFromInfoCommand(
+    Profile* profile,
+    std::unique_ptr<WebAppInstallInfo> install_info,
+    bool overwrite_existing_manifest_fields,
+    webapps::WebappInstallSource install_surface,
+    InstallAndReplaceCallback install_callback,
+    const WebAppInstallParams& install_params,
+    const std::vector<AppId>& apps_or_extensions_to_uninstall)
+    : WebAppCommandTemplate<AppLock>("InstallFromInfoCommand"),
+      profile_(profile),
       lock_description_(
           std::make_unique<AppLockDescription, base::flat_set<AppId>>(
               {GenerateAppId(install_info->manifest_id,
@@ -58,7 +104,8 @@
       overwrite_existing_manifest_fields_(overwrite_existing_manifest_fields),
       install_surface_(install_surface),
       install_callback_(std::move(install_callback)),
-      install_params_(install_params) {
+      install_params_(install_params),
+      apps_or_extensions_to_uninstall_(apps_or_extensions_to_uninstall) {
   if (!install_params.locally_installed) {
     DCHECK(!install_params.add_to_applications_menu);
     DCHECK(!install_params.add_to_desktop);
@@ -122,7 +169,8 @@
   webapps::InstallableMetrics::TrackInstallResult(false);
   SignalCompletionAndSelfDestruct(
       CommandResult::kFailure,
-      base::BindOnce(std::move(install_callback_), app_id_, code));
+      base::BindOnce(std::move(install_callback_), app_id_, code,
+                     /*did_uninstall_and_replace=*/false));
 }
 
 void InstallFromInfoCommand::OnInstallCompleted(const AppId& app_id,
@@ -130,10 +178,29 @@
                                                 OsHooksErrors os_hooks_errors) {
   webapps::InstallableMetrics::TrackInstallResult(webapps::IsSuccess(code));
   debug_value_.Set("result_code", base::StreamableToString(code));
+  if (!webapps::IsSuccess(code)) {
+    OnUnintallAndReplaceFinished(app_id, code,
+                                 /*did_uninstall_and_replace=*/false);
+    return;
+  }
+
+  uninstall_and_replace_job_.emplace(
+      profile_, lock_->AsWeakPtr(), apps_or_extensions_to_uninstall_, app_id,
+      base::BindOnce(&InstallFromInfoCommand::OnUnintallAndReplaceFinished,
+                     weak_factory_.GetWeakPtr(), app_id, std::move(code)));
+  uninstall_and_replace_job_->Start();
+}
+
+void InstallFromInfoCommand::OnUnintallAndReplaceFinished(
+    const AppId& app_id,
+    webapps::InstallResultCode code,
+    bool did_uninstall_and_replace) {
+  debug_value_.Set("did_uninstall_and_replace", did_uninstall_and_replace);
   SignalCompletionAndSelfDestruct(
       webapps::IsSuccess(code) ? CommandResult::kSuccess
                                : CommandResult::kFailure,
-      base::BindOnce(std::move(install_callback_), app_id, code));
+      base::BindOnce(std::move(install_callback_), app_id, code,
+                     did_uninstall_and_replace));
 }
 
 void InstallFromInfoCommand::OnSyncSourceRemoved() {}
diff --git a/chrome/browser/web_applications/commands/install_from_info_command.h b/chrome/browser/web_applications/commands/install_from_info_command.h
index ccdbe6e5..e449deeb 100644
--- a/chrome/browser/web_applications/commands/install_from_info_command.h
+++ b/chrome/browser/web_applications/commands/install_from_info_command.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/values.h"
 #include "chrome/browser/web_applications/commands/web_app_command.h"
@@ -14,10 +15,13 @@
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
 #include "chrome/browser/web_applications/web_app_install_params.h"
+#include "chrome/browser/web_applications/web_app_uninstall_and_replace_job.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/manifest/manifest.mojom-forward.h"
 
+class Profile;
+
 namespace web_app {
 
 class AppLock;
@@ -39,17 +43,36 @@
 // site then `overwrite_existing_manifest_fields` should be true.
 class InstallFromInfoCommand : public WebAppCommandTemplate<AppLock> {
  public:
-  InstallFromInfoCommand(std::unique_ptr<WebAppInstallInfo> install_info,
+  using InstallAndReplaceCallback =
+      base::OnceCallback<void(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace)>;
+
+  // This doesn't install OS hooks.
+  InstallFromInfoCommand(Profile* profile,
+                         std::unique_ptr<WebAppInstallInfo> install_info,
                          bool overwrite_existing_manifest_fields,
                          webapps::WebappInstallSource install_surface,
                          OnceInstallCallback install_callback);
 
-  InstallFromInfoCommand(std::unique_ptr<WebAppInstallInfo> install_info,
+  // The `install_params` controls whether and how OS hooks get installed.
+  InstallFromInfoCommand(Profile* profile,
+                         std::unique_ptr<WebAppInstallInfo> install_info,
                          bool overwrite_existing_manifest_fields,
                          webapps::WebappInstallSource install_surface,
                          OnceInstallCallback install_callback,
                          const WebAppInstallParams& install_params);
 
+  // The `install_params` controls whether and how OS hooks get installed.
+  InstallFromInfoCommand(
+      Profile* profile,
+      std::unique_ptr<WebAppInstallInfo> install_info,
+      bool overwrite_existing_manifest_fields,
+      webapps::WebappInstallSource install_surface,
+      InstallAndReplaceCallback install_callback,
+      const WebAppInstallParams& install_params,
+      const std::vector<AppId>& apps_or_extensions_to_uninstall);
+
   ~InstallFromInfoCommand() override;
 
   LockDescription& lock_description() const override;
@@ -69,6 +92,12 @@
                           webapps::InstallResultCode code,
                           OsHooksErrors os_hooks_errors);
 
+  void OnUnintallAndReplaceFinished(const AppId& app_id,
+                                    webapps::InstallResultCode code,
+                                    bool did_uninstall_and_replace);
+
+  const raw_ptr<Profile> profile_;
+
   std::unique_ptr<AppLockDescription> lock_description_;
   std::unique_ptr<AppLock> lock_;
 
@@ -76,9 +105,12 @@
   std::unique_ptr<WebAppInstallInfo> install_info_;
   bool overwrite_existing_manifest_fields_;
   webapps::WebappInstallSource install_surface_;
-  OnceInstallCallback install_callback_;
+  InstallAndReplaceCallback install_callback_;
   absl::optional<WebAppInstallParams> install_params_;
 
+  const std::vector<AppId> apps_or_extensions_to_uninstall_;
+  absl::optional<WebAppUninstallAndReplaceJob> uninstall_and_replace_job_;
+
   base::Value::Dict debug_value_;
 
   base::WeakPtrFactory<InstallFromInfoCommand> weak_factory_{this};
diff --git a/chrome/browser/web_applications/commands/install_from_info_command_browsertest.cc b/chrome/browser/web_applications/commands/install_from_info_command_browsertest.cc
index 24815bd35..db160bd 100644
--- a/chrome/browser/web_applications/commands/install_from_info_command_browsertest.cc
+++ b/chrome/browser/web_applications/commands/install_from_info_command_browsertest.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
 #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h"
+#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_scheduler.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
@@ -51,6 +52,10 @@
     run_loop.Run();
     return result;
   }
+
+  FakeOsIntegrationManager* os_integration_manager() {
+    return provider().os_integration_manager().AsTestOsIntegrationManager();
+  }
 };
 
 IN_PROC_BROWSER_TEST_F(InstallFromInfoCommandTest, SuccessInstall) {
@@ -79,11 +84,7 @@
   loop.Run();
 
   EXPECT_TRUE(provider().registrar_unsafe().IsActivelyInstalled(result_app_id));
-  EXPECT_EQ(provider()
-                .os_integration_manager()
-                .AsTestOsIntegrationManager()
-                ->num_create_shortcuts_calls(),
-            0u);
+  EXPECT_EQ(os_integration_manager()->num_create_shortcuts_calls(), 0u);
 
   const WebApp* web_app =
       provider().registrar_unsafe().GetAppById(result_app_id);
@@ -108,6 +109,7 @@
   install_params.add_to_desktop = true;
 
   base::RunLoop loop;
+  AppId result_app_id;
   provider().scheduler().InstallFromInfoWithParams(
       std::move(info),
       /*overwrite_existing_manifest_fields=*/false,
@@ -117,15 +119,89 @@
             EXPECT_EQ(code, webapps::InstallResultCode::kSuccessNewInstall);
             EXPECT_TRUE(
                 provider().registrar_unsafe().IsActivelyInstalled(app_id));
+            result_app_id = app_id;
             loop.Quit();
           }),
       install_params);
   loop.Run();
-  EXPECT_EQ(provider()
-                .os_integration_manager()
-                .AsTestOsIntegrationManager()
-                ->num_create_shortcuts_calls(),
-            1u);
+  EXPECT_EQ(os_integration_manager()->num_create_shortcuts_calls(), 1u);
+  auto options = os_integration_manager()->get_last_install_options();
+  EXPECT_TRUE(options->add_to_desktop);
+  EXPECT_TRUE(options->add_to_quick_launch_bar);
+  EXPECT_FALSE(options->os_hooks[OsHookType::kRunOnOsLogin]);
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider().registrar_unsafe().GetAppCurrentOsIntegrationState(
+            result_app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_TRUE(os_state->has_shortcut());
+    EXPECT_EQ(os_state->run_on_os_login().run_on_os_login_mode(),
+              proto::RunOnOsLoginMode::NOT_RUN);
+  }
 }
 
+#if !BUILDFLAG(IS_CHROMEOS_LACROS)
+IN_PROC_BROWSER_TEST_F(InstallFromInfoCommandTest,
+                       InstallWithParamsAndUnintallAndReplace) {
+  auto shortcut_manager = std::make_unique<TestShortcutManager>(profile());
+  TestShortcutManager* shortcut_manager_ptr = shortcut_manager.get();
+  os_integration_manager()->SetShortcutManager(std::move(shortcut_manager));
+
+  GURL old_app_url("http://old-app.com");
+  const AppId old_app =
+      test::InstallDummyWebApp(profile(), "old_app", old_app_url);
+  auto shortcut_info = std::make_unique<ShortcutInfo>();
+  shortcut_info->url = old_app_url;
+  shortcut_manager_ptr->SetShortcutInfoForApp(old_app,
+                                              std::move(shortcut_info));
+  ShortcutLocations shortcut_locations;
+  shortcut_locations.on_desktop = false;
+  shortcut_locations.in_quick_launch_bar = true;
+  shortcut_locations.in_startup = true;
+  shortcut_manager_ptr->SetAppExistingShortcuts(old_app_url,
+                                                shortcut_locations);
+
+  auto info = std::make_unique<WebAppInstallInfo>();
+  info->start_url = GURL("http://test.com/path");
+  info->title = u"test app";
+
+  WebAppInstallParams install_params;
+  install_params.bypass_os_hooks = false;
+  install_params.add_to_applications_menu = true;
+  install_params.add_to_desktop = true;
+
+  base::RunLoop loop;
+  AppId result_app_id;
+  provider().scheduler().InstallFromInfoWithParams(
+      std::move(info),
+      /*overwrite_existing_manifest_fields=*/false,
+      webapps::WebappInstallSource::MENU_BROWSER_TAB,
+      base::BindLambdaForTesting([&](const AppId& app_id,
+                                     webapps::InstallResultCode code,
+                                     bool did_uninstall_and_replace) {
+        EXPECT_EQ(code, webapps::InstallResultCode::kSuccessNewInstall);
+        EXPECT_TRUE(provider().registrar_unsafe().IsActivelyInstalled(app_id));
+        EXPECT_TRUE(did_uninstall_and_replace);
+        result_app_id = app_id;
+        loop.Quit();
+      }),
+      install_params, {old_app});
+  loop.Run();
+  EXPECT_EQ(os_integration_manager()->num_create_shortcuts_calls(), 2u);
+  auto options = os_integration_manager()->get_last_install_options();
+  EXPECT_FALSE(options->add_to_desktop);
+  EXPECT_TRUE(options->add_to_quick_launch_bar);
+  EXPECT_TRUE(options->os_hooks[OsHookType::kRunOnOsLogin]);
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider().registrar_unsafe().GetAppCurrentOsIntegrationState(
+            result_app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_TRUE(os_state->has_shortcut());
+    EXPECT_EQ(os_state->run_on_os_login().run_on_os_login_mode(),
+              proto::RunOnOsLoginMode::WINDOWED);
+  }
+}
+#endif  // !BUILDFLAG(IS_CHROMEOS_LACROS)
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/commands/install_placeholder_command.cc b/chrome/browser/web_applications/commands/install_placeholder_command.cc
index b246d40..b8f370c4 100644
--- a/chrome/browser/web_applications/commands/install_placeholder_command.cc
+++ b/chrome/browser/web_applications/commands/install_placeholder_command.cc
@@ -4,17 +4,19 @@
 
 #include "chrome/browser/web_applications/commands/install_placeholder_command.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/install_bounce_metric.h"
 #include "chrome/browser/web_applications/locks/app_lock.h"
 #include "chrome/browser/web_applications/web_app_data_retriever.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
-#include "chrome/browser/web_applications/web_app_install_params.h"
 #include "chrome/browser/web_applications/web_app_install_utils.h"
+#include "chrome/browser/web_applications/web_app_uninstall_and_replace_job.h"
 #include "components/webapps/browser/install_result_code.h"
 #include "content/public/browser/web_contents.h"
 
@@ -27,11 +29,13 @@
 }  // namespace
 
 InstallPlaceholderCommand::InstallPlaceholderCommand(
+    Profile* profile,
     const ExternalInstallOptions& install_options,
-    OnceInstallCallback callback,
+    InstallAndReplaceCallback callback,
     base::WeakPtr<content::WebContents> web_contents,
     std::unique_ptr<WebAppDataRetriever> data_retriever)
-    : WebAppCommandTemplate<AppLock>("InstallFromInfoCommand"),
+    : WebAppCommandTemplate<AppLock>("InstallPlaceholderCommand"),
+      profile_(profile),
       app_id_(GenerateAppId(/*manifest_id=*/"", install_options.install_url)),
       lock_description_(
           std::make_unique<AppLockDescription, base::flat_set<AppId>>(
@@ -79,7 +83,8 @@
   webapps::InstallableMetrics::TrackInstallResult(false);
   SignalCompletionAndSelfDestruct(
       CommandResult::kFailure,
-      base::BindOnce(std::move(callback_), app_id_, code));
+      base::BindOnce(std::move(callback_), app_id_, code,
+                     /*did_uninstall_and_replace=*/false));
 }
 
 void InstallPlaceholderCommand::FetchCustomIcon(const GURL& url,
@@ -199,9 +204,25 @@
   RecordAppBanner(web_contents_.get(), install_options_.install_url);
 
   webapps::InstallableMetrics::TrackInstallResult(webapps::IsSuccess(code));
+
+  DCHECK(lock_);
+  uninstall_and_replace_job_.emplace(
+      profile_, lock_->AsWeakPtr(), install_options_.uninstall_and_replace,
+      app_id,
+      base::BindOnce(&InstallPlaceholderCommand::OnUninstallAndReplaced,
+                     weak_factory_.GetWeakPtr(), app_id, std::move(code)));
+  uninstall_and_replace_job_->Start();
+}
+
+void InstallPlaceholderCommand::OnUninstallAndReplaced(
+    const AppId& app_id,
+    webapps::InstallResultCode code,
+    bool did_uninstall_and_replace) {
+  debug_value_.Set("did_uninstall_and_replace", did_uninstall_and_replace);
   SignalCompletionAndSelfDestruct(
       CommandResult::kSuccess,
-      base::BindOnce(std::move(callback_), app_id, code));
+      base::BindOnce(std::move(callback_), app_id, std::move(code),
+                     did_uninstall_and_replace));
 }
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/commands/install_placeholder_command.h b/chrome/browser/web_applications/commands/install_placeholder_command.h
index 2daf24cf..da0dfc6 100644
--- a/chrome/browser/web_applications/commands/install_placeholder_command.h
+++ b/chrome/browser/web_applications/commands/install_placeholder_command.h
@@ -7,11 +7,15 @@
 
 #include <memory>
 
+#include "base/memory/raw_ptr.h"
 #include "base/values.h"
 #include "chrome/browser/web_applications/commands/web_app_command.h"
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
-#include "chrome/browser/web_applications/web_app_install_params.h"
+#include "chrome/browser/web_applications/web_app_uninstall_and_replace_job.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+class Profile;
 
 namespace content {
 class WebContents;
@@ -29,9 +33,14 @@
 // load.
 class InstallPlaceholderCommand : public WebAppCommandTemplate<AppLock> {
  public:
+  using InstallAndReplaceCallback =
+      base::OnceCallback<void(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace)>;
   InstallPlaceholderCommand(
+      Profile* profile,
       const ExternalInstallOptions& install_options,
-      OnceInstallCallback callback,
+      InstallAndReplaceCallback callback,
       base::WeakPtr<content::WebContents> web_contents,
       std::unique_ptr<WebAppDataRetriever> data_retriever);
 
@@ -63,16 +72,22 @@
   void OnInstallFinalized(const AppId& app_id,
                           webapps::InstallResultCode code,
                           OsHooksErrors os_hooks_errors);
+  void OnUninstallAndReplaced(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace);
 
+  const raw_ptr<Profile> profile_;
   const AppId app_id_;
   std::unique_ptr<AppLockDescription> lock_description_;
   std::unique_ptr<AppLock> lock_;
 
   const ExternalInstallOptions install_options_;
-  OnceInstallCallback callback_;
+  InstallAndReplaceCallback callback_;
   base::WeakPtr<content::WebContents> web_contents_;
   std::unique_ptr<WebAppDataRetriever> data_retriever_;
 
+  absl::optional<WebAppUninstallAndReplaceJob> uninstall_and_replace_job_;
+
   base::Value::Dict debug_value_;
 
   base::WeakPtrFactory<InstallPlaceholderCommand> weak_factory_{this};
diff --git a/chrome/browser/web_applications/commands/install_placeholder_command_unittest.cc b/chrome/browser/web_applications/commands/install_placeholder_command_unittest.cc
index 199ac6c..85d72e7b 100644
--- a/chrome/browser/web_applications/commands/install_placeholder_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/install_placeholder_command_unittest.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/web_applications/external_install_options.h"
 #include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/proto/web_app_os_integration_state.pb.h"
 #include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
 #include "chrome/browser/web_applications/test/fake_web_app_provider.h"
 #include "chrome/browser/web_applications/test/mock_data_retriever.h"
@@ -38,6 +39,12 @@
 
   void SetUp() override {
     WebAppTest::SetUp();
+    auto shortcut_manager = std::make_unique<TestShortcutManager>(profile());
+    shortcut_manager_ = shortcut_manager.get();
+    FakeWebAppProvider::Get(profile())
+        ->GetOsIntegrationManager()
+        .AsTestOsIntegrationManager()
+        ->SetShortcutManager(std::move(shortcut_manager));
 
     test::AwaitStartWebAppProviderAndSubsystems(profile());
   }
@@ -47,25 +54,38 @@
     return static_cast<FakeOsIntegrationManager&>(
         provider()->os_integration_manager());
   }
+  TestShortcutManager* shortcut_manager() { return shortcut_manager_; }
+
+ private:
+  raw_ptr<TestShortcutManager> shortcut_manager_;
 };
 
 TEST_F(InstallPlaceholderCommandTest, InstallPlaceholder) {
   ExternalInstallOptions options(kInstallUrl, mojom::UserDisplayMode::kBrowser,
                                  ExternalInstallSource::kExternalPolicy);
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
-  provider()->scheduler().InstallPlaceholder(options, future.GetCallback(),
-                                             web_contents()->GetWeakPtr());
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
+  provider()->scheduler().InstallPlaceholder(
+      options, future.GetCallback(), web_contents()->GetWeakPtr()
+
+  );
   EXPECT_EQ(future.Get<webapps::InstallResultCode>(),
             webapps::InstallResultCode::kSuccessNewInstall);
   const AppId app_id = future.Get<AppId>();
   EXPECT_TRUE(provider()->registrar_unsafe().IsPlaceholderApp(
       app_id, WebAppManagement::kPolicy));
   EXPECT_EQ(fake_os_integration_manager().num_create_shortcuts_calls(), 1u);
+  auto last_install_options =
+      fake_os_integration_manager().get_last_install_options();
+  EXPECT_TRUE(last_install_options->add_to_desktop);
+  EXPECT_TRUE(last_install_options->add_to_quick_launch_bar);
+  EXPECT_FALSE(last_install_options->os_hooks[OsHookType::kRunOnOsLogin]);
   if (AreOsIntegrationSubManagersEnabled()) {
     absl::optional<proto::WebAppOsIntegrationState> os_state =
         provider()->registrar_unsafe().GetAppCurrentOsIntegrationState(app_id);
     ASSERT_TRUE(os_state.has_value());
     EXPECT_TRUE(os_state->has_shortcut());
+    EXPECT_EQ(os_state->run_on_os_login().run_on_os_login_mode(),
+              proto::RunOnOsLoginMode::NOT_RUN);
   }
 }
 
@@ -74,7 +94,7 @@
                                  ExternalInstallSource::kExternalPolicy);
   const GURL icon_url("https://example.com/test.png");
   options.override_icon_url = icon_url;
-  base::test::TestFuture<const AppId&, webapps::InstallResultCode> future;
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
 
   auto data_retriever =
       std::make_unique<testing::StrictMock<MockDataRetriever>>();
@@ -94,7 +114,7 @@
           IconsDownloadedResult::kCompleted, std::move(icons), http_result));
 
   auto command = std::make_unique<InstallPlaceholderCommand>(
-      options, future.GetCallback(), web_contents()->GetWeakPtr(),
+      profile(), options, future.GetCallback(), web_contents()->GetWeakPtr(),
       std::move(data_retriever));
   provider()->command_manager().ScheduleCommand(std::move(command));
 
@@ -112,5 +132,53 @@
   }
 }
 
+#if !BUILDFLAG(IS_CHROMEOS_LACROS)
+TEST_F(InstallPlaceholderCommandTest,
+       InstallPlaceholderWithUninstallAndReplace) {
+  GURL old_app_url("http://old-app.com");
+  const AppId old_app =
+      test::InstallDummyWebApp(profile(), "old_app", old_app_url);
+  auto shortcut_info = std::make_unique<ShortcutInfo>();
+  shortcut_info->url = old_app_url;
+  shortcut_manager()->SetShortcutInfoForApp(old_app, std::move(shortcut_info));
+  ShortcutLocations shortcut_locations;
+  shortcut_locations.on_desktop = false;
+  shortcut_locations.in_quick_launch_bar = true;
+  shortcut_locations.in_startup = true;
+  shortcut_manager()->SetAppExistingShortcuts(old_app_url, shortcut_locations);
+
+  ExternalInstallOptions options(kInstallUrl, mojom::UserDisplayMode::kBrowser,
+                                 ExternalInstallSource::kExternalPolicy);
+  options.uninstall_and_replace = {old_app};
+
+  base::test::TestFuture<const AppId&, webapps::InstallResultCode, bool> future;
+  provider()->scheduler().InstallPlaceholder(
+      options, future.GetCallback(), web_contents()->GetWeakPtr()
+
+  );
+  EXPECT_EQ(future.Get<webapps::InstallResultCode>(),
+            webapps::InstallResultCode::kSuccessNewInstall);
+  EXPECT_TRUE(future.Get<bool>());
+  const AppId app_id = future.Get<AppId>();
+  EXPECT_TRUE(provider()->registrar_unsafe().IsPlaceholderApp(
+      app_id, WebAppManagement::kPolicy));
+
+  auto last_install_options =
+      fake_os_integration_manager().get_last_install_options();
+  EXPECT_FALSE(last_install_options->add_to_desktop);
+  EXPECT_TRUE(last_install_options->add_to_quick_launch_bar);
+  EXPECT_TRUE(last_install_options->os_hooks[OsHookType::kRunOnOsLogin]);
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider()->registrar_unsafe().GetAppCurrentOsIntegrationState(app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_TRUE(os_state->has_shortcut());
+    EXPECT_TRUE(os_state->has_run_on_os_login());
+    EXPECT_EQ(os_state->run_on_os_login().run_on_os_login_mode(),
+              proto::RunOnOsLoginMode::WINDOWED);
+  }
+}
+#endif  // !BUILDFLAG(IS_CHROMEOS_LACROS)
+
 }  // namespace
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/extensions/BUILD.gn b/chrome/browser/web_applications/extensions/BUILD.gn
index ded6d18a..167ae1e1 100644
--- a/chrome/browser/web_applications/extensions/BUILD.gn
+++ b/chrome/browser/web_applications/extensions/BUILD.gn
@@ -15,6 +15,7 @@
     "extension_status_utils.cc",
     "web_app_extension_shortcut.cc",
     "web_app_extension_shortcut.h",
+    "web_app_uninstall_and_replace_job.cc",
   ]
   if (is_mac) {
     sources += [ "web_app_extension_shortcut_mac.mm" ]
@@ -34,6 +35,8 @@
     "//chrome/common",
     "//components/pref_registry",
     "//components/services/app_service/public/cpp:app_types",
+    "//components/services/app_service/public/cpp:app_update",
+    "//components/services/app_service/public/cpp:types",
     "//components/services/app_service/public/mojom",
     "//components/sync/model",
     "//components/webapps/browser:browser",
@@ -50,6 +53,7 @@
     "bookmark_app_util_unittest.cc",
     "externally_managed_app_install_task_unittest.cc",
     "web_app_policy_manager_unittest.cc",
+    "web_app_uninstall_and_replace_job_unittest.cc",
   ]
 
   deps = [
@@ -57,6 +61,7 @@
     "//build:chromeos_buildflags",
     "//chrome/browser/web_applications:web_applications",
     "//chrome/browser/web_applications:web_applications_test_support",
+    "//chrome/browser/web_applications:web_applications_unit_tests",
     "//chrome/common",
     "//chrome/test:test_support",
     "//components/crx_file:crx_file",
diff --git a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
index 96fa5e8b..cb4bbf9 100644
--- a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
@@ -841,9 +841,6 @@
               EXPECT_EQ(result.app_id,
                         *registrar()->LookupExternalAppId(kWebAppUrl));
 
-              EXPECT_TRUE(ui_manager()->DidUninstallAndReplace("app1", app_id));
-              EXPECT_TRUE(ui_manager()->DidUninstallAndReplace("app2", app_id));
-
               run_loop.Quit();
             }));
     run_loop.Run();
@@ -866,8 +863,6 @@
                         result.code);
               EXPECT_EQ(app_id, result.app_id.value());
 
-              EXPECT_TRUE(ui_manager()->DidUninstallAndReplace("app3", app_id));
-
               run_loop.Quit();
             }));
     run_loop.Run();
diff --git a/chrome/browser/web_applications/extensions/web_app_uninstall_and_replace_job.cc b/chrome/browser/web_applications/extensions/web_app_uninstall_and_replace_job.cc
new file mode 100644
index 0000000..4d0cad0
--- /dev/null
+++ b/chrome/browser/web_applications/extensions/web_app_uninstall_and_replace_job.cc
@@ -0,0 +1,254 @@
+// Copyright 2023 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/web_applications/web_app_uninstall_and_replace_job.h"
+
+#include "base/functional/callback.h"
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
+#include "chrome/browser/extensions/launch_util.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h"
+#include "chrome/browser/web_applications/locks/app_lock.h"
+#include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
+#include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/os_integration/web_app_shortcut.h"
+#include "chrome/browser/web_applications/web_app_constants.h"
+#include "chrome/browser/web_applications/web_app_registrar.h"
+#include "chrome/browser/web_applications/web_app_registry_update.h"
+#include "chrome/browser/web_applications/web_app_sync_bridge.h"
+#include "components/services/app_service/public/cpp/app_update.h"
+#include "components/services/app_service/public/cpp/types_util.h"
+#include "extensions/browser/app_sorting.h"
+#include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/extension_system.h"
+
+namespace web_app {
+
+namespace {
+
+bool IsAppInstalled(Profile* profile, const AppId& app_id) {
+  bool installed = false;
+  auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile);
+  proxy->AppRegistryCache().ForOneApp(
+      app_id, [&installed](const apps::AppUpdate& update) {
+        installed = apps_util::IsInstalled(update.Readiness());
+      });
+  return installed;
+}
+
+mojom::UserDisplayMode GetExtensionUserDisplayMode(
+    Profile* profile,
+    const extensions::Extension* extension) {
+  // Platform apps always open in an app window and their user preference is
+  // meaningless.
+  if (extension->is_platform_app()) {
+    return mojom::UserDisplayMode::kStandalone;
+  }
+
+  switch (extensions::GetLaunchContainer(
+      extensions::ExtensionPrefs::Get(profile), extension)) {
+    case apps::LaunchContainer::kLaunchContainerWindow:
+    case apps::LaunchContainer::kLaunchContainerPanelDeprecated:
+      return mojom::UserDisplayMode::kStandalone;
+    case apps::LaunchContainer::kLaunchContainerTab:
+    case apps::LaunchContainer::kLaunchContainerNone:
+      return mojom::UserDisplayMode::kBrowser;
+  }
+}
+
+}  // namespace
+
+WebAppUninstallAndReplaceJob::WebAppUninstallAndReplaceJob(
+    Profile* profile,
+    base::WeakPtr<AppLock> to_app_lock,
+    const std::vector<AppId>& from_apps_or_extensions,
+    const AppId& to_app,
+    base::OnceCallback<void(bool uninstall_triggered)> on_complete)
+    : profile_(profile),
+      to_app_lock_(to_app_lock),
+      from_apps_or_extensions_(from_apps_or_extensions),
+      to_app_(to_app),
+      on_complete_(std::move(on_complete)) {
+  DCHECK(profile_);
+}
+WebAppUninstallAndReplaceJob::~WebAppUninstallAndReplaceJob() = default;
+
+void WebAppUninstallAndReplaceJob::Start() {
+  DCHECK(to_app_lock_);
+  DCHECK(to_app_lock_->registrar().IsInstalled(to_app_));
+
+  std::vector<AppId> apps_to_replace;
+  for (const AppId& from_app : from_apps_or_extensions_) {
+    if (IsAppInstalled(profile_, from_app)) {
+      apps_to_replace.emplace_back(from_app);
+    }
+  }
+
+  if (apps_to_replace.empty()) {
+    std::move(on_complete_).Run(/*uninstall_triggered=*/false);
+    return;
+  }
+
+  MigrateUiAndUninstallApp(
+      apps_to_replace.front(),
+      base::BindOnce(std::move(on_complete_), /*uninstall_triggered=*/true));
+
+  apps_to_replace.erase(apps_to_replace.begin());
+  for (const auto& app : apps_to_replace) {
+    auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_);
+    proxy->UninstallSilently(app, apps::UninstallSource::kMigration);
+  }
+}
+
+void WebAppUninstallAndReplaceJob::MigrateUiAndUninstallApp(
+    const AppId& from_app,
+    base::OnceClosure on_complete) {
+  DCHECK(to_app_lock_);
+
+  to_app_lock_->ui_manager().MaybeTransferAppAttributes(from_app, to_app_);
+
+  // If migration of user/UI data is required for other app types consider
+  // generalising this operation to be part of app service.
+  const extensions::Extension* from_extension =
+      extensions::ExtensionRegistry::Get(profile_)
+          ->enabled_extensions()
+          .GetByID(from_app);
+  if (from_extension) {
+    // Grid position in chrome://apps.
+    extensions::AppSorting* app_sorting =
+        extensions::ExtensionSystem::Get(profile_)->app_sorting();
+    app_sorting->SetAppLaunchOrdinal(
+        to_app_, app_sorting->GetAppLaunchOrdinal(from_app));
+    app_sorting->SetPageOrdinal(to_app_, app_sorting->GetPageOrdinal(from_app));
+
+    to_app_lock_->sync_bridge().SetAppUserDisplayMode(
+        to_app_, GetExtensionUserDisplayMode(profile_, from_extension),
+        /*is_user_action=*/false);
+
+    auto shortcut_info =
+        web_app::ShortcutInfoForExtensionAndProfile(from_extension, profile_);
+    to_app_lock_->os_integration_manager().GetAppExistingShortCutLocation(
+        base::BindOnce(
+            &WebAppUninstallAndReplaceJob::OnShortcutLocationGathered,
+            weak_ptr_factory_.GetWeakPtr(), from_app, std::move(on_complete)),
+        std::move(shortcut_info));
+  } else {
+    // The from_app could be a web app.
+    to_app_lock_->os_integration_manager().GetShortcutInfoForApp(
+        from_app,
+        base::BindOnce(&WebAppUninstallAndReplaceJob::
+                           OnShortcutInfoReceivedSearchShortcutLocations,
+                       weak_ptr_factory_.GetWeakPtr(), from_app,
+                       std::move(on_complete)));
+  }
+}
+
+void WebAppUninstallAndReplaceJob::
+    OnShortcutInfoReceivedSearchShortcutLocations(
+        const AppId& from_app,
+        base::OnceClosure on_complete,
+        std::unique_ptr<ShortcutInfo> shortcut_info) {
+  if (!shortcut_info || !to_app_lock_) {
+    auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_);
+    // The shortcut info couldn't be found, simply uninstall.
+    proxy->UninstallSilently(from_app, apps::UninstallSource::kMigration);
+    std::move(on_complete).Run();
+    return;
+  }
+
+  auto callback = base::BindOnce(
+      &WebAppUninstallAndReplaceJob::OnShortcutLocationGathered,
+      weak_ptr_factory_.GetWeakPtr(), from_app, std::move(on_complete));
+  to_app_lock_->os_integration_manager().GetAppExistingShortCutLocation(
+      std::move(callback), std::move(shortcut_info));
+}
+
+void WebAppUninstallAndReplaceJob::OnShortcutLocationGathered(
+    const AppId& from_app,
+    base::OnceClosure on_complete,
+    ShortcutLocations locations) {
+  auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_);
+
+  const bool is_extension = proxy->AppRegistryCache().GetAppType(from_app) ==
+                            apps::AppType::kChromeApp;
+  if (is_extension) {
+    // Need to be called before `proxy->UninstallSilently` because
+    // UninstallSilently might synchronously finish, so the wait won't get
+    // finished if called after.
+    WaitForExtensionShortcutsDeleted(
+        from_app,
+        base::BindOnce(
+            &WebAppUninstallAndReplaceJob::InstallOsHooksForReplacementApp,
+            weak_ptr_factory_.GetWeakPtr(), std::move(on_complete), locations));
+  }
+
+  // When the `from_app` is a web app, we can't wait for it to finish because it
+  // underlying schedules WebAppUninstallCommand which uses a `FullSystemLock`,
+  // so the uninstall command won't get started until current command that holds
+  // the `to_app_lock` finishes.
+  proxy->UninstallSilently(from_app, apps::UninstallSource::kMigration);
+
+  if (!is_extension) {
+    InstallOsHooksForReplacementApp(std::move(on_complete), locations);
+  }
+}
+
+void WebAppUninstallAndReplaceJob::InstallOsHooksForReplacementApp(
+    base::OnceClosure on_complete,
+    ShortcutLocations locations) {
+  if (!to_app_lock_) {
+    std::move(on_complete).Run();
+    return;
+  }
+  // This ensures that the os integration matches the app that we are replacing.
+  InstallOsHooksOptions options;
+  options.os_hooks[OsHookType::kShortcuts] =
+      locations.on_desktop || locations.applications_menu_location ||
+      locations.in_quick_launch_bar || locations.in_startup;
+  options.add_to_desktop = locations.on_desktop;
+  options.add_to_quick_launch_bar = locations.in_quick_launch_bar;
+
+  ValueWithPolicy<RunOnOsLoginMode> run_on_os_login =
+      to_app_lock_->registrar().GetAppRunOnOsLoginMode(to_app_);
+  // Only update run on os login when it's not controlled by policy.
+  if (run_on_os_login.user_controllable) {
+    options.os_hooks[OsHookType::kRunOnOsLogin] = locations.in_startup;
+    // TODO(crbug.com/1091964): Support Run on OS Login mode selection when
+    // `from_app` is a web app.
+    RunOnOsLoginMode new_mode = locations.in_startup
+                                    ? RunOnOsLoginMode::kWindowed
+                                    : RunOnOsLoginMode::kNotRun;
+    if (new_mode != run_on_os_login.value) {
+      {
+        ScopedRegistryUpdate update(&to_app_lock_->sync_bridge());
+        update->UpdateApp(to_app_)->SetRunOnOsLoginMode(new_mode);
+      }
+    }
+  }
+  options.reason = SHORTCUT_CREATION_AUTOMATED;
+  // TODO(crbug.com/1401125): Remove InstallOsHooks() once OS integration
+  // sub managers have been implemented.
+  auto os_hooks_barrier = OsIntegrationManager::GetBarrierForSynchronize(
+      base::BindOnce(&WebAppUninstallAndReplaceJob::OnInstallOsHooksCompleted,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(on_complete)));
+  to_app_lock_->os_integration_manager().InstallOsHooks(
+      to_app_, os_hooks_barrier,
+      /*web_app_info=*/nullptr, options);
+  SynchronizeOsOptions synchronize_options;
+  synchronize_options.add_shortcut_to_desktop = options.add_to_desktop;
+  synchronize_options.add_to_quick_launch_bar = options.add_to_quick_launch_bar;
+  synchronize_options.reason = options.reason;
+  to_app_lock_->os_integration_manager().Synchronize(
+      to_app_, base::BindOnce(os_hooks_barrier, OsHooksErrors()));
+}
+
+void WebAppUninstallAndReplaceJob::OnInstallOsHooksCompleted(
+    base::OnceClosure on_complete,
+    OsHooksErrors) {
+  std::move(on_complete).Run();
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/extensions/web_app_uninstall_and_replace_job_unittest.cc b/chrome/browser/web_applications/extensions/web_app_uninstall_and_replace_job_unittest.cc
new file mode 100644
index 0000000..5236e37
--- /dev/null
+++ b/chrome/browser/web_applications/extensions/web_app_uninstall_and_replace_job_unittest.cc
@@ -0,0 +1,193 @@
+// Copyright 2023 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/web_applications/web_app_uninstall_and_replace_job.h"
+
+#include <memory>
+
+#include "base/containers/flat_set.h"
+#include "base/functional/bind.h"
+#include "base/memory/raw_ptr.h"
+#include "base/test/bind.h"
+#include "base/test/test_future.h"
+#include "chrome/browser/web_applications/commands/web_app_command.h"
+#include "chrome/browser/web_applications/locks/app_lock.h"
+#include "chrome/browser/web_applications/test/fake_os_integration_manager.h"
+#include "chrome/browser/web_applications/test/fake_web_app_provider.h"
+#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
+#include "chrome/browser/web_applications/test/web_app_test.h"
+#include "chrome/browser/web_applications/test/web_app_test_observers.h"
+#include "chrome/browser/web_applications/web_app_command_manager.h"
+#include "chrome/browser/web_applications/web_app_id.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace web_app {
+
+class TestUninstallAndReplaceJobCommand
+    : public WebAppCommandTemplate<AppLock> {
+ public:
+  TestUninstallAndReplaceJobCommand(
+      Profile* profile,
+      const std::vector<AppId>& from_apps,
+      const AppId& to_app,
+      base::OnceCallback<void(bool uninstall_triggered)> on_complete)
+      : WebAppCommandTemplate<AppLock>("TestUninstallAndReplaceJobCommand"),
+        profile_(profile),
+        lock_description_(
+            std::make_unique<AppLockDescription, base::flat_set<AppId>>(
+                base::flat_set<AppId>{to_app})),
+        from_apps_(from_apps),
+        to_app_(to_app),
+        on_complete_(std::move(on_complete)) {}
+
+  ~TestUninstallAndReplaceJobCommand() override = default;
+
+  void StartWithLock(std::unique_ptr<AppLock> lock) override {
+    lock_ = std::move(lock);
+    uninstall_and_replace_job_.emplace(
+        profile_, lock_->AsWeakPtr(), from_apps_, to_app_,
+        base::BindOnce(&TestUninstallAndReplaceJobCommand::OnComplete,
+                       base::Unretained(this)));
+    uninstall_and_replace_job_->Start();
+  }
+
+  void OnComplete(bool uninstall_triggered) {
+    SignalCompletionAndSelfDestruct(
+        CommandResult::kSuccess,
+        base::BindOnce(std::move(on_complete_), uninstall_triggered));
+  }
+
+  LockDescription& lock_description() const override {
+    return *lock_description_;
+  }
+
+  base::Value ToDebugValue() const override { return base::Value(); }
+
+  void OnSyncSourceRemoved() override {}
+  void OnShutdown() override {}
+
+ private:
+  raw_ptr<Profile> profile_;
+  std::unique_ptr<AppLockDescription> lock_description_;
+  std::unique_ptr<AppLock> lock_;
+
+  const std::vector<AppId> from_apps_;
+  const AppId to_app_;
+  base::OnceCallback<void(bool uninstall_triggered)> on_complete_;
+
+  absl::optional<WebAppUninstallAndReplaceJob> uninstall_and_replace_job_;
+};
+
+class WebAppUninstallAndReplaceJobTest : public WebAppTest {
+ public:
+  void SetUp() override {
+    WebAppTest::SetUp();
+    test::AwaitStartWebAppProviderAndSubsystems(profile());
+    auto shortcut_manager = std::make_unique<TestShortcutManager>(profile());
+    shortcut_manager_ = shortcut_manager.get();
+    os_integration_manager()->SetShortcutManager(std::move(shortcut_manager));
+  }
+
+  void ScheduleUninstallAndReplaceJob(
+      const std::vector<AppId>& from_apps,
+      const AppId& to_app,
+      base::OnceCallback<void(bool uninstall_triggered)> on_complete) {
+    WebAppProvider::GetForTest(profile())->command_manager().ScheduleCommand(
+        std::make_unique<TestUninstallAndReplaceJobCommand>(
+            profile(), from_apps, to_app, std::move(on_complete)));
+  }
+
+  WebAppProvider* provider() { return WebAppProvider::GetForTest(profile()); }
+
+  FakeOsIntegrationManager* os_integration_manager() {
+    return WebAppProvider::GetForTest(profile())
+        ->os_integration_manager()
+        .AsTestOsIntegrationManager();
+  }
+
+  TestShortcutManager* shortcut_manager() { return shortcut_manager_; }
+
+ private:
+  raw_ptr<TestShortcutManager> shortcut_manager_;
+};
+
+// `WebAppUninstallAndReplaceJob` uses `AppServiceProxy` to do uninstall, app
+// service only lives on chromeos ash not lacros.
+#if !BUILDFLAG(IS_CHROMEOS_LACROS)
+// Regression test for crbug.com/1182030
+TEST_F(WebAppUninstallAndReplaceJobTest,
+       WebAppMigrationPreservesShortcutStates) {
+  const GURL kOldAppUrl("https://old.app.com");
+  // Install an old app to be replaced.
+  AppId old_app_id = test::InstallDummyWebApp(profile(), "old_app", kOldAppUrl);
+
+  // Install a new app to migrate the old one to.
+  AppId new_app_id = test::InstallDummyWebApp(profile(), "new_app",
+                                              GURL("https://new.app.com"));
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider()->registrar_unsafe().GetAppCurrentOsIntegrationState(
+            new_app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_FALSE(os_state->has_shortcut());
+    EXPECT_FALSE(os_state->run_on_os_login().has_run_on_os_login_mode());
+  }
+
+  // Set up the existing shortcuts.
+  auto shortcut_info = std::make_unique<ShortcutInfo>();
+  shortcut_info->url = kOldAppUrl;
+  shortcut_manager()->SetShortcutInfoForApp(old_app_id,
+                                            std::move(shortcut_info));
+  ShortcutLocations locations;
+  locations.on_desktop = true;
+  locations.in_startup = true;
+  shortcut_manager()->SetAppExistingShortcuts(kOldAppUrl, locations);
+
+  base::test::TestFuture<bool> future;
+  ScheduleUninstallAndReplaceJob({old_app_id}, new_app_id,
+                                 future.GetCallback());
+  EXPECT_TRUE(future.Get());
+
+  auto options = os_integration_manager()->get_last_install_options();
+  EXPECT_TRUE(options->add_to_desktop);
+  EXPECT_TRUE(options->os_hooks[OsHookType::kRunOnOsLogin]);
+  EXPECT_FALSE(options->add_to_quick_launch_bar);
+  if (AreOsIntegrationSubManagersEnabled()) {
+    absl::optional<proto::WebAppOsIntegrationState> os_state =
+        provider()->registrar_unsafe().GetAppCurrentOsIntegrationState(
+            new_app_id);
+    ASSERT_TRUE(os_state.has_value());
+    EXPECT_TRUE(os_state->has_shortcut());
+    EXPECT_EQ(os_state->run_on_os_login().run_on_os_login_mode(),
+              proto::RunOnOsLoginMode::WINDOWED);
+  }
+}
+
+TEST_F(WebAppUninstallAndReplaceJobTest, DoubleMigration) {
+  // Install an old app to be replaced.
+  AppId old_app_id = test::InstallDummyWebApp(profile(), "old_app",
+                                              GURL("https://old.app.com"));
+  // Install a new app to migrate the old one to.
+  AppId new_app_id = test::InstallDummyWebApp(profile(), "new_app",
+                                              GURL("https://new.app.com"));
+  {
+    WebAppTestUninstallObserver waiter(profile());
+    waiter.BeginListening({old_app_id});
+    base::test::TestFuture<bool> future;
+    ScheduleUninstallAndReplaceJob({old_app_id}, new_app_id,
+                                   future.GetCallback());
+    EXPECT_TRUE(future.Get());
+    waiter.Wait();
+  }
+
+  // Do migration again. Uninstall and replace should not be triggered.
+  base::test::TestFuture<bool> future;
+  ScheduleUninstallAndReplaceJob({old_app_id}, new_app_id,
+                                 future.GetCallback());
+  EXPECT_FALSE(future.Get());
+}
+#endif  // !BUILDFLAG(IS_CHROMEOS_LACROS)
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/externally_managed_app_install_task.cc b/chrome/browser/web_applications/externally_managed_app_install_task.cc
index 5d42def..53ea711 100644
--- a/chrome/browser/web_applications/externally_managed_app_install_task.cc
+++ b/chrome/browser/web_applications/externally_managed_app_install_task.cc
@@ -186,10 +186,11 @@
       std::move(web_app_info),
       /*overwrite_existing_manifest_fields=*/install_params.force_reinstall,
       internal_install_source,
-      base::BindOnce(&ExternallyManagedAppInstallTask::OnWebAppInstalled,
-                     weak_ptr_factory_.GetWeakPtr(), /* is_placeholder=*/false,
-                     /*offline_install=*/true, std::move(result_callback)),
-      install_params);
+      base::BindOnce(
+          &ExternallyManagedAppInstallTask::OnWebAppInstalledAndReplaced,
+          weak_ptr_factory_.GetWeakPtr(), /* is_placeholder=*/false,
+          /*offline_install=*/true, std::move(result_callback)),
+      install_params, install_options_.uninstall_and_replace);
 }
 
 void ExternallyManagedAppInstallTask::UninstallPlaceholderApp(
@@ -239,10 +240,11 @@
 
   command_scheduler_->InstallExternallyManagedApp(
       install_options_,
-      base::BindOnce(&ExternallyManagedAppInstallTask::OnWebAppInstalled,
-                     weak_ptr_factory_.GetWeakPtr(),
-                     /*is_placeholder=*/false,
-                     /*offline_install=*/false, std::move(result_callback)),
+      base::BindOnce(
+          &ExternallyManagedAppInstallTask::OnWebAppInstalledAndReplaced,
+          weak_ptr_factory_.GetWeakPtr(),
+          /*is_placeholder=*/false,
+          /*offline_install=*/false, std::move(result_callback)),
       web_contents->GetWeakPtr(), data_retriever_factory_.Run());
 }
 
@@ -265,28 +267,26 @@
 
   command_scheduler_->InstallPlaceholder(
       install_options_,
-      base::BindOnce(&ExternallyManagedAppInstallTask::OnWebAppInstalled,
-                     weak_ptr_factory_.GetWeakPtr(), /*is_placeholder=*/true,
-                     /*offline_install=*/false, std::move(callback)),
+      base::BindOnce(
+          &ExternallyManagedAppInstallTask::OnWebAppInstalledAndReplaced,
+          weak_ptr_factory_.GetWeakPtr(), /*is_placeholder=*/true,
+          /*offline_install=*/false, std::move(callback)),
       web_contents->GetWeakPtr());
 }
 
-void ExternallyManagedAppInstallTask::OnWebAppInstalled(
+void ExternallyManagedAppInstallTask::OnWebAppInstalledAndReplaced(
     bool is_placeholder,
     bool offline_install,
     ResultCallback result_callback,
     const AppId& app_id,
-    webapps::InstallResultCode code) {
+    webapps::InstallResultCode code,
+    bool did_uninstall_and_replace) {
   if (!IsNewInstall(code)) {
     std::move(result_callback)
         .Run(ExternallyManagedAppManager::InstallResult(code));
     return;
   }
 
-  bool uninstall_and_replace_triggered =
-      ui_manager_->UninstallAndReplaceIfExists(
-          install_options().uninstall_and_replace, app_id);
-
   externally_installed_app_prefs_.Insert(install_options_.install_url, app_id,
                                          install_options_.install_source);
   externally_installed_app_prefs_.SetIsPlaceholder(install_options_.install_url,
@@ -300,7 +300,7 @@
 
   std::move(result_callback)
       .Run(ExternallyManagedAppManager::InstallResult(
-          code, app_id, uninstall_and_replace_triggered));
+          code, app_id, did_uninstall_and_replace));
 }
 
 void ExternallyManagedAppInstallTask::TryAppInfoFactoryOnFailure(
diff --git a/chrome/browser/web_applications/externally_managed_app_install_task.h b/chrome/browser/web_applications/externally_managed_app_install_task.h
index 35100a4..5914beea 100644
--- a/chrome/browser/web_applications/externally_managed_app_install_task.h
+++ b/chrome/browser/web_applications/externally_managed_app_install_task.h
@@ -101,11 +101,14 @@
                                 webapps::UninstallResultCode code);
   void ContinueWebAppInstall(content::WebContents* web_contents,
                              ResultCallback result_callback);
-  void OnWebAppInstalled(bool is_placeholder,
-                         bool offline_install,
-                         ResultCallback result_callback,
-                         const AppId& app_id,
-                         webapps::InstallResultCode code);
+  void OnWebAppInstalledAndReplaced(bool is_placeholder,
+                                    bool offline_install,
+                                    ResultCallback result_callback,
+                                    const AppId& app_id,
+                                    webapps::InstallResultCode code,
+                                    bool did_uninstall_and_replace);
+
+  void OnUninstallAndReplaced(bool uninstall_and_replace_triggered);
   void TryAppInfoFactoryOnFailure(
       ResultCallback result_callback,
       ExternallyManagedAppManager::InstallResult result);
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
index f09ee357..88f59fc 100644
--- a/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
+++ b/chrome/browser/web_applications/externally_managed_app_manager_impl_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/one_shot_event.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/timer/mock_timer.h"
 #include "chrome/browser/web_applications/externally_managed_app_install_task.h"
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
index b9691af..5534ee17 100644
--- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
+++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -27,6 +27,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/browser/web_applications/os_integration/web_app_file_handler_manager.h b/chrome/browser/web_applications/os_integration/web_app_file_handler_manager.h
index 4bccd36..982203c 100644
--- a/chrome/browser/web_applications/os_integration/web_app_file_handler_manager.h
+++ b/chrome/browser/web_applications/os_integration/web_app_file_handler_manager.h
@@ -12,7 +12,6 @@
 #include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "components/services/app_service/public/cpp/file_handler.h"
-#include "mojo/public/cpp/bindings/associated_remote.h"
 
 class Profile;
 
diff --git a/chrome/browser/web_applications/os_integration/web_app_shortcut_mac_unittest.mm b/chrome/browser/web_applications/os_integration/web_app_shortcut_mac_unittest.mm
index 84eb8d51..476233e 100644
--- a/chrome/browser/web_applications/os_integration/web_app_shortcut_mac_unittest.mm
+++ b/chrome/browser/web_applications/os_integration/web_app_shortcut_mac_unittest.mm
@@ -19,7 +19,6 @@
 #include "base/path_service.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_test_override.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
diff --git a/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc b/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc
index be96fa2..24f810c2 100644
--- a/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc
+++ b/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc
@@ -12,6 +12,7 @@
 #include "base/path_service.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/browser/web_applications/test/fake_data_retriever.cc b/chrome/browser/web_applications/test/fake_data_retriever.cc
index 6243f96..2e34ede 100644
--- a/chrome/browser/web_applications/test/fake_data_retriever.cc
+++ b/chrome/browser/web_applications/test/fake_data_retriever.cc
@@ -9,6 +9,7 @@
 #include "base/check.h"
 #include "base/functional/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/webapps/browser/installable/installable_logging.h"
 #include "components/webapps/browser/installable/installable_params.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/browser/web_applications/test/fake_externally_managed_app_manager.cc b/chrome/browser/web_applications/test/fake_externally_managed_app_manager.cc
index add6eb4..7929411 100644
--- a/chrome/browser/web_applications/test/fake_externally_managed_app_manager.cc
+++ b/chrome/browser/web_applications/test/fake_externally_managed_app_manager.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/web_applications/test/fake_externally_managed_app_manager.h"
 
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace web_app {
 
diff --git a/chrome/browser/web_applications/test/fake_web_app_provider.cc b/chrome/browser/web_applications/test/fake_web_app_provider.cc
index 4cbeb7c0..b34cc675 100644
--- a/chrome/browser/web_applications/test/fake_web_app_provider.cc
+++ b/chrome/browser/web_applications/test/fake_web_app_provider.cc
@@ -204,6 +204,11 @@
   return *install_manager_;
 }
 
+OsIntegrationManager& FakeWebAppProvider::GetOsIntegrationManager() const {
+  DCHECK(os_integration_manager_);
+  return *os_integration_manager_;
+}
+
 void FakeWebAppProvider::StartWithSubsystems() {
   CheckNotStarted();
   SetRunSubsystemStartupTasks(true);
diff --git a/chrome/browser/web_applications/test/fake_web_app_provider.h b/chrome/browser/web_applications/test/fake_web_app_provider.h
index 3260098..26b4db5c 100644
--- a/chrome/browser/web_applications/test/fake_web_app_provider.h
+++ b/chrome/browser/web_applications/test/fake_web_app_provider.h
@@ -102,6 +102,7 @@
   AbstractWebAppDatabaseFactory& GetDatabaseFactory() const;
   WebAppUiManager& GetUiManager() const;
   WebAppInstallManager& GetInstallManager() const;
+  OsIntegrationManager& GetOsIntegrationManager() const;
 
   // Starts this WebAppProvider and its subsystems. It does not wait for systems
   // to be ready.
diff --git a/chrome/browser/web_applications/test/fake_web_app_ui_manager.cc b/chrome/browser/web_applications/test/fake_web_app_ui_manager.cc
index 53c935f..3d8ff83 100644
--- a/chrome/browser/web_applications/test/fake_web_app_ui_manager.cc
+++ b/chrome/browser/web_applications/test/fake_web_app_ui_manager.cc
@@ -33,11 +33,6 @@
   app_id_to_num_windows_map_[app_id] = num_windows_for_app;
 }
 
-bool FakeWebAppUiManager::DidUninstallAndReplace(const AppId& from_app,
-                                                 const AppId& to_app) {
-  return uninstall_and_replace_map_[from_app] == to_app;
-}
-
 WebAppUiManagerImpl* FakeWebAppUiManager::AsImpl() {
   return nullptr;
 }
@@ -58,15 +53,6 @@
                      }));
 }
 
-bool FakeWebAppUiManager::UninstallAndReplaceIfExists(
-    const std::vector<AppId>& from_apps,
-    const AppId& to_app) {
-  for (const AppId& from_app : from_apps) {
-    uninstall_and_replace_map_[from_app] = to_app;
-  }
-  return false;
-}
-
 bool FakeWebAppUiManager::CanAddAppToQuickLaunchBar() const {
   return false;
 }
@@ -124,4 +110,8 @@
   return base::Value("FakeWebAppUiManager::LaunchWebApp");
 }
 
+void FakeWebAppUiManager::MaybeTransferAppAttributes(
+    const AppId& from_extension_or_app,
+    const AppId& to_app) {}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/test/fake_web_app_ui_manager.h b/chrome/browser/web_applications/test/fake_web_app_ui_manager.h
index 4f823f1..f390c55 100644
--- a/chrome/browser/web_applications/test/fake_web_app_ui_manager.h
+++ b/chrome/browser/web_applications/test/fake_web_app_ui_manager.h
@@ -25,7 +25,6 @@
   void Shutdown() override;
 
   void SetNumWindowsForApp(const AppId& app_id, size_t num_windows_for_app);
-  bool DidUninstallAndReplace(const AppId& from_app, const AppId& to_app);
   int num_reparent_tab_calls() const { return num_reparent_tab_calls_; }
 
   // WebAppUiManager:
@@ -33,8 +32,6 @@
   size_t GetNumWindowsForApp(const AppId& app_id) override;
   void NotifyOnAllAppWindowsClosed(const AppId& app_id,
                                    base::OnceClosure callback) override;
-  bool UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps,
-                                   const AppId& to_app) override;
   bool CanAddAppToQuickLaunchBar() const override;
   void AddAppToQuickLaunchBar(const AppId& app_id) override;
   bool IsAppInQuickLaunchBar(const AppId& app_id) const override;
@@ -65,10 +62,11 @@
                            Profile& profile,
                            LaunchWebAppCallback callback,
                            AppLock& lock) override;
+  void MaybeTransferAppAttributes(const AppId& from_extension_or_app,
+                                  const AppId& to_app) override;
 
  private:
   std::map<AppId, size_t> app_id_to_num_windows_map_;
-  std::map<AppId, AppId> uninstall_and_replace_map_;
   int num_reparent_tab_calls_ = 0;
 };
 
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.cc b/chrome/browser/web_applications/web_app_command_scheduler.cc
index 4037efbd..6182da80 100644
--- a/chrome/browser/web_applications/web_app_command_scheduler.cc
+++ b/chrome/browser/web_applications/web_app_command_scheduler.cc
@@ -116,8 +116,9 @@
 
   provider_->command_manager().ScheduleCommand(
       std::make_unique<InstallFromInfoCommand>(
-          std::move(install_info), overwrite_existing_manifest_fields,
-          std::move(install_surface), std::move(install_callback)));
+          &profile_.get(), std::move(install_info),
+          overwrite_existing_manifest_fields, std::move(install_surface),
+          std::move(install_callback)));
 }
 
 void WebAppCommandScheduler::InstallFromInfoWithParams(
@@ -136,45 +137,79 @@
 
   provider_->command_manager().ScheduleCommand(
       std::make_unique<InstallFromInfoCommand>(
-          std::move(install_info), overwrite_existing_manifest_fields,
-          std::move(install_surface), std::move(install_callback),
-          install_params));
+          &profile_.get(), std::move(install_info),
+          overwrite_existing_manifest_fields, std::move(install_surface),
+          std::move(install_callback), install_params));
+}
+
+void WebAppCommandScheduler::InstallFromInfoWithParams(
+    std::unique_ptr<WebAppInstallInfo> install_info,
+    bool overwrite_existing_manifest_fields,
+    webapps::WebappInstallSource install_surface,
+    base::OnceCallback<void(const AppId& app_id,
+                            webapps::InstallResultCode code,
+                            bool did_uninstall_and_replace)> install_callback,
+    const WebAppInstallParams& install_params,
+    const std::vector<AppId>& apps_to_uninstall) {
+  if (IsShuttingDown()) {
+    base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            std::move(install_callback), AppId(),
+            webapps::InstallResultCode::kCancelledOnWebAppProviderShuttingDown,
+            /*did_uninstall_and_replace=*/false));
+    return;
+  }
+
+  provider_->command_manager().ScheduleCommand(
+      std::make_unique<InstallFromInfoCommand>(
+          &profile_.get(), std::move(install_info),
+          overwrite_existing_manifest_fields, std::move(install_surface),
+          std::move(install_callback), install_params, apps_to_uninstall));
 }
 
 void WebAppCommandScheduler::InstallExternallyManagedApp(
     const ExternalInstallOptions& external_install_options,
-    OnceInstallCallback callback,
+    base::OnceCallback<void(const AppId& app_id,
+                            webapps::InstallResultCode code,
+                            bool did_uninstall_and_replace)> install_callback,
     base::WeakPtr<content::WebContents> contents,
     std::unique_ptr<WebAppDataRetriever> data_retriever) {
   if (IsShuttingDown()) {
     base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), AppId(),
-                                  webapps::InstallResultCode::
-                                      kCancelledOnWebAppProviderShuttingDown));
+        FROM_HERE,
+        base::BindOnce(
+            std::move(install_callback), AppId(),
+            webapps::InstallResultCode::kCancelledOnWebAppProviderShuttingDown,
+            /*did_uninstall_and_replace=*/false));
     return;
   }
 
   provider_->command_manager().ScheduleCommand(
       std::make_unique<ExternallyManagedInstallCommand>(
-          external_install_options, std::move(callback), contents,
-          std::move(data_retriever)));
+          &profile_.get(), external_install_options,
+          std::move(install_callback), contents, std::move(data_retriever)));
 }
 
 void WebAppCommandScheduler::InstallPlaceholder(
     const ExternalInstallOptions& install_options,
-    OnceInstallCallback callback,
+    base::OnceCallback<void(const AppId& app_id,
+                            webapps::InstallResultCode code,
+                            bool did_uninstall_and_replace)> callback,
     base::WeakPtr<content::WebContents> web_contents) {
   if (IsShuttingDown()) {
-    base::SequencedTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), AppId(),
-                                  webapps::InstallResultCode::
-                                      kCancelledOnWebAppProviderShuttingDown));
+    base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            std::move(callback), AppId(),
+            webapps::InstallResultCode::kCancelledOnWebAppProviderShuttingDown,
+            /*did_uninstall_and_replace=*/false));
     return;
   }
 
   provider_->command_manager().ScheduleCommand(
       std::make_unique<InstallPlaceholderCommand>(
-          install_options, std::move(callback), web_contents,
+          &profile_.get(), install_options, std::move(callback), web_contents,
           std::make_unique<WebAppDataRetriever>()));
 }
 
diff --git a/chrome/browser/web_applications/web_app_command_scheduler.h b/chrome/browser/web_applications/web_app_command_scheduler.h
index 57b2fc3d..1b78a85 100644
--- a/chrome/browser/web_applications/web_app_command_scheduler.h
+++ b/chrome/browser/web_applications/web_app_command_scheduler.h
@@ -73,6 +73,8 @@
 
   // Install with provided `WebAppInstallInfo` instead of fetching data from
   // manifest.
+  // `InstallFromInfo` doesn't install OS hooks. `InstallFromInfoWithParams`
+  // install OS hooks when they are set in `install_params`.
   void InstallFromInfo(std::unique_ptr<WebAppInstallInfo> install_info,
                        bool overwrite_existing_manifest_fields,
                        webapps::WebappInstallSource install_surface,
@@ -85,18 +87,33 @@
       OnceInstallCallback install_callback,
       const WebAppInstallParams& install_params);
 
-  // Install web apps managed by `ExternallyManagedAppManager`.
+  void InstallFromInfoWithParams(
+      std::unique_ptr<WebAppInstallInfo> install_info,
+      bool overwrite_existing_manifest_fields,
+      webapps::WebappInstallSource install_surface,
+      base::OnceCallback<void(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace)> install_callback,
+      const WebAppInstallParams& install_params,
+      const std::vector<AppId>& apps_to_uninstall);
+
+  // Install web apps managed by `ExternallyInstalledAppManager`.
   void InstallExternallyManagedApp(
       const ExternalInstallOptions& external_install_options,
-      OnceInstallCallback callback,
+      base::OnceCallback<void(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace)> install_callback,
       base::WeakPtr<content::WebContents> contents,
       std::unique_ptr<WebAppDataRetriever> data_retriever);
 
   // Install a placeholder app, this is used during externally managed install
   // flow when url load fails.
-  void InstallPlaceholder(const ExternalInstallOptions& install_options,
-                          OnceInstallCallback callback,
-                          base::WeakPtr<content::WebContents> web_contents);
+  void InstallPlaceholder(
+      const ExternalInstallOptions& install_options,
+      base::OnceCallback<void(const AppId& app_id,
+                              webapps::InstallResultCode code,
+                              bool did_uninstall_and_replace)> callback,
+      base::WeakPtr<content::WebContents> web_contents);
 
   void PersistFileHandlersUserChoice(const AppId& app_id,
                                      bool allowed,
diff --git a/chrome/browser/web_applications/web_app_install_task_unittest.cc b/chrome/browser/web_applications/web_app_install_task_unittest.cc
index bba295e3..c921a00 100644
--- a/chrome/browser/web_applications/web_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_task_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h"
diff --git a/chrome/browser/web_applications/web_app_ui_manager.h b/chrome/browser/web_applications/web_app_ui_manager.h
index afa0b95..2a3ef92d 100644
--- a/chrome/browser/web_applications/web_app_ui_manager.h
+++ b/chrome/browser/web_applications/web_app_ui_manager.h
@@ -114,13 +114,6 @@
       const AppId& app_id,
       content::NavigationHandle* navigation_handle);
 
-  // Uninstalls the the apps in |from_apps| and migrates an |to_app|'s OS
-  // attributes (e.g pin position, app list folder/position, shortcuts) to the
-  // first |from_app| found. |shortcut_locations| will be populated with the
-  // shortcut locations Returns whether any |from_apps| were uninstalled.
-  virtual bool UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps,
-                                           const AppId& to_app) = 0;
-
   virtual bool CanAddAppToQuickLaunchBar() const = 0;
   virtual void AddAppToQuickLaunchBar(const AppId& app_id) = 0;
   virtual bool IsAppInQuickLaunchBar(const AppId& app_id) const = 0;
@@ -162,6 +155,11 @@
                                    Profile& profile,
                                    LaunchWebAppCallback callback,
                                    AppLock& lock) = 0;
+  // On Chrome OS ash, transfers app attributes, such as parent folder id,
+  // position in App Launcher and pin position on the shelf from one app to
+  // another app.
+  virtual void MaybeTransferAppAttributes(const AppId& from_extension_or_app,
+                                          const AppId& to_app) = 0;
 
  private:
   base::ObserverList<WebAppUiManagerObserver> observers_;
diff --git a/chrome/browser/web_applications/web_app_uninstall_and_replace_job.h b/chrome/browser/web_applications/web_app_uninstall_and_replace_job.h
new file mode 100644
index 0000000..0e5e60c
--- /dev/null
+++ b/chrome/browser/web_applications/web_app_uninstall_and_replace_job.h
@@ -0,0 +1,68 @@
+// Copyright 2023 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_WEB_APPLICATIONS_WEB_APP_UNINSTALL_AND_REPLACE_JOB_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UNINSTALL_AND_REPLACE_JOB_H_
+
+#include <vector>
+
+#include "base/functional/callback.h"
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/web_app_id.h"
+
+class Profile;
+
+namespace web_app {
+
+class AppLock;
+
+struct ShortcutInfo;
+struct ShortcutLocations;
+
+// Uninstalls the web apps or extensions in |from_apps_or_extensions| and
+// migrates an |to_app|'s OS attributes (e.g pin position, app list
+// folder/position, shortcuts and other OS integrations) to the first |from_app|
+// found.
+class WebAppUninstallAndReplaceJob {
+ public:
+  WebAppUninstallAndReplaceJob(
+      Profile* profile,
+      base::WeakPtr<AppLock> to_app_lock,
+      const std::vector<AppId>& from_apps_or_extensions,
+      const AppId& to_app,
+      base::OnceCallback<void(bool uninstall_triggered)> on_complete);
+  ~WebAppUninstallAndReplaceJob();
+  // Note: This can synchronously call `on_complete`.
+  void Start();
+
+ private:
+  void MigrateUiAndUninstallApp(const AppId& from_app,
+                                base::OnceClosure on_complete);
+  void OnShortcutInfoReceivedSearchShortcutLocations(
+      const AppId& from_app,
+      base::OnceClosure on_complete,
+      std::unique_ptr<ShortcutInfo> shortcut_info);
+
+  void OnShortcutLocationGathered(const AppId& from_app,
+                                  base::OnceClosure on_complete,
+                                  ShortcutLocations locations);
+
+  void InstallOsHooksForReplacementApp(base::OnceClosure on_complete,
+                                       ShortcutLocations locations);
+
+  void OnInstallOsHooksCompleted(base::OnceClosure on_complete, OsHooksErrors);
+
+  raw_ptr<Profile> profile_;
+  base::WeakPtr<AppLock> to_app_lock_;
+  std::vector<AppId> from_apps_or_extensions_;
+  const AppId to_app_;
+  base::OnceCallback<void(bool uninstall_triggered)> on_complete_;
+
+  base::WeakPtrFactory<WebAppUninstallAndReplaceJob> weak_ptr_factory_{this};
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UNINSTALL_AND_REPLACE_JOB_H_
diff --git a/chrome/browser/win/conflicts/third_party_conflicts_manager_unittest.cc b/chrome/browser/win/conflicts/third_party_conflicts_manager_unittest.cc
index 158b3dd..0ad24f8 100644
--- a/chrome/browser/win/conflicts/third_party_conflicts_manager_unittest.cc
+++ b/chrome/browser/win/conflicts/third_party_conflicts_manager_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/win/conflicts/module_info.h"
 #include "chrome/browser/win/conflicts/proto/module_list.pb.h"
 #include "chrome/common/chrome_features.h"
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 1602981..916095b 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1673243998-597817db2a280ddf686fd154324a988594980518.profdata
+chrome-linux-main-1673286942-c2cf68c8570f568f74e7e54022e6f261f2801d3e.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 094b8829..a99919a 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1673243998-10a194584721ccc3e6d579faf4827ab7c9e921cb.profdata
+chrome-mac-arm-main-1673286942-3021308db2b742a34ec33ce761dcf0fa47acecb7.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index e774506..df4db8b 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1673243998-2717b4fddeddb86fdeaaa167363c2109bf0dcc08.profdata
+chrome-mac-main-1673286942-8198dec69db543dacc14aa4c02b71122ae49b6c7.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index b734429..c254736 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1673243998-2b392ef1e015960270859b169216731a87812165.profdata
+chrome-win32-main-1673276395-8c76f0865e39048d42d2dc970b6a20b95b81002d.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 0e3b5c0..6057cf5 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1673254113-493ed8f98647f539ddf2812c5ef819317cd1f6fd.profdata
+chrome-win64-main-1673286942-a6bed9fc8bee54916623f7dbb9a8f33a7d3f610e.profdata
diff --git a/chrome/chrome_cleaner/chrome_utils/extensions_util.cc b/chrome/chrome_cleaner/chrome_utils/extensions_util.cc
index 328fde9..905f73bc 100644
--- a/chrome/chrome_cleaner/chrome_utils/extensions_util.cc
+++ b/chrome/chrome_cleaner/chrome_utils/extensions_util.cc
@@ -13,10 +13,10 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/containers/contains.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/chrome_cleaner/cleaner/cleaner.h b/chrome/chrome_cleaner/cleaner/cleaner.h
index a9875aa..7344db7f 100644
--- a/chrome/chrome_cleaner/cleaner/cleaner.h
+++ b/chrome/chrome_cleaner/cleaner/cleaner.h
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/chrome_cleaner/constants/uws_id.h"
 #include "components/chrome_cleaner/public/constants/result_codes.h"
 
diff --git a/chrome/chrome_cleaner/components/component_manager.cc b/chrome/chrome_cleaner/components/component_manager.cc
index e235abf9..06cd109 100644
--- a/chrome/chrome_cleaner/components/component_manager.cc
+++ b/chrome/chrome_cleaner/components/component_manager.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
diff --git a/chrome/chrome_cleaner/components/recovery_component.cc b/chrome/chrome_cleaner/components/recovery_component.cc
index 6dc25c1..c31685f 100644
--- a/chrome/chrome_cleaner/components/recovery_component.cc
+++ b/chrome/chrome_cleaner/components/recovery_component.cc
@@ -10,12 +10,12 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/numerics/safe_conversions.h"
diff --git a/chrome/chrome_cleaner/components/reset_shortcuts_component.cc b/chrome/chrome_cleaner/components/reset_shortcuts_component.cc
index 589abc4..4e81151 100644
--- a/chrome/chrome_cleaner/components/reset_shortcuts_component.cc
+++ b/chrome/chrome_cleaner/components/reset_shortcuts_component.cc
@@ -13,12 +13,12 @@
 #include <vector>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/chrome/chrome_cleaner/components/reset_shortcuts_component_unittest.cc b/chrome/chrome_cleaner/components/reset_shortcuts_component_unittest.cc
index 23690d0..051a34c4 100644
--- a/chrome/chrome_cleaner/components/reset_shortcuts_component_unittest.cc
+++ b/chrome/chrome_cleaner/components/reset_shortcuts_component_unittest.cc
@@ -6,10 +6,10 @@
 
 #include <set>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/test/multiprocess_test.h"
diff --git a/chrome/chrome_cleaner/components/system_report_component.cc b/chrome/chrome_cleaner/components/system_report_component.cc
index 096f43b..019f691 100644
--- a/chrome/chrome_cleaner/components/system_report_component.cc
+++ b/chrome/chrome_cleaner/components/system_report_component.cc
@@ -17,12 +17,12 @@
 #include <vector>
 
 #include "base/base_paths_win.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/path_service.h"
diff --git a/chrome/chrome_cleaner/engines/broker/cleaner_engine_requests_impl.h b/chrome/chrome_cleaner/engines/broker/cleaner_engine_requests_impl.h
index d312f82c..2c711b3 100644
--- a/chrome/chrome_cleaner/engines/broker/cleaner_engine_requests_impl.h
+++ b/chrome/chrome_cleaner/engines/broker/cleaner_engine_requests_impl.h
@@ -8,8 +8,8 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.h"
 #include "chrome/chrome_cleaner/engines/broker/interface_metadata_observer.h"
 #include "chrome/chrome_cleaner/ipc/mojo_task_runner.h"
diff --git a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.cc b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.cc
index b3555846..51c0ee0 100644
--- a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.cc
+++ b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.cc
@@ -11,9 +11,9 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback_helpers.h"
 #include "base/strings/string_util.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/chrome_cleaner/chrome_utils/chrome_util.h"
diff --git a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.h b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.h
index c8e7414..084c4e2 100644
--- a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.h
+++ b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface.h
@@ -9,7 +9,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/chrome_cleaner/os/file_path_set.h"
 #include "chrome/chrome_cleaner/os/file_remover_api.h"
 #include "chrome/chrome_cleaner/strings/wstring_embedded_nulls.h"
diff --git a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc
index 2274116..93928be 100644
--- a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc
+++ b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc
@@ -12,12 +12,12 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/path_service.h"
 #include "base/process/kill.h"
 #include "base/process/process.h"
diff --git a/chrome/chrome_cleaner/engines/broker/engine_client.cc b/chrome/chrome_cleaner/engines/broker/engine_client.cc
index 881359c..2bcc613 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_client.cc
+++ b/chrome/chrome_cleaner/engines/broker/engine_client.cc
@@ -13,9 +13,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/chrome_cleaner/engines/broker/engine_client.h b/chrome/chrome_cleaner/engines/broker/engine_client.h
index 451ac032..b69011c 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_client.h
+++ b/chrome/chrome_cleaner/engines/broker/engine_client.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "chrome/chrome_cleaner/constants/uws_id.h"
diff --git a/chrome/chrome_cleaner/engines/broker/engine_client_mock.cc b/chrome/chrome_cleaner/engines/broker/engine_client_mock.cc
index a6ff6d5..d2c8749 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_client_mock.cc
+++ b/chrome/chrome_cleaner/engines/broker/engine_client_mock.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/chrome_cleaner/engines/broker/engine_client_mock.h"
 
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "base/test/null_task_runner.h"
 #include "chrome/chrome_cleaner/ipc/mojo_task_runner.h"
 
diff --git a/chrome/chrome_cleaner/engines/broker/engine_client_unittest.cc b/chrome/chrome_cleaner/engines/broker/engine_client_unittest.cc
index 2d3c6df..74b54f8 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_client_unittest.cc
+++ b/chrome/chrome_cleaner/engines/broker/engine_client_unittest.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/chrome_cleaner/engines/broker/engine_client.h"
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/scoped_refptr.h"
 #include "chrome/chrome_cleaner/engines/common/engine_result_codes.h"
 #include "chrome/chrome_cleaner/ipc/mojo_task_runner.h"
diff --git a/chrome/chrome_cleaner/engines/broker/engine_file_requests_impl.cc b/chrome/chrome_cleaner/engines/broker/engine_file_requests_impl.cc
index 012bc10..3f098d0c 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_file_requests_impl.cc
+++ b/chrome/chrome_cleaner/engines/broker/engine_file_requests_impl.cc
@@ -8,7 +8,7 @@
 #include <string>
 #include <utility>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/chrome_cleaner/engines/broker/engine_requests_impl.cc b/chrome/chrome_cleaner/engines/broker/engine_requests_impl.cc
index b11d2d1..0007ef0 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_requests_impl.cc
+++ b/chrome/chrome_cleaner/engines/broker/engine_requests_impl.cc
@@ -13,9 +13,9 @@
 #include <set>
 #include <utility>
 
-#include "base/callback.h"
-#include "base/task/thread_pool.h"
+#include "base/functional/callback.h"
 #include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "chrome/chrome_cleaner/engines/broker/scanner_sandbox_interface.h"
 #include "chrome/chrome_cleaner/os/registry.h"
 #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc b/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc
index 7e803a9..135b8c0 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc
+++ b/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc
@@ -9,12 +9,12 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/notreached.h"
 #include "base/strings/strcat.h"
diff --git a/chrome/chrome_cleaner/engines/broker/engine_scan_results_impl.h b/chrome/chrome_cleaner/engines/broker/engine_scan_results_impl.h
index ca110b0a..fd332e5 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_scan_results_impl.h
+++ b/chrome/chrome_cleaner/engines/broker/engine_scan_results_impl.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_CHROME_CLEANER_ENGINES_BROKER_ENGINE_SCAN_RESULTS_IMPL_H_
 #define CHROME_CHROME_CLEANER_ENGINES_BROKER_ENGINE_SCAN_RESULTS_IMPL_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/chrome_cleaner/engines/broker/interface_metadata_observer.h"
 #include "chrome/chrome_cleaner/mojom/engine_sandbox.mojom.h"
 #include "chrome/chrome_cleaner/pup_data/pup_data.h"
diff --git a/chrome/chrome_cleaner/engines/broker/sandbox_setup.cc b/chrome/chrome_cleaner/engines/broker/sandbox_setup.cc
index b99bd0ff..4454eb6f 100644
--- a/chrome/chrome_cleaner/engines/broker/sandbox_setup.cc
+++ b/chrome/chrome_cleaner/engines/broker/sandbox_setup.cc
@@ -8,10 +8,11 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/chrome_cleaner/buildflags.h"
 #include "chrome/chrome_cleaner/constants/chrome_cleaner_switches.h"
 #include "chrome/chrome_cleaner/engines/common/engine_result_codes.h"
diff --git a/chrome/chrome_cleaner/engines/broker/sandbox_setup.h b/chrome/chrome_cleaner/engines/broker/sandbox_setup.h
index e089dfa..c92d45e2 100644
--- a/chrome/chrome_cleaner/engines/broker/sandbox_setup.h
+++ b/chrome/chrome_cleaner/engines/broker/sandbox_setup.h
@@ -8,8 +8,8 @@
 #include <memory>
 #include <utility>
 
-#include "base/callback.h"
 #include "base/command_line.h"
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "chrome/chrome_cleaner/engines/broker/engine_client.h"
 #include "chrome/chrome_cleaner/engines/broker/interface_metadata_observer.h"
diff --git a/chrome/chrome_cleaner/engines/broker/scanner_sandbox_interface.cc b/chrome/chrome_cleaner/engines/broker/scanner_sandbox_interface.cc
index e276432..9a7583f 100644
--- a/chrome/chrome_cleaner/engines/broker/scanner_sandbox_interface.cc
+++ b/chrome/chrome_cleaner/engines/broker/scanner_sandbox_interface.cc
@@ -58,11 +58,11 @@
   return false;
 }
 
-NTSTATUS NtQueryInformationProcess(HANDLE ProcessHandle,
-                                   PROCESSINFOCLASS ProcessInformationClass,
-                                   PVOID ProcessInformation,
-                                   ULONG ProcessInformationLength,
-                                   PULONG ReturnLength) {
+NTSTATUS WrapNtQueryInformationProcess(HANDLE ProcessHandle,
+                                       PROCESSINFOCLASS ProcessInformationClass,
+                                       PVOID ProcessInformation,
+                                       ULONG ProcessInformationLength,
+                                       PULONG ReturnLength) {
   static NtQueryInformationProcessFunction query_information_process = nullptr;
   if (!query_information_process) {
     ResolveNTFunctionPtr("NtQueryInformationProcess",
@@ -94,16 +94,10 @@
     return false;
   }
 
-  // Use undocumented ProcessCommandLineInformation value (60) of the
-  // PROCESSINFOCLASS enumeration to retrieve UNICODE_STRING value containing
-  // command line of the process.
-  constexpr PROCESSINFOCLASS kProcessCommandLineInformation =
-      static_cast<PROCESSINFOCLASS>(60);
-
   // 1. Query length of the information structure.
   DWORD info_length = 0;
-  NTSTATUS status = NtQueryInformationProcess(
-      process.Get(), kProcessCommandLineInformation, nullptr, 0, &info_length);
+  NTSTATUS status = WrapNtQueryInformationProcess(
+      process.Get(), ProcessCommandLineInformation, nullptr, 0, &info_length);
   if (status == STATUS_INVALID_INFO_CLASS || status == STATUS_NOT_IMPLEMENTED) {
     *feature_available = false;
     return false;
@@ -120,9 +114,9 @@
   // Leave enough space to enforce the terminating null character.
   std::vector<char> buffer(info_length + sizeof(WCHAR));
   DWORD bytes_read = 0;
-  status =
-      NtQueryInformationProcess(process.Get(), kProcessCommandLineInformation,
-                                buffer.data(), info_length, &bytes_read);
+  status = WrapNtQueryInformationProcess(
+      process.Get(), ProcessCommandLineInformation, buffer.data(), info_length,
+      &bytes_read);
   if (NT_ERROR(status)) {
     LOG(ERROR) << "Error querying process command line: error " << status;
     return false;
@@ -137,10 +131,10 @@
   PUNICODE_STRING command_line =
       reinterpret_cast<PUNICODE_STRING>(buffer.data());
 
-  // NtQueryInformationProcess can return a buffer filled with 0's (for example
-  // when querying LsaIso.exe, an Isolated User Mode process). When we cast a
-  // buffer of 0's to a UNICODE_STRING struct, all members including the Buffer
-  // pointer becomed 0.
+  // WrapNtQueryInformationProcess can return a buffer filled with 0's (for
+  // example when querying LsaIso.exe, an Isolated User Mode process). When we
+  // cast a buffer of 0's to a UNICODE_STRING struct, all members including the
+  // Buffer pointer becomed 0.
   if (command_line->Buffer == nullptr) {
     LOG(ERROR) << "Invalid command line buffer";
     return false;
@@ -197,7 +191,7 @@
 
   PROCESS_BASIC_INFORMATION process_basic_info;
   ULONG process_info_size = 0;
-  NTSTATUS query_info_status = NtQueryInformationProcess(
+  NTSTATUS query_info_status = WrapNtQueryInformationProcess(
       process.Get(), ProcessBasicInformation, &process_basic_info,
       sizeof(process_basic_info), &process_info_size);
   if (query_info_status != STATUS_SUCCESS) {
diff --git a/chrome/chrome_cleaner/engines/controllers/elevating_facade.cc b/chrome/chrome_cleaner/engines/controllers/elevating_facade.cc
index 0f1f575..33362dd 100644
--- a/chrome/chrome_cleaner/engines/controllers/elevating_facade.cc
+++ b/chrome/chrome_cleaner/engines/controllers/elevating_facade.cc
@@ -9,9 +9,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/process/launch.h"
 #include "base/process/process.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/engine_cleaner.cc b/chrome/chrome_cleaner/engines/controllers/engine_cleaner.cc
index 62bb8e3b..e8b3b79 100644
--- a/chrome/chrome_cleaner/engines/controllers/engine_cleaner.cc
+++ b/chrome/chrome_cleaner/engines/controllers/engine_cleaner.cc
@@ -6,9 +6,9 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/chrome_cleaner/engines/broker/logging_conversion.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/engine_cleaner.h b/chrome/chrome_cleaner/engines/controllers/engine_cleaner.h
index 77aa1528..5fcfde3a 100644
--- a/chrome/chrome_cleaner/engines/controllers/engine_cleaner.h
+++ b/chrome/chrome_cleaner/engines/controllers/engine_cleaner.h
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/chrome_cleaner/cleaner/cleaner.h"
 #include "chrome/chrome_cleaner/engines/broker/engine_client.h"
 #include "components/chrome_cleaner/public/constants/result_codes.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/engine_cleaner_unittest.cc b/chrome/chrome_cleaner/engines/controllers/engine_cleaner_unittest.cc
index 438a906..e7db36ec 100644
--- a/chrome/chrome_cleaner/engines/controllers/engine_cleaner_unittest.cc
+++ b/chrome/chrome_cleaner/engines/controllers/engine_cleaner_unittest.cc
@@ -6,7 +6,7 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/main_controller.cc b/chrome/chrome_cleaner/engines/controllers/main_controller.cc
index 14fb5866..4beb449 100644
--- a/chrome/chrome_cleaner/engines/controllers/main_controller.cc
+++ b/chrome/chrome_cleaner/engines/controllers/main_controller.cc
@@ -10,9 +10,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/process/process_handle.h"
 #include "base/process/process_metrics.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/main_controller.h b/chrome/chrome_cleaner/engines/controllers/main_controller.h
index 32c1745..4249f03 100644
--- a/chrome/chrome_cleaner/engines/controllers/main_controller.h
+++ b/chrome/chrome_cleaner/engines/controllers/main_controller.h
@@ -14,11 +14,12 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/watchdog.h"
 #include "base/time/time.h"
 #include "chrome/chrome_cleaner/cleaner/cleaner.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/main_controller_unittest.cc b/chrome/chrome_cleaner/engines/controllers/main_controller_unittest.cc
index 868d6c2..fb488ca 100644
--- a/chrome/chrome_cleaner/engines/controllers/main_controller_unittest.cc
+++ b/chrome/chrome_cleaner/engines/controllers/main_controller_unittest.cc
@@ -7,9 +7,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/scanner_controller_impl.cc b/chrome/chrome_cleaner/engines/controllers/scanner_controller_impl.cc
index 0081926..7f9cff4 100644
--- a/chrome/chrome_cleaner/engines/controllers/scanner_controller_impl.cc
+++ b/chrome/chrome_cleaner/engines/controllers/scanner_controller_impl.cc
@@ -4,9 +4,10 @@
 
 #include "chrome/chrome_cleaner/engines/controllers/scanner_controller_impl.h"
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chrome/chrome_cleaner/constants/uws_id.h"
 #include "chrome/chrome_cleaner/engines/broker/logging_conversion.h"
 #include "chrome/chrome_cleaner/ipc/sandbox.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/scanner_impl.cc b/chrome/chrome_cleaner/engines/controllers/scanner_impl.cc
index 1926604..d701d2a 100644
--- a/chrome/chrome_cleaner/engines/controllers/scanner_impl.cc
+++ b/chrome/chrome_cleaner/engines/controllers/scanner_impl.cc
@@ -7,9 +7,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check_op.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/chrome_cleaner/constants/uws_id.h"
 #include "chrome/chrome_cleaner/engines/broker/logging_conversion.h"
diff --git a/chrome/chrome_cleaner/engines/controllers/scanner_impl_unittest.cc b/chrome/chrome_cleaner/engines/controllers/scanner_impl_unittest.cc
index a5dad61..80ab11a1 100644
--- a/chrome/chrome_cleaner/engines/controllers/scanner_impl_unittest.cc
+++ b/chrome/chrome_cleaner/engines/controllers/scanner_impl_unittest.cc
@@ -7,10 +7,10 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/chrome_cleaner/engines/target/cleaner_engine_requests_proxy.cc b/chrome/chrome_cleaner/engines/target/cleaner_engine_requests_proxy.cc
index 3bb2b728..6110291 100644
--- a/chrome/chrome_cleaner/engines/target/cleaner_engine_requests_proxy.cc
+++ b/chrome/chrome_cleaner/engines/target/cleaner_engine_requests_proxy.cc
@@ -9,6 +9,7 @@
 
 #include "base/location.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/chrome_cleaner/engines/target/engine_commands_impl.h"
 #include "chrome/chrome_cleaner/strings/wstring_embedded_nulls.h"
 
diff --git a/chrome/chrome_cleaner/engines/target/engine_cleanup_results_proxy.cc b/chrome/chrome_cleaner/engines/target/engine_cleanup_results_proxy.cc
index 82e1ee7..1d60bebe 100644
--- a/chrome/chrome_cleaner/engines/target/engine_cleanup_results_proxy.cc
+++ b/chrome/chrome_cleaner/engines/target/engine_cleanup_results_proxy.cc
@@ -6,8 +6,9 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace chrome_cleaner {
 
diff --git a/chrome/chrome_cleaner/engines/target/engine_commands_impl.cc b/chrome/chrome_cleaner/engines/target/engine_commands_impl.cc
index 2cd10ab9..9ffee68 100644
--- a/chrome/chrome_cleaner/engines/target/engine_commands_impl.cc
+++ b/chrome/chrome_cleaner/engines/target/engine_commands_impl.cc
@@ -7,6 +7,7 @@
 #include <string>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/chrome_cleaner/crash/crash_keys.h"
 #include "chrome/chrome_cleaner/engines/target/cleaner_engine_requests_proxy.h"
 #include "chrome/chrome_cleaner/engines/target/engine_cleanup_results_proxy.h"
diff --git a/chrome/chrome_cleaner/engines/target/engine_commands_impl.h b/chrome/chrome_cleaner/engines/target/engine_commands_impl.h
index 83a810b..be6303b 100644
--- a/chrome/chrome_cleaner/engines/target/engine_commands_impl.h
+++ b/chrome/chrome_cleaner/engines/target/engine_commands_impl.h
@@ -8,7 +8,7 @@
 #include <stdint.h>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/chrome_cleaner/engines/target/engine_delegate.h"
diff --git a/chrome/chrome_cleaner/engines/target/engine_file_requests_proxy.cc b/chrome/chrome_cleaner/engines/target/engine_file_requests_proxy.cc
index 4a91c661..cc6b30d3 100644
--- a/chrome/chrome_cleaner/engines/target/engine_file_requests_proxy.cc
+++ b/chrome/chrome_cleaner/engines/target/engine_file_requests_proxy.cc
@@ -7,8 +7,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace chrome_cleaner {
 
diff --git a/chrome/chrome_cleaner/engines/target/engine_requests_proxy.cc b/chrome/chrome_cleaner/engines/target/engine_requests_proxy.cc
index 6d8f7580..1061003 100644
--- a/chrome/chrome_cleaner/engines/target/engine_requests_proxy.cc
+++ b/chrome/chrome_cleaner/engines/target/engine_requests_proxy.cc
@@ -8,8 +8,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/win/registry.h"
 #include "chrome/chrome_cleaner/strings/wstring_embedded_nulls.h"
 #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/chrome/chrome_cleaner/engines/target/engine_requests_proxy.h b/chrome/chrome_cleaner/engines/target/engine_requests_proxy.h
index 872c01e..81ac1bb 100644
--- a/chrome/chrome_cleaner/engines/target/engine_requests_proxy.h
+++ b/chrome/chrome_cleaner/engines/target/engine_requests_proxy.h
@@ -13,7 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/process/process_handle.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/chrome_cleaner/engines/target/sandbox_request_helper.h"
 #include "chrome/chrome_cleaner/mojom/engine_requests.mojom.h"
 #include "chrome/chrome_cleaner/os/task_scheduler.h"
diff --git a/chrome/chrome_cleaner/engines/target/engine_requests_proxy_unittest.cc b/chrome/chrome_cleaner/engines/target/engine_requests_proxy_unittest.cc
index 10ebd6a7..006f93747 100644
--- a/chrome/chrome_cleaner/engines/target/engine_requests_proxy_unittest.cc
+++ b/chrome/chrome_cleaner/engines/target/engine_requests_proxy_unittest.cc
@@ -14,8 +14,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/functional/callback_helpers.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/chrome_cleaner/engines/target/engine_scan_results_proxy.cc b/chrome/chrome_cleaner/engines/target/engine_scan_results_proxy.cc
index 78a2f2a3..79a3808ff 100644
--- a/chrome/chrome_cleaner/engines/target/engine_scan_results_proxy.cc
+++ b/chrome/chrome_cleaner/engines/target/engine_scan_results_proxy.cc
@@ -7,8 +7,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace chrome_cleaner {
 
diff --git a/chrome/chrome_cleaner/engines/target/libraries.cc b/chrome/chrome_cleaner/engines/target/libraries.cc
index 38a71c4..e2f5aa5a 100644
--- a/chrome/chrome_cleaner/engines/target/libraries.cc
+++ b/chrome/chrome_cleaner/engines/target/libraries.cc
@@ -15,9 +15,9 @@
 #include <unordered_map>
 #include <utility>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/native_library.h"
 #include "base/strings/string_piece.h"
diff --git a/chrome/chrome_cleaner/engines/target/libraries.h b/chrome/chrome_cleaner/engines/target/libraries.h
index 91c8dbc..5af398d 100644
--- a/chrome/chrome_cleaner/engines/target/libraries.h
+++ b/chrome/chrome_cleaner/engines/target/libraries.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_CHROME_CLEANER_ENGINES_TARGET_LIBRARIES_H_
 #define CHROME_CHROME_CLEANER_ENGINES_TARGET_LIBRARIES_H_
 
-#include "base/callback_forward.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/chrome_cleaner/logging/proto/shared_data.pb.h"
 
 namespace chrome_cleaner {
diff --git a/chrome/chrome_cleaner/engines/target/libraries_unittest.cc b/chrome/chrome_cleaner/engines/target/libraries_unittest.cc
index 9ba4f5fe..ad15739d 100644
--- a/chrome/chrome_cleaner/engines/target/libraries_unittest.cc
+++ b/chrome/chrome_cleaner/engines/target/libraries_unittest.cc
@@ -6,10 +6,10 @@
 
 #include <string>
 
-#include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_number_conversions.h"
 #include "chrome/chrome_cleaner/engines/common/engine_resources.h"
diff --git a/chrome/chrome_cleaner/engines/target/sandbox_request_helper.h b/chrome/chrome_cleaner/engines/target/sandbox_request_helper.h
index 386a1a0..a8b0aa9 100644
--- a/chrome/chrome_cleaner/engines/target/sandbox_request_helper.h
+++ b/chrome/chrome_cleaner/engines/target/sandbox_request_helper.h
@@ -7,8 +7,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_forward.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/task_runner.h"
diff --git a/chrome/chrome_cleaner/engines/target/sandbox_setup.cc b/chrome/chrome_cleaner/engines/target/sandbox_setup.cc
index 3a6502a..290a2889 100644
--- a/chrome/chrome_cleaner/engines/target/sandbox_setup.cc
+++ b/chrome/chrome_cleaner/engines/target/sandbox_setup.cc
@@ -8,9 +8,9 @@
 #include <utility>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
diff --git a/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.cc b/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.cc
index 92627341..2276e0b 100644
--- a/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.cc
+++ b/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "base/task/single_thread_task_executor.h"
 #include "chrome/chrome_cleaner/engines/common/engine_result_codes.h"
 #include "chrome/chrome_cleaner/os/early_exit.h"
diff --git a/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.h b/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.h
index 78f7e99..0bf0f55 100644
--- a/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.h
+++ b/chrome/chrome_cleaner/engines/target/sandboxed_test_helpers.h
@@ -9,8 +9,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "chrome/chrome_cleaner/engines/broker/cleaner_engine_requests_impl.h"
 #include "chrome/chrome_cleaner/engines/broker/engine_cleanup_results_impl.h"
diff --git a/chrome/chrome_cleaner/engines/target/test_engine_delegate.cc b/chrome/chrome_cleaner/engines/target/test_engine_delegate.cc
index 35b36df..435c8ed 100644
--- a/chrome/chrome_cleaner/engines/target/test_engine_delegate.cc
+++ b/chrome/chrome_cleaner/engines/target/test_engine_delegate.cc
@@ -11,9 +11,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
diff --git a/chrome/chrome_cleaner/executables/chrome_cleaner_main.cc b/chrome/chrome_cleaner/executables/chrome_cleaner_main.cc
index 255355e..d01ad45 100644
--- a/chrome/chrome_cleaner/executables/chrome_cleaner_main.cc
+++ b/chrome/chrome_cleaner/executables/chrome_cleaner_main.cc
@@ -25,7 +25,6 @@
 #include "base/task/single_thread_task_executor.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/version.h"
 #include "base/win/scoped_com_initializer.h"
 #include "base/win/scoped_handle.h"
diff --git a/chrome/chrome_cleaner/executables/chrome_reporter_main.cc b/chrome/chrome_cleaner/executables/chrome_reporter_main.cc
index a008d88..a4268330 100644
--- a/chrome/chrome_cleaner/executables/chrome_reporter_main.cc
+++ b/chrome/chrome_cleaner/executables/chrome_reporter_main.cc
@@ -11,11 +11,11 @@
 #include <utility>
 
 #include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/dcheck_is_on.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/chrome_cleaner/ipc/chrome_prompt_ipc.h b/chrome/chrome_cleaner/ipc/chrome_prompt_ipc.h
index a889e4df..847bdff 100644
--- a/chrome/chrome_cleaner/ipc/chrome_prompt_ipc.h
+++ b/chrome/chrome_cleaner/ipc/chrome_prompt_ipc.h
@@ -8,8 +8,8 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/sequence_checker.h"
 #include "components/chrome_cleaner/public/proto/chrome_prompt.pb.h"
 
diff --git a/chrome/chrome_cleaner/ipc/chrome_prompt_test_util.cc b/chrome/chrome_cleaner/ipc/chrome_prompt_test_util.cc
index dd585ab..6bb86d48 100644
--- a/chrome/chrome_cleaner/ipc/chrome_prompt_test_util.cc
+++ b/chrome/chrome_cleaner/ipc/chrome_prompt_test_util.cc
@@ -8,8 +8,8 @@
 
 #include <utility>
 
-#include "base/callback_helpers.h"
 #include "base/check.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/chrome_cleaner/ipc/ipc_test_util.cc b/chrome/chrome_cleaner/ipc/ipc_test_util.cc
index d3934d5..e3a58bf 100644
--- a/chrome/chrome_cleaner/ipc/ipc_test_util.cc
+++ b/chrome/chrome_cleaner/ipc/ipc_test_util.cc
@@ -8,10 +8,10 @@
 #include <vector>
 
 #include "base/base_switches.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/process/launch.h"
 #include "base/rand_util.h"
diff --git a/chrome/chrome_cleaner/ipc/ipc_test_util.h b/chrome/chrome_cleaner/ipc/ipc_test_util.h
index 1edd78ca..b74526f6 100644
--- a/chrome/chrome_cleaner/ipc/ipc_test_util.h
+++ b/chrome/chrome_cleaner/ipc/ipc_test_util.h
@@ -8,8 +8,8 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
 #include "base/command_line.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/process/launch.h"
 #include "base/process/process.h"
diff --git a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc
index 50b6029..70bf296 100644
--- a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc
+++ b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.cc
@@ -7,14 +7,13 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check_op.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
 #include "mojo/public/cpp/system/invitation.h"
 #include "mojo/public/cpp/system/message_pipe.h"
diff --git a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.h b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.h
index a2cc717d..ef7c695c 100644
--- a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.h
+++ b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
 #include "chrome/chrome_cleaner/ipc/chrome_prompt_ipc.h"
diff --git a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc_unittest.cc b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc_unittest.cc
index ac52024..d1b3a31 100644
--- a/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc_unittest.cc
+++ b/chrome/chrome_cleaner/ipc/mojo_chrome_prompt_ipc_unittest.cc
@@ -9,13 +9,12 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/chrome_cleaner/ipc/ipc_test_util.h"
 #include "chrome/chrome_cleaner/logging/scoped_logging.h"
 #include "chrome/chrome_cleaner/mojom/chrome_prompt.mojom.h"
diff --git a/chrome/chrome_cleaner/ipc/mojo_sandbox_hooks_unittest.cc b/chrome/chrome_cleaner/ipc/mojo_sandbox_hooks_unittest.cc
index 34fd069..3bcca63 100644
--- a/chrome/chrome_cleaner/ipc/mojo_sandbox_hooks_unittest.cc
+++ b/chrome/chrome_cleaner/ipc/mojo_sandbox_hooks_unittest.cc
@@ -6,9 +6,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/multiprocess_test.h"
diff --git a/chrome/chrome_cleaner/ipc/mojo_task_runner.h b/chrome/chrome_cleaner/ipc/mojo_task_runner.h
index 3b29fde..6a9c665 100644
--- a/chrome/chrome_cleaner/ipc/mojo_task_runner.h
+++ b/chrome/chrome_cleaner/ipc/mojo_task_runner.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/location.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/single_thread_task_runner.h"
diff --git a/chrome/chrome_cleaner/ipc/proto_chrome_prompt_ipc.cc b/chrome/chrome_cleaner/ipc/proto_chrome_prompt_ipc.cc
index 2c7eebc..77a0a6fb 100644
--- a/chrome/chrome_cleaner/ipc/proto_chrome_prompt_ipc.cc
+++ b/chrome/chrome_cleaner/ipc/proto_chrome_prompt_ipc.cc
@@ -6,7 +6,7 @@
 
 #include <windows.h>
 
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/chrome_cleaner/ipc/sandbox.cc b/chrome/chrome_cleaner/ipc/sandbox.cc
index eb3bac7..4482c5c 100644
--- a/chrome/chrome_cleaner/ipc/sandbox.cc
+++ b/chrome/chrome_cleaner/ipc/sandbox.cc
@@ -12,8 +12,8 @@
 #include <vector>
 
 #include "base/base_switches.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/chrome_cleaner/ipc/sandbox.h b/chrome/chrome_cleaner/ipc/sandbox.h
index 0bc0564..c1e3385 100644
--- a/chrome/chrome_cleaner/ipc/sandbox.h
+++ b/chrome/chrome_cleaner/ipc/sandbox.h
@@ -9,8 +9,8 @@
 
 #include <map>
 
-#include "base/callback.h"
 #include "base/command_line.h"
+#include "base/functional/callback.h"
 #include "base/process/process.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/chrome_cleaner/os/process.h"
diff --git a/chrome/chrome_cleaner/ipc/sandbox_unittest.cc b/chrome/chrome_cleaner/ipc/sandbox_unittest.cc
index 8f0b92fd..734248f 100644
--- a/chrome/chrome_cleaner/ipc/sandbox_unittest.cc
+++ b/chrome/chrome_cleaner/ipc/sandbox_unittest.cc
@@ -9,10 +9,10 @@
 #include <algorithm>
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/chrome_cleaner/logging/cleaner_logging_service.cc b/chrome/chrome_cleaner/logging/cleaner_logging_service.cc
index a2766df..6c04efb 100644
--- a/chrome/chrome_cleaner/logging/cleaner_logging_service.cc
+++ b/chrome/chrome_cleaner/logging/cleaner_logging_service.cc
@@ -8,12 +8,12 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/cpu.h"
 #include "base/files/file.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/chrome_cleaner/logging/cleaner_logging_service.h b/chrome/chrome_cleaner/logging/cleaner_logging_service.h
index ea99429..0585a0f 100644
--- a/chrome/chrome_cleaner/logging/cleaner_logging_service.h
+++ b/chrome/chrome_cleaner/logging/cleaner_logging_service.h
@@ -11,9 +11,9 @@
 #include <unordered_map>
 #include <vector>
 
-#include "base/callback_forward.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/singleton.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread_checker.h"
diff --git a/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc b/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc
index 71cb08e3..027cbc8 100644
--- a/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc
+++ b/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc
@@ -8,10 +8,10 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chrome/chrome_cleaner/logging/logging_service_api.h b/chrome/chrome_cleaner/logging/logging_service_api.h
index 9796d7f..4678b4c 100644
--- a/chrome/chrome_cleaner/logging/logging_service_api.h
+++ b/chrome/chrome_cleaner/logging/logging_service_api.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/chrome_cleaner/logging/utils.h"
 #include "chrome/chrome_cleaner/os/disk_util_types.h"
 #include "chrome/chrome_cleaner/os/process.h"
diff --git a/chrome/chrome_cleaner/logging/noop_logging_service.h b/chrome/chrome_cleaner/logging/noop_logging_service.h
index 5de11fa..774580e 100644
--- a/chrome/chrome_cleaner/logging/noop_logging_service.h
+++ b/chrome/chrome_cleaner/logging/noop_logging_service.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/chrome_cleaner/logging/logging_service_api.h"
 #include "chrome/chrome_cleaner/logging/proto/shared_data.pb.h"
 #include "chrome/chrome_cleaner/pup_data/pup_data.h"
diff --git a/chrome/chrome_cleaner/logging/pending_logs_service.cc b/chrome/chrome_cleaner/logging/pending_logs_service.cc
index d43a9e2..8517578 100644
--- a/chrome/chrome_cleaner/logging/pending_logs_service.cc
+++ b/chrome/chrome_cleaner/logging/pending_logs_service.cc
@@ -7,10 +7,10 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/task/current_thread.h"
 #include "chrome/chrome_cleaner/constants/chrome_cleaner_switches.h"
diff --git a/chrome/chrome_cleaner/logging/pending_logs_service.h b/chrome/chrome_cleaner/logging/pending_logs_service.h
index 644ad43..db1cc94 100644
--- a/chrome/chrome_cleaner/logging/pending_logs_service.h
+++ b/chrome/chrome_cleaner/logging/pending_logs_service.h
@@ -7,8 +7,8 @@
 
 #include <string>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/threading/thread_checker.h"
 
 namespace chrome_cleaner {
diff --git a/chrome/chrome_cleaner/logging/pending_logs_service_unittest.cc b/chrome/chrome_cleaner/logging/pending_logs_service_unittest.cc
index a5b3b80a..9ac8493 100644
--- a/chrome/chrome_cleaner/logging/pending_logs_service_unittest.cc
+++ b/chrome/chrome_cleaner/logging/pending_logs_service_unittest.cc
@@ -9,11 +9,11 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/chrome_cleaner/logging/reporter_logging_service.cc b/chrome/chrome_cleaner/logging/reporter_logging_service.cc
index e4c5154e..dbcdae9 100644
--- a/chrome/chrome_cleaner/logging/reporter_logging_service.cc
+++ b/chrome/chrome_cleaner/logging/reporter_logging_service.cc
@@ -7,8 +7,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/check_op.h"
+#include "base/functional/bind.h"
 #include "base/memory/singleton.h"
 #include "base/notreached.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/chrome_cleaner/logging/reporter_logging_service.h b/chrome/chrome_cleaner/logging/reporter_logging_service.h
index d5e70d8b..d0c56bb 100644
--- a/chrome/chrome_cleaner/logging/reporter_logging_service.h
+++ b/chrome/chrome_cleaner/logging/reporter_logging_service.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/singleton.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread_checker.h"
diff --git a/chrome/chrome_cleaner/logging/reporter_logging_service_unittest.cc b/chrome/chrome_cleaner/logging/reporter_logging_service_unittest.cc
index da021fd..4de78ac 100644
--- a/chrome/chrome_cleaner/logging/reporter_logging_service_unittest.cc
+++ b/chrome/chrome_cleaner/logging/reporter_logging_service_unittest.cc
@@ -8,8 +8,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "chrome/chrome_cleaner/constants/uws_id.h"
diff --git a/chrome/chrome_cleaner/logging/safe_browsing_reporter.cc b/chrome/chrome_cleaner/logging/safe_browsing_reporter.cc
index 41547e1..54afb8a 100644
--- a/chrome/chrome_cleaner/logging/safe_browsing_reporter.cc
+++ b/chrome/chrome_cleaner/logging/safe_browsing_reporter.cc
@@ -12,9 +12,9 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/chrome_cleaner/logging/safe_browsing_reporter.h b/chrome/chrome_cleaner/logging/safe_browsing_reporter.h
index 419f85b96..afdce1d6 100644
--- a/chrome/chrome_cleaner/logging/safe_browsing_reporter.h
+++ b/chrome/chrome_cleaner/logging/safe_browsing_reporter.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/task/task_runner.h"
 #include "base/time/time.h"
 #include "chrome/chrome_cleaner/http/http_agent.h"
diff --git a/chrome/chrome_cleaner/logging/safe_browsing_reporter_unittest.cc b/chrome/chrome_cleaner/logging/safe_browsing_reporter_unittest.cc
index ffab866..b8d1d1d 100644
--- a/chrome/chrome_cleaner/logging/safe_browsing_reporter_unittest.cc
+++ b/chrome/chrome_cleaner/logging/safe_browsing_reporter_unittest.cc
@@ -8,7 +8,7 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
diff --git a/chrome/chrome_cleaner/logging/scoped_timed_task_logger.cc b/chrome/chrome_cleaner/logging/scoped_timed_task_logger.cc
index 6ab1c35..920cb51 100644
--- a/chrome/chrome_cleaner/logging/scoped_timed_task_logger.cc
+++ b/chrome/chrome_cleaner/logging/scoped_timed_task_logger.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/chrome_cleaner/logging/scoped_timed_task_logger.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 
 namespace chrome_cleaner {
diff --git a/chrome/chrome_cleaner/logging/scoped_timed_task_logger.h b/chrome/chrome_cleaner/logging/scoped_timed_task_logger.h
index 81500f17..3b94d4f 100644
--- a/chrome/chrome_cleaner/logging/scoped_timed_task_logger.h
+++ b/chrome/chrome_cleaner/logging/scoped_timed_task_logger.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_CHROME_CLEANER_LOGGING_SCOPED_TIMED_TASK_LOGGER_H_
 #define CHROME_CHROME_CLEANER_LOGGING_SCOPED_TIMED_TASK_LOGGER_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/time/time.h"
 
 namespace chrome_cleaner {
diff --git a/chrome/chrome_cleaner/logging/scoped_timed_task_logger_unittest.cc b/chrome/chrome_cleaner/logging/scoped_timed_task_logger_unittest.cc
index 85f7087..c4e1df7a 100644
--- a/chrome/chrome_cleaner/logging/scoped_timed_task_logger_unittest.cc
+++ b/chrome/chrome_cleaner/logging/scoped_timed_task_logger_unittest.cc
@@ -6,8 +6,8 @@
 
 #include <vector>
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/test/bind.h"
 #include "chrome/chrome_cleaner/test/test_util.h"
diff --git a/chrome/chrome_cleaner/logging/utils.h b/chrome/chrome_cleaner/logging/utils.h
index 438df66..57af48e 100644
--- a/chrome/chrome_cleaner/logging/utils.h
+++ b/chrome/chrome_cleaner/logging/utils.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_CHROME_CLEANER_LOGGING_UTILS_H_
 #define CHROME_CHROME_CLEANER_LOGGING_UTILS_H_
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "chrome/chrome_cleaner/logging/info_sampler.h"
 #include "chrome/chrome_cleaner/logging/proto/shared_data.pb.h"
 #include "chrome/chrome_cleaner/os/disk_util.h"
diff --git a/chrome/chrome_cleaner/logging/utils_unittest.cc b/chrome/chrome_cleaner/logging/utils_unittest.cc
index 26a04a8..6b7cf09 100644
--- a/chrome/chrome_cleaner/logging/utils_unittest.cc
+++ b/chrome/chrome_cleaner/logging/utils_unittest.cc
@@ -8,9 +8,9 @@
 #include <map>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/chrome_cleaner/mojom/typemaps/pup_typemap_unittest.cc b/chrome/chrome_cleaner/mojom/typemaps/pup_typemap_unittest.cc
index 4926620..28eaccc 100644
--- a/chrome/chrome_cleaner/mojom/typemaps/pup_typemap_unittest.cc
+++ b/chrome/chrome_cleaner/mojom/typemaps/pup_typemap_unittest.cc
@@ -4,7 +4,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/synchronization/waitable_event.h"
 #include "chrome/chrome_cleaner/ipc/ipc_test_util.h"
 #include "chrome/chrome_cleaner/ipc/mojo_task_runner.h"
diff --git a/chrome/chrome_cleaner/mojom/typemaps/wstring_embedded_nulls_typemap_unittest.cc b/chrome/chrome_cleaner/mojom/typemaps/wstring_embedded_nulls_typemap_unittest.cc
index dc2cd659..5411c624 100644
--- a/chrome/chrome_cleaner/mojom/typemaps/wstring_embedded_nulls_typemap_unittest.cc
+++ b/chrome/chrome_cleaner/mojom/typemaps/wstring_embedded_nulls_typemap_unittest.cc
@@ -5,7 +5,7 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/synchronization/waitable_event.h"
 #include "chrome/chrome_cleaner/ipc/ipc_test_util.h"
 #include "chrome/chrome_cleaner/ipc/mojo_task_runner.h"
diff --git a/chrome/chrome_cleaner/os/disk_util.h b/chrome/chrome_cleaner/os/disk_util.h
index a8bc169..2940e29 100644
--- a/chrome/chrome_cleaner/os/disk_util.h
+++ b/chrome/chrome_cleaner/os/disk_util.h
@@ -14,8 +14,8 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/strings/string_piece.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/chrome_cleaner/os/disk_util_types.h"
diff --git a/chrome/chrome_cleaner/os/disk_util_unittest.cc b/chrome/chrome_cleaner/os/disk_util_unittest.cc
index e181465..68615b8 100644
--- a/chrome/chrome_cleaner/os/disk_util_unittest.cc
+++ b/chrome/chrome_cleaner/os/disk_util_unittest.cc
@@ -8,14 +8,14 @@
 
 #include <shlobj.h>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
diff --git a/chrome/chrome_cleaner/os/file_remover.cc b/chrome/chrome_cleaner/os/file_remover.cc
index 374e9b4..0d800546 100644
--- a/chrome/chrome_cleaner/os/file_remover.cc
+++ b/chrome/chrome_cleaner/os/file_remover.cc
@@ -9,8 +9,8 @@
 #include <unordered_set>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/chrome/chrome_cleaner/os/file_remover.h b/chrome/chrome_cleaner/os/file_remover.h
index 063796a..c3bfa655 100644
--- a/chrome/chrome_cleaner/os/file_remover.h
+++ b/chrome/chrome_cleaner/os/file_remover.h
@@ -9,7 +9,7 @@
 #include <utility>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/chrome_cleaner/logging/proto/removal_status.pb.h"
 #include "chrome/chrome_cleaner/os/digest_verifier.h"
 #include "chrome/chrome_cleaner/os/file_path_set.h"
diff --git a/chrome/chrome_cleaner/os/file_remover_api.h b/chrome/chrome_cleaner/os/file_remover_api.h
index 727e436..cdd9cea 100644
--- a/chrome/chrome_cleaner/os/file_remover_api.h
+++ b/chrome/chrome_cleaner/os/file_remover_api.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_CHROME_CLEANER_OS_FILE_REMOVER_API_H_
 #define CHROME_CHROME_CLEANER_OS_FILE_REMOVER_API_H_
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "chrome/chrome_cleaner/os/file_path_set.h"
 
 namespace chrome_cleaner {
diff --git a/chrome/chrome_cleaner/os/file_remover_unittest.cc b/chrome/chrome_cleaner/os/file_remover_unittest.cc
index bda8605..5d4ce45 100644
--- a/chrome/chrome_cleaner/os/file_remover_unittest.cc
+++ b/chrome/chrome_cleaner/os/file_remover_unittest.cc
@@ -9,12 +9,12 @@
 #include <utility>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/path_service.h"
 #include "base/strings/strcat.h"
diff --git a/chrome/chrome_cleaner/os/registry_unittest.cc b/chrome/chrome_cleaner/os/registry_unittest.cc
index 5d5d2c4..a1d40f2 100644
--- a/chrome/chrome_cleaner/os/registry_unittest.cc
+++ b/chrome/chrome_cleaner/os/registry_unittest.cc
@@ -9,8 +9,8 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/strings/strcat.h"
 #include "base/win/registry.h"
 #include "chrome/chrome_cleaner/os/system_util.h"
diff --git a/chrome/chrome_cleaner/os/registry_util_unittest.cc b/chrome/chrome_cleaner/os/registry_util_unittest.cc
index d2de416..102b8d1 100644
--- a/chrome/chrome_cleaner/os/registry_util_unittest.cc
+++ b/chrome/chrome_cleaner/os/registry_util_unittest.cc
@@ -8,8 +8,8 @@
 
 #include <algorithm>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/test_reg_util_win.h"
 #include "chrome/chrome_cleaner/os/system_util.h"
diff --git a/chrome/chrome_cleaner/os/shutdown_watchdog.h b/chrome/chrome_cleaner/os/shutdown_watchdog.h
index aecd517..e9a1e0aca 100644
--- a/chrome/chrome_cleaner/os/shutdown_watchdog.h
+++ b/chrome/chrome_cleaner/os/shutdown_watchdog.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_CHROME_CLEANER_OS_SHUTDOWN_WATCHDOG_H_
 #define CHROME_CHROME_CLEANER_OS_SHUTDOWN_WATCHDOG_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/watchdog.h"
 #include "base/time/time.h"
diff --git a/chrome/chrome_cleaner/os/shutdown_watchdog_unittest.cc b/chrome/chrome_cleaner/os/shutdown_watchdog_unittest.cc
index ddf5897f..c4be5e8 100644
--- a/chrome/chrome_cleaner/os/shutdown_watchdog_unittest.cc
+++ b/chrome/chrome_cleaner/os/shutdown_watchdog_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <windows.h>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 int ReturnAnInt(int i) {
diff --git a/chrome/chrome_cleaner/parsers/broker/json_parser_sandbox_setup_unittest.cc b/chrome/chrome_cleaner/parsers/broker/json_parser_sandbox_setup_unittest.cc
index dd68676..d6fbc84 100644
--- a/chrome/chrome_cleaner/parsers/broker/json_parser_sandbox_setup_unittest.cc
+++ b/chrome/chrome_cleaner/parsers/broker/json_parser_sandbox_setup_unittest.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/multiprocess_test.h"
diff --git a/chrome/chrome_cleaner/parsers/broker/lnk_parser_sandbox_setup_unittest.cc b/chrome/chrome_cleaner/parsers/broker/lnk_parser_sandbox_setup_unittest.cc
index 7d6c25b..49b5cc6 100644
--- a/chrome/chrome_cleaner/parsers/broker/lnk_parser_sandbox_setup_unittest.cc
+++ b/chrome/chrome_cleaner/parsers/broker/lnk_parser_sandbox_setup_unittest.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/test/multiprocess_test.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/chrome_cleaner/parsers/broker/sandbox_setup_hooks.cc b/chrome/chrome_cleaner/parsers/broker/sandbox_setup_hooks.cc
index 766065f5..daff43f 100644
--- a/chrome/chrome_cleaner/parsers/broker/sandbox_setup_hooks.cc
+++ b/chrome/chrome_cleaner/parsers/broker/sandbox_setup_hooks.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "chrome/chrome_cleaner/constants/chrome_cleaner_switches.h"
 #include "chrome/chrome_cleaner/mojom/parser_interface.mojom.h"
 #include "chrome/chrome_cleaner/settings/settings_types.h"
diff --git a/chrome/chrome_cleaner/parsers/json_parser/json_parser_api.h b/chrome/chrome_cleaner/parsers/json_parser/json_parser_api.h
index a71eea3..5d26ea33 100644
--- a/chrome/chrome_cleaner/parsers/json_parser/json_parser_api.h
+++ b/chrome/chrome_cleaner/parsers/json_parser/json_parser_api.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_CHROME_CLEANER_PARSERS_JSON_PARSER_JSON_PARSER_API_H_
 #define CHROME_CHROME_CLEANER_PARSERS_JSON_PARSER_JSON_PARSER_API_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/values.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/chrome_cleaner/parsers/json_parser/sandboxed_json_parser.cc b/chrome/chrome_cleaner/parsers/json_parser/sandboxed_json_parser.cc
index b1e51b0a..552a02c 100644
--- a/chrome/chrome_cleaner/parsers/json_parser/sandboxed_json_parser.cc
+++ b/chrome/chrome_cleaner/parsers/json_parser/sandboxed_json_parser.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 
 namespace chrome_cleaner {
 
diff --git a/chrome/chrome_cleaner/parsers/shortcut_parser/broker/fake_shortcut_parser.cc b/chrome/chrome_cleaner/parsers/shortcut_parser/broker/fake_shortcut_parser.cc
index b0c59352..4463ec54 100644
--- a/chrome/chrome_cleaner/parsers/shortcut_parser/broker/fake_shortcut_parser.cc
+++ b/chrome/chrome_cleaner/parsers/shortcut_parser/broker/fake_shortcut_parser.cc
@@ -9,7 +9,6 @@
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/path_service.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/chrome_cleaner/mojom/parser_interface.mojom.h"
 #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser.cc b/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser.cc
index ef72f64..0600d507c 100644
--- a/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser.cc
+++ b/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser.cc
@@ -8,11 +8,11 @@
 
 #include <string>
 
-#include "base/bind.h"
 #include "base/files/file.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/task/thread_pool.h"
 #include "base/win/scoped_handle.h"
diff --git a/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser_unittest.cc b/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser_unittest.cc
index baa399e9..0125a418 100644
--- a/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser_unittest.cc
+++ b/chrome/chrome_cleaner/parsers/shortcut_parser/broker/sandboxed_shortcut_parser_unittest.cc
@@ -7,10 +7,10 @@
 #include <set>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chrome/chrome_cleaner/parsers/target/parser_impl_unittest.cc b/chrome/chrome_cleaner/parsers/target/parser_impl_unittest.cc
index 8c05264d2..0a926719b 100644
--- a/chrome/chrome_cleaner/parsers/target/parser_impl_unittest.cc
+++ b/chrome/chrome_cleaner/parsers/target/parser_impl_unittest.cc
@@ -4,10 +4,10 @@
 
 #include "chrome/chrome_cleaner/parsers/target/parser_impl.h"
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/chrome_cleaner/pup_data/pup_cleaner_util.cc b/chrome/chrome_cleaner/pup_data/pup_cleaner_util.cc
index b864d42e..790389b 100644
--- a/chrome/chrome_cleaner/pup_data/pup_cleaner_util.cc
+++ b/chrome/chrome_cleaner/pup_data/pup_cleaner_util.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/chrome_cleaner/pup_data/pup_cleaner_util.h"
 
-#include "base/callback_helpers.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback_helpers.h"
 #include "chrome/chrome_cleaner/os/file_remover.h"
 #include "chrome/chrome_cleaner/os/layered_service_provider_wrapper.h"
 #include "chrome/chrome_cleaner/pup_data/pup_data.h"
diff --git a/chrome/chrome_cleaner/scanner/scanner.h b/chrome/chrome_cleaner/scanner/scanner.h
index 7c598a47..8e7c3497 100644
--- a/chrome/chrome_cleaner/scanner/scanner.h
+++ b/chrome/chrome_cleaner/scanner/scanner.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/chrome_cleaner/constants/uws_id.h"
 #include "components/chrome_cleaner/public/constants/result_codes.h"
 
diff --git a/chrome/chrome_cleaner/scanner/scanner_controller.cc b/chrome/chrome_cleaner/scanner/scanner_controller.cc
index b948810..ce284027 100644
--- a/chrome/chrome_cleaner/scanner/scanner_controller.cc
+++ b/chrome/chrome_cleaner/scanner/scanner_controller.cc
@@ -10,8 +10,8 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
 #include "base/check_op.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "chrome/chrome_cleaner/chrome_utils/chrome_util.h"
diff --git a/chrome/chrome_cleaner/scanner/scanner_controller.h b/chrome/chrome_cleaner/scanner/scanner_controller.h
index 2c74cad..bf5cef9f 100644
--- a/chrome/chrome_cleaner/scanner/scanner_controller.h
+++ b/chrome/chrome_cleaner/scanner/scanner_controller.h
@@ -8,7 +8,7 @@
 #include <utility>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/chrome/chrome_cleaner/scanner/signature_matcher.cc b/chrome/chrome_cleaner/scanner/signature_matcher.cc
index 6b50232d..0b70b01 100644
--- a/chrome/chrome_cleaner/scanner/signature_matcher.cc
+++ b/chrome/chrome_cleaner/scanner/signature_matcher.cc
@@ -11,12 +11,12 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/file_version_info.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/chrome_cleaner/scanner/signature_matcher_unittest.cc b/chrome/chrome_cleaner/scanner/signature_matcher_unittest.cc
index 71ca4cc..9fa93a0 100644
--- a/chrome/chrome_cleaner/scanner/signature_matcher_unittest.cc
+++ b/chrome/chrome_cleaner/scanner/signature_matcher_unittest.cc
@@ -6,9 +6,9 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
diff --git a/chrome/chrome_cleaner/test/cleaner_test.cc b/chrome/chrome_cleaner/test/cleaner_test.cc
index 601c2678..997eaee1 100644
--- a/chrome/chrome_cleaner/test/cleaner_test.cc
+++ b/chrome/chrome_cleaner/test/cleaner_test.cc
@@ -8,11 +8,11 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
 #include "base/ranges/algorithm.h"
diff --git a/chrome/chrome_cleaner/test/file_remover_test_util.cc b/chrome/chrome_cleaner/test/file_remover_test_util.cc
index d12c823..8cdc531 100644
--- a/chrome/chrome_cleaner/test/file_remover_test_util.cc
+++ b/chrome/chrome_cleaner/test/file_remover_test_util.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/chrome_cleaner/test/generate_test_uws_test.cc b/chrome/chrome_cleaner/test/generate_test_uws_test.cc
index c5d0fcf6..261f258 100644
--- a/chrome/chrome_cleaner/test/generate_test_uws_test.cc
+++ b/chrome/chrome_cleaner/test/generate_test_uws_test.cc
@@ -5,10 +5,10 @@
 #include <string>
 
 #include "base/base_paths_win.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
 #include "base/process/process.h"
diff --git a/chrome/chrome_cleaner/test/scoped_process_protector.cc b/chrome/chrome_cleaner/test/scoped_process_protector.cc
index ee7cc4b..856ac32d 100644
--- a/chrome/chrome_cleaner/test/scoped_process_protector.cc
+++ b/chrome/chrome_cleaner/test/scoped_process_protector.cc
@@ -8,8 +8,8 @@
 
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 
 namespace chrome_cleaner {
diff --git a/chrome/chrome_cleaner/test/test_util.cc b/chrome/chrome_cleaner/test/test_util.cc
index 29172797..f893817a 100644
--- a/chrome/chrome_cleaner/test/test_util.cc
+++ b/chrome/chrome_cleaner/test/test_util.cc
@@ -15,11 +15,11 @@
 #include <utility>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
diff --git a/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog.cc b/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog.cc
index a6f20e91..8e63c4aa 100644
--- a/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog.cc
+++ b/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog.cc
@@ -8,9 +8,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/check.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/chrome_cleaner/os/file_path_set.h"
 #include "chrome/chrome_cleaner/settings/settings.h"
diff --git a/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog_unittest.cc b/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog_unittest.cc
index 93bbade..f9281f6 100644
--- a/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog_unittest.cc
+++ b/chrome/chrome_cleaner/ui/chrome_proxy_main_dialog_unittest.cc
@@ -7,8 +7,8 @@
 #include <memory>
 #include <utility>
 
-#include "base/callback.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/callback.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "chrome/chrome_cleaner/ipc/chrome_prompt_test_util.h"
diff --git a/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup.cc b/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup.cc
index 57d82cdc..35587d5 100644
--- a/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup.cc
+++ b/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup.cc
@@ -7,8 +7,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "chrome/chrome_cleaner/mojom/zip_archiver.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup_unittest.cc b/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup_unittest.cc
index c124e2a..6972052 100644
--- a/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup_unittest.cc
+++ b/chrome/chrome_cleaner/zip_archiver/broker/sandbox_setup_unittest.cc
@@ -5,9 +5,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/multiprocess_test.h"
diff --git a/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver.h b/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver.h
index b0018675..f73cc1c 100644
--- a/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver.h
+++ b/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver.h
@@ -8,9 +8,9 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/chrome_cleaner/ipc/mojo_task_runner.h"
diff --git a/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver_unittest.cc b/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver_unittest.cc
index 0bc7961..913c8f40 100644
--- a/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver_unittest.cc
+++ b/chrome/chrome_cleaner/zip_archiver/sandboxed_zip_archiver_unittest.cc
@@ -4,9 +4,9 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
diff --git a/chrome/chrome_cleaner/zip_archiver/target/sandbox_setup.cc b/chrome/chrome_cleaner/zip_archiver/target/sandbox_setup.cc
index aaf3b35..a9b29c0 100644
--- a/chrome/chrome_cleaner/zip_archiver/target/sandbox_setup.cc
+++ b/chrome/chrome_cleaner/zip_archiver/target/sandbox_setup.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
diff --git a/chrome/chrome_cleaner/zip_archiver/target/zip_archiver_impl_unittest.cc b/chrome/chrome_cleaner/zip_archiver/target/zip_archiver_impl_unittest.cc
index 87b3d72c..11ffc972 100644
--- a/chrome/chrome_cleaner/zip_archiver/target/zip_archiver_impl_unittest.cc
+++ b/chrome/chrome_cleaner/zip_archiver/target/zip_archiver_impl_unittest.cc
@@ -6,9 +6,9 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/test/task_environment.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/chrome_cleaner/constants/quarantine_constants.h"
diff --git a/chrome/chrome_cleaner/zip_archiver/zip_archiver.h b/chrome/chrome_cleaner/zip_archiver/zip_archiver.h
index d8c4eb9..9019679 100644
--- a/chrome/chrome_cleaner/zip_archiver/zip_archiver.h
+++ b/chrome/chrome_cleaner/zip_archiver/zip_archiver.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_CHROME_CLEANER_ZIP_ARCHIVER_ZIP_ARCHIVER_H_
 #define CHROME_CHROME_CLEANER_ZIP_ARCHIVER_ZIP_ARCHIVER_H_
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "chrome/chrome_cleaner/mojom/zip_archiver.mojom.h"
 
 namespace chrome_cleaner {
diff --git a/chrome/chrome_elf/nt_registry/nt_registry.cc b/chrome/chrome_elf/nt_registry/nt_registry.cc
index 3452e0f2..6bf2e52 100644
--- a/chrome/chrome_elf/nt_registry/nt_registry.cc
+++ b/chrome/chrome_elf/nt_registry/nt_registry.cc
@@ -11,6 +11,8 @@
 #include <memory>
 #include <string>
 
+#include "sandbox/win/src/nt_internals.h"
+
 namespace {
 
 // Function pointers used for registry access.
diff --git a/chrome/chrome_elf/nt_registry/nt_registry.h b/chrome/chrome_elf/nt_registry/nt_registry.h
index 9a58293c..a38d75f98 100644
--- a/chrome/chrome_elf/nt_registry/nt_registry.h
+++ b/chrome/chrome_elf/nt_registry/nt_registry.h
@@ -24,11 +24,12 @@
 #ifndef CHROME_CHROME_ELF_NT_REGISTRY_NT_REGISTRY_H_
 #define CHROME_CHROME_ELF_NT_REGISTRY_NT_REGISTRY_H_
 
+#include <windows.h>
+#include <winternl.h>  // NTSTATUS
+
 #include <string>
 #include <vector>
 
-#include "sandbox/win/src/nt_internals.h"  // NTSTATUS
-
 namespace nt {
 
 // Windows registry maximum lengths (in chars).  Not including null char.
@@ -63,7 +64,7 @@
 bool CreateRegKey(ROOT_KEY root,
                   const wchar_t* key_path,
                   ACCESS_MASK access,
-                  HANDLE* out_handle OPTIONAL);
+                  HANDLE* out_handle);
 
 // Open existing registry key.
 // - Caller must call CloseRegKey on returned handle (on success).
@@ -72,7 +73,7 @@
                 const wchar_t* key_path,
                 ACCESS_MASK access,
                 HANDLE* out_handle,
-                NTSTATUS* error_code OPTIONAL);
+                NTSTATUS* error_code);
 
 // Delete a registry key.
 // - Caller must still call CloseRegKey after the delete.
diff --git a/chrome/chrome_elf/nt_registry/nt_registry_unittest.cc b/chrome/chrome_elf/nt_registry/nt_registry_unittest.cc
index 03bd06e..344b20d 100644
--- a/chrome/chrome_elf/nt_registry/nt_registry_unittest.cc
+++ b/chrome/chrome_elf/nt_registry/nt_registry_unittest.cc
@@ -9,8 +9,8 @@
 #include <rpc.h>
 #include <stddef.h>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/test/test_reg_util_win.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/chrome_elf/run_all_unittests.cc b/chrome/chrome_elf/run_all_unittests.cc
index 510fcf4..331aa36 100644
--- a/chrome/chrome_elf/run_all_unittests.cc
+++ b/chrome/chrome_elf/run_all_unittests.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "chrome/install_static/test/scoped_install_details.h"
diff --git a/chrome/common/apps/platform_apps/api/_api_features.json b/chrome/common/apps/platform_apps/api/_api_features.json
index 38edb2da..4ccf73d 100644
--- a/chrome/common/apps/platform_apps/api/_api_features.json
+++ b/chrome/common/apps/platform_apps/api/_api_features.json
@@ -30,9 +30,5 @@
   "syncFileSystem": {
     "dependencies": ["permission:syncFileSystem"],
     "contexts": ["blessed_extension"]
-  },
-  "webstoreWidgetPrivate": {
-    "dependencies": ["permission:webstoreWidgetPrivate"],
-    "contexts": ["blessed_extension"]
   }
 }
diff --git a/chrome/common/apps/platform_apps/api/_permission_features.json b/chrome/common/apps/platform_apps/api/_permission_features.json
index 26f48a7..db4bdb1 100644
--- a/chrome/common/apps/platform_apps/api/_permission_features.json
+++ b/chrome/common/apps/platform_apps/api/_permission_features.json
@@ -80,15 +80,5 @@
   "syncFileSystem": {
     "channel": "stable",
     "extension_types": ["platform_app"]
-  },
-  "webstoreWidgetPrivate": {
-    "channel": "stable",
-    "extension_types": ["platform_app"],
-    "platforms": ["chromeos"],
-    "allowlist": [
-      "A948368FC53BE437A55FEB414106E207925482F5",  // Files app
-      "8C726564C6DBE7380BAB388DE6CC7EC93EB44B06",  // Video player
-      "5065C83E84321221675D20FBE4DC43C655CC8C6F"   // Files app tests
-    ]
   }
 }
diff --git a/chrome/common/apps/platform_apps/api/api_sources.gni b/chrome/common/apps/platform_apps/api/api_sources.gni
index 2422923..3691ae79 100644
--- a/chrome/common/apps/platform_apps/api/api_sources.gni
+++ b/chrome/common/apps/platform_apps/api/api_sources.gni
@@ -12,10 +12,6 @@
   "browser.idl",
   "media_galleries.idl",
   "sync_file_system.idl",
-
-  # TODO(devlin): This API is only available on ChromeOS. We should only
-  # generate sources for it on CrOS as well.
-  "webstore_widget_private.idl",
 ]
 
 if (is_chromeos_ash) {
diff --git a/chrome/common/apps/platform_apps/api/webstore_widget_private.idl b/chrome/common/apps/platform_apps/api/webstore_widget_private.idl
deleted file mode 100644
index 9e61c75..0000000
--- a/chrome/common/apps/platform_apps/api/webstore_widget_private.idl
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2015 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// webstoreWidgetPrivate API.
-// This is a private API used to install apps via Chrome Web Store widget - for
-// example in Files app to install file system provider services.
-[platforms=("chromeos")]
-namespace webstoreWidgetPrivate {
-
-// Callback that does not take arguments.
-callback SimpleCallback = void();
-
-interface Functions {
-  // Requests to install a webstore item.
-  // |item_id| The id of the item to install.
-  // |silentInstallation| False to show installation prompt. True not to show.
-  //     Can be set to true only for a subset of installation requests.
-  static void installWebstoreItem(DOMString itemId,
-                                  boolean silentInstallation,
-                                  SimpleCallback callback);
-};
-
-};
diff --git a/chrome/common/apps/platform_apps/chrome_apps_api_permissions.cc b/chrome/common/apps/platform_apps/chrome_apps_api_permissions.cc
index 95493b4d..bfdae62 100644
--- a/chrome/common/apps/platform_apps/chrome_apps_api_permissions.cc
+++ b/chrome/common/apps/platform_apps/chrome_apps_api_permissions.cc
@@ -37,8 +37,6 @@
          kFlagDoesNotRequireManagedSessionFullLoginWarning},
     {APIPermissionID::kEnterpriseRemoteApps, "enterprise.remoteApps"},
     {APIPermissionID::kSyncFileSystem, "syncFileSystem"},
-    {APIPermissionID::kWebstoreWidgetPrivate, "webstoreWidgetPrivate",
-     extensions::APIPermissionInfo::kFlagCannotBeOptional},
 };
 
 }  // namespace
diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc
index 21350774a..7a8249e 100644
--- a/chrome/common/chrome_content_client.cc
+++ b/chrome/common/chrome_content_client.cc
@@ -10,9 +10,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/containers/flat_set.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/no_destructor.h"
 #include "base/path_service.h"
@@ -20,6 +20,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -143,7 +144,7 @@
   pdf_info.is_out_of_process = true;
   pdf_info.name = ChromeContentClient::kPDFInternalPluginName;
   pdf_info.description = kPDFPluginDescription;
-  pdf_info.path = base::FilePath(ChromeContentClient::kPDFPluginPath);
+  pdf_info.path = base::FilePath(ChromeContentClient::kPDFInternalPluginPath);
   content::WebPluginMimeType pdf_mime_type(
       pdf::kInternalPluginMimeType, kPDFPluginExtension, kPDFPluginDescription);
   pdf_info.mime_types.push_back(pdf_mime_type);
diff --git a/chrome/common/chrome_content_client.h b/chrome/common/chrome_content_client.h
index 67ba4f7..fc6364e 100644
--- a/chrome/common/chrome_content_client.h
+++ b/chrome/common/chrome_content_client.h
@@ -12,6 +12,7 @@
 
 #include "base/files/file_path.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "chrome/common/buildflags.h"
@@ -38,7 +39,8 @@
 
   static const char kPDFExtensionPluginName[];
   static const char kPDFInternalPluginName[];
-  static const base::FilePath::CharType kPDFPluginPath[];
+  static const base::FilePath::CharType kPDFExtensionPluginPath[];
+  static const base::FilePath::CharType kPDFInternalPluginPath[];
 
   ChromeContentClient();
   ~ChromeContentClient() override;
diff --git a/chrome/common/chrome_content_client_constants.cc b/chrome/common/chrome_content_client_constants.cc
index 33e6463..b31739d 100644
--- a/chrome/common/chrome_content_client_constants.cc
+++ b/chrome/common/chrome_content_client_constants.cc
@@ -20,5 +20,7 @@
     "Chromium PDF Plugin";
 #endif
 
-const base::FilePath::CharType ChromeContentClient::kPDFPluginPath[] =
+const base::FilePath::CharType ChromeContentClient::kPDFExtensionPluginPath[] =
+    FILE_PATH_LITERAL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/");
+const base::FilePath::CharType ChromeContentClient::kPDFInternalPluginPath[] =
     FILE_PATH_LITERAL("internal-pdf-viewer");
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 7c3e0a24..8d21d1c6 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -409,12 +409,6 @@
              base::FEATURE_ENABLED_BY_DEFAULT);
 #endif
 
-// Controls whether the user justification text field is visible on the
-// extension request dialog.
-BASE_FEATURE(kExtensionWorkflowJustification,
-             "ExtensionWorkflowJustification",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // If enabled, this feature's |kExternalInstallDefaultButtonKey| field trial
 // parameter value controls which |ExternalInstallBubbleAlert| button is the
 // default.
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index bf529e7b..c730265 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -226,9 +226,6 @@
 BASE_DECLARE_FEATURE(kExtensionDeferredIndividualSettings);
 #endif
 
-COMPONENT_EXPORT(CHROME_FEATURES)
-BASE_DECLARE_FEATURE(kExtensionWorkflowJustification);
-
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 COMPONENT_EXPORT(CHROME_FEATURES)
 BASE_DECLARE_FEATURE(kEnterpriseReportingInChromeOS);
diff --git a/chrome/common/conflicts/module_watcher_win.cc b/chrome/common/conflicts/module_watcher_win.cc
index 45cf904..7e3573f 100644
--- a/chrome/common/conflicts/module_watcher_win.cc
+++ b/chrome/common/conflicts/module_watcher_win.cc
@@ -11,7 +11,7 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/lazy_instance.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
diff --git a/chrome/common/conflicts/module_watcher_win.h b/chrome/common/conflicts/module_watcher_win.h
index 5383d8d..ab35cfc3 100644
--- a/chrome/common/conflicts/module_watcher_win.h
+++ b/chrome/common/conflicts/module_watcher_win.h
@@ -7,11 +7,12 @@
 
 #include <memory>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 
 class ModuleWatcherTest;
 
diff --git a/chrome/common/conflicts/module_watcher_win_unittest.cc b/chrome/common/conflicts/module_watcher_win_unittest.cc
index 00047d9..1391c4e 100644
--- a/chrome/common/conflicts/module_watcher_win_unittest.cc
+++ b/chrome/common/conflicts/module_watcher_win_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/common/extensions/manifest_handlers/app_launch_info.cc b/chrome/common/extensions/manifest_handlers/app_launch_info.cc
index 33e7341..615b70e3 100644
--- a/chrome/common/extensions/manifest_handlers/app_launch_info.cc
+++ b/chrome/common/extensions/manifest_handlers/app_launch_info.cc
@@ -63,8 +63,7 @@
 
 AppLaunchInfo::AppLaunchInfo() = default;
 
-AppLaunchInfo::~AppLaunchInfo() {
-}
+AppLaunchInfo::~AppLaunchInfo() = default;
 
 // static
 const std::string& AppLaunchInfo::GetLaunchLocalPath(
@@ -96,10 +95,11 @@
 // static
 GURL AppLaunchInfo::GetFullLaunchURL(const Extension* extension) {
   const AppLaunchInfo& info = GetAppLaunchInfo(extension);
-  if (info.launch_local_path_.empty())
+  if (info.launch_local_path_.empty()) {
     return info.launch_web_url_;
-  else
+  } else {
     return extension->url().Resolve(info.launch_local_path_);
+  }
 }
 
 bool AppLaunchInfo::Parse(Extension* extension, std::u16string* error) {
@@ -288,11 +288,9 @@
   extension->AddWebExtentPattern(pattern);
 }
 
-AppLaunchManifestHandler::AppLaunchManifestHandler() {
-}
+AppLaunchManifestHandler::AppLaunchManifestHandler() = default;
 
-AppLaunchManifestHandler::~AppLaunchManifestHandler() {
-}
+AppLaunchManifestHandler::~AppLaunchManifestHandler() = default;
 
 bool AppLaunchManifestHandler::Parse(Extension* extension,
                                      std::u16string* error) {
diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/chrome/common/extensions/permissions/permission_set_unittest.cc
index f69e7700..1cda2f8f 100644
--- a/chrome/common/extensions/permissions/permission_set_unittest.cc
+++ b/chrome/common/extensions/permissions/permission_set_unittest.cc
@@ -864,7 +864,6 @@
   skip.insert(APIPermissionID::kWebrtcLoggingPrivate);
   skip.insert(APIPermissionID::kWebrtcLoggingPrivateAudioDebug);
   skip.insert(APIPermissionID::kWebstorePrivate);
-  skip.insert(APIPermissionID::kWebstoreWidgetPrivate);
   skip.insert(APIPermissionID::kWmDesksPrivate);
   skip.insert(APIPermissionID::kSystemLog);
 
diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc
index f501340b..e2829918 100644
--- a/chrome/common/logging_chrome.cc
+++ b/chrome/common/logging_chrome.cc
@@ -33,7 +33,6 @@
 #include <string>   // NOLINT
 
 #include "base/base_switches.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/debug/debugger.h"
@@ -41,6 +40,7 @@
 #include "base/environment.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/metrics/statistics_recorder.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/common/notifications/notification_image_retainer.cc b/chrome/common/notifications/notification_image_retainer.cc
index febb7b6a..9283645 100644
--- a/chrome/common/notifications/notification_image_retainer.cc
+++ b/chrome/common/notifications/notification_image_retainer.cc
@@ -7,13 +7,14 @@
 #include <algorithm>
 #include <set>
 
-#include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/path_service.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/default_tick_clock.h"
 #include "chrome/common/chrome_paths.h"
diff --git a/chrome/common/notifications/notification_image_retainer.h b/chrome/common/notifications/notification_image_retainer.h
index 7ed406d9..4664518 100644
--- a/chrome/common/notifications/notification_image_retainer.h
+++ b/chrome/common/notifications/notification_image_retainer.h
@@ -9,8 +9,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 8af56b3..3988de74 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -1640,10 +1640,6 @@
 // deleted.
 const char kDeletePrintJobHistoryAllowed[] =
     "printing.delete_print_job_history_allowed";
-
-// String representing a template for the 'client-name' IPP attribute
-// configured by the administrator
-const char kPrintingClientNameTemplate[] = "printing.client_name_template";
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 // An integer pref specifying the fallback behavior for sites outside of content
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 0209861..021a5d88 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -521,7 +521,6 @@
 extern const char kPrintingMaxSheetsAllowed[];
 extern const char kPrintJobHistoryExpirationPeriod[];
 extern const char kDeletePrintJobHistoryAllowed[];
-extern const char kPrintingClientNameTemplate[];
 extern const char kPrintingOAuth2AuthorizationServers[];
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
diff --git a/chrome/common/printing/printer_capabilities_unittest.cc b/chrome/common/printing/printer_capabilities_unittest.cc
index cefaa0f91..c78d854 100644
--- a/chrome/common/printing/printer_capabilities_unittest.cc
+++ b/chrome/common/printing/printer_capabilities_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/common/profiler/main_thread_stack_sampling_profiler.cc b/chrome/common/profiler/main_thread_stack_sampling_profiler.cc
index 21f29ca..c66f2896 100644
--- a/chrome/common/profiler/main_thread_stack_sampling_profiler.cc
+++ b/chrome/common/profiler/main_thread_stack_sampling_profiler.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/common/profiler/main_thread_stack_sampling_profiler.h"
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/threading/platform_thread.h"
 #include "chrome/common/profiler/process_type.h"
 #include "chrome/common/profiler/thread_profiler.h"
diff --git a/chrome/common/profiler/thread_profiler.cc b/chrome/common/profiler/thread_profiler.cc
index 1dae8a8..bdc5a9a 100644
--- a/chrome/common/profiler/thread_profiler.cc
+++ b/chrome/common/profiler/thread_profiler.cc
@@ -9,8 +9,8 @@
 #include <vector>
 
 #include "base/android/library_loader/anchor_functions.h"
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/message_loop/work_id_provider.h"
diff --git a/chrome/common/profiler/thread_profiler.h b/chrome/common/profiler/thread_profiler.h
index defbefc..1532f379 100644
--- a/chrome/common/profiler/thread_profiler.h
+++ b/chrome/common/profiler/thread_profiler.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/profiler/stack_sampling_profiler.h"
 #include "base/profiler/unwinder.h"
diff --git a/chrome/common/profiler/thread_profiler_browsertest.cc b/chrome/common/profiler/thread_profiler_browsertest.cc
index fae23c7b..9fe480c 100644
--- a/chrome/common/profiler/thread_profiler_browsertest.cc
+++ b/chrome/common/profiler/thread_profiler_browsertest.cc
@@ -4,7 +4,7 @@
 
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/no_destructor.h"
 #include "base/profiler/stack_sampling_profiler.h"
 #include "base/run_loop.h"
diff --git a/chrome/common/profiler/unwind_util.cc b/chrome/common/profiler/unwind_util.cc
index 4be4355..07e57a66 100644
--- a/chrome/common/profiler/unwind_util.cc
+++ b/chrome/common/profiler/unwind_util.cc
@@ -9,9 +9,9 @@
 #include <vector>
 
 #include "base/android/library_loader/anchor_functions.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
+#include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/no_destructor.h"
 #include "base/profiler/profiler_buildflags.h"
diff --git a/chrome/credential_provider/extension/service.cc b/chrome/credential_provider/extension/service.cc
index f1e1b55..59293ca 100644
--- a/chrome/credential_provider/extension/service.cc
+++ b/chrome/credential_provider/extension/service.cc
@@ -6,6 +6,7 @@
 
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/credential_provider/extension/os_service_manager.h"
 #include "chrome/credential_provider/extension/task_manager.h"
 #include "chrome/credential_provider/gaiacp/logging.h"
diff --git a/chrome/credential_provider/extension/service.h b/chrome/credential_provider/extension/service.h
index d25d8221..028da458 100644
--- a/chrome/credential_provider/extension/service.h
+++ b/chrome/credential_provider/extension/service.h
@@ -7,7 +7,7 @@
 
 #include <windows.h>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 
 namespace credential_provider {
 namespace extension {
diff --git a/chrome/credential_provider/extension/task_manager.cc b/chrome/credential_provider/extension/task_manager.cc
index 78929b2..1b1ecc0c 100644
--- a/chrome/credential_provider/extension/task_manager.cc
+++ b/chrome/credential_provider/extension/task_manager.cc
@@ -10,6 +10,7 @@
 
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/credential_provider/extension/extension_utils.h"
 #include "chrome/credential_provider/extension/user_context_enumerator.h"
diff --git a/chrome/credential_provider/extension/task_manager.h b/chrome/credential_provider/extension/task_manager.h
index 32c50667..b703357d 100644
--- a/chrome/credential_provider/extension/task_manager.h
+++ b/chrome/credential_provider/extension/task_manager.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/credential_provider/extension/task.h"
 #include "net/base/backoff_entry.h"
diff --git a/chrome/credential_provider/extension/task_manager_unittests.cc b/chrome/credential_provider/extension/task_manager_unittests.cc
index 2652c50..f1d270a6 100644
--- a/chrome/credential_provider/extension/task_manager_unittests.cc
+++ b/chrome/credential_provider/extension/task_manager_unittests.cc
@@ -7,7 +7,7 @@
 #include <atlcomcli.h>
 #include <windows.h>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/guid.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/credential_provider/gaiacp/auth_utils.cc b/chrome/credential_provider/gaiacp/auth_utils.cc
index f00b17d3..babca59 100644
--- a/chrome/credential_provider/gaiacp/auth_utils.cc
+++ b/chrome/credential_provider/gaiacp/auth_utils.cc
@@ -10,8 +10,8 @@
 
 #include "chrome/credential_provider/gaiacp/auth_utils.h"
 
-#include "base/callback.h"
-#include "base/callback_helpers.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/strings/string_util.h"
 #include "chrome/credential_provider/gaiacp/gcp_utils.h"
 #include "chrome/credential_provider/gaiacp/logging.h"
diff --git a/chrome/credential_provider/gaiacp/experiments_fetcher.cc b/chrome/credential_provider/gaiacp/experiments_fetcher.cc
index ff11de2..09526ff 100644
--- a/chrome/credential_provider/gaiacp/experiments_fetcher.cc
+++ b/chrome/credential_provider/gaiacp/experiments_fetcher.cc
@@ -6,8 +6,8 @@
 
 #include <windows.h>
 
-#include "base/bind.h"
 #include "base/files/file.h"
+#include "base/functional/bind.h"
 #include "base/json/json_writer.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/credential_provider/gaiacp/gaia_credential_base.cc b/chrome/credential_provider/gaiacp/gaia_credential_base.cc
index 123a7ec..adf0c82 100644
--- a/chrome/credential_provider/gaiacp/gaia_credential_base.cc
+++ b/chrome/credential_provider/gaiacp/gaia_credential_base.cc
@@ -13,12 +13,12 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/path_service.h"
diff --git a/chrome/credential_provider/gaiacp/gcp_utils.h b/chrome/credential_provider/gaiacp/gcp_utils.h
index 00dfa35..82eac35 100644
--- a/chrome/credential_provider/gaiacp/gcp_utils.h
+++ b/chrome/credential_provider/gaiacp/gcp_utils.h
@@ -10,9 +10,9 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/chrome/credential_provider/gaiacp/scoped_lsa_policy.h b/chrome/credential_provider/gaiacp/scoped_lsa_policy.h
index 9e46adb..27d62ad 100644
--- a/chrome/credential_provider/gaiacp/scoped_lsa_policy.h
+++ b/chrome/credential_provider/gaiacp/scoped_lsa_policy.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_CREDENTIAL_PROVIDER_GAIACP_SCOPED_LSA_POLICY_H_
 #define CHROME_CREDENTIAL_PROVIDER_GAIACP_SCOPED_LSA_POLICY_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/win/windows_types.h"
 
 struct _UNICODE_STRING;
diff --git a/chrome/credential_provider/gaiacp/scoped_user_profile.cc b/chrome/credential_provider/gaiacp/scoped_user_profile.cc
index 5b7283a..570f67e 100644
--- a/chrome/credential_provider/gaiacp/scoped_user_profile.cc
+++ b/chrome/credential_provider/gaiacp/scoped_user_profile.cc
@@ -16,9 +16,9 @@
 
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/credential_provider/gaiacp/scoped_user_profile.h b/chrome/credential_provider/gaiacp/scoped_user_profile.h
index 445a1acf..3039f396 100644
--- a/chrome/credential_provider/gaiacp/scoped_user_profile.h
+++ b/chrome/credential_provider/gaiacp/scoped_user_profile.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/values.h"
 #include "base/win/scoped_handle.h"
 
diff --git a/chrome/credential_provider/gaiacp/user_policies_manager.cc b/chrome/credential_provider/gaiacp/user_policies_manager.cc
index ed795315d..b7ea7cb 100644
--- a/chrome/credential_provider/gaiacp/user_policies_manager.cc
+++ b/chrome/credential_provider/gaiacp/user_policies_manager.cc
@@ -6,11 +6,11 @@
 
 #include <limits>
 
-#include "base/bind.h"
 #include "base/files/file.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/path_service.h"
diff --git a/chrome/credential_provider/gaiacp/win_http_url_fetcher.h b/chrome/credential_provider/gaiacp/win_http_url_fetcher.h
index 8e0644c7..4e6aea9 100644
--- a/chrome/credential_provider/gaiacp/win_http_url_fetcher.h
+++ b/chrome/credential_provider/gaiacp/win_http_url_fetcher.h
@@ -8,7 +8,7 @@
 #include <map>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/values.h"
 #include "chrome/credential_provider/gaiacp/scoped_handle.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/credential_provider/test/gcp_fakes.cc b/chrome/credential_provider/test/gcp_fakes.cc
index 9b426ce..beb466e6 100644
--- a/chrome/credential_provider/test/gcp_fakes.cc
+++ b/chrome/credential_provider/test/gcp_fakes.cc
@@ -15,12 +15,13 @@
 
 #include <string>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/win/scoped_handle.h"
 #include "base/win/scoped_process_information.h"
diff --git a/chrome/credential_provider/test/gcp_fakes.h b/chrome/credential_provider/test/gcp_fakes.h
index dc9a329..7935dbc 100644
--- a/chrome/credential_provider/test/gcp_fakes.h
+++ b/chrome/credential_provider/test/gcp_fakes.h
@@ -17,6 +17,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/raw_ref.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_reg_util_win.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/credential_provider/extension/extension_utils.h"
diff --git a/chrome/credential_provider/test/gcp_gls_output_unittest.cc b/chrome/credential_provider/test/gcp_gls_output_unittest.cc
index e62ae3b..fcf4402 100644
--- a/chrome/credential_provider/test/gcp_gls_output_unittest.cc
+++ b/chrome/credential_provider/test/gcp_gls_output_unittest.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/json/json_writer.h"
 #include "base/process/launch.h"
 #include "base/values.h"
diff --git a/chrome/credential_provider/test/gcp_test_main.cc b/chrome/credential_provider/test/gcp_test_main.cc
index 8c60b06..3730797 100644
--- a/chrome/credential_provider/test/gcp_test_main.cc
+++ b/chrome/credential_provider/test/gcp_test_main.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 "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "chrome/credential_provider/gaiacp/gaia_credential_provider_module.h"
diff --git a/chrome/elevation_service/elevated_recovery_impl.cc b/chrome/elevation_service/elevated_recovery_impl.cc
index fbdce0a9..a248eb3 100644
--- a/chrome/elevation_service/elevated_recovery_impl.cc
+++ b/chrome/elevation_service/elevated_recovery_impl.cc
@@ -9,13 +9,13 @@
 #include <utility>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
diff --git a/chrome/elevation_service/elevator.cc b/chrome/elevation_service/elevator.cc
index 74d70d1..4352653 100644
--- a/chrome/elevation_service/elevator.cc
+++ b/chrome/elevation_service/elevator.cc
@@ -9,9 +9,9 @@
 
 #include <stdint.h>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/process/process.h"
diff --git a/chrome/elevation_service/run_all_unittests.cc b/chrome/elevation_service/run_all_unittests.cc
index 5b22798..7f8760b 100644
--- a/chrome/elevation_service/run_all_unittests.cc
+++ b/chrome/elevation_service/run_all_unittests.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 "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "chrome/elevation_service/service_main.h"
diff --git a/chrome/gpu/browser_exposed_gpu_interfaces.cc b/chrome/gpu/browser_exposed_gpu_interfaces.cc
index b4e4f74..7f56c37 100644
--- a/chrome/gpu/browser_exposed_gpu_interfaces.cc
+++ b/chrome/gpu/browser_exposed_gpu_interfaces.cc
@@ -5,6 +5,7 @@
 #include "chrome/gpu/browser_exposed_gpu_interfaces.h"
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/gpu/chrome_content_gpu_client.h"
diff --git a/chrome/gpu/chrome_content_gpu_client.cc b/chrome/gpu/chrome_content_gpu_client.cc
index 0034909..ac6e6df 100644
--- a/chrome/gpu/chrome_content_gpu_client.cc
+++ b/chrome/gpu/chrome_content_gpu_client.cc
@@ -7,8 +7,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/token.h"
 #include "build/build_config.h"
diff --git a/chrome/installer/setup/downgrade_cleanup.cc b/chrome/installer/setup/downgrade_cleanup.cc
index 468f14bd..cdf7dca 100644
--- a/chrome/installer/setup/downgrade_cleanup.cc
+++ b/chrome/installer/setup/downgrade_cleanup.cc
@@ -6,10 +6,10 @@
 
 #include <vector>
 
-#include "base/bind.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/process/launch.h"
 #include "base/process/process.h"
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc
index 3fc3fbe..d04ab03 100644
--- a/chrome/installer/setup/install_worker.cc
+++ b/chrome/installer/setup/install_worker.cc
@@ -18,12 +18,12 @@
 #include <memory>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/enterprise_util.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/installer/setup/run_all_unittests.cc b/chrome/installer/setup/run_all_unittests.cc
index 345effa9..dbc5ec6 100644
--- a/chrome/installer/setup/run_all_unittests.cc
+++ b/chrome/installer/setup/run_all_unittests.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "chrome/common/chrome_paths.h"
diff --git a/chrome/installer/setup/setup_util.cc b/chrome/installer/setup/setup_util.cc
index e0e1dcd0..4c239582 100644
--- a/chrome/installer/setup/setup_util.cc
+++ b/chrome/installer/setup/setup_util.cc
@@ -21,7 +21,6 @@
 #include <vector>
 
 #include "base/base64.h"
-#include "base/bind.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/cpu.h"
@@ -29,6 +28,7 @@
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
diff --git a/chrome/installer/setup/uninstall.cc b/chrome/installer/setup/uninstall.cc
index e305eb1a..82a67b1e 100644
--- a/chrome/installer/setup/uninstall.cc
+++ b/chrome/installer/setup/uninstall.cc
@@ -17,9 +17,9 @@
 #include <vector>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/process/kill.h"
diff --git a/chrome/installer/setup/update_active_setup_version_work_item.cc b/chrome/installer/setup/update_active_setup_version_work_item.cc
index 1eab1a40..6acde26 100644
--- a/chrome/installer/setup/update_active_setup_version_work_item.cc
+++ b/chrome/installer/setup/update_active_setup_version_work_item.cc
@@ -9,7 +9,7 @@
 #include <algorithm>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
diff --git a/chrome/installer/setup/user_hive_visitor.cc b/chrome/installer/setup/user_hive_visitor.cc
index 22cf8bc..cb6a285 100644
--- a/chrome/installer/setup/user_hive_visitor.cc
+++ b/chrome/installer/setup/user_hive_visitor.cc
@@ -7,11 +7,11 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/rand_util.h"
 #include "base/strings/string_piece.h"
diff --git a/chrome/installer/setup/user_hive_visitor.h b/chrome/installer/setup/user_hive_visitor.h
index ec84021..40976c8 100644
--- a/chrome/installer/setup/user_hive_visitor.h
+++ b/chrome/installer/setup/user_hive_visitor.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_INSTALLER_SETUP_USER_HIVE_VISITOR_H_
 #define CHROME_INSTALLER_SETUP_USER_HIVE_VISITOR_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 
 namespace base {
 namespace win {
diff --git a/chrome/installer/setup/user_hive_visitor_unittest.cc b/chrome/installer/setup/user_hive_visitor_unittest.cc
index 7d7c7ce6..371aef5 100644
--- a/chrome/installer/setup/user_hive_visitor_unittest.cc
+++ b/chrome/installer/setup/user_hive_visitor_unittest.cc
@@ -7,8 +7,8 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/win/registry.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/installer/util/callback_work_item.h b/chrome/installer/util/callback_work_item.h
index eb713ca..bef3edf 100644
--- a/chrome/installer/util/callback_work_item.h
+++ b/chrome/installer/util/callback_work_item.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_INSTALLER_UTIL_CALLBACK_WORK_ITEM_H_
 #define CHROME_INSTALLER_UTIL_CALLBACK_WORK_ITEM_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/gtest_prod_util.h"
 #include "chrome/installer/util/work_item.h"
 
diff --git a/chrome/installer/util/callback_work_item_unittest.cc b/chrome/installer/util/callback_work_item_unittest.cc
index 1d25d6c4c..e4e4d508 100644
--- a/chrome/installer/util/callback_work_item_unittest.cc
+++ b/chrome/installer/util/callback_work_item_unittest.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/installer/util/callback_work_item.h"
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/test/bind.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/installer/util/experiment_storage.cc b/chrome/installer/util/experiment_storage.cc
index 37b2873..42316c3 100644
--- a/chrome/installer/util/experiment_storage.cc
+++ b/chrome/installer/util/experiment_storage.cc
@@ -12,10 +12,10 @@
 #include <string>
 
 #include "base/base64.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/debug/crash_logging.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/installer/util/l10n_string_util.cc b/chrome/installer/util/l10n_string_util.cc
index e74a0f38..4117c35f 100644
--- a/chrome/installer/util/l10n_string_util.cc
+++ b/chrome/installer/util/l10n_string_util.cc
@@ -13,8 +13,8 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "base/no_destructor.h"
 #include "base/notreached.h"
 #include "base/numerics/safe_conversions.h"
diff --git a/chrome/installer/util/run_all_unittests.cc b/chrome/installer/util/run_all_unittests.cc
index 74ea9178..a6525d94 100644
--- a/chrome/installer/util/run_all_unittests.cc
+++ b/chrome/installer/util/run_all_unittests.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 "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "base/win/scoped_com_initializer.h"
diff --git a/chrome/installer/util/set_reg_value_work_item.h b/chrome/installer/util/set_reg_value_work_item.h
index 3a64b0a..2507645 100644
--- a/chrome/installer/util/set_reg_value_work_item.h
+++ b/chrome/installer/util/set_reg_value_work_item.h
@@ -12,7 +12,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/installer/util/work_item.h"
 
 // A WorkItem subclass that sets a registry value with REG_SZ, REG_DWORD, or
diff --git a/chrome/installer/util/set_reg_value_work_item_unittest.cc b/chrome/installer/util/set_reg_value_work_item_unittest.cc
index 5c05de9..7e11597 100644
--- a/chrome/installer/util/set_reg_value_work_item_unittest.cc
+++ b/chrome/installer/util/set_reg_value_work_item_unittest.cc
@@ -9,8 +9,8 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/strings/string_util.h"
 #include "base/test/test_reg_util_win.h"
 #include "base/win/registry.h"
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc
index 4954787..f9b7faea 100644
--- a/chrome/installer/util/shell_util.cc
+++ b/chrome/installer/util/shell_util.cc
@@ -12,7 +12,6 @@
 #include <objbase.h>
 #include <shlobj.h>
 #include <shobjidl.h>
-#include <windows.h>
 #include <wrl/client.h>
 
 #include <algorithm>
@@ -23,12 +22,12 @@
 #include <utility>
 
 #include "base/base64.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/hash/md5.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
@@ -68,7 +67,6 @@
 #include "chrome/installer/util/l10n_string_util.h"
 #include "chrome/installer/util/registry_entry.h"
 #include "chrome/installer/util/registry_util.h"
-#include "chrome/installer/util/scoped_user_protocol_entry.h"
 #include "chrome/installer/util/taskbar_util.h"
 #include "chrome/installer/util/util_constants.h"
 #include "chrome/installer/util/work_item.h"
@@ -715,26 +713,6 @@
   return false;
 }
 
-// Launches the Windows 7 and Windows 8 dialog for picking the application to
-// handle the given protocol. Most importantly, this is used to set the default
-// handler for http (and, implicitly with it, https). In that case it is also
-// known as the 'how do you want to open webpages' dialog.
-// It is required that Chrome be already *registered* for the given protocol.
-bool LaunchSelectDefaultProtocolHandlerDialog(const wchar_t* protocol) {
-  DCHECK(protocol);
-  OPENASINFO open_as_info = {};
-  open_as_info.pcszFile = protocol;
-  open_as_info.oaifInFlags =
-      OAIF_URL_PROTOCOL | OAIF_FORCE_REGISTRATION | OAIF_REGISTER_EXT;
-  HRESULT hr = SHOpenWithDialog(nullptr, &open_as_info);
-  DLOG_IF(WARNING, FAILED(hr)) << "Failed to set as default " << protocol
-                               << " handler; hr=0x" << std::hex << hr;
-  if (FAILED(hr))
-    return false;
-  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr);
-  return true;
-}
-
 // Returns true if |chrome_exe| has been registered with |suffix| for |mode|.
 // |confirmation_level| is the level of verification desired as described in
 // the RegistrationConfirmationLevel enum above.
@@ -790,49 +768,6 @@
   return false;
 }
 
-// Returns the installation suffix for |mode| at the system or user level based
-// on |system_install|.
-std::wstring GetInstallationSuffixForModeAtLevel(
-    const install_static::InstallConstants& mode,
-    bool system_install) {
-  // Search based on the existing install location. If no existing install
-  // found, uses the default install location for the mode.
-  const base::FilePath chrome_exe =
-      installer::GetChromeInstallPath(system_install)
-          .Append(installer::kChromeExe);
-
-  // See the comment in ShellUtil::GetCurrentInstallationSuffix for details on
-  // what's going on here.
-  std::wstring tested_suffix;
-  if (!system_install &&
-      (!ShellUtil::GetUserSpecificRegistrySuffix(&tested_suffix) ||
-       !QuickIsChromeRegisteredForMode(chrome_exe, tested_suffix, mode,
-                                       CONFIRM_PROGID_REGISTRATION)) &&
-      (!ShellUtil::GetOldUserSpecificRegistrySuffix(&tested_suffix) ||
-       !QuickIsChromeRegisteredForMode(chrome_exe, tested_suffix, mode,
-                                       CONFIRM_PROGID_REGISTRATION)) &&
-      !QuickIsChromeRegisteredForMode(chrome_exe, tested_suffix.erase(), mode,
-                                      CONFIRM_PROGID_REGISTRATION)) {
-    // If Chrome is not registered under any of the possible suffixes (e.g.
-    // tests, Canary, etc.): use the new-style suffix at run-time.
-    if (!ShellUtil::GetUserSpecificRegistrySuffix(&tested_suffix))
-      NOTREACHED();
-  }
-  return tested_suffix;
-}
-
-// Returns |mode|'s application name at the system or user level based on
-// |system_install|. This application name will be suffixed as is appropriate
-// for the install. This is the name that is registered with Default Programs on
-// Windows and that should thus be used to "make chrome default" and such.
-std::wstring GetApplicationNameForModeAtLevel(
-    const install_static::InstallConstants& mode,
-    bool system_install) {
-  return base::StrCat(
-      {std::wstring(mode.base_app_name),
-       GetInstallationSuffixForModeAtLevel(mode, system_install)});
-}
-
 // Returns true if the current install's |chrome_exe| has been registered with
 // |suffix|.
 // |confirmation_level| is the level of verification desired as described in
@@ -1091,70 +1026,6 @@
                                : ShellUtil::IS_DEFAULT;
 }
 
-// Probe using IApplicationAssociationRegistration::QueryAppIsDefault (Vista and
-// Windows 7); see ProbeProtocolHandlers.
-ShellUtil::DefaultState ProbeAppIsDefaultHandlers(
-    const base::FilePath& chrome_exe,
-    const wchar_t* const* protocols,
-    size_t num_protocols) {
-  Microsoft::WRL::ComPtr<IApplicationAssociationRegistration> registration;
-  HRESULT hr =
-      ::CoCreateInstance(CLSID_ApplicationAssociationRegistration, nullptr,
-                         CLSCTX_INPROC, IID_PPV_ARGS(&registration));
-  if (FAILED(hr))
-    return ShellUtil::UNKNOWN_DEFAULT;
-
-  std::wstring app_name(GetApplicationName(chrome_exe));
-
-  // Generate the app names for this brand's other install modes at both user
-  // and system levels.
-  const int current_install_mode_index =
-      install_static::InstallDetails::Get().install_mode_index();
-  std::wstring other_app_names[install_static::NUM_INSTALL_MODES * 2];
-  for (int mode_index = 0; mode_index < install_static::NUM_INSTALL_MODES;
-       ++mode_index) {
-    if (mode_index == current_install_mode_index)
-      continue;  // Leave the entry for the current mode empty.
-    other_app_names[mode_index * 2] = GetApplicationNameForModeAtLevel(
-        install_static::kInstallModes[mode_index], false);
-    other_app_names[mode_index * 2 + 1] = GetApplicationNameForModeAtLevel(
-        install_static::kInstallModes[mode_index], true);
-  }
-
-  // Now check each protocol to see if this brand is default for all. This loop
-  // terminates when this brand is the default handler for the protocols.
-  bool other_mode_is_default = false;
-  for (size_t i = 0; i < num_protocols; ++i) {
-    const wchar_t* protocol = protocols[i];
-    BOOL result = TRUE;
-    // Check the current app name. This will fail (e.g., ERROR_FILE_NOT_FOUND)
-    // if |app_name| isn't registered.
-    hr = registration->QueryAppIsDefault(protocol, AT_URLPROTOCOL, AL_EFFECTIVE,
-                                         app_name.c_str(), &result);
-    if (SUCCEEDED(hr) && result)
-      continue;
-
-    // Search for a different install mode that is the default handler.
-    if (base::ranges::none_of(
-            other_app_names,
-            [&registration, protocol](const std::wstring& app_name) {
-              if (app_name.empty())
-                return false;
-              BOOL result = TRUE;
-              HRESULT hr = registration->QueryAppIsDefault(
-                  protocol, AT_URLPROTOCOL, AL_EFFECTIVE, app_name.c_str(),
-                  &result);
-              return SUCCEEDED(hr) && result;
-            })) {
-      return ShellUtil::NOT_DEFAULT;
-    }
-    other_mode_is_default = true;
-  }
-
-  return other_mode_is_default ? ShellUtil::OTHER_MODE_IS_DEFAULT
-                               : ShellUtil::IS_DEFAULT;
-}
-
 // A helper function that probes default protocol handler registration (in a
 // manner appropriate for the current version of Windows) to determine if
 // Chrome is the default handler for |protocols|.  Returns IS_DEFAULT
@@ -1167,13 +1038,7 @@
   for (size_t i = 0; i < num_protocols; ++i)
     DCHECK(protocols[i] && *protocols[i]);
 #endif
-
-  const base::win::Version windows_version = base::win::GetVersion();
-
-  if (windows_version >= base::win::Version::WIN8)
-    return ProbeCurrentDefaultHandlers(chrome_exe, protocols, num_protocols);
-
-  return ProbeAppIsDefaultHandlers(chrome_exe, protocols, num_protocols);
+  return ProbeCurrentDefaultHandlers(chrome_exe, protocols, num_protocols);
 }
 
 // Finds and stores an app shortcuts folder path in *`path`.
@@ -2334,17 +2199,6 @@
   return base::win::GetVersion() < base::win::Version::WIN8;
 }
 
-// static
-ShellUtil::InteractiveSetDefaultMode ShellUtil::GetInteractiveSetDefaultMode() {
-  DCHECK(!CanMakeChromeDefaultUnattended());
-  // TODO(crbug.com/1385856): Remove all code associated with INTENT_PICKER,
-  // including InteractiveSetDefaultMode and GetInteractiveSetDefaultMode().
-  if (base::win::GetVersion() >= base::win::Version::WIN10)
-    return InteractiveSetDefaultMode::SYSTEM_SETTINGS;
-
-  return InteractiveSetDefaultMode::INTENT_PICKER;
-}
-
 bool ShellUtil::MakeChromeDefault(int shell_change,
                                   const base::FilePath& chrome_exe,
                                   bool elevate_if_not_admin) {
@@ -2512,26 +2366,8 @@
   bool succeeded = true;
   bool is_default = (GetChromeDefaultState() == IS_DEFAULT);
   if (!is_default) {
-    switch (GetInteractiveSetDefaultMode()) {
-      case INTENT_PICKER: {
-        // On Windows 8, you can't set yourself as the default handler
-        // programmatically. In other words IApplicationAssociationRegistration
-        // has been rendered useless. What you can do is to launch
-        // "Set Program Associations" section of the "Default Programs"
-        // control panel, which is a mess, or pop the concise "How you want to
-        // open webpages?" dialog.  We choose the latter.
-        ScopedUserProtocolEntry user_protocol_entry(L"http");
-        succeeded = LaunchSelectDefaultProtocolHandlerDialog(L"http");
-      } break;
-      case SYSTEM_SETTINGS:
-        // On Windows 10, you can't even launch the associations dialog.
-        // So we launch the settings dialog. Quoting from MSDN: "The Open With
-        // dialog box can no longer be used to change the default program used
-        // to open a file extension. You can only use SHOpenWithDialog to open
-        // a single file."
-        succeeded = base::win::LaunchDefaultAppsSettingsModernDialog(L"http");
-        break;
-    }
+    // Launch the Windows Apps Settings dialog.
+    succeeded = base::win::LaunchDefaultAppsSettingsModernDialog(L"http");
     is_default = (succeeded && GetChromeDefaultState() == IS_DEFAULT);
   }
   if (succeeded && is_default)
@@ -2603,25 +2439,9 @@
   bool is_default =
       (GetChromeDefaultProtocolClientState(protocol) == IS_DEFAULT);
   if (!is_default) {
-    switch (GetInteractiveSetDefaultMode()) {
-      case INTENT_PICKER: {
-        // On Windows 8, you can't set yourself as the default handler
-        // programmatically. In other words IApplicationAssociationRegistration
-        // has been rendered useless. What you can do is to launch
-        // "Set Program Associations" section of the "Default Programs"
-        // control panel, which is a mess, or pop the concise "How you want to
-        // open
-        // links of this type (protocol)?" dialog.  We choose the latter.
-        ScopedUserProtocolEntry user_protocol_entry(protocol.c_str());
-        succeeded = LaunchSelectDefaultProtocolHandlerDialog(protocol.c_str());
-      } break;
-      case SYSTEM_SETTINGS:
-        // On Windows 10, you can't even launch the associations dialog.
-        // So we launch the settings dialog.
-        succeeded =
-            base::win::LaunchDefaultAppsSettingsModernDialog(protocol.c_str());
-        break;
-    }
+    // Launch the Windows settings dialog.
+    succeeded =
+        base::win::LaunchDefaultAppsSettingsModernDialog(protocol.c_str());
     is_default = (succeeded &&
                   GetChromeDefaultProtocolClientState(protocol) == IS_DEFAULT);
   }
diff --git a/chrome/installer/util/shell_util.h b/chrome/installer/util/shell_util.h
index 91532504..46fb451 100644
--- a/chrome/installer/util/shell_util.h
+++ b/chrome/installer/util/shell_util.h
@@ -495,19 +495,6 @@
   // Windows prior to Windows 8.
   static bool CanMakeChromeDefaultUnattended();
 
-  enum InteractiveSetDefaultMode {
-    // The intent picker is opened with the different choices available to the
-    // user.
-    INTENT_PICKER,
-    // The Windows default apps settings page is opened with the current default
-    // app focused.
-    SYSTEM_SETTINGS,
-  };
-
-  // Returns the interactive mode that should be used to set the default browser
-  // or default protocol client on Windows 8+.
-  static InteractiveSetDefaultMode GetInteractiveSetDefaultMode();
-
   // Returns the DefaultState of Chrome for HTTP and HTTPS and updates the
   // default browser beacons as appropriate.
   static DefaultState GetChromeDefaultState();
diff --git a/chrome/installer/util/work_item.h b/chrome/installer/util/work_item.h
index b3d1a3a3..aedae0c 100644
--- a/chrome/installer/util/work_item.h
+++ b/chrome/installer/util/work_item.h
@@ -16,7 +16,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 
 class CallbackWorkItem;
 class CopyTreeWorkItem;
diff --git a/chrome/installer/util/work_item_list.h b/chrome/installer/util/work_item_list.h
index 1d503bcd..14021e48 100644
--- a/chrome/installer/util/work_item_list.h
+++ b/chrome/installer/util/work_item_list.h
@@ -14,8 +14,8 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/installer/util/work_item.h"
 
 // A WorkItem subclass that recursively contains a list of WorkItems. Thus it
diff --git a/chrome/notification_helper/run_all_unittests.cc b/chrome/notification_helper/run_all_unittests.cc
index 9e50bd806..8701017 100644
--- a/chrome/notification_helper/run_all_unittests.cc
+++ b/chrome/notification_helper/run_all_unittests.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 "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "chrome/install_static/test/scoped_install_details.h"
diff --git a/chrome/renderer/accessibility/ax_tree_distiller.h b/chrome/renderer/accessibility/ax_tree_distiller.h
index 017e61bd..5205da8 100644
--- a/chrome/renderer/accessibility/ax_tree_distiller.h
+++ b/chrome/renderer/accessibility/ax_tree_distiller.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "components/services/screen_ai/buildflags/buildflags.h"
 #include "ui/accessibility/ax_node_id_forward.h"
 #include "ui/accessibility/ax_tree_update_forward.h"
diff --git a/chrome/renderer/accessibility/ax_tree_distiller_browsertest.cc b/chrome/renderer/accessibility/ax_tree_distiller_browsertest.cc
index ea3b14ca..e9808582 100644
--- a/chrome/renderer/accessibility/ax_tree_distiller_browsertest.cc
+++ b/chrome/renderer/accessibility/ax_tree_distiller_browsertest.cc
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "chrome/test/base/chrome_render_view_test.h"
 #include "content/public/renderer/render_frame.h"
 #include "ui/accessibility/ax_node.h"
diff --git a/chrome/renderer/autofill/autofill_renderer_browsertest.cc b/chrome/renderer/autofill/autofill_renderer_browsertest.cc
index 9d1e6de8..2a90c10 100644
--- a/chrome/renderer/autofill/autofill_renderer_browsertest.cc
+++ b/chrome/renderer/autofill/autofill_renderer_browsertest.cc
@@ -5,9 +5,9 @@
 #include <memory>
 #include <tuple>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/renderer/autofill/form_autocomplete_browsertest.cc b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
index 066f3b9..81f04569 100644
--- a/chrome/renderer/autofill/form_autocomplete_browsertest.cc
+++ b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
@@ -5,7 +5,7 @@
 #include <memory>
 #include <tuple>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
index cfa60f0..cc6c2b7 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -4,9 +4,9 @@
 
 #include "components/autofill/content/renderer/password_autofill_agent.h"
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/containers/cxx20_erase.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index d789e09..6568c2fa 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -7,8 +7,8 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
 #include "base/strings/string_piece.h"
diff --git a/chrome/renderer/browser_exposed_renderer_interfaces.cc b/chrome/renderer/browser_exposed_renderer_interfaces.cc
index cc2939c..58f1bd50 100644
--- a/chrome/renderer/browser_exposed_renderer_interfaces.cc
+++ b/chrome/renderer/browser_exposed_renderer_interfaces.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index f4eb5dfe..ec016d1 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -8,10 +8,10 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/check_op.h"
 #include "base/command_line.h"
 #include "base/debug/crash_logging.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics_action.h"
@@ -1471,7 +1471,7 @@
     // The kPpapiInProcess switch should only be used by tests.  In particular,
     // we expect that the PDF plugin should always be isolated in the product
     // (and that the switch won't interfere with PDF isolation).
-    CHECK_NE(ChromeContentClient::kPDFPluginPath, plugin_path.value());
+    CHECK_NE(ChromeContentClient::kPDFInternalPluginPath, plugin_path.value());
 
     return false;
   }
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index e0c1b41ec..ad971da8 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -15,6 +15,7 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/common/media/webrtc_logging.mojom.h"
 #include "chrome/services/speech/buildflags/buildflags.h"
diff --git a/chrome/renderer/chrome_content_renderer_client_browsertest.cc b/chrome/renderer/chrome_content_renderer_client_browsertest.cc
index 36d8cc5..9779f971 100644
--- a/chrome/renderer/chrome_content_renderer_client_browsertest.cc
+++ b/chrome/renderer/chrome_content_renderer_client_browsertest.cc
@@ -7,11 +7,10 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc
index 9397c4b..a936a62 100644
--- a/chrome/renderer/chrome_render_frame_observer.cc
+++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -12,8 +12,8 @@
 #include <set>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/no_destructor.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/renderer/chrome_render_frame_observer_browsertest.cc b/chrome/renderer/chrome_render_frame_observer_browsertest.cc
index 8153ca41..07b4135d 100644
--- a/chrome/renderer/chrome_render_frame_observer_browsertest.cc
+++ b/chrome/renderer/chrome_render_frame_observer_browsertest.cc
@@ -7,9 +7,9 @@
 #include <string>
 #include <tuple>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/chrome_render_thread_observer.cc
index dfdcc8f..7ba7a76e 100644
--- a/chrome/renderer/chrome_render_thread_observer.cc
+++ b/chrome/renderer/chrome_render_thread_observer.cc
@@ -12,10 +12,10 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram.h"
diff --git a/chrome/renderer/chromeos_delayed_callback_group.cc b/chrome/renderer/chromeos_delayed_callback_group.cc
index fb4b6ca..150ce581c 100644
--- a/chrome/renderer/chromeos_delayed_callback_group.cc
+++ b/chrome/renderer/chromeos_delayed_callback_group.cc
@@ -6,9 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 DelayedCallbackGroup::CallbackEntry::CallbackEntry(
     Callback callback,
diff --git a/chrome/renderer/chromeos_merge_session_loader_throttle.cc b/chrome/renderer/chromeos_merge_session_loader_throttle.cc
index 62e1e24..728142c 100644
--- a/chrome/renderer/chromeos_merge_session_loader_throttle.cc
+++ b/chrome/renderer/chromeos_merge_session_loader_throttle.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/renderer/chrome_render_thread_observer.h"
 #include "net/url_request/redirect_info.h"
diff --git a/chrome/renderer/extensions/api/file_browser_handler_custom_bindings.cc b/chrome/renderer/extensions/api/file_browser_handler_custom_bindings.cc
index cabfb0fb..f9dc759 100644
--- a/chrome/renderer/extensions/api/file_browser_handler_custom_bindings.cc
+++ b/chrome/renderer/extensions/api/file_browser_handler_custom_bindings.cc
@@ -6,8 +6,8 @@
 
 #include <string>
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "extensions/renderer/script_context.h"
diff --git a/chrome/renderer/extensions/api/file_manager_private_custom_bindings.cc b/chrome/renderer/extensions/api/file_manager_private_custom_bindings.cc
index 9dc388a2..92622c9 100644
--- a/chrome/renderer/extensions/api/file_manager_private_custom_bindings.cc
+++ b/chrome/renderer/extensions/api/file_manager_private_custom_bindings.cc
@@ -6,8 +6,8 @@
 
 #include <string>
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "chrome/renderer/extensions/api/file_browser_handler_custom_bindings.h"
 #include "extensions/renderer/script_context.h"
 #include "extensions/renderer/v8_helpers.h"
diff --git a/chrome/renderer/extensions/api/identity_hooks_delegate.cc b/chrome/renderer/extensions/api/identity_hooks_delegate.cc
index c83db0ed..a4efb22 100644
--- a/chrome/renderer/extensions/api/identity_hooks_delegate.cc
+++ b/chrome/renderer/extensions/api/identity_hooks_delegate.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/renderer/extensions/api/identity_hooks_delegate.h"
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "extensions/renderer/bindings/api_binding_types.h"
 #include "extensions/renderer/v8_helpers.h"
 
diff --git a/chrome/renderer/extensions/api/media_galleries_custom_bindings.cc b/chrome/renderer/extensions/api/media_galleries_custom_bindings.cc
index e48a971..159fd34 100644
--- a/chrome/renderer/extensions/api/media_galleries_custom_bindings.cc
+++ b/chrome/renderer/extensions/api/media_galleries_custom_bindings.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "extensions/renderer/script_context.h"
 #include "storage/common/file_system/file_system_util.h"
 #include "third_party/blink/public/platform/url_conversion.h"
diff --git a/chrome/renderer/extensions/api/notifications_native_handler.cc b/chrome/renderer/extensions/api/notifications_native_handler.cc
index 73c4825..ad311900 100644
--- a/chrome/renderer/extensions/api/notifications_native_handler.cc
+++ b/chrome/renderer/extensions/api/notifications_native_handler.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/values.h"
 #include "chrome/common/extensions/api/notifications/notification_style.h"
 #include "extensions/renderer/script_context.h"
diff --git a/chrome/renderer/extensions/api/page_capture_custom_bindings.cc b/chrome/renderer/extensions/api/page_capture_custom_bindings.cc
index 02b2d55..170b034 100644
--- a/chrome/renderer/extensions/api/page_capture_custom_bindings.cc
+++ b/chrome/renderer/extensions/api/page_capture_custom_bindings.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/renderer/extensions/api/page_capture_custom_bindings.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/public/renderer/render_frame.h"
 #include "extensions/common/extension_messages.h"
diff --git a/chrome/renderer/extensions/api/platform_keys_natives.cc b/chrome/renderer/extensions/api/platform_keys_natives.cc
index 6bfdcdb2..7da69ef 100644
--- a/chrome/renderer/extensions/api/platform_keys_natives.cc
+++ b/chrome/renderer/extensions/api/platform_keys_natives.cc
@@ -8,7 +8,7 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/values.h"
 #include "extensions/renderer/script_context.h"
 #include "gin/data_object_builder.h"
diff --git a/chrome/renderer/extensions/api/sync_file_system_custom_bindings.cc b/chrome/renderer/extensions/api/sync_file_system_custom_bindings.cc
index 3dd4a60b..fc8e5028 100644
--- a/chrome/renderer/extensions/api/sync_file_system_custom_bindings.cc
+++ b/chrome/renderer/extensions/api/sync_file_system_custom_bindings.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "extensions/renderer/script_context.h"
 #include "storage/common/file_system/file_system_util.h"
 #include "third_party/blink/public/web/web_dom_file_system.h"
diff --git a/chrome/renderer/extensions/chrome_extensions_renderer_client.cc b/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
index 9cf006a4..1dca41c 100644
--- a/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
+++ b/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
@@ -7,9 +7,9 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/features.h"
+#include "base/functional/bind.h"
 #include "base/lazy_instance.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/types/optional_util.h"
diff --git a/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc b/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc
index 5e5bb62..8f8cff8 100644
--- a/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc
+++ b/chrome/renderer/media/webrtc_logging_agent_impl_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
diff --git a/chrome/renderer/net/available_offline_content_helper.cc b/chrome/renderer/net/available_offline_content_helper.cc
index 01f3470..7d59164 100644
--- a/chrome/renderer/net/available_offline_content_helper.cc
+++ b/chrome/renderer/net/available_offline_content_helper.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "base/base64.h"
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_value_converter.h"
 #include "base/json/json_writer.h"
diff --git a/chrome/renderer/net/available_offline_content_helper.h b/chrome/renderer/net/available_offline_content_helper.h
index 300731d..1249740f 100644
--- a/chrome/renderer/net/available_offline_content_helper.h
+++ b/chrome/renderer/net/available_offline_content_helper.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/common/available_offline_content.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index b62f6d7..c0cb1cda 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -8,9 +8,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
+#include "base/functional/bind.h"
 #include "base/i18n/rtl.h"
 #include "base/json/json_writer.h"
 #include "base/metrics/field_trial_params.h"
diff --git a/chrome/renderer/net/net_error_helper.h b/chrome/renderer/net/net_error_helper.h
index 3be1fb1..6bbe993 100644
--- a/chrome/renderer/net/net_error_helper.h
+++ b/chrome/renderer/net/net_error_helper.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/chrome/renderer/net/net_error_helper_core.cc b/chrome/renderer/net/net_error_helper_core.cc
index 9c513538..6b95a05 100644
--- a/chrome/renderer/net/net_error_helper_core.cc
+++ b/chrome/renderer/net/net_error_helper_core.cc
@@ -8,9 +8,9 @@
 
 #include <memory>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
diff --git a/chrome/renderer/net/net_error_helper_core.h b/chrome/renderer/net/net_error_helper_core.h
index d893b2c..6235a198 100644
--- a/chrome/renderer/net/net_error_helper_core.h
+++ b/chrome/renderer/net/net_error_helper_core.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "build/build_config.h"
 #include "components/error_page/common/error.h"
 #include "components/error_page/common/localized_error.h"
diff --git a/chrome/renderer/net/net_error_helper_core_unittest.cc b/chrome/renderer/net/net_error_helper_core_unittest.cc
index 2f97ae1a..7373a01 100644
--- a/chrome/renderer/net/net_error_helper_core_unittest.cc
+++ b/chrome/renderer/net/net_error_helper_core_unittest.cc
@@ -13,8 +13,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_util.h"
 #include "base/test/bind.h"
diff --git a/chrome/renderer/net/page_auto_fetcher_helper_android.cc b/chrome/renderer/net/page_auto_fetcher_helper_android.cc
index c71c556b..39cabdbe 100644
--- a/chrome/renderer/net/page_auto_fetcher_helper_android.cc
+++ b/chrome/renderer/net/page_auto_fetcher_helper_android.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "content/public/renderer/render_frame.h"
 #include "content/public/renderer/render_thread.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
diff --git a/chrome/renderer/net/page_auto_fetcher_helper_android.h b/chrome/renderer/net/page_auto_fetcher_helper_android.h
index 58ce87d2..7a460d4 100644
--- a/chrome/renderer/net/page_auto_fetcher_helper_android.h
+++ b/chrome/renderer/net/page_auto_fetcher_helper_android.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_RENDERER_NET_PAGE_AUTO_FETCHER_HELPER_ANDROID_H_
 #define CHROME_RENDERER_NET_PAGE_AUTO_FETCHER_HELPER_ANDROID_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/common/offline_page_auto_fetcher.mojom.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/chrome/renderer/pepper/pepper_uma_host.cc b/chrome/renderer/pepper/pepper_uma_host.cc
index fb6be42..9cdb673 100644
--- a/chrome/renderer/pepper/pepper_uma_host.cc
+++ b/chrome/renderer/pepper/pepper_uma_host.cc
@@ -52,7 +52,7 @@
 };
 
 const base::FilePath::CharType* const kAllowedPluginBaseNames[] = {
-    ChromeContentClient::kPDFPluginPath,
+    ChromeContentClient::kPDFInternalPluginPath,
 };
 
 std::string HashPrefix(const std::string& histogram) {
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc b/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc
index 4383d4c..f591bae 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc
@@ -8,7 +8,7 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc b/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
index a511adb..a249aee 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/test/base/chrome_render_view_test.h"
 #include "chrome/test/base/chrome_unit_test_suite.h"
diff --git a/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc b/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc
index 833bceb..e405c57 100644
--- a/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc
@@ -7,8 +7,8 @@
 #include <memory>
 #include <unordered_map>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/escape.h"
 #include "base/time/time.h"
diff --git a/chrome/renderer/sandbox_status_extension_android.cc b/chrome/renderer/sandbox_status_extension_android.cc
index 3c2c72d..109d399 100644
--- a/chrome/renderer/sandbox_status_extension_android.cc
+++ b/chrome/renderer/sandbox_status_extension_android.cc
@@ -7,9 +7,9 @@
 #include <utility>
 
 #include "base/android/build_info.h"
-#include "base/bind.h"
 #include "base/check.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/task/thread_pool.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/renderer/chrome_object_extensions_utils.h"
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc
index 7ed52b1..5dca4e9 100644
--- a/chrome/renderer/searchbox/searchbox.cc
+++ b/chrome/renderer/searchbox/searchbox.cc
@@ -9,7 +9,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
diff --git a/chrome/renderer/supervised_user/supervised_user_error_page_controller.cc b/chrome/renderer/supervised_user/supervised_user_error_page_controller.cc
index f5da744d..26e609cc 100644
--- a/chrome/renderer/supervised_user/supervised_user_error_page_controller.cc
+++ b/chrome/renderer/supervised_user/supervised_user_error_page_controller.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/renderer/supervised_user/supervised_user_error_page_controller.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/renderer/supervised_user/supervised_user_error_page_controller.h b/chrome/renderer/supervised_user/supervised_user_error_page_controller.h
index 19267cb7d..c9fa84b69 100644
--- a/chrome/renderer/supervised_user/supervised_user_error_page_controller.h
+++ b/chrome/renderer/supervised_user/supervised_user_error_page_controller.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_H_
 #define CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "gin/wrappable.h"
 
diff --git a/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h
index 1ee5053..19ad3e8 100644
--- a/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h
+++ b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_DELEGATE_H_
 #define CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_DELEGATE_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 
 // Called when the interstitial calls the installed JS methods.
 class SupervisedUserErrorPageControllerDelegate {
diff --git a/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h
index a4138ae..c0eb11f 100644
--- a/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h
+++ b/chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_DELEGATE_IMPL_H_
 #define CHROME_RENDERER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_CONTROLLER_DELEGATE_IMPL_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/common/supervised_user_commands.mojom.h"
 #include "chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate.h"
diff --git a/chrome/renderer/sync_encryption_keys_extension.cc b/chrome/renderer/sync_encryption_keys_extension.cc
index c2bc4c4..161817b 100644
--- a/chrome/renderer/sync_encryption_keys_extension.cc
+++ b/chrome/renderer/sync_encryption_keys_extension.cc
@@ -7,8 +7,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/feature_list.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "build/buildflag.h"
diff --git a/chrome/renderer/translate/per_frame_translate_agent_browsertest.cc b/chrome/renderer/translate/per_frame_translate_agent_browsertest.cc
index 837c3e4..6cfa0b8 100644
--- a/chrome/renderer/translate/per_frame_translate_agent_browsertest.cc
+++ b/chrome/renderer/translate/per_frame_translate_agent_browsertest.cc
@@ -4,7 +4,7 @@
 
 #include <tuple>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/time/time.h"
 #include "base/types/cxx23_to_underlying.h"
diff --git a/chrome/renderer/translate/translate_agent_browsertest.cc b/chrome/renderer/translate/translate_agent_browsertest.cc
index 6a1ccad7..4b06f79 100644
--- a/chrome/renderer/translate/translate_agent_browsertest.cc
+++ b/chrome/renderer/translate/translate_agent_browsertest.cc
@@ -5,10 +5,10 @@
 #include <tuple>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/renderer/url_loader_throttle_provider_impl.cc b/chrome/renderer/url_loader_throttle_provider_impl.cc
index 64f1ae5..5e746e1 100644
--- a/chrome/renderer/url_loader_throttle_provider_impl.cc
+++ b/chrome/renderer/url_loader_throttle_provider_impl.cc
@@ -6,11 +6,10 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
+#include "base/functional/bind.h"
 #include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/common/google_url_loader_throttle.h"
diff --git a/chrome/renderer/v8_unwinder_unittest.cc b/chrome/renderer/v8_unwinder_unittest.cc
index 6f94e91..51c5056 100644
--- a/chrome/renderer/v8_unwinder_unittest.cc
+++ b/chrome/renderer/v8_unwinder_unittest.cc
@@ -8,8 +8,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/location.h"
 #include "base/profiler/module_cache.h"
 #include "base/profiler/stack_sampling_profiler_test_util.h"
diff --git a/chrome/renderer/websocket_handshake_throttle_provider_impl.cc b/chrome/renderer/websocket_handshake_throttle_provider_impl.cc
index 7a73516..2a08c75 100644
--- a/chrome/renderer/websocket_handshake_throttle_provider_impl.cc
+++ b/chrome/renderer/websocket_handshake_throttle_provider_impl.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/safe_browsing/content/renderer/websocket_sb_handshake_throttle.h"
 #include "content/public/renderer/render_thread.h"
 #include "third_party/blink/public/platform/websocket_handshake_throttle.h"
diff --git a/chrome/renderer/websocket_handshake_throttle_provider_impl.h b/chrome/renderer/websocket_handshake_throttle_provider_impl.h
index b80d0371..84c01c2 100644
--- a/chrome/renderer/websocket_handshake_throttle_provider_impl.h
+++ b/chrome/renderer/websocket_handshake_throttle_provider_impl.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "components/safe_browsing/content/common/safe_browsing.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/chrome/services/cups_proxy/cups_proxy_service_delegate.h b/chrome/services/cups_proxy/cups_proxy_service_delegate.h
index a3948bb..840b51c 100644
--- a/chrome/services/cups_proxy/cups_proxy_service_delegate.h
+++ b/chrome/services/cups_proxy/cups_proxy_service_delegate.h
@@ -9,8 +9,9 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/printing/printer_configuration.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc
index c8babc8..9543dc1e 100644
--- a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc
+++ b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace cups_proxy {
 
diff --git a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h
index fea8f07..4036b29 100644
--- a/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h
+++ b/chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/services/cups_proxy/cups_proxy_service_delegate.h"
 #include "chromeos/printing/printer_configuration.h"
 
diff --git a/chrome/services/cups_proxy/printer_installer.h b/chrome/services/cups_proxy/printer_installer.h
index cd7f9d5..6783c47 100644
--- a/chrome/services/cups_proxy/printer_installer.h
+++ b/chrome/services/cups_proxy/printer_installer.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/services/cups_proxy/cups_proxy_service_delegate.h"
 
diff --git a/chrome/services/cups_proxy/printer_installer_unittest.cc b/chrome/services/cups_proxy/printer_installer_unittest.cc
index 598eb02..a91aed9 100644
--- a/chrome/services/cups_proxy/printer_installer_unittest.cc
+++ b/chrome/services/cups_proxy/printer_installer_unittest.cc
@@ -8,8 +8,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/containers/contains.h"
+#include "base/functional/bind.h"
 #include "base/guid.h"
 #include "base/memory/weak_ptr.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/cups_proxy/proxy_manager.cc b/chrome/services/cups_proxy/proxy_manager.cc
index 0de4321..30d1078 100644
--- a/chrome/services/cups_proxy/proxy_manager.cc
+++ b/chrome/services/cups_proxy/proxy_manager.cc
@@ -11,9 +11,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/containers/ring_buffer.h"
 #include "base/feature_list.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/time/time.h"
 #include "chrome/services/cups_proxy/cups_proxy_service_delegate.h"
diff --git a/chrome/services/cups_proxy/proxy_manager_unittest.cc b/chrome/services/cups_proxy/proxy_manager_unittest.cc
index 83fdf67..254eaa5 100644
--- a/chrome/services/cups_proxy/proxy_manager_unittest.cc
+++ b/chrome/services/cups_proxy/proxy_manager_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <map>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "chrome/services/cups_proxy/fake_cups_proxy_service_delegate.h"
diff --git a/chrome/services/cups_proxy/socket_manager.h b/chrome/services/cups_proxy/socket_manager.h
index 1490051d..8180089 100644
--- a/chrome/services/cups_proxy/socket_manager.h
+++ b/chrome/services/cups_proxy/socket_manager.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 
 #include "chrome/services/cups_proxy/cups_proxy_service_delegate.h"
 
diff --git a/chrome/services/cups_proxy/socket_manager_unittest.cc b/chrome/services/cups_proxy/socket_manager_unittest.cc
index d2ceccbf..29b2cbb 100644
--- a/chrome/services/cups_proxy/socket_manager_unittest.cc
+++ b/chrome/services/cups_proxy/socket_manager_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_util.h"
 #include "base/path_service.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/services/cups_proxy/test/run_all_unittests.cc b/chrome/services/cups_proxy/test/run_all_unittests.cc
index 4bb874b0..4ffba73 100644
--- a/chrome/services/cups_proxy/test/run_all_unittests.cc
+++ b/chrome/services/cups_proxy/test/run_all_unittests.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "build/build_config.h"
 #include "mojo/core/embedder/embedder.h"
diff --git a/chrome/services/file_util/document_analysis_service.cc b/chrome/services/file_util/document_analysis_service.cc
index 45c03c3..1952dddc 100644
--- a/chrome/services/file_util/document_analysis_service.cc
+++ b/chrome/services/file_util/document_analysis_service.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "build/build_config.h"
 #include "chrome/services/file_util/buildflags.h"
 #include "components/safe_browsing/buildflags.h"
diff --git a/chrome/services/file_util/file_util_service.cc b/chrome/services/file_util/file_util_service.cc
index 303907181..2e02e084 100644
--- a/chrome/services/file_util/file_util_service.cc
+++ b/chrome/services/file_util/file_util_service.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/services/file_util/buildflags.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc
index 5a3cb4d..35d388d 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.h b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.h
index 7f70b63..d28bcf6 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.h
+++ b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac.h
@@ -5,9 +5,9 @@
 #ifndef CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_DMG_ANALYZER_MAC_H_
 #define CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_DMG_ANALYZER_MAC_H_
 
-#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted.h"
 #include "chrome/services/file_util/public/mojom/file_util_service.mojom.h"
 #include "chrome/services/file_util/public/mojom/safe_archive_analyzer.mojom.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac_unittest.cc b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac_unittest.cc
index fab95cdb..21abc9c 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac_unittest.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_dmg_analyzer_mac_unittest.cc
@@ -7,9 +7,9 @@
 #include <mach-o/loader.h>
 #include <stdint.h>
 
-#include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.cc b/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.cc
index 62a7c25..703ca73 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.cc
@@ -5,8 +5,8 @@
 #include "chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h"
 
 #include <utility>
-#include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/process/process_handle.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h b/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h
index 68b5a27..8642385 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h
+++ b/chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h
@@ -6,8 +6,8 @@
 #define CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_DOCUMENT_ANALYZER_H_
 
 #include <string>
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "chrome/services/file_util/public/mojom/document_analysis_service.mojom.h"
 #include "chrome/services/file_util/public/mojom/safe_document_analyzer.mojom.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_document_analyzer_unittest.cc b/chrome/services/file_util/public/cpp/sandboxed_document_analyzer_unittest.cc
index fb582e4..6132f2c 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_document_analyzer_unittest.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_document_analyzer_unittest.cc
@@ -7,10 +7,10 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.cc b/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.cc
index 737aa22..12d02194b 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/process/process_handle.h"
 #include "base/strings/stringprintf.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.h b/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.h
index d758902..9c4bddf 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.h
+++ b/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_RAR_ANALYZER_H_
 #define CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_RAR_ANALYZER_H_
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "chrome/services/file_util/public/mojom/file_util_service.mojom.h"
 #include "chrome/services/file_util/public/mojom/safe_archive_analyzer.mojom.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer_unittest.cc b/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer_unittest.cc
index 5e851d29..a81ced8 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer_unittest.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_rar_analyzer_unittest.cc
@@ -7,9 +7,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.cc b/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.cc
index bc9b0fcf..bc82ab85 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/task/thread_pool.h"
 #include "chrome/common/safe_browsing/archive_analyzer_results.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.h b/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.h
index 7a48fe6..82e0771 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.h
+++ b/chrome/services/file_util/public/cpp/sandboxed_seven_zip_analyzer.h
@@ -5,9 +5,9 @@
 #ifndef CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_SEVEN_ZIP_ANALYZER_H_
 #define CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_SEVEN_ZIP_ANALYZER_H_
 
-#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "chrome/services/file_util/public/mojom/file_util_service.mojom.h"
 #include "chrome/services/file_util/public/mojom/safe_archive_analyzer.mojom.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.cc b/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.cc
index 6b4d171..3881f529 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/task/thread_pool.h"
 #include "chrome/common/safe_browsing/archive_analyzer_results.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.h b/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.h
index 4729ef3c..ea0334c 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.h
+++ b/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer.h
@@ -5,9 +5,9 @@
 #ifndef CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_ZIP_ANALYZER_H_
 #define CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_ZIP_ANALYZER_H_
 
-#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "chrome/services/file_util/public/mojom/file_util_service.mojom.h"
 #include "chrome/services/file_util/public/mojom/safe_archive_analyzer.mojom.h"
diff --git a/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer_unittest.cc b/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer_unittest.cc
index 2144e264..1cad970 100644
--- a/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer_unittest.cc
+++ b/chrome/services/file_util/public/cpp/sandboxed_zip_analyzer_unittest.cc
@@ -6,9 +6,9 @@
 
 #include <stdint.h>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chrome/services/file_util/public/cpp/zip_file_creator.cc b/chrome/services/file_util/public/cpp/zip_file_creator.cc
index d270043..34b3b44 100644
--- a/chrome/services/file_util/public/cpp/zip_file_creator.cc
+++ b/chrome/services/file_util/public/cpp/zip_file_creator.cc
@@ -6,11 +6,12 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/services/filesystem/directory_impl.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/services/file_util/public/cpp/zip_file_creator.h b/chrome/services/file_util/public/cpp/zip_file_creator.h
index a58c8bd2..0b329b0 100644
--- a/chrome/services/file_util/public/cpp/zip_file_creator.h
+++ b/chrome/services/file_util/public/cpp/zip_file_creator.h
@@ -7,9 +7,9 @@
 
 #include <memory>
 
-#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted.h"
 #include "chrome/services/file_util/public/mojom/file_util_service.mojom.h"
 #include "chrome/services/file_util/public/mojom/zip_file_creator.mojom.h"
diff --git a/chrome/services/file_util/public/cpp/zip_file_creator_browsertest.cc b/chrome/services/file_util/public/cpp/zip_file_creator_browsertest.cc
index 4d81991..5343f69 100644
--- a/chrome/services/file_util/public/cpp/zip_file_creator_browsertest.cc
+++ b/chrome/services/file_util/public/cpp/zip_file_creator_browsertest.cc
@@ -7,10 +7,10 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
diff --git a/chrome/services/file_util/zip_file_creator.h b/chrome/services/file_util/zip_file_creator.h
index 1ed018b..fcf8995 100644
--- a/chrome/services/file_util/zip_file_creator.h
+++ b/chrome/services/file_util/zip_file_creator.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/atomic_flag.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/services/file_util/public/mojom/zip_file_creator.mojom.h"
 #include "components/services/filesystem/public/mojom/directory.mojom.h"
diff --git a/chrome/services/ipp_parser/public/cpp/browser/ipp_parser_launcher.h b/chrome/services/ipp_parser/public/cpp/browser/ipp_parser_launcher.h
index 9e96a8bc..68446427 100644
--- a/chrome/services/ipp_parser/public/cpp/browser/ipp_parser_launcher.h
+++ b/chrome/services/ipp_parser/public/cpp/browser/ipp_parser_launcher.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_SERVICES_IPP_PARSER_PUBLIC_CPP_BROWSER_IPP_PARSER_LAUNCHER_H_
 #define CHROME_SERVICES_IPP_PARSER_PUBLIC_CPP_BROWSER_IPP_PARSER_LAUNCHER_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/services/ipp_parser/public/mojom/ipp_parser.mojom-forward.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/chrome/services/mac_notifications/mac_notification_service_un.mm b/chrome/services/mac_notifications/mac_notification_service_un.mm
index 5c9ee92..58cd0654 100644
--- a/chrome/services/mac_notifications/mac_notification_service_un.mm
+++ b/chrome/services/mac_notifications/mac_notification_service_un.mm
@@ -10,11 +10,12 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/bind_post_task.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/common/notifications/notification_constants.h"
 #include "chrome/common/notifications/notification_operation.h"
diff --git a/chrome/services/media_gallery_util/ipc_data_source.cc b/chrome/services/media_gallery_util/ipc_data_source.cc
index 05925623..c7bf357 100644
--- a/chrome/services/media_gallery_util/ipc_data_source.cc
+++ b/chrome/services/media_gallery_util/ipc_data_source.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/media_gallery_util/ipc_data_source.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/ranges/algorithm.h"
 #include "base/task/single_thread_task_runner.h"
 
diff --git a/chrome/services/media_gallery_util/media_metadata_parser.cc b/chrome/services/media_gallery_util/media_metadata_parser.cc
index 13f14a9..6ddce86 100644
--- a/chrome/services/media_gallery_util/media_metadata_parser.cc
+++ b/chrome/services/media_gallery_util/media_metadata_parser.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread.h"
diff --git a/chrome/services/media_gallery_util/media_metadata_parser.h b/chrome/services/media_gallery_util/media_metadata_parser.h
index 0290c08..6624d50 100644
--- a/chrome/services/media_gallery_util/media_metadata_parser.h
+++ b/chrome/services/media_gallery_util/media_metadata_parser.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/common/media_galleries/metadata_types.h"
 #include "chrome/services/media_gallery_util/public/mojom/media_parser.mojom.h"
 
diff --git a/chrome/services/media_gallery_util/media_metadata_parser_fuzzer.cc b/chrome/services/media_gallery_util/media_metadata_parser_fuzzer.cc
index 565eff5f..f826cba 100644
--- a/chrome/services/media_gallery_util/media_metadata_parser_fuzzer.cc
+++ b/chrome/services/media_gallery_util/media_metadata_parser_fuzzer.cc
@@ -8,7 +8,7 @@
 
 #include <fuzzer/FuzzedDataProvider.h>
 
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "chrome/services/media_gallery_util/media_metadata_parser.h"
 #include "content/public/test/browser_task_environment.h"
 #include "media/filters/memory_data_source.h"
diff --git a/chrome/services/media_gallery_util/media_parser.cc b/chrome/services/media_gallery_util/media_parser.cc
index 2a313ce..bb89571 100644
--- a/chrome/services/media_gallery_util/media_parser.cc
+++ b/chrome/services/media_gallery_util/media_parser.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/media_gallery_util/media_parser.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "chrome/services/media_gallery_util/ipc_data_source.h"
 #include "chrome/services/media_gallery_util/media_metadata_parser.h"
 #include "media/media_buildflags.h"
diff --git a/chrome/services/media_gallery_util/media_parser_android.cc b/chrome/services/media_gallery_util/media_parser_android.cc
index 7d70609..91585cad 100644
--- a/chrome/services/media_gallery_util/media_parser_android.cc
+++ b/chrome/services/media_gallery_util/media_parser_android.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "chrome/services/media_gallery_util/ipc_data_source.h"
 #include "chrome/services/media_gallery_util/video_thumbnail_parser.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/services/media_gallery_util/media_parser_android_unittest.cc b/chrome/services/media_gallery_util/media_parser_android_unittest.cc
index 937f7c0..a50d4537 100644
--- a/chrome/services/media_gallery_util/media_parser_android_unittest.cc
+++ b/chrome/services/media_gallery_util/media_parser_android_unittest.cc
@@ -7,9 +7,9 @@
 #include <memory>
 #include <vector>
 
-#include "base/callback_helpers.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/media_gallery_util/public/cpp/local_media_data_source_factory.cc b/chrome/services/media_gallery_util/public/cpp/local_media_data_source_factory.cc
index ecccdba..7d733f9 100644
--- a/chrome/services/media_gallery_util/public/cpp/local_media_data_source_factory.cc
+++ b/chrome/services/media_gallery_util/public/cpp/local_media_data_source_factory.cc
@@ -6,11 +6,12 @@
 
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/chrome/services/media_gallery_util/public/cpp/media_gallery_util_browsertest.cc b/chrome/services/media_gallery_util/public/cpp/media_gallery_util_browsertest.cc
index c85370b..9fe4e92 100644
--- a/chrome/services/media_gallery_util/public/cpp/media_gallery_util_browsertest.cc
+++ b/chrome/services/media_gallery_util/public/cpp/media_gallery_util_browsertest.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/media_gallery_util/public/mojom/media_parser.mojom.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "chrome/services/media_gallery_util/public/cpp/media_parser_provider.h"
 #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/services/media_gallery_util/public/cpp/media_parser_provider.cc b/chrome/services/media_gallery_util/public/cpp/media_parser_provider.cc
index a672c4bf..656998c 100644
--- a/chrome/services/media_gallery_util/public/cpp/media_parser_provider.cc
+++ b/chrome/services/media_gallery_util/public/cpp/media_parser_provider.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/media_gallery_util/public/cpp/media_parser_provider.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/services/media_gallery_util/public/mojom/media_parser.mojom.h"
 #include "content/public/browser/service_process_host.h"
diff --git a/chrome/services/media_gallery_util/public/cpp/safe_audio_video_checker.cc b/chrome/services/media_gallery_util/public/cpp/safe_audio_video_checker.cc
index e881e9fa..f1083c5 100644
--- a/chrome/services/media_gallery_util/public/cpp/safe_audio_video_checker.cc
+++ b/chrome/services/media_gallery_util/public/cpp/safe_audio_video_checker.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/time/time.h"
 #include "chrome/services/media_gallery_util/public/mojom/media_parser.mojom.h"
 
diff --git a/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.cc b/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.cc
index 3a8f2e0c..fd54842e 100644
--- a/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.cc
+++ b/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 
 SafeMediaMetadataParser::SafeMediaMetadataParser(
diff --git a/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.h b/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.h
index f9bc0bc..bf8e5a8 100644
--- a/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.h
+++ b/chrome/services/media_gallery_util/public/cpp/safe_media_metadata_parser.h
@@ -11,7 +11,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/common/media_galleries/metadata_types.h"
 #include "chrome/services/media_gallery_util/public/cpp/media_parser_provider.h"
diff --git a/chrome/services/media_gallery_util/video_thumbnail_parser.cc b/chrome/services/media_gallery_util/video_thumbnail_parser.cc
index a3e280e..a24b290 100644
--- a/chrome/services/media_gallery_util/video_thumbnail_parser.cc
+++ b/chrome/services/media_gallery_util/video_thumbnail_parser.cc
@@ -7,7 +7,7 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/services/media_gallery_util/ipc_data_source.h"
diff --git a/chrome/services/printing/pdf_thumbnailer_unittest.cc b/chrome/services/printing/pdf_thumbnailer_unittest.cc
index b33b912..cf012ae 100644
--- a/chrome/services/printing/pdf_thumbnailer_unittest.cc
+++ b/chrome/services/printing/pdf_thumbnailer_unittest.cc
@@ -7,7 +7,7 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/task_environment.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/services/printing/pdf_thumbnailer.h"
diff --git a/chrome/services/printing/pdf_to_emf_converter.h b/chrome/services/printing/pdf_to_emf_converter.h
index 52cb8c8e..5308198 100644
--- a/chrome/services/printing/pdf_to_emf_converter.h
+++ b/chrome/services/printing/pdf_to_emf_converter.h
@@ -7,7 +7,6 @@
 
 #include "base/memory/read_only_shared_memory_region.h"
 #include "chrome/services/printing/public/mojom/pdf_to_emf_converter.mojom.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "printing/pdf_render_settings.h"
 
 namespace printing {
diff --git a/chrome/services/printing/print_backend_service_impl.cc b/chrome/services/printing/print_backend_service_impl.cc
index 03414439..bea84e8 100644
--- a/chrome/services/printing/print_backend_service_impl.cc
+++ b/chrome/services/printing/print_backend_service_impl.cc
@@ -15,6 +15,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/notreached.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/sequence_bound.h"
diff --git a/chrome/services/printing/print_backend_service_impl.h b/chrome/services/printing/print_backend_service_impl.h
index 6658512..0fa8cb3 100644
--- a/chrome/services/printing/print_backend_service_impl.h
+++ b/chrome/services/printing/print_backend_service_impl.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/services/qrcode_generator/public/cpp/qrcode_generator_service.h b/chrome/services/qrcode_generator/public/cpp/qrcode_generator_service.h
index 8c6331c..920b9c0d 100644
--- a/chrome/services/qrcode_generator/public/cpp/qrcode_generator_service.h
+++ b/chrome/services/qrcode_generator/public/cpp/qrcode_generator_service.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_SERVICES_QRCODE_GENERATOR_PUBLIC_CPP_QRCODE_GENERATOR_SERVICE_H_
 #define CHROME_SERVICES_QRCODE_GENERATOR_PUBLIC_CPP_QRCODE_GENERATOR_SERVICE_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/services/qrcode_generator/public/mojom/qrcode_generator.mojom-forward.h"
 #include "mojo/public/cpp/bindings/remote.h"
 
diff --git a/chrome/services/sharing/nearby/decoder/nearby_decoder.cc b/chrome/services/sharing/nearby/decoder/nearby_decoder.cc
index 4e21ae1..e55c2372 100644
--- a/chrome/services/sharing/nearby/decoder/nearby_decoder.cc
+++ b/chrome/services/sharing/nearby/decoder/nearby_decoder.cc
@@ -8,7 +8,7 @@
 #include <string>
 #include <utility>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/services/sharing/nearby/decoder/advertisement_decoder.h"
 #include "chrome/services/sharing/public/cpp/advertisement.h"
 #include "chrome/services/sharing/public/proto/wire_format.pb.h"
diff --git a/chrome/services/sharing/nearby/nearby_connections.h b/chrome/services/sharing/nearby/nearby_connections.h
index eae0170..1aab01293 100644
--- a/chrome/services/sharing/nearby/nearby_connections.h
+++ b/chrome/services/sharing/nearby/nearby_connections.h
@@ -8,9 +8,9 @@
 #include <stdint.h>
 #include <memory>
 
-#include "base/callback_forward.h"
 #include "base/containers/flat_map.h"
 #include "base/files/file.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
diff --git a/chrome/services/sharing/nearby/nearby_connections_conversions.cc b/chrome/services/sharing/nearby/nearby_connections_conversions.cc
index 0221670..7b27b54 100644
--- a/chrome/services/sharing/nearby/nearby_connections_conversions.cc
+++ b/chrome/services/sharing/nearby/nearby_connections_conversions.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/nearby/public/mojom/nearby_connections.mojom.h"
 #include "chromeos/ash/services/nearby/public/mojom/nearby_connections_types.mojom.h"
diff --git a/chrome/services/sharing/nearby/nearby_connections_conversions.h b/chrome/services/sharing/nearby/nearby_connections_conversions.h
index e4a9e0c8..09046e0 100644
--- a/chrome/services/sharing/nearby/nearby_connections_conversions.h
+++ b/chrome/services/sharing/nearby/nearby_connections_conversions.h
@@ -8,7 +8,7 @@
 #include <cstdint>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chromeos/ash/services/nearby/public/mojom/nearby_connections.mojom-forward.h"
 #include "chromeos/ash/services/nearby/public/mojom/nearby_connections_types.mojom-forward.h"
 #include "third_party/nearby/src/connections/params.h"
diff --git a/chrome/services/sharing/nearby/nearby_connections_unittest.cc b/chrome/services/sharing/nearby/nearby_connections_unittest.cc
index 710fada..8788b5f 100644
--- a/chrome/services/sharing/nearby/nearby_connections_unittest.cc
+++ b/chrome/services/sharing/nearby/nearby_connections_unittest.cc
@@ -11,10 +11,10 @@
 #include <utility>
 
 #include "ash/public/cpp/network_config_service.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/services/sharing/nearby/platform/atomic_boolean_unittest.cc b/chrome/services/sharing/nearby/platform/atomic_boolean_unittest.cc
index 7030d63..303eebf 100644
--- a/chrome/services/sharing/nearby/platform/atomic_boolean_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/atomic_boolean_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/sharing/nearby/platform/atomic_boolean.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/services/sharing/nearby/platform/atomic_uint32_unittest.cc b/chrome/services/sharing/nearby/platform/atomic_uint32_unittest.cc
index 0d82de9c..7cf87fe 100644
--- a/chrome/services/sharing/nearby/platform/atomic_uint32_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/atomic_uint32_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
diff --git a/chrome/services/sharing/nearby/platform/bidirectional_stream.cc b/chrome/services/sharing/nearby/platform/bidirectional_stream.cc
index 986ec261..2419b8e4 100644
--- a/chrome/services/sharing/nearby/platform/bidirectional_stream.cc
+++ b/chrome/services/sharing/nearby/platform/bidirectional_stream.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/sharing/nearby/platform/bidirectional_stream.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/services/sharing/nearby/platform/input_stream_impl.h"
diff --git a/chrome/services/sharing/nearby/platform/bidirectional_stream_unittest.cc b/chrome/services/sharing/nearby/platform/bidirectional_stream_unittest.cc
index ec03a73..2ef4326 100644
--- a/chrome/services/sharing/nearby/platform/bidirectional_stream_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/bidirectional_stream_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/sharing/nearby/platform/ble_medium_unittest.cc b/chrome/services/sharing/nearby/platform/ble_medium_unittest.cc
index c4be11b..333aca3b 100644
--- a/chrome/services/sharing/nearby/platform/ble_medium_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/ble_medium_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/sharing/nearby/platform/bluetooth_classic_medium_unittest.cc b/chrome/services/sharing/nearby/platform/bluetooth_classic_medium_unittest.cc
index 5fa1a6a..b99abd5 100644
--- a/chrome/services/sharing/nearby/platform/bluetooth_classic_medium_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/bluetooth_classic_medium_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/sharing/nearby/platform/bluetooth_server_socket.h b/chrome/services/sharing/nearby/platform/bluetooth_server_socket.h
index 0fd5a987..6e6bca6a 100644
--- a/chrome/services/sharing/nearby/platform/bluetooth_server_socket.h
+++ b/chrome/services/sharing/nearby/platform/bluetooth_server_socket.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "device/bluetooth/public/mojom/adapter.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/shared_remote.h"
diff --git a/chrome/services/sharing/nearby/platform/bluetooth_server_socket_unittest.cc b/chrome/services/sharing/nearby/platform/bluetooth_server_socket_unittest.cc
index 1561167a..9f3ecc1 100644
--- a/chrome/services/sharing/nearby/platform/bluetooth_server_socket_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/bluetooth_server_socket_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
diff --git a/chrome/services/sharing/nearby/platform/bluetooth_socket_unittest.cc b/chrome/services/sharing/nearby/platform/bluetooth_socket_unittest.cc
index 5b013446a..0e3734e7 100644
--- a/chrome/services/sharing/nearby/platform/bluetooth_socket_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/bluetooth_socket_unittest.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
diff --git a/chrome/services/sharing/nearby/platform/condition_variable_unittest.cc b/chrome/services/sharing/nearby/platform/condition_variable_unittest.cc
index 2e9b372..bc4a189 100644
--- a/chrome/services/sharing/nearby/platform/condition_variable_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/condition_variable_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "chrome/services/sharing/nearby/platform/condition_variable.h"
 
-#include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/services/sharing/nearby/platform/count_down_latch_unittest.cc b/chrome/services/sharing/nearby/platform/count_down_latch_unittest.cc
index 94b4911c..5a525036 100644
--- a/chrome/services/sharing/nearby/platform/count_down_latch_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/count_down_latch_unittest.cc
@@ -6,9 +6,9 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/synchronization/lock.h"
 #include "base/task/task_runner.h"
diff --git a/chrome/services/sharing/nearby/platform/input_stream_impl.cc b/chrome/services/sharing/nearby/platform/input_stream_impl.cc
index ae459d3..64e1f4c 100644
--- a/chrome/services/sharing/nearby/platform/input_stream_impl.cc
+++ b/chrome/services/sharing/nearby/platform/input_stream_impl.cc
@@ -5,6 +5,7 @@
 #include "chrome/services/sharing/nearby/platform/input_stream_impl.h"
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace location {
 namespace nearby {
diff --git a/chrome/services/sharing/nearby/platform/input_stream_impl_unittest.cc b/chrome/services/sharing/nearby/platform/input_stream_impl_unittest.cc
index 61766fbb..d39e012 100644
--- a/chrome/services/sharing/nearby/platform/input_stream_impl_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/input_stream_impl_unittest.cc
@@ -7,9 +7,10 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/sharing/nearby/platform/mutex_unittest.cc b/chrome/services/sharing/nearby/platform/mutex_unittest.cc
index 261c0c3..cf1da99 100644
--- a/chrome/services/sharing/nearby/platform/mutex_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/mutex_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "chrome/services/sharing/nearby/platform/mutex.h"
 
-#include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/services/sharing/nearby/platform/output_stream_impl.cc b/chrome/services/sharing/nearby/platform/output_stream_impl.cc
index 1f6f504..ed2ec9e 100644
--- a/chrome/services/sharing/nearby/platform/output_stream_impl.cc
+++ b/chrome/services/sharing/nearby/platform/output_stream_impl.cc
@@ -5,6 +5,7 @@
 #include "chrome/services/sharing/nearby/platform/output_stream_impl.h"
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace location {
 namespace nearby {
diff --git a/chrome/services/sharing/nearby/platform/output_stream_impl_unittest.cc b/chrome/services/sharing/nearby/platform/output_stream_impl_unittest.cc
index 608e409..47d0cf9 100644
--- a/chrome/services/sharing/nearby/platform/output_stream_impl_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/output_stream_impl_unittest.cc
@@ -8,9 +8,10 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/sharing/nearby/platform/recursive_mutex_unittest.cc b/chrome/services/sharing/nearby/platform/recursive_mutex_unittest.cc
index d5e0f50e..bbcaa72 100644
--- a/chrome/services/sharing/nearby/platform/recursive_mutex_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/recursive_mutex_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "chrome/services/sharing/nearby/platform/recursive_mutex.h"
 
-#include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/containers/flat_set.h"
+#include "base/functional/bind.h"
 #include "base/run_loop.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/services/sharing/nearby/platform/scheduled_executor.cc b/chrome/services/sharing/nearby/platform/scheduled_executor.cc
index 61342c3..089f096 100644
--- a/chrome/services/sharing/nearby/platform/scheduled_executor.cc
+++ b/chrome/services/sharing/nearby/platform/scheduled_executor.cc
@@ -7,7 +7,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/chrome/services/sharing/nearby/platform/scheduled_executor.h b/chrome/services/sharing/nearby/platform/scheduled_executor.h
index c4faa0ae..40d9b93b 100644
--- a/chrome/services/sharing/nearby/platform/scheduled_executor.h
+++ b/chrome/services/sharing/nearby/platform/scheduled_executor.h
@@ -11,6 +11,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/timer/timer.h"
 #include "base/unguessable_token.h"
diff --git a/chrome/services/sharing/nearby/platform/scheduled_executor_unittest.cc b/chrome/services/sharing/nearby/platform/scheduled_executor_unittest.cc
index c0d9d7bd..3d57d72 100644
--- a/chrome/services/sharing/nearby/platform/scheduled_executor_unittest.cc
+++ b/chrome/services/sharing/nearby/platform/scheduled_executor_unittest.cc
@@ -8,7 +8,7 @@
 #include <set>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/synchronization/lock.h"
 #include "base/test/task_environment.h"
 #include "base/unguessable_token.h"
diff --git a/chrome/services/sharing/nearby/platform/submittable_executor.cc b/chrome/services/sharing/nearby/platform/submittable_executor.cc
index d8102b7..6d961e00 100644
--- a/chrome/services/sharing/nearby/platform/submittable_executor.cc
+++ b/chrome/services/sharing/nearby/platform/submittable_executor.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/sharing/nearby/platform/submittable_executor.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/services/sharing/nearby/platform/webrtc.cc b/chrome/services/sharing/nearby/platform/webrtc.cc
index f4a9ff2d..74b1755 100644
--- a/chrome/services/sharing/nearby/platform/webrtc.cc
+++ b/chrome/services/sharing/nearby/platform/webrtc.cc
@@ -5,6 +5,8 @@
 #include "chrome/services/sharing/nearby/platform/webrtc.h"
 
 #include "ash/constants/ash_features.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "chrome/services/sharing/webrtc/ipc_network_manager.h"
 #include "chrome/services/sharing/webrtc/ipc_packet_socket_factory.h"
diff --git a/chrome/services/sharing/nearby/platform/webrtc_test.cc b/chrome/services/sharing/nearby/platform/webrtc_test.cc
index 5972338a..bbb3a9c 100644
--- a/chrome/services/sharing/nearby/platform/webrtc_test.cc
+++ b/chrome/services/sharing/nearby/platform/webrtc_test.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/services/sharing/nearby/platform/webrtc.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "chrome/services/sharing/nearby/test_support/mock_webrtc_dependencies.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/chrome/services/sharing/nearby/platform/wifi_lan_medium.cc b/chrome/services/sharing/nearby/platform/wifi_lan_medium.cc
index b5ce9ea..f331c46 100644
--- a/chrome/services/sharing/nearby/platform/wifi_lan_medium.cc
+++ b/chrome/services/sharing/nearby/platform/wifi_lan_medium.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/services/sharing/nearby/platform/wifi_lan_medium.h"
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/notreached.h"
diff --git a/chrome/services/sharing/nearby/platform/wifi_lan_server_socket.cc b/chrome/services/sharing/nearby/platform/wifi_lan_server_socket.cc
index 49c005d7..e3da019c 100644
--- a/chrome/services/sharing/nearby/platform/wifi_lan_server_socket.cc
+++ b/chrome/services/sharing/nearby/platform/wifi_lan_server_socket.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/sharing/nearby/platform/wifi_lan_server_socket.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/chrome/services/sharing/sharing_impl.cc b/chrome/services/sharing/sharing_impl.cc
index da5a6d8..0331763 100644
--- a/chrome/services/sharing/sharing_impl.cc
+++ b/chrome/services/sharing/sharing_impl.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/services/sharing/nearby/decoder/nearby_decoder.h"
diff --git a/chrome/services/sharing/sharing_impl_unittest.cc b/chrome/services/sharing/sharing_impl_unittest.cc
index 94f68631f..211b6df 100644
--- a/chrome/services/sharing/sharing_impl_unittest.cc
+++ b/chrome/services/sharing/sharing_impl_unittest.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "ash/public/cpp/network_config_service.h"
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/services/sharing/webrtc/ipc_network_manager.cc b/chrome/services/sharing/webrtc/ipc_network_manager.cc
index 4775596..a0ebb6b 100644
--- a/chrome/services/sharing/webrtc/ipc_network_manager.cc
+++ b/chrome/services/sharing/webrtc/ipc_network_manager.cc
@@ -8,7 +8,7 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/sys_byteorder.h"
 #include "base/task/single_thread_task_runner.h"
diff --git a/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc b/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc
index 554b690..d1f198a 100644
--- a/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc
+++ b/chrome/services/sharing/webrtc/ipc_packet_socket_factory.cc
@@ -10,8 +10,8 @@
 #include <list>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/services/sharing/webrtc/mdns_responder_adapter.cc b/chrome/services/sharing/webrtc/mdns_responder_adapter.cc
index fc0dd0b..13dbc98 100644
--- a/chrome/services/sharing/webrtc/mdns_responder_adapter.cc
+++ b/chrome/services/sharing/webrtc/mdns_responder_adapter.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "components/webrtc/net_address_utils.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "net/base/ip_address.h"
diff --git a/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc b/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc
index 3366f29..8e58f02b 100644
--- a/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc
+++ b/chrome/services/sharing/webrtc/p2p_async_address_resolver.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
 #include "base/feature_list.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "components/webrtc/net_address_utils.h"
 
diff --git a/chrome/services/sharing/webrtc/p2p_async_address_resolver.h b/chrome/services/sharing/webrtc/p2p_async_address_resolver.h
index ecefb38b..3c14f7f 100644
--- a/chrome/services/sharing/webrtc/p2p_async_address_resolver.h
+++ b/chrome/services/sharing/webrtc/p2p_async_address_resolver.h
@@ -8,7 +8,7 @@
 #include <stdint.h>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/threading/thread_checker.h"
 #include "mojo/public/cpp/bindings/shared_remote.h"
 #include "net/base/ip_address.h"
diff --git a/chrome/services/sharing/webrtc/p2p_socket_client.cc b/chrome/services/sharing/webrtc/p2p_socket_client.cc
index 76f5ba6..047ffc5 100644
--- a/chrome/services/sharing/webrtc/p2p_socket_client.cc
+++ b/chrome/services/sharing/webrtc/p2p_socket_client.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/services/sharing/webrtc/p2p_socket_client.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/time/time.h"
 #include "chrome/services/sharing/webrtc/p2p_socket_client_delegate.h"
diff --git a/chrome/services/speech/soda/cros_soda_client.h b/chrome/services/speech/soda/cros_soda_client.h
index 4ef9379a..9349f304 100644
--- a/chrome/services/speech/soda/cros_soda_client.h
+++ b/chrome/services/speech/soda/cros_soda_client.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_SERVICES_SPEECH_SODA_CROS_SODA_CLIENT_H_
 #define CHROME_SERVICES_SPEECH_SODA_CROS_SODA_CLIENT_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h"
 #include "chromeos/services/machine_learning/public/mojom/soda.mojom.h"
 #include "media/mojo/mojom/speech_recognition.mojom.h"
diff --git a/chrome/services/speech/speech_recognition_recognizer_impl.cc b/chrome/services/speech/speech_recognition_recognizer_impl.cc
index f6f474c8..3bbd088 100644
--- a/chrome/services/speech/speech_recognition_recognizer_impl.cc
+++ b/chrome/services/speech/speech_recognition_recognizer_impl.cc
@@ -7,11 +7,11 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/containers/flat_map.h"
 #include "base/containers/span.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
diff --git a/chrome/services/speech/speech_recognition_recognizer_impl.h b/chrome/services/speech/speech_recognition_recognizer_impl.h
index c317ad86..af9fc99 100644
--- a/chrome/services/speech/speech_recognition_recognizer_impl.h
+++ b/chrome/services/speech/speech_recognition_recognizer_impl.h
@@ -10,6 +10,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/services/speech/audio_source_consumer.h"
 #include "components/soda/constants.h"
diff --git a/chrome/services/util_win/util_win_impl.cc b/chrome/services/util_win/util_win_impl.cc
index 322b5e8..c7afef0 100644
--- a/chrome/services/util_win/util_win_impl.cc
+++ b/chrome/services/util_win/util_win_impl.cc
@@ -11,9 +11,9 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/scoped_native_library.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index fef8b66b..6b46264 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3388,7 +3388,6 @@
         "../browser/ui/views/certificate_selector_dialog_browsertest.cc",
         "../browser/ui/views/collected_cookies_views_browsertest.cc",
         "../browser/ui/views/commerce/ntp_discount_consent_dialog_view_browsertest.cc",
-        "../browser/ui/views/commerce/price_tracking_entry_point_feature_flag_browser_test.cc",
         "../browser/ui/views/commerce/price_tracking_icon_view_browsertest.cc",
         "../browser/ui/views/desktop_capture/desktop_media_picker_views_browsertest.cc",
         "../browser/ui/views/extensions/device_chooser_extension_browsertest.cc",
@@ -6519,6 +6518,8 @@
       "../browser/download/android/download_manager_service_unittest.cc",
       "../browser/enterprise/util/android_enterprise_info_unittest.cc",
       "../browser/fast_checkout/fast_checkout_client_impl_unittest.cc",
+      "../browser/fast_checkout/fast_checkout_personal_data_helper_impl_unittest.cc",
+      "../browser/fast_checkout/fast_checkout_trigger_validator_impl_unittest.cc",
       "../browser/feedback/android/family_info_feedback_source_unittest.cc",
       "../browser/long_screenshots/long_screenshots_tab_service_unittest.cc",
       "../browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
index fb5b3f7..9b23993 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
@@ -43,6 +43,8 @@
 public class AccountManagerTestRule implements TestRule {
     public static final String TEST_ACCOUNT_EMAIL = "test@gmail.com";
 
+    public static final String CHILD_ACCOUNT_EMAIL = generateChildEmail(TEST_ACCOUNT_EMAIL);
+
     private final @NonNull FakeAccountManagerFacade mFakeAccountManagerFacade;
     // TODO(https://crbug.com/1352119): Revise this test rule and make this non-nullable.
     private final @Nullable FakeAccountInfoService mFakeAccountInfoService;
diff --git a/chrome/test/base/chrome_render_view_host_test_harness.cc b/chrome/test/base/chrome_render_view_host_test_harness.cc
index 847e9d5..99c2a61 100644
--- a/chrome/test/base/chrome_render_view_host_test_harness.cc
+++ b/chrome/test/base/chrome_render_view_host_test_harness.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/browser_process.h"
diff --git a/chrome/test/base/chrome_test_launcher.cc b/chrome/test/base/chrome_test_launcher.cc
index 9cf5491..a593039 100644
--- a/chrome/test/base/chrome_test_launcher.cc
+++ b/chrome/test/base/chrome_test_launcher.cc
@@ -8,11 +8,11 @@
 #include <utility>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/debug/leak_annotations.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/process/process_metrics.h"
diff --git a/chrome/test/base/chromeos/test_chrome_base.cc b/chrome/test/base/chromeos/test_chrome_base.cc
index 652bd611..8959e47 100644
--- a/chrome/test/base/chromeos/test_chrome_base.cc
+++ b/chrome/test/base/chromeos/test_chrome_base.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "chrome/browser/chrome_browser_main.h"
 #include "chrome/test/base/chromeos/fake_ash_test_chrome_browser_main_extra_parts.h"
 #include "content/public/browser/browser_main_parts.h"
diff --git a/chrome/test/base/extension_js_browser_test.cc b/chrome/test/base/extension_js_browser_test.cc
index a9af212..cb6b563f 100644
--- a/chrome/test/base/extension_js_browser_test.cc
+++ b/chrome/test/base/extension_js_browser_test.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/json/json_reader.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/test/base/extension_js_browser_test.h b/chrome/test/base/extension_js_browser_test.h
index b3a0c5c9..8e0871a 100644
--- a/chrome/test/base/extension_js_browser_test.h
+++ b/chrome/test/base/extension_js_browser_test.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/test/base/devtools_agent_coverage_observer.h"
 #include "chrome/test/base/javascript_browser_test.h"
 
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc
index 299affd..82763dd9 100644
--- a/chrome/test/base/in_process_browser_test.cc
+++ b/chrome/test/base/in_process_browser_test.cc
@@ -8,11 +8,11 @@
 #include <utility>
 
 #include "base/auto_reset.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/lazy_instance.h"
 #include "base/location.h"
 #include "base/no_destructor.h"
diff --git a/chrome/test/base/interactive_test_utils_views.cc b/chrome/test/base/interactive_test_utils_views.cc
index cef68ae7..46ca52e 100644
--- a/chrome/test/base/interactive_test_utils_views.cc
+++ b/chrome/test/base/interactive_test_utils_views.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 "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "build/buildflag.h"
diff --git a/chrome/test/base/interactive_test_utils_win.cc b/chrome/test/base/interactive_test_utils_win.cc
index 198b31b1..b4b24268 100644
--- a/chrome/test/base/interactive_test_utils_win.cc
+++ b/chrome/test/base/interactive_test_utils_win.cc
@@ -10,9 +10,9 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/process/process_handle.h"
diff --git a/chrome/test/base/mojo_web_ui_browser_test.cc b/chrome/test/base/mojo_web_ui_browser_test.cc
index f29d6b2..6bf54d7 100644
--- a/chrome/test/base/mojo_web_ui_browser_test.cc
+++ b/chrome/test/base/mojo_web_ui_browser_test.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
diff --git a/chrome/test/base/run_all_unittests.cc b/chrome/test/base/run_all_unittests.cc
index 8ce9774..0c6e47b 100644
--- a/chrome/test/base/run_all_unittests.cc
+++ b/chrome/test/base/run_all_unittests.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_io_thread.h"
 #include "base/threading/platform_thread.h"
diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h
index 5580e942..e2a2b46 100644
--- a/chrome/test/base/test_browser_window.h
+++ b/chrome/test/base/test_browser_window.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/download/test_download_shelf.h"
diff --git a/chrome/test/base/test_chrome_web_ui_controller_factory.cc b/chrome/test/base/test_chrome_web_ui_controller_factory.cc
index 2e6e2f3..90cd326 100644
--- a/chrome/test/base/test_chrome_web_ui_controller_factory.cc
+++ b/chrome/test/base/test_chrome_web_ui_controller_factory.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/test/base/test_chrome_web_ui_controller_factory.h"
 
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/webui/test_data_source.h"
 #include "chrome/common/webui_url_constants.h"
diff --git a/chrome/test/base/testing_browser_process.cc b/chrome/test/base/testing_browser_process.cc
index b5691c9..721a503 100644
--- a/chrome/test/base/testing_browser_process.cc
+++ b/chrome/test/base/testing_browser_process.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
 #include "base/time/default_clock.h"
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index 02d94191..ea60dad 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -8,14 +8,15 @@
 #include <utility>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_file_util.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h
index 70d2bdf..05b8826 100644
--- a/chrome/test/base/testing_profile.h
+++ b/chrome/test/base/testing_profile.h
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
@@ -28,7 +29,6 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/permission_controller_delegate.h"
 #include "extensions/buildflags/buildflags.h"
-#include "mojo/public/cpp/bindings/receiver_set.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/test/base/testing_profile_manager.cc b/chrome/test/base/testing_profile_manager.cc
index 3c80b81..48ed129 100644
--- a/chrome/test/base/testing_profile_manager.cc
+++ b/chrome/test/base/testing_profile_manager.cc
@@ -7,9 +7,9 @@
 #include <stddef.h>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/test/base/tracing.cc b/chrome/test/base/tracing.cc
index 26d4c0fe..d3ebb5de 100644
--- a/chrome/test/base/tracing.cc
+++ b/chrome/test/base/tracing.cc
@@ -7,9 +7,9 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/singleton.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/test/base/tracing.h b/chrome/test/base/tracing.h
index 6fbce93..37d8e15 100644
--- a/chrome/test/base/tracing.h
+++ b/chrome/test/base/tracing.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 
 namespace base {
 namespace trace_event {
diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc
index b33ed6d..c5343ed4 100644
--- a/chrome/test/base/ui_test_utils.cc
+++ b/chrome/test/base/ui_test_utils.cc
@@ -10,13 +10,13 @@
 
 #include <memory>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
diff --git a/chrome/test/base/web_ui_browser_test.cc b/chrome/test/base/web_ui_browser_test.cc
index be25f41..b137ef40 100644
--- a/chrome/test/base/web_ui_browser_test.cc
+++ b/chrome/test/base/web_ui_browser_test.cc
@@ -9,10 +9,10 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/lazy_instance.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted_memory.h"
diff --git a/chrome/test/base/web_ui_browser_test_browsertest.cc b/chrome/test/base/web_ui_browser_test_browsertest.cc
index 62a5406..82bdbb8d 100644
--- a/chrome/test/base/web_ui_browser_test_browsertest.cc
+++ b/chrome/test/base/web_ui_browser_test_browsertest.cc
@@ -4,10 +4,10 @@
 
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/common/chrome_switches.h"
diff --git a/chrome/test/chromedriver/alert_commands.cc b/chrome/test/chromedriver/alert_commands.cc
index 71bbc29..7c077e62 100644
--- a/chrome/test/chromedriver/alert_commands.cc
+++ b/chrome/test/chromedriver/alert_commands.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/chrome.h"
 #include "chrome/test/chromedriver/chrome/devtools_client.h"
diff --git a/chrome/test/chromedriver/alert_commands.h b/chrome/test/chromedriver/alert_commands.h
index 4c77f67..9d000be 100644
--- a/chrome/test/chromedriver/alert_commands.h
+++ b/chrome/test/chromedriver/alert_commands.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 
 struct Session;
diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc
index 496f380..ce54a76 100644
--- a/chrome/test/chromedriver/capabilities.cc
+++ b/chrome/test/chromedriver/capabilities.cc
@@ -7,9 +7,9 @@
 #include <map>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/containers/fixed_flat_set.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/json/string_escape.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/test/chromedriver/chrome/adb_impl.cc b/chrome/test/chromedriver/chrome/adb_impl.cc
index 25d2a16..d0996d8 100644
--- a/chrome/test/chromedriver/chrome/adb_impl.cc
+++ b/chrome/test/chromedriver/chrome/adb_impl.cc
@@ -7,9 +7,9 @@
 
 #include "chrome/test/chromedriver/chrome/adb_impl.h"
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/environment.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/json/string_escape.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
diff --git a/chrome/test/chromedriver/chrome/bidi_tracker.h b/chrome/test/chromedriver/chrome/bidi_tracker.h
index db6bb36..c4e8792d 100644
--- a/chrome/test/chromedriver/chrome/bidi_tracker.h
+++ b/chrome/test/chromedriver/chrome/bidi_tracker.h
@@ -8,7 +8,7 @@
 #include <map>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
 
diff --git a/chrome/test/chromedriver/chrome/chrome_finder.cc b/chrome/test/chromedriver/chrome/chrome_finder.cc
index df53e63..43bbd99 100644
--- a/chrome/test/chromedriver/chrome/chrome_finder.cc
+++ b/chrome/test/chromedriver/chrome/chrome_finder.cc
@@ -10,11 +10,11 @@
 #include <vector>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/environment.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/strings/string_split.h"
diff --git a/chrome/test/chromedriver/chrome/chrome_finder.h b/chrome/test/chromedriver/chrome/chrome_finder.h
index 3a01aee..51d110b 100644
--- a/chrome/test/chromedriver/chrome/chrome_finder.h
+++ b/chrome/test/chromedriver/chrome/chrome_finder.h
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 
 namespace base {
 class FilePath;
diff --git a/chrome/test/chromedriver/chrome/chrome_finder_unittest.cc b/chrome/test/chromedriver/chrome/chrome_finder_unittest.cc
index a4ac345..34aa2e5d 100644
--- a/chrome/test/chromedriver/chrome/chrome_finder_unittest.cc
+++ b/chrome/test/chromedriver/chrome/chrome_finder_unittest.cc
@@ -7,9 +7,9 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "chrome/test/chromedriver/chrome/chrome_finder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/test/chromedriver/chrome/chrome_impl.cc b/chrome/test/chromedriver/chrome/chrome_impl.cc
index 57babd2..8ebde87 100644
--- a/chrome/test/chromedriver/chrome/chrome_impl.cc
+++ b/chrome/test/chromedriver/chrome/chrome_impl.cc
@@ -9,8 +9,8 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/test/chromedriver/chrome/device_manager.cc b/chrome/test/chromedriver/chrome/device_manager.cc
index fa20dfce..d9c1492a 100644
--- a/chrome/test/chromedriver/chrome/device_manager.cc
+++ b/chrome/test/chromedriver/chrome/device_manager.cc
@@ -6,11 +6,11 @@
 
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/containers/contains.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/test/chromedriver/chrome/device_manager.h b/chrome/test/chromedriver/chrome/device_manager.h
index cd59a868..0cac1cb 100644
--- a/chrome/test/chromedriver/chrome/device_manager.h
+++ b/chrome/test/chromedriver/chrome/device_manager.h
@@ -9,7 +9,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/lock.h"
 
diff --git a/chrome/test/chromedriver/chrome/devtools_client.h b/chrome/test/chromedriver/chrome/devtools_client.h
index 6a2cd97..df751ea3 100644
--- a/chrome/test/chromedriver/chrome/devtools_client.h
+++ b/chrome/test/chromedriver/chrome/devtools_client.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 
 class DevToolsEventListener;
diff --git a/chrome/test/chromedriver/chrome/devtools_client_impl.cc b/chrome/test/chromedriver/chrome/devtools_client_impl.cc
index d58a051..c3999074 100644
--- a/chrome/test/chromedriver/chrome/devtools_client_impl.cc
+++ b/chrome/test/chromedriver/chrome/devtools_client_impl.cc
@@ -9,8 +9,8 @@
 #include <sstream>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
 #include "base/i18n/message_formatter.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
diff --git a/chrome/test/chromedriver/chrome/devtools_client_impl.h b/chrome/test/chromedriver/chrome/devtools_client_impl.h
index 05f53e8..1587f9ab 100644
--- a/chrome/test/chromedriver/chrome/devtools_client_impl.h
+++ b/chrome/test/chromedriver/chrome/devtools_client_impl.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc b/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc
index 54ce28da..3194bced 100644
--- a/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc
+++ b/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc
@@ -11,8 +11,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
diff --git a/chrome/test/chromedriver/chrome/devtools_http_client.cc b/chrome/test/chromedriver/chrome/devtools_http_client.cc
index 9bc97985..ecef50ed 100644
--- a/chrome/test/chromedriver/chrome/devtools_http_client.cc
+++ b/chrome/test/chromedriver/chrome/devtools_http_client.cc
@@ -7,9 +7,9 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/containers/contains.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/json/json_reader.h"
 #include "base/strings/string_util.h"
 #include "base/threading/platform_thread.h"
diff --git a/chrome/test/chromedriver/chrome/javascript_dialog_manager_unittest.cc b/chrome/test/chromedriver/chrome/javascript_dialog_manager_unittest.cc
index 3fded8f..81551374 100644
--- a/chrome/test/chromedriver/chrome/javascript_dialog_manager_unittest.cc
+++ b/chrome/test/chromedriver/chrome/javascript_dialog_manager_unittest.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/browser_info.h"
diff --git a/chrome/test/chromedriver/chrome/web_view.h b/chrome/test/chromedriver/chrome/web_view.h
index 533ed44..530120c 100644
--- a/chrome/test/chromedriver/chrome/web_view.h
+++ b/chrome/test/chromedriver/chrome/web_view.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 
 namespace base {
diff --git a/chrome/test/chromedriver/chrome/web_view_impl.cc b/chrome/test/chromedriver/chrome/web_view_impl.cc
index 4e60594..05b1508d 100644
--- a/chrome/test/chromedriver/chrome/web_view_impl.cc
+++ b/chrome/test/chromedriver/chrome/web_view_impl.cc
@@ -9,9 +9,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/check.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
diff --git a/chrome/test/chromedriver/chrome/web_view_impl.h b/chrome/test/chromedriver/chrome/web_view_impl.h
index 913e78c..9414432 100644
--- a/chrome/test/chromedriver/chrome/web_view_impl.h
+++ b/chrome/test/chromedriver/chrome/web_view_impl.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/web_view.h"
diff --git a/chrome/test/chromedriver/chrome/web_view_impl_unittest.cc b/chrome/test/chromedriver/chrome/web_view_impl_unittest.cc
index e125aaa7..8031643d 100644
--- a/chrome/test/chromedriver/chrome/web_view_impl_unittest.cc
+++ b/chrome/test/chromedriver/chrome/web_view_impl_unittest.cc
@@ -9,8 +9,8 @@
 #include <queue>
 #include <string>
 
-#include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/memory/raw_ptr.h"
diff --git a/chrome/test/chromedriver/chrome_launcher.cc b/chrome/test/chromedriver/chrome_launcher.cc
index ae59c45..083960c9f 100644
--- a/chrome/test/chromedriver/chrome_launcher.cc
+++ b/chrome/test/chromedriver/chrome_launcher.cc
@@ -13,12 +13,12 @@
 #include <vector>
 
 #include "base/base64.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_file.h"
 #include "base/format_macros.h"
+#include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
diff --git a/chrome/test/chromedriver/command.h b/chrome/test/chromedriver/command.h
index df853d32..40d6dfc3 100644
--- a/chrome/test/chromedriver/command.h
+++ b/chrome/test/chromedriver/command.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 
 class Status;
diff --git a/chrome/test/chromedriver/commands.cc b/chrome/test/chromedriver/commands.cc
index d44b049..614e264d 100644
--- a/chrome/test/chromedriver/commands.cc
+++ b/chrome/test/chromedriver/commands.cc
@@ -11,9 +11,9 @@
 #include <list>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/containers/contains.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
diff --git a/chrome/test/chromedriver/commands.h b/chrome/test/chromedriver/commands.h
index 039705f..3541c77 100644
--- a/chrome/test/chromedriver/commands.h
+++ b/chrome/test/chromedriver/commands.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/command.h"
 #include "chrome/test/chromedriver/session_thread_map.h"
diff --git a/chrome/test/chromedriver/commands_unittest.cc b/chrome/test/chromedriver/commands_unittest.cc
index 23be81b..8dd80ac 100644
--- a/chrome/test/chromedriver/commands_unittest.cc
+++ b/chrome/test/chromedriver/commands_unittest.cc
@@ -11,10 +11,10 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/synchronization/lock.h"
diff --git a/chrome/test/chromedriver/element_commands.cc b/chrome/test/chromedriver/element_commands.cc
index 74fe9f3e..2fe0598 100644
--- a/chrome/test/chromedriver/element_commands.cc
+++ b/chrome/test/chromedriver/element_commands.cc
@@ -13,9 +13,9 @@
 #include <unordered_set>
 #include <vector>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/test/chromedriver/element_commands.h b/chrome/test/chromedriver/element_commands.h
index 5f98ccf..06e9842 100644
--- a/chrome/test/chromedriver/element_commands.h
+++ b/chrome/test/chromedriver/element_commands.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 
 struct Session;
diff --git a/chrome/test/chromedriver/net/adb_client_socket.cc b/chrome/test/chromedriver/net/adb_client_socket.cc
index 8ef52116..b2f7b84 100644
--- a/chrome/test/chromedriver/net/adb_client_socket.cc
+++ b/chrome/test/chromedriver/net/adb_client_socket.cc
@@ -8,9 +8,9 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/test/chromedriver/net/adb_client_socket.h b/chrome/test/chromedriver/net/adb_client_socket.h
index 68fd3f2c..23e26e50 100644
--- a/chrome/test/chromedriver/net/adb_client_socket.h
+++ b/chrome/test/chromedriver/net/adb_client_socket.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_TEST_CHROMEDRIVER_NET_ADB_CLIENT_SOCKET_H_
 #define CHROME_TEST_CHROMEDRIVER_NET_ADB_CLIENT_SOCKET_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "net/base/completion_once_callback.h"
 #include "net/base/io_buffer.h"
 #include "net/socket/stream_socket.h"
diff --git a/chrome/test/chromedriver/net/adb_client_socket_unittest.cc b/chrome/test/chromedriver/net/adb_client_socket_unittest.cc
index 7ebb4bb0..bd1deeb 100644
--- a/chrome/test/chromedriver/net/adb_client_socket_unittest.cc
+++ b/chrome/test/chromedriver/net/adb_client_socket_unittest.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/test/gtest_util.h"
diff --git a/chrome/test/chromedriver/net/net_util.cc b/chrome/test/chromedriver/net/net_util.cc
index c6db101..cb3ecb2 100644
--- a/chrome/test/chromedriver/net/net_util.cc
+++ b/chrome/test/chromedriver/net/net_util.cc
@@ -6,9 +6,9 @@
 
 #include <memory>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/lazy_instance.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/stringprintf.h"
diff --git a/chrome/test/chromedriver/net/net_util_unittest.cc b/chrome/test/chromedriver/net/net_util_unittest.cc
index 47b87fce..6998a1ea 100644
--- a/chrome/test/chromedriver/net/net_util_unittest.cc
+++ b/chrome/test/chromedriver/net/net_util_unittest.cc
@@ -8,8 +8,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
diff --git a/chrome/test/chromedriver/net/pipe_handler.cc b/chrome/test/chromedriver/net/pipe_handler.cc
index db347e6..0a6e442 100644
--- a/chrome/test/chromedriver/net/pipe_handler.cc
+++ b/chrome/test/chromedriver/net/pipe_handler.cc
@@ -6,7 +6,7 @@
 #include <memory>
 
 #include "base/base64.h"
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "build/build_config.h"
 #include "chrome/test/chromedriver/net/pipe_handler.h"
 #include "net/base/io_buffer.h"
diff --git a/chrome/test/chromedriver/net/sync_websocket_factory.cc b/chrome/test/chromedriver/net/sync_websocket_factory.cc
index c22f46c..60b8ed3 100644
--- a/chrome/test/chromedriver/net/sync_websocket_factory.cc
+++ b/chrome/test/chromedriver/net/sync_websocket_factory.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/memory/ref_counted.h"
 #include "chrome/test/chromedriver/log_replay/log_replay_socket.h"
 #include "chrome/test/chromedriver/net/sync_websocket_impl.h"
diff --git a/chrome/test/chromedriver/net/sync_websocket_factory.h b/chrome/test/chromedriver/net/sync_websocket_factory.h
index 67e08b2..b47f11f 100644
--- a/chrome/test/chromedriver/net/sync_websocket_factory.h
+++ b/chrome/test/chromedriver/net/sync_websocket_factory.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 
 class SyncWebSocket;
 class URLRequestContextGetter;
diff --git a/chrome/test/chromedriver/net/sync_websocket_impl.cc b/chrome/test/chromedriver/net/sync_websocket_impl.cc
index 43044a8..e10da74 100644
--- a/chrome/test/chromedriver/net/sync_websocket_impl.cc
+++ b/chrome/test/chromedriver/net/sync_websocket_impl.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/location.h"
diff --git a/chrome/test/chromedriver/net/sync_websocket_impl.h b/chrome/test/chromedriver/net/sync_websocket_impl.h
index d13c0ebb..7abb9e9 100644
--- a/chrome/test/chromedriver/net/sync_websocket_impl.h
+++ b/chrome/test/chromedriver/net/sync_websocket_impl.h
@@ -9,10 +9,11 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/condition_variable.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner_helpers.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chrome/test/chromedriver/net/sync_websocket.h"
diff --git a/chrome/test/chromedriver/net/sync_websocket_impl_unittest.cc b/chrome/test/chromedriver/net/sync_websocket_impl_unittest.cc
index 9a3d26f..a0cd9ba 100644
--- a/chrome/test/chromedriver/net/sync_websocket_impl_unittest.cc
+++ b/chrome/test/chromedriver/net/sync_websocket_impl_unittest.cc
@@ -4,8 +4,8 @@
 
 #include <string>
 
-#include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
 #include "base/json/json_reader.h"
 #include "base/memory/ref_counted.h"
 #include "base/message_loop/message_pump_type.h"
diff --git a/chrome/test/chromedriver/net/test_http_server.cc b/chrome/test/chromedriver/net/test_http_server.cc
index 2ca29ec..894de26 100644
--- a/chrome/test/chromedriver/net/test_http_server.cc
+++ b/chrome/test/chromedriver/net/test_http_server.cc
@@ -8,7 +8,7 @@
 #include <utility>
 
 #include "base/base64.h"
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/strings/stringprintf.h"
diff --git a/chrome/test/chromedriver/net/websocket.cc b/chrome/test/chromedriver/net/websocket.cc
index 44176fe..20aac92c 100644
--- a/chrome/test/chromedriver/net/websocket.cc
+++ b/chrome/test/chromedriver/net/websocket.cc
@@ -13,8 +13,8 @@
 #include <vector>
 
 #include "base/base64.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/hash/sha1.h"
 #include "base/json/json_writer.h"
 #include "base/rand_util.h"
diff --git a/chrome/test/chromedriver/net/websocket_unittest.cc b/chrome/test/chromedriver/net/websocket_unittest.cc
index 7680832d..d2663db 100644
--- a/chrome/test/chromedriver/net/websocket_unittest.cc
+++ b/chrome/test/chromedriver/net/websocket_unittest.cc
@@ -11,8 +11,8 @@
 #include <vector>
 
 #include "base/base64.h"
-#include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
diff --git a/chrome/test/chromedriver/performance_logger.cc b/chrome/test/chromedriver/performance_logger.cc
index 66729021..80b6799 100644
--- a/chrome/test/chromedriver/performance_logger.cc
+++ b/chrome/test/chromedriver/performance_logger.cc
@@ -7,7 +7,7 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/strings/string_split.h"
diff --git a/chrome/test/chromedriver/server/chromedriver_server.cc b/chrome/test/chromedriver/server/chromedriver_server.cc
index aea882c..de8b99f 100644
--- a/chrome/test/chromedriver/server/chromedriver_server.cc
+++ b/chrome/test/chromedriver/server/chromedriver_server.cc
@@ -13,12 +13,12 @@
 #include <vector>
 
 #include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/json/json_reader.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc
index 436327b..dfd87688 100644
--- a/chrome/test/chromedriver/server/http_handler.cc
+++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -9,10 +9,10 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_forward.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_forward.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"  // For CHECK macros.
@@ -24,7 +24,6 @@
 #include "base/system/sys_info.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/test/chromedriver/alert_commands.h"
diff --git a/chrome/test/chromedriver/server/http_handler.h b/chrome/test/chromedriver/server/http_handler.h
index 71731c60..b999cba 100644
--- a/chrome/test/chromedriver/server/http_handler.h
+++ b/chrome/test/chromedriver/server/http_handler.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
diff --git a/chrome/test/chromedriver/server/http_handler_unittest.cc b/chrome/test/chromedriver/server/http_handler_unittest.cc
index 83afb3a..b7203f4 100644
--- a/chrome/test/chromedriver/server/http_handler_unittest.cc
+++ b/chrome/test/chromedriver/server/http_handler_unittest.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/json/json_writer.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/log.h"
@@ -68,10 +68,10 @@
   net::HttpServerResponseInfo response;
   handler.Handle(request, base::BindRepeating(&OnResponse, &response));
   ASSERT_EQ(net::HTTP_OK, response.status_code());
-  base::DictionaryValue body;
-  body.GetDict().Set("status", kOk);
-  body.GetDict().Set("value", 1);
-  body.GetDict().Set("sessionId", "session_id");
+  base::Value::Dict body;
+  body.Set("status", kOk);
+  body.Set("value", 1);
+  body.Set("sessionId", "session_id");
   std::string json;
   base::JSONWriter::Write(body, &json);
   ASSERT_EQ(json, response.body());
@@ -115,10 +115,10 @@
   net::HttpServerResponseInfo response;
   handler.Handle(request, base::BindRepeating(&OnResponse, &response));
   ASSERT_EQ(net::HTTP_OK, response.status_code());
-  base::DictionaryValue body;
-  body.GetDict().Set("status", kOk);
-  body.GetDict().Set("value", 1);
-  body.GetDict().Set("sessionId", "session_id");
+  base::Value::Dict body;
+  body.Set("status", kOk);
+  body.Set("value", 1);
+  body.Set("sessionId", "session_id");
   std::string json;
   base::JSONWriter::Write(body, &json);
   ASSERT_EQ(json, response.body());
diff --git a/chrome/test/chromedriver/server/http_server.cc b/chrome/test/chromedriver/server/http_server.cc
index 98e515b7..c7f1f95 100644
--- a/chrome/test/chromedriver/server/http_server.cc
+++ b/chrome/test/chromedriver/server/http_server.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/test/chromedriver/server/http_server.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "net/base/net_errors.h"
 #include "net/base/network_interfaces.h"
 #include "net/base/sys_addrinfo.h"
diff --git a/chrome/test/chromedriver/server/http_server.h b/chrome/test/chromedriver/server/http_server.h
index ac801da..625aa3b 100644
--- a/chrome/test/chromedriver/server/http_server.h
+++ b/chrome/test/chromedriver/server/http_server.h
@@ -6,6 +6,7 @@
 #define CHROME_TEST_CHROMEDRIVER_SERVER_HTTP_SERVER_H_
 
 #include "base/json/json_reader.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chrome/test/chromedriver/server/http_handler.h"
 #include "net/base/url_util.h"
 #include "net/server/http_server.h"
diff --git a/chrome/test/chromedriver/session.h b/chrome/test/chromedriver/session.h
index e518bb1c..61830f4 100644
--- a/chrome/test/chromedriver/session.h
+++ b/chrome/test/chromedriver/session.h
@@ -11,7 +11,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/chrome/test/chromedriver/session_commands.cc b/chrome/test/chromedriver/session_commands.cc
index bff4848..a0becde 100644
--- a/chrome/test/chromedriver/session_commands.cc
+++ b/chrome/test/chromedriver/session_commands.cc
@@ -9,10 +9,10 @@
 #include <thread>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_forward.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_forward.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"  // For CHECK macros.
@@ -23,7 +23,7 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/system/sys_info.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/basic_types.h"
diff --git a/chrome/test/chromedriver/session_commands.h b/chrome/test/chromedriver/session_commands.h
index 124748e..95374805 100644
--- a/chrome/test/chromedriver/session_commands.h
+++ b/chrome/test/chromedriver/session_commands.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/command.h"
 #include "chrome/test/chromedriver/net/sync_websocket_factory.h"
diff --git a/chrome/test/chromedriver/session_commands_unittest.cc b/chrome/test/chromedriver/session_commands_unittest.cc
index 90bdd50e..9debcd6b 100644
--- a/chrome/test/chromedriver/session_commands_unittest.cc
+++ b/chrome/test/chromedriver/session_commands_unittest.cc
@@ -7,10 +7,10 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/json/json_reader.h"
 #include "base/run_loop.h"
 #include "base/system/sys_info.h"
diff --git a/chrome/test/chromedriver/webauthn_commands.cc b/chrome/test/chromedriver/webauthn_commands.cc
index 0973cba..39e00004 100644
--- a/chrome/test/chromedriver/webauthn_commands.cc
+++ b/chrome/test/chromedriver/webauthn_commands.cc
@@ -10,8 +10,8 @@
 
 #include "base/base64.h"
 #include "base/base64url.h"
-#include "base/callback.h"
 #include "base/containers/flat_map.h"
+#include "base/functional/callback.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/status.h"
 #include "chrome/test/chromedriver/chrome/web_view.h"
diff --git a/chrome/test/chromedriver/webauthn_commands.h b/chrome/test/chromedriver/webauthn_commands.h
index 6a30569..4a214ad7 100644
--- a/chrome/test/chromedriver/webauthn_commands.h
+++ b/chrome/test/chromedriver/webauthn_commands.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 
 struct Session;
diff --git a/chrome/test/chromedriver/window_commands.cc b/chrome/test/chromedriver/window_commands.cc
index 5ea9ecb..8938343 100644
--- a/chrome/test/chromedriver/window_commands.cc
+++ b/chrome/test/chromedriver/window_commands.cc
@@ -15,8 +15,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/callback.h"
 #include "base/containers/adapters.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/test/chromedriver/window_commands.h b/chrome/test/chromedriver/window_commands.h
index 8701f36..65e1da1 100644
--- a/chrome/test/chromedriver/window_commands.h
+++ b/chrome/test/chromedriver/window_commands.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/session.h"
 
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index c865e7b..5b897a9c 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -1379,33 +1379,7 @@
     ]
   },
   "DevicePrintingClientNameTemplate": {
-    "os": [
-      "chromeos_ash"
-    ],
-    "policy_pref_mapping_tests": [
-      {
-        "note": "Check unset policy",
-        "policies": {},
-        "prefs": {
-          "printing.client_name_template": {
-            "default_value": "",
-            "location": "local_state"
-          }
-        }
-      },
-      {
-        "note": "Check simple policy",
-        "policies": {
-          "DevicePrintingClientNameTemplate": "test"
-        },
-        "prefs": {
-          "printing.client_name_template": {
-            "value": "test",
-            "location": "local_state"
-          }
-        }
-      }
-    ]
+    "reason_for_missing_test": "Maps into CrosSettings"
   },
   "LocalDiscoveryEnabled": {
     "reason_for_missing_test": "Policy was removed"
diff --git a/chrome/test/data/webui/async_gen.cc b/chrome/test/data/webui/async_gen.cc
index f00c5a5..9557016 100644
--- a/chrome/test/data/webui/async_gen.cc
+++ b/chrome/test/data/webui/async_gen.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/test/data/webui/async_gen.h"
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/values.h"
 #include "content/public/browser/web_ui.h"
 
diff --git a/chrome/test/data/webui/chrome_send_browsertest.cc b/chrome/test/data/webui/chrome_send_browsertest.cc
index d24ea95..5a85236 100644
--- a/chrome/test/data/webui/chrome_send_browsertest.cc
+++ b/chrome/test/data/webui/chrome_send_browsertest.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/test/data/webui/chrome_send_browsertest.h"
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/values.h"
 #include "content/public/browser/web_ui.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/test/data/webui/chromeos/ash_common/BUILD.gn b/chrome/test/data/webui/chromeos/ash_common/BUILD.gn
index 774147e..24c16076 100644
--- a/chrome/test/data/webui/chromeos/ash_common/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/ash_common/BUILD.gn
@@ -21,6 +21,7 @@
     "cr_scrollable_behavior_tests.ts",
     "list_property_update_behavior_tests.ts",
     "typescript_utils/strict_query_test.ts",
+    "typescript_utils/strict_query_mixin_test.ts",
   ]
   deps = [
     "../..:build_ts",
diff --git a/chrome/test/data/webui/chromeos/ash_common/ash_common_resources_browsertest.js b/chrome/test/data/webui/chromeos/ash_common/ash_common_resources_browsertest.js
index 383d7e3..6da6592 100644
--- a/chrome/test/data/webui/chromeos/ash_common/ash_common_resources_browsertest.js
+++ b/chrome/test/data/webui/chromeos/ash_common/ash_common_resources_browsertest.js
@@ -106,3 +106,17 @@
 TEST_F('AshCommonResourcesTypescriptUtilsStrictQueryTest', 'All', function() {
   mocha.run();
 });
+
+var AshCommonResourcesTypescriptUtilsStrictQueryMixinTest =
+    class extends AshCommonResourcesBrowserTest {
+  /** @override */
+  get browsePreload() {
+    return 'chrome://webui-test/test_loader.html?module=chromeos/ash_common/' +
+        'typescript_utils/strict_query_mixin_test.js'
+  }
+};
+
+TEST_F(
+    'AshCommonResourcesTypescriptUtilsStrictQueryMixinTest', 'All', function() {
+      mocha.run();
+    });
\ No newline at end of file
diff --git a/chrome/test/data/webui/chromeos/ash_common/typescript_utils/strict_query_mixin_test.ts b/chrome/test/data/webui/chromeos/ash_common/typescript_utils/strict_query_mixin_test.ts
new file mode 100644
index 0000000..a789221b
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/ash_common/typescript_utils/strict_query_mixin_test.ts
@@ -0,0 +1,65 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {StrictQueryMixin} from 'chrome://resources/ash/common/typescript_utils/strict_query_mixin.js';
+import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {assertEquals, assertThrows} from 'chrome://webui-test/chai_assert.js';
+
+const TestElementBase = StrictQueryMixin(PolymerElement);
+class TestElement extends TestElementBase {
+  static get template() {
+    return html`
+      <div id='container'>
+        <h1 id='title'>This is the title</h1>
+        <p id='p1'>Some paragraph text</p>
+        <div>A div</div>
+        <ul id='bulletList'>
+          <li id='list-item'>List item 1</li>
+          <li>List item 2</li>
+        </ul>
+        <span>Span text</span>
+      </div>
+    `;
+  }
+}
+customElements.define('test-element', TestElement);
+
+suite('StrictQueryMixinTest', function() {
+  let testElement: TestElement;
+
+  setup(function() {
+    testElement = document.createElement('test-element') as TestElement;
+    document.body.appendChild(testElement);
+  });
+
+  test('BasicQuery', function() {
+    const queriedElement = testElement.strictQuery('span', HTMLSpanElement);
+    assertEquals('<span>Span text</span>', queriedElement.outerHTML);
+  });
+
+  test('QueryWithMultipleMatches', function() {
+    const queriedElement = testElement.strictQuery('li', HTMLLIElement);
+    // We expect the first ` li` to be returned.
+    assertEquals(
+        '<li id="list-item">List item 1</li>', queriedElement.outerHTML);
+  });
+
+  test('StrictQueryDiv', function() {
+    const queriedElement = testElement.strictQueryDiv('#container > div');
+    assertEquals('<div>A div</div>', queriedElement.outerHTML);
+  });
+
+  test('StrictQuerySpan', function() {
+    const queriedElement = testElement.strictQuerySpan('span');
+    assertEquals('<span>Span text</span>', queriedElement.outerHTML);
+  });
+
+  test('ThrowsOnNoMatch', function() {
+    assertThrows(() => testElement.strictQueryDiv('#does-not-exist'));
+  });
+
+  test('ThrowsOnInvalidType', function() {
+    assertThrows(() => testElement.strictQuery('div', HTMLSpanElement));
+  });
+});
diff --git a/chrome/test/data/webui/mojo/mojo_file_system_access_browsertest.cc b/chrome/test/data/webui/mojo/mojo_file_system_access_browsertest.cc
index 3d086a29..e56f1f1 100644
--- a/chrome/test/data/webui/mojo/mojo_file_system_access_browsertest.cc
+++ b/chrome/test/data/webui/mojo/mojo_file_system_access_browsertest.cc
@@ -9,7 +9,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/test_file_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/bad_message.h"
 #include "chrome/browser/chrome_content_browser_client.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/test/data/webui/mojo/mojo_js_interface_broker_browsertest.cc b/chrome/test/data/webui/mojo/mojo_js_interface_broker_browsertest.cc
index 91ae8e5..ef13fd9 100644
--- a/chrome/test/data/webui/mojo/mojo_js_interface_broker_browsertest.cc
+++ b/chrome/test/data/webui/mojo/mojo_js_interface_broker_browsertest.cc
@@ -4,7 +4,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chrome/test/data/webui/mojo/mojo_web_ui_controller_browsertest.cc b/chrome/test/data/webui/mojo/mojo_web_ui_controller_browsertest.cc
index 4d23082..3537c53 100644
--- a/chrome/test/data/webui/mojo/mojo_web_ui_controller_browsertest.cc
+++ b/chrome/test/data/webui/mojo/mojo_web_ui_controller_browsertest.cc
@@ -8,7 +8,6 @@
 #include "base/memory/ref_counted_memory.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/bad_message.h"
 #include "chrome/browser/chrome_browser_interface_binders.h"
 #include "chrome/browser/chrome_content_browser_client.h"
diff --git a/chrome/test/data/webui/settings/cookies_page_test.ts b/chrome/test/data/webui/settings/cookies_page_test.ts
index f80159c..1ad37a95 100644
--- a/chrome/test/data/webui/settings/cookies_page_test.ts
+++ b/chrome/test/data/webui/settings/cookies_page_test.ts
@@ -311,6 +311,17 @@
         page.prefs.profile.cookie_controls_mode.value);
     assertTrue(firstPartySetsToggle.disabled, 'expect toggle to be disabled');
   });
+
+  test('Block third-party cookies in Incognito FPS bullet point', function() {
+    // Confirm the correct string is set.
+    const cookiePageBlockThirdIncognitoBulTwoLabel =
+        page.shadowRoot!
+            .querySelector<HTMLElement>(
+                '#cookiePageBlockThirdIncognitoBulTwo')!.innerText.trim();
+    assertEquals(
+        loadTimeData.getString('cookiePageBlockThirdIncognitoBulTwoFps'),
+        cookiePageBlockThirdIncognitoBulTwoLabel);
+  });
 });
 
 // TODO(crbug.com/1378703): Remove after crbug/1378703 launched.
@@ -608,6 +619,17 @@
     testMetricsBrowserProxy.resetResolver('recordAction');
     assertFalse(page.$.toast.open);
   });
+
+  test('Block third-party cookies in Incognito bullet point', function() {
+    // Confirm the correct string is set.
+    const cookiePageBlockThirdIncognitoBulTwoLabel =
+        page.shadowRoot!
+            .querySelector<HTMLElement>(
+                '#cookiePageBlockThirdIncognitoBulTwo')!.innerText.trim();
+    assertEquals(
+        loadTimeData.getString('cookiePageBlockThirdIncognitoBulTwo'),
+        cookiePageBlockThirdIncognitoBulTwoLabel);
+  });
 });
 
 // <if expr="chromeos_lacros">
diff --git a/chrome/test/data/webui/settings/privacy_sandbox_page_test.ts b/chrome/test/data/webui/settings/privacy_sandbox_page_test.ts
index e70a2fe..e4b601c 100644
--- a/chrome/test/data/webui/settings/privacy_sandbox_page_test.ts
+++ b/chrome/test/data/webui/settings/privacy_sandbox_page_test.ts
@@ -470,6 +470,7 @@
     await flushTasks();
     assertTrue(isVisible(page.$.fledgeToggle));
     assertFalse(page.$.fledgeToggle.checked);
+    assertFalse(page.$.fledgeToggle.controlDisabled());
     assertEquals(
         loadTimeData.getString('fledgePageToggleSubLabel'),
         page.$.fledgeToggle.subLabel);
@@ -481,6 +482,7 @@
     await flushTasks();
     assertTrue(isVisible(page.$.fledgeToggle));
     assertTrue(page.$.fledgeToggle.checked);
+    assertFalse(page.$.fledgeToggle.controlDisabled());
     assertEquals(
         loadTimeData.getString('fledgePageToggleSubLabel'),
         page.$.fledgeToggle.subLabel);
@@ -500,6 +502,7 @@
     await flushTasks();
     assertTrue(isVisible(page.$.fledgeToggle));
     assertTrue(page.$.fledgeToggle.checked);
+    assertFalse(page.$.fledgeToggle.controlDisabled());
     assertEquals(
         loadTimeData.getString('fledgePageToggleSubLabel'),
         page.$.fledgeToggle.subLabel);
@@ -513,6 +516,7 @@
     await flushTasks();
     assertTrue(isVisible(page.$.fledgeToggle));
     assertFalse(page.$.fledgeToggle.checked);
+    assertFalse(page.$.fledgeToggle.controlDisabled());
     assertEquals(
         loadTimeData.getString('fledgePageToggleSubLabel'),
         page.$.fledgeToggle.subLabel);
@@ -675,6 +679,19 @@
         blockedSitesDescription.innerText);
   });
 
+  test('fledgeManaged', async function() {
+    page.set('prefs.privacy_sandbox.m1.fledge_enabled', {
+      ...page.get('prefs.privacy_sandbox.m1.fledge_enabled'),
+      value: false,
+      controlledBy: chrome.settingsPrivate.ControlledBy.USER_POLICY,
+      enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
+    });
+    await flushTasks();
+    assertFalse(page.$.fledgeToggle.checked);
+    assertTrue(page.$.fledgeToggle.controlDisabled());
+    assertFalse(isChildVisible(page, '#currentSitesSection'));
+  });
+
   test('footerLinks', async function() {
     assertTrue(isChildVisible(page, '#footer'));
     const links =
diff --git a/chrome/test/delayload/delayloads_unittest.cc b/chrome/test/delayload/delayloads_unittest.cc
index 277b5fe..6a52a76 100644
--- a/chrome/test/delayload/delayloads_unittest.cc
+++ b/chrome/test/delayload/delayloads_unittest.cc
@@ -10,11 +10,11 @@
 #include <vector>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/files/memory_mapped_file.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/strings/pattern.h"
 #include "base/strings/string_util.h"
diff --git a/chrome/test/interaction/interaction_sequence_interactive_uitest.cc b/chrome/test/interaction/interaction_sequence_interactive_uitest.cc
index b2f6d7f..dcbb231 100644
--- a/chrome/test/interaction/interaction_sequence_interactive_uitest.cc
+++ b/chrome/test/interaction/interaction_sequence_interactive_uitest.cc
@@ -4,7 +4,7 @@
 
 #include <string.h>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/bind.h"
 #include "base/test/mock_callback.h"
 #include "build/chromeos_buildflags.h"
diff --git a/chrome/test/interaction/interaction_test_util_browser_browsertest.cc b/chrome/test/interaction/interaction_test_util_browser_browsertest.cc
index c622b9c..7b01157 100644
--- a/chrome/test/interaction/interaction_test_util_browser_browsertest.cc
+++ b/chrome/test/interaction/interaction_test_util_browser_browsertest.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/test/interaction/interaction_test_util_browser.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_element_identifiers.h"
 #include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/test/interaction/interaction_test_util_interactive_uitest.cc b/chrome/test/interaction/interaction_test_util_interactive_uitest.cc
index 6532028..e8438be 100644
--- a/chrome/test/interaction/interaction_test_util_interactive_uitest.cc
+++ b/chrome/test/interaction/interaction_test_util_interactive_uitest.cc
@@ -4,7 +4,8 @@
 
 #include "ui/base/interaction/interaction_test_util.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/tabs/tab_menu_model.h"
diff --git a/chrome/test/interaction/interactive_browser_test.cc b/chrome/test/interaction/interactive_browser_test.cc
index 64e54e16..968f084 100644
--- a/chrome/test/interaction/interactive_browser_test.cc
+++ b/chrome/test/interaction/interactive_browser_test.cc
@@ -13,7 +13,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/test/bind.h"
 #include "base/test/rectify_callback.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/test/interaction/interactive_browser_test_browsertest.cc b/chrome/test/interaction/interactive_browser_test_browsertest.cc
index 9e837215..2a8d3455 100644
--- a/chrome/test/interaction/interactive_browser_test_browsertest.cc
+++ b/chrome/test/interaction/interactive_browser_test_browsertest.cc
@@ -6,7 +6,7 @@
 #include "chrome/browser/ui/browser_element_identifiers.h"
 #include "chrome/test/interaction/interactive_browser_test.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "content/public/test/browser_test.h"
 #include "ui/base/interaction/element_identifier.h"
 #include "ui/base/interaction/expect_call_in_scope.h"
diff --git a/chrome/test/interaction/webcontents_interaction_test_util.cc b/chrome/test/interaction/webcontents_interaction_test_util.cc
index 95282d8..02c8866 100644
--- a/chrome/test/interaction/webcontents_interaction_test_util.cc
+++ b/chrome/test/interaction/webcontents_interaction_test_util.cc
@@ -8,7 +8,7 @@
 #include <sstream>
 #include <string>
 
-#include "base/callback_helpers.h"
+#include "base/functional/callback_helpers.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/location.h"
diff --git a/chrome/test/interaction/widget_focus_waiter.cc b/chrome/test/interaction/widget_focus_waiter.cc
index e8682c2..9354420e 100644
--- a/chrome/test/interaction/widget_focus_waiter.cc
+++ b/chrome/test/interaction/widget_focus_waiter.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/test/interaction/widget_focus_waiter.h"
+#include "base/task/single_thread_task_runner.h"
 
 WidgetFocusWaiter::WidgetFocusWaiter(views::Widget* widget) : widget_(widget) {
   views::WidgetFocusManager::GetInstance()->AddFocusChangeListener(this);
diff --git a/chrome/test/interaction/widget_focus_waiter.h b/chrome/test/interaction/widget_focus_waiter.h
index bbd7560..318de917 100644
--- a/chrome/test/interaction/widget_focus_waiter.h
+++ b/chrome/test/interaction/widget_focus_waiter.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_TEST_INTERACTION_WIDGET_FOCUS_WAITER_H_
 #define CHROME_TEST_INTERACTION_WIDGET_FOCUS_WAITER_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "ui/gfx/native_widget_types.h"
diff --git a/chrome/test/media_router/access_code_cast/access_code_cast_integration_browsertest.cc b/chrome/test/media_router/access_code_cast/access_code_cast_integration_browsertest.cc
index a29f59e2..e59a71c 100644
--- a/chrome/test/media_router/access_code_cast/access_code_cast_integration_browsertest.cc
+++ b/chrome/test/media_router/access_code_cast/access_code_cast_integration_browsertest.cc
@@ -8,6 +8,8 @@
 #include "base/memory/ptr_util.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/gtest_tags.h"
diff --git a/chrome/test/media_router/media_router_cast_ui_for_test.h b/chrome/test/media_router/media_router_cast_ui_for_test.h
index c7d0c56..7bc3db54 100644
--- a/chrome/test/media_router/media_router_cast_ui_for_test.h
+++ b/chrome/test/media_router/media_router_cast_ui_for_test.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_TEST_MEDIA_ROUTER_MEDIA_ROUTER_CAST_UI_FOR_TEST_H_
 #define CHROME_TEST_MEDIA_ROUTER_MEDIA_ROUTER_CAST_UI_FOR_TEST_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h"
 #include "chrome/test/media_router/media_router_ui_for_test_base.h"
 #include "components/media_router/common/media_sink.h"
diff --git a/chrome/test/media_router/media_router_e2e_browsertest.cc b/chrome/test/media_router/media_router_e2e_browsertest.cc
index a8e5b80..a07431a8 100644
--- a/chrome/test/media_router/media_router_e2e_browsertest.cc
+++ b/chrome/test/media_router/media_router_e2e_browsertest.cc
@@ -7,9 +7,9 @@
 #include <memory>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
+#include "base/functional/bind.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
diff --git a/chrome/test/media_router/media_router_gmc_ui_for_test.h b/chrome/test/media_router/media_router_gmc_ui_for_test.h
index 4585be2..59274e9 100644
--- a/chrome/test/media_router/media_router_gmc_ui_for_test.h
+++ b/chrome/test/media_router/media_router_gmc_ui_for_test.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_TEST_MEDIA_ROUTER_MEDIA_ROUTER_GMC_UI_FOR_TEST_H_
 #define CHROME_TEST_MEDIA_ROUTER_MEDIA_ROUTER_GMC_UI_FOR_TEST_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/views/global_media_controls/media_dialog_ui_for_test.h"
diff --git a/chrome/test/media_router/media_router_integration_browsertest.cc b/chrome/test/media_router/media_router_integration_browsertest.cc
index a5f50c3c..6c52a15 100644
--- a/chrome/test/media_router/media_router_integration_browsertest.cc
+++ b/chrome/test/media_router/media_router_integration_browsertest.cc
@@ -6,9 +6,9 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/json/json_file_value_serializer.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
diff --git a/chrome/test/media_router/media_router_integration_browsertest.h b/chrome/test/media_router/media_router_integration_browsertest.h
index cfdf721..dd1bbda 100644
--- a/chrome/test/media_router/media_router_integration_browsertest.h
+++ b/chrome/test/media_router/media_router_integration_browsertest.h
@@ -8,8 +8,8 @@
 #include <memory>
 #include <string>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/test/media_router/media_router_ui_for_test_base.h b/chrome/test/media_router/media_router_ui_for_test_base.h
index f37f69f..353494b 100644
--- a/chrome/test/media_router/media_router_ui_for_test_base.h
+++ b/chrome/test/media_router/media_router_ui_for_test_base.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_TEST_MEDIA_ROUTER_MEDIA_ROUTER_UI_FOR_TEST_BASE_H_
 #define CHROME_TEST_MEDIA_ROUTER_MEDIA_ROUTER_UI_FOR_TEST_BASE_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/chrome/test/nacl/nacl_browsertest.cc b/chrome/test/nacl/nacl_browsertest.cc
index 7dc465b8..c875ad1 100644
--- a/chrome/test/nacl/nacl_browsertest.cc
+++ b/chrome/test/nacl/nacl_browsertest.cc
@@ -8,9 +8,9 @@
 
 #define TELEMETRY 1
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/environment.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/process/kill.h"
 #include "base/process/launch.h"
diff --git a/chrome/test/nacl/pnacl_header_test.cc b/chrome/test/nacl/pnacl_header_test.cc
index ee7e1152..b2a83adb 100644
--- a/chrome/test/nacl/pnacl_header_test.cc
+++ b/chrome/test/nacl/pnacl_header_test.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/path_service.h"
 #include "base/test/scoped_path_override.h"
 #include "chrome/browser/ui/browser.h"
diff --git a/chrome/test/payments/android/payment_request_test_bridge.h b/chrome/test/payments/android/payment_request_test_bridge.h
index c7c72ec..dc8907d 100644
--- a/chrome/test/payments/android/payment_request_test_bridge.h
+++ b/chrome/test/payments/android/payment_request_test_bridge.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_TEST_PAYMENTS_ANDROID_PAYMENT_REQUEST_TEST_BRIDGE_H_
 #define CHROME_TEST_PAYMENTS_ANDROID_PAYMENT_REQUEST_TEST_BRIDGE_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/test/payments/payment_request_test_controller.h"
 
 namespace content {
diff --git a/chrome/test/payments/payment_app_install_util.cc b/chrome/test/payments/payment_app_install_util.cc
index ac550226..fbd47e8 100644
--- a/chrome/test/payments/payment_app_install_util.cc
+++ b/chrome/test/payments/payment_app_install_util.cc
@@ -6,9 +6,9 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/run_loop.h"
 #include "content/public/browser/payment_app_provider.h"
 #include "content/public/browser/supported_delegations.h"
diff --git a/chrome/test/payments/payment_request_test_controller_android.cc b/chrome/test/payments/payment_request_test_controller_android.cc
index d1d268d..71626c8 100644
--- a/chrome/test/payments/payment_request_test_controller_android.cc
+++ b/chrome/test/payments/payment_request_test_controller_android.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/test/payments/payment_request_test_controller.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/notreached.h"
 #include "chrome/browser/android/background_task_scheduler/chrome_background_task_factory.h"
 #include "chrome/test/payments/android/payment_request_test_bridge.h"
diff --git a/chrome/test/payments/test_event_waiter.h b/chrome/test/payments/test_event_waiter.h
index 25721a6..2bec7da 100644
--- a/chrome/test/payments/test_event_waiter.h
+++ b/chrome/test/payments/test_event_waiter.h
@@ -9,7 +9,6 @@
 #include <list>
 
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace payments {
 
diff --git a/chrome/test/permissions/permission_request_manager_test_api.cc b/chrome/test/permissions/permission_request_manager_test_api.cc
index f711cc2..0c90a48 100644
--- a/chrome/test/permissions/permission_request_manager_test_api.cc
+++ b/chrome/test/permissions/permission_request_manager_test_api.cc
@@ -5,7 +5,7 @@
 #include "chrome/test/permissions/permission_request_manager_test_api.h"
 
 #include <memory>
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h"
diff --git a/chrome/test/ppapi/ppapi_browsertest.cc b/chrome/test/ppapi/ppapi_browsertest.cc
index 9234bbe4..fc5d82e5 100644
--- a/chrome/test/ppapi/ppapi_browsertest.cc
+++ b/chrome/test/ppapi/ppapi_browsertest.cc
@@ -6,10 +6,10 @@
 
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/path_service.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
diff --git a/chrome/test/ppapi/ppapi_filechooser_browsertest.cc b/chrome/test/ppapi/ppapi_filechooser_browsertest.cc
index ab2306e4..30e9e0e1 100644
--- a/chrome/test/ppapi/ppapi_filechooser_browsertest.cc
+++ b/chrome/test/ppapi/ppapi_filechooser_browsertest.cc
@@ -5,10 +5,10 @@
 #include <map>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/chrome/test/ppapi/ppapi_test.cc b/chrome/test/ppapi/ppapi_test.cc
index 43350121..0422efa 100644
--- a/chrome/test/ppapi/ppapi_test.cc
+++ b/chrome/test/ppapi/ppapi_test.cc
@@ -6,9 +6,9 @@
 
 #include <stdint.h>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chrome/test/ppapi/ppapi_test_select_file_dialog_factory.cc b/chrome/test/ppapi/ppapi_test_select_file_dialog_factory.cc
index f83e03e1..935da52bd 100644
--- a/chrome/test/ppapi/ppapi_test_select_file_dialog_factory.cc
+++ b/chrome/test/ppapi/ppapi_test_select_file_dialog_factory.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/test/ppapi/ppapi_test_select_file_dialog_factory.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/shell_dialogs/select_file_dialog.h"
diff --git a/chrome/tools/service_discovery_sniffer/service_discovery_sniffer.cc b/chrome/tools/service_discovery_sniffer/service_discovery_sniffer.cc
index 92097a4..e0cdd70d 100644
--- a/chrome/tools/service_discovery_sniffer/service_discovery_sniffer.cc
+++ b/chrome/tools/service_discovery_sniffer/service_discovery_sniffer.cc
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "base/at_exit.h"
-#include "base/bind.h"
+#include "base/functional/bind.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/chrome/updater/activity.cc b/chrome/updater/activity.cc
index 2456c757..b3e3942 100644
--- a/chrome/updater/activity.cc
+++ b/chrome/updater/activity.cc
@@ -9,8 +9,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/updater/activity_impl.h"
diff --git a/chrome/updater/activity.h b/chrome/updater/activity.h
index 7f06c0cf..fb7bb3a7 100644
--- a/chrome/updater/activity.h
+++ b/chrome/updater/activity.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/updater/updater_scope.h"
 #include "components/update_client/activity_data_service.h"
 
diff --git a/chrome/updater/activity_impl_win.cc b/chrome/updater/activity_impl_win.cc
index 9448875b..2216416 100644
--- a/chrome/updater/activity_impl_win.cc
+++ b/chrome/updater/activity_impl_win.cc
@@ -6,8 +6,8 @@
 
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/updater/activity_impl_win_unittest.cc b/chrome/updater/activity_impl_win_unittest.cc
index 297c65f..71f20ff 100644
--- a/chrome/updater/activity_impl_win_unittest.cc
+++ b/chrome/updater/activity_impl_win_unittest.cc
@@ -7,8 +7,8 @@
 #include <string>
 #include <tuple>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/strings/strcat.h"
 #include "base/win/registry.h"
 #include "base/win/windows_types.h"
diff --git a/chrome/updater/app/app.cc b/chrome/updater/app/app.cc
index c1db13f..ddd1bdd 100644
--- a/chrome/updater/app/app.cc
+++ b/chrome/updater/app/app.cc
@@ -7,8 +7,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/run_loop.h"
 #include "base/threading/thread_restrictions.h"
 #include "chrome/updater/updater_scope.h"
diff --git a/chrome/updater/app/app.h b/chrome/updater/app/app.h
index eade27d..dac28b3 100644
--- a/chrome/updater/app/app.h
+++ b/chrome/updater/app/app.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_UPDATER_APP_APP_H_
 #define CHROME_UPDATER_APP_APP_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/ref_counted.h"
 #include "base/no_destructor.h"
 #include "chrome/updater/updater_scope.h"
diff --git a/chrome/updater/app/app_install.cc b/chrome/updater/app/app_install.cc
index 039762f..dc7ba861 100644
--- a/chrome/updater/app/app_install.cc
+++ b/chrome/updater/app/app_install.cc
@@ -7,12 +7,12 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/check.h"
 #include "base/check_op.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/updater/app/app_install.h b/chrome/updater/app/app_install.h
index e310deb..94ca407 100644
--- a/chrome/updater/app/app_install.h
+++ b/chrome/updater/app/app_install.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
 #include "chrome/updater/app/app.h"
diff --git a/chrome/updater/app/app_install_win.cc b/chrome/updater/app/app_install_win.cc
index 04dded8..4b2e4b7 100644
--- a/chrome/updater/app/app_install_win.cc
+++ b/chrome/updater/app/app_install_win.cc
@@ -13,10 +13,10 @@
 #include <shlobj.h>
 #include <wrl/client.h>
 
-#include "base/callback.h"
 #include "base/check.h"
 #include "base/check_op.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/json/json_string_value_serializer.h"
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
@@ -49,12 +49,12 @@
 #include "chrome/updater/updater_branding.h"
 #include "chrome/updater/updater_scope.h"
 #include "chrome/updater/util/util.h"
+#include "chrome/updater/util/win_util.h"
 #include "chrome/updater/win/install_progress_observer.h"
 #include "chrome/updater/win/manifest_util.h"
 #include "chrome/updater/win/scoped_impersonation.h"
 #include "chrome/updater/win/user_info.h"
 #include "chrome/updater/win/win_constants.h"
-#include "chrome/updater/util/win_util.h"
 
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wmissing-braces"
diff --git a/chrome/updater/app/app_recover.cc b/chrome/updater/app/app_recover.cc
index 0e4ca11..68be712 100644
--- a/chrome/updater/app/app_recover.cc
+++ b/chrome/updater/app/app_recover.cc
@@ -9,9 +9,9 @@
 #include <vector>
 
 #include "base/barrier_closure.h"
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/path_service.h"
diff --git a/chrome/updater/app/app_server.cc b/chrome/updater/app/app_server.cc
index 56d76d5e..f978290 100644
--- a/chrome/updater/app/app_server.cc
+++ b/chrome/updater/app/app_server.cc
@@ -8,8 +8,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/process/launch.h"
diff --git a/chrome/updater/app/app_server.h b/chrome/updater/app/app_server.h
index dd3b4a19..2020f85 100644
--- a/chrome/updater/app/app_server.h
+++ b/chrome/updater/app/app_server.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_UPDATER_APP_APP_SERVER_H_
 #define CHROME_UPDATER_APP_APP_SERVER_H_
 
-#include "base/bind.h"
-#include "base/callback_forward.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "chrome/updater/app/app.h"
 #include "chrome/updater/configurator.h"
diff --git a/chrome/updater/app/app_server_unittest.cc b/chrome/updater/app/app_server_unittest.cc
index 2bfd86f..f00ba89 100644
--- a/chrome/updater/app/app_server_unittest.cc
+++ b/chrome/updater/app/app_server_unittest.cc
@@ -6,9 +6,9 @@
 
 #include <string>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/test/task_environment.h"
diff --git a/chrome/updater/app/app_uninstall.cc b/chrome/updater/app/app_uninstall.cc
index 70c6563b..0c6f767 100644
--- a/chrome/updater/app/app_uninstall.cc
+++ b/chrome/updater/app/app_uninstall.cc
@@ -8,11 +8,11 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/process/launch.h"
diff --git a/chrome/updater/app/app_update.cc b/chrome/updater/app/app_update.cc
index c60c380..ef63910 100644
--- a/chrome/updater/app/app_update.cc
+++ b/chrome/updater/app/app_update.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/updater/app/app_update.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/updater/app/app.h"
diff --git a/chrome/updater/app/app_wake.cc b/chrome/updater/app/app_wake.cc
index eaa2ea3..b52c117 100644
--- a/chrome/updater/app/app_wake.cc
+++ b/chrome/updater/app/app_wake.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/updater/app/app_wake.h"
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "build/build_config.h"
 #include "chrome/updater/app/app.h"
 #include "chrome/updater/constants.h"
diff --git a/chrome/updater/app/app_wakeall.cc b/chrome/updater/app/app_wakeall.cc
index 28e3590..508e780 100644
--- a/chrome/updater/app/app_wakeall.cc
+++ b/chrome/updater/app/app_wakeall.cc
@@ -4,11 +4,11 @@
 
 #include "chrome/updater/app/app_wakeall.h"
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/process/launch.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/updater/app/server/posix/app_server_posix_linux.cc b/chrome/updater/app/server/posix/app_server_posix_linux.cc
index 4dba3c6e..136b7384 100644
--- a/chrome/updater/app/server/posix/app_server_posix_linux.cc
+++ b/chrome/updater/app/server/posix/app_server_posix_linux.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/updater/app/server/posix/app_server_posix.h"
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/updater/registration_data.h"
 
 namespace updater {
diff --git a/chrome/updater/app/server/posix/app_server_posix_mac.cc b/chrome/updater/app/server/posix/app_server_posix_mac.cc
index fb2c3035..e26c129 100644
--- a/chrome/updater/app/server/posix/app_server_posix_mac.cc
+++ b/chrome/updater/app/server/posix/app_server_posix_mac.cc
@@ -4,7 +4,7 @@
 
 #import "chrome/updater/app/server/posix/app_server_posix.h"
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "chrome/updater/mac/setup/keystone.h"
 #include "chrome/updater/registration_data.h"
 
diff --git a/chrome/updater/app/server/posix/update_service_internal_stub.h b/chrome/updater/app/server/posix/update_service_internal_stub.h
index 97f00e0..ace353e8 100644
--- a/chrome/updater/app/server/posix/update_service_internal_stub.h
+++ b/chrome/updater/app/server/posix/update_service_internal_stub.h
@@ -11,8 +11,6 @@
 #include "chrome/updater/update_service.h"
 #include "chrome/updater/update_service_internal.h"
 #include "components/named_mojo_ipc_server/named_mojo_ipc_server.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 
 namespace updater {
 
diff --git a/chrome/updater/app/server/posix/update_service_stub.h b/chrome/updater/app/server/posix/update_service_stub.h
index 926ab059..82ea7c36 100644
--- a/chrome/updater/app/server/posix/update_service_stub.h
+++ b/chrome/updater/app/server/posix/update_service_stub.h
@@ -5,17 +5,14 @@
 #ifndef CHROME_UPDATER_APP_SERVER_POSIX_UPDATE_SERVICE_STUB_H_
 #define CHROME_UPDATER_APP_SERVER_POSIX_UPDATE_SERVICE_STUB_H_
 
-#include "chrome/updater/app/server/posix/mojom/updater_service.mojom.h"
-
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "chrome/updater/app/server/posix/mojom/updater_service.mojom.h"
 #include "chrome/updater/update_service.h"
 #include "chrome/updater/update_service_internal.h"
 #include "components/named_mojo_ipc_server/named_mojo_ipc_server.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/receiver.h"
 
 namespace updater {
 
diff --git a/chrome/updater/app/server/win/com_classes.cc b/chrome/updater/app/server/win/com_classes.cc
index 5dbf31b2..9064513 100644
--- a/chrome/updater/app/server/win/com_classes.cc
+++ b/chrome/updater/app/server/win/com_classes.cc
@@ -10,14 +10,15 @@
 
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/version.h"
diff --git a/chrome/updater/app/server/win/com_classes_legacy.cc b/chrome/updater/app/server/win/com_classes_legacy.cc
index 5daa029..bc7de5e 100644
--- a/chrome/updater/app/server/win/com_classes_legacy.cc
+++ b/chrome/updater/app/server/win/com_classes_legacy.cc
@@ -12,11 +12,11 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/check_op.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
diff --git a/chrome/updater/app/server/win/server.cc b/chrome/updater/app/server/win/server.cc
index d09b1191..13454a0 100644
--- a/chrome/updater/app/server/win/server.cc
+++ b/chrome/updater/app/server/win/server.cc
@@ -10,13 +10,13 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
diff --git a/chrome/updater/app/server/win/server.h b/chrome/updater/app/server/win/server.h
index 79e5c1f..d931824 100644
--- a/chrome/updater/app/server/win/server.h
+++ b/chrome/updater/app/server/win/server.h
@@ -7,8 +7,8 @@
 
 #include <windows.h>
 
-#include "base/callback_forward.h"
 #include "base/check.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequenced_task_runner.h"
 #include "chrome/updater/app/app.h"
diff --git a/chrome/updater/auto_run_on_os_upgrade_task.cc b/chrome/updater/auto_run_on_os_upgrade_task.cc
index cfd748d..ed4ac79908 100644
--- a/chrome/updater/auto_run_on_os_upgrade_task.cc
+++ b/chrome/updater/auto_run_on_os_upgrade_task.cc
@@ -8,8 +8,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/process/launch.h"
diff --git a/chrome/updater/auto_run_on_os_upgrade_task.h b/chrome/updater/auto_run_on_os_upgrade_task.h
index a218311..5344c0d 100644
--- a/chrome/updater/auto_run_on_os_upgrade_task.h
+++ b/chrome/updater/auto_run_on_os_upgrade_task.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/updater/check_for_updates_task.cc b/chrome/updater/check_for_updates_task.cc
index a7fb4b1..b6ce955b 100644
--- a/chrome/updater/check_for_updates_task.cc
+++ b/chrome/updater/check_for_updates_task.cc
@@ -6,8 +6,8 @@
 
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/rand_util.h"
diff --git a/chrome/updater/check_for_updates_task.h b/chrome/updater/check_for_updates_task.h
index efc67d9..8fbde729 100644
--- a/chrome/updater/check_for_updates_task.h
+++ b/chrome/updater/check_for_updates_task.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_UPDATER_CHECK_FOR_UPDATES_TASK_H_
 #define CHROME_UPDATER_CHECK_FOR_UPDATES_TASK_H_
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "chrome/updater/update_service.h"
diff --git a/chrome/updater/configurator.cc b/chrome/updater/configurator.cc
index 7608469..7610189 100644
--- a/chrome/updater/configurator.cc
+++ b/chrome/updater/configurator.cc
@@ -8,11 +8,11 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/containers/flat_map.h"
 #include "base/cxx17_backports.h"
 #include "base/enterprise_util.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/rand_util.h"
 #include "base/time/time.h"
diff --git a/chrome/updater/device_management/dm_client.cc b/chrome/updater/device_management/dm_client.cc
index 787104e..d4632e8 100644
--- a/chrome/updater/device_management/dm_client.cc
+++ b/chrome/updater/device_management/dm_client.cc
@@ -10,8 +10,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/containers/flat_map.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/updater/device_management/dm_client.h b/chrome/updater/device_management/dm_client.h
index f51736c..cac1733 100644
--- a/chrome/updater/device_management/dm_client.h
+++ b/chrome/updater/device_management/dm_client.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/chrome/updater/device_management/dm_client_unittest.cc b/chrome/updater/device_management/dm_client_unittest.cc
index 630bda58..1b79b69 100644
--- a/chrome/updater/device_management/dm_client_unittest.cc
+++ b/chrome/updater/device_management/dm_client_unittest.cc
@@ -10,8 +10,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/test/gmock_callback_support.h"
diff --git a/chrome/updater/installer.cc b/chrome/updater/installer.cc
index 89ff64b..82fe35aa 100644
--- a/chrome/updater/installer.cc
+++ b/chrome/updater/installer.cc
@@ -8,10 +8,10 @@
 #include <utility>
 #include <vector>
 
-#include "base/callback.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/notreached.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/updater/installer.h b/chrome/updater/installer.h
index 6910a15..21d845b 100644
--- a/chrome/updater/installer.h
+++ b/chrome/updater/installer.h
@@ -8,8 +8,8 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "base/version.h"
diff --git a/chrome/updater/installer_mac.cc b/chrome/updater/installer_mac.cc
index f2b2410a..d37bb78 100644
--- a/chrome/updater/installer_mac.cc
+++ b/chrome/updater/installer_mac.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/updater/installer.h"
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/strings/strcat.h"
 #include "base/time/time.h"
diff --git a/chrome/updater/ipc/ipc_security.h b/chrome/updater/ipc/ipc_security.h
index a81bf54f..9ea5e22d 100644
--- a/chrome/updater/ipc/ipc_security.h
+++ b/chrome/updater/ipc/ipc_security.h
@@ -6,7 +6,6 @@
 #define CHROME_UPDATER_IPC_IPC_SECURITY_H_
 
 #include "chrome/updater/updater_scope.h"
-#include "mojo/public/cpp/platform/named_platform_channel.h"
 
 namespace named_mojo_ipc_server {
 struct ConnectionInfo;
diff --git a/chrome/updater/ipc/proxy_impl_base_win.h b/chrome/updater/ipc/proxy_impl_base_win.h
index dfc6b33..3cb1924 100644
--- a/chrome/updater/ipc/proxy_impl_base_win.h
+++ b/chrome/updater/ipc/proxy_impl_base_win.h
@@ -10,8 +10,8 @@
 #include <ios>
 #include <utility>
 
-#include "base/callback.h"
 #include "base/check.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/ipc/update_service_internal_proxy_posix.h b/chrome/updater/ipc/update_service_internal_proxy_posix.h
index 9c53df7..3c1aa35 100644
--- a/chrome/updater/ipc/update_service_internal_proxy_posix.h
+++ b/chrome/updater/ipc/update_service_internal_proxy_posix.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/updater/app/server/posix/mojom/updater_service_internal.mojom.h"
diff --git a/chrome/updater/ipc/update_service_internal_proxy_win.cc b/chrome/updater/ipc/update_service_internal_proxy_win.cc
index 9b989ca..c30471b 100644
--- a/chrome/updater/ipc/update_service_internal_proxy_win.cc
+++ b/chrome/updater/ipc/update_service_internal_proxy_win.cc
@@ -11,8 +11,8 @@
 #include <ios>
 #include <utility>
 
-#include "base/callback.h"
 #include "base/check_op.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/ipc/update_service_internal_proxy_win.h b/chrome/updater/ipc/update_service_internal_proxy_win.h
index f5741bdaa..5b18fef1 100644
--- a/chrome/updater/ipc/update_service_internal_proxy_win.h
+++ b/chrome/updater/ipc/update_service_internal_proxy_win.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_UPDATER_IPC_UPDATE_SERVICE_INTERNAL_PROXY_WIN_H_
 #define CHROME_UPDATER_IPC_UPDATE_SERVICE_INTERNAL_PROXY_WIN_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "chrome/updater/update_service_internal.h"
diff --git a/chrome/updater/ipc/update_service_proxy_posix.cc b/chrome/updater/ipc/update_service_proxy_posix.cc
index e7c8e2b7..e3d0bb60 100644
--- a/chrome/updater/ipc/update_service_proxy_posix.cc
+++ b/chrome/updater/ipc/update_service_proxy_posix.cc
@@ -21,6 +21,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/ranges/algorithm.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "base/version.h"
diff --git a/chrome/updater/ipc/update_service_proxy_posix.h b/chrome/updater/ipc/update_service_proxy_posix.h
index 71ae1604..f7becb9 100644
--- a/chrome/updater/ipc/update_service_proxy_posix.h
+++ b/chrome/updater/ipc/update_service_proxy_posix.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/ipc/update_service_proxy_win.cc b/chrome/updater/ipc/update_service_proxy_win.cc
index 6fb0815..178015f 100644
--- a/chrome/updater/ipc/update_service_proxy_win.cc
+++ b/chrome/updater/ipc/update_service_proxy_win.cc
@@ -14,10 +14,10 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/check.h"
 #include "base/check_op.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/ipc/update_service_proxy_win.h b/chrome/updater/ipc/update_service_proxy_win.h
index 64476c5..f0a1dec 100644
--- a/chrome/updater/ipc/update_service_proxy_win.h
+++ b/chrome/updater/ipc/update_service_proxy_win.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "chrome/updater/update_service.h"
diff --git a/chrome/updater/mac/install_from_archive.mm b/chrome/updater/mac/install_from_archive.mm
index 7a97af25..e13fa71 100644
--- a/chrome/updater/mac/install_from_archive.mm
+++ b/chrome/updater/mac/install_from_archive.mm
@@ -11,11 +11,11 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/path_service.h"
diff --git a/chrome/updater/mac/keystone/ksadmin.mm b/chrome/updater/mac/keystone/ksadmin.mm
index 6fc6804..f5790c9a 100644
--- a/chrome/updater/mac/keystone/ksadmin.mm
+++ b/chrome/updater/mac/keystone/ksadmin.mm
@@ -12,13 +12,13 @@
 #include <vector>
 
 #include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/updater/mac/keystone/ksinstall.mm b/chrome/updater/mac/keystone/ksinstall.mm
index 8ca77b3..86ea6645 100644
--- a/chrome/updater/mac/keystone/ksinstall.mm
+++ b/chrome/updater/mac/keystone/ksinstall.mm
@@ -13,12 +13,12 @@
 #include <string>
 
 #include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/message_loop/message_pump_type.h"
diff --git a/chrome/updater/mac/privileged_helper/server.h b/chrome/updater/mac/privileged_helper/server.h
index b74a3ef..5b023ae 100644
--- a/chrome/updater/mac/privileged_helper/server.h
+++ b/chrome/updater/mac/privileged_helper/server.h
@@ -8,6 +8,7 @@
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/updater/app/app.h"
 #include "chrome/updater/mac/privileged_helper/service.h"
diff --git a/chrome/updater/mac/privileged_helper/server.mm b/chrome/updater/mac/privileged_helper/server.mm
index 255b865..4a4b08e7 100644
--- a/chrome/updater/mac/privileged_helper/server.mm
+++ b/chrome/updater/mac/privileged_helper/server.mm
@@ -4,15 +4,16 @@
 
 #include "chrome/updater/mac/privileged_helper/server.h"
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/process/launch.h"
 #include "base/sequence_checker.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chrome/updater/mac/privileged_helper/helper_branding.h"
diff --git a/chrome/updater/mac/privileged_helper/service.h b/chrome/updater/mac/privileged_helper/service.h
index 7e6d47c..bcc9a8a4 100644
--- a/chrome/updater/mac/privileged_helper/service.h
+++ b/chrome/updater/mac/privileged_helper/service.h
@@ -9,7 +9,7 @@
 
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "chrome/updater/mac/privileged_helper/service_protocol.h"
diff --git a/chrome/updater/mac/privileged_helper/service.mm b/chrome/updater/mac/privileged_helper/service.mm
index fe89b4c..457844f 100644
--- a/chrome/updater/mac/privileged_helper/service.mm
+++ b/chrome/updater/mac/privileged_helper/service.mm
@@ -5,6 +5,7 @@
 #include "chrome/updater/mac/privileged_helper/service.h"
 
 #include "base/memory/raw_ptr.h"
+#import "base/task/sequenced_task_runner.h"
 
 #import <Foundation/Foundation.h>
 #include <Security/Security.h>
@@ -15,13 +16,13 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/mac_util.h"
diff --git a/chrome/updater/mac/setup/keystone.h b/chrome/updater/mac/setup/keystone.h
index f640cc7..8c74044 100644
--- a/chrome/updater/mac/setup/keystone.h
+++ b/chrome/updater/mac/setup/keystone.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/updater/updater_scope.h"
 
 namespace updater {
diff --git a/chrome/updater/mac/setup/keystone.mm b/chrome/updater/mac/setup/keystone.mm
index 0074f46e..cd5ddb7 100644
--- a/chrome/updater/mac/setup/keystone.mm
+++ b/chrome/updater/mac/setup/keystone.mm
@@ -7,11 +7,11 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
 #include "base/command_line.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/mac/bundle_locations.h"
 #include "base/mac/foundation_util.h"
diff --git a/chrome/updater/net/network_fetcher_mac.mm b/chrome/updater/net/network_fetcher_mac.mm
index f12aa10..2046f21 100644
--- a/chrome/updater/net/network_fetcher_mac.mm
+++ b/chrome/updater/net/network_fetcher_mac.mm
@@ -11,12 +11,12 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/containers/flat_map.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #import "base/mac/foundation_util.h"
 #import "base/mac/scoped_nsobject.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/updater/net/network_fetcher_win.cc b/chrome/updater/net/network_fetcher_win.cc
index 764d8fe..22d402c 100644
--- a/chrome/updater/net/network_fetcher_win.cc
+++ b/chrome/updater/net/network_fetcher_win.cc
@@ -11,10 +11,10 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/containers/flat_map.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/policy/policy_fetcher.cc b/chrome/updater/policy/policy_fetcher.cc
index 9ae0c62..ad30d825 100644
--- a/chrome/updater/policy/policy_fetcher.cc
+++ b/chrome/updater/policy/policy_fetcher.cc
@@ -8,9 +8,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/policy/policy_fetcher.h b/chrome/updater/policy/policy_fetcher.h
index 9df447cf..ee62efb 100644
--- a/chrome/updater/policy/policy_fetcher.h
+++ b/chrome/updater/policy/policy_fetcher.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/policy/service.cc b/chrome/updater/policy/service.cc
index f598a95..02960564 100644
--- a/chrome/updater/policy/service.cc
+++ b/chrome/updater/policy/service.cc
@@ -9,9 +9,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/check.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/updater/policy/service.h b/chrome/updater/policy/service.h
index 6fc8189..aaf90ab3 100644
--- a/chrome/updater/policy/service.h
+++ b/chrome/updater/policy/service.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/prefs.cc b/chrome/updater/prefs.cc
index a3e8e417..e2944ce 100644
--- a/chrome/updater/prefs.cc
+++ b/chrome/updater/prefs.cc
@@ -9,8 +9,8 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/chrome/updater/remove_uninstalled_apps_task.cc b/chrome/updater/remove_uninstalled_apps_task.cc
index 4bf06e5..b4c5f4a 100644
--- a/chrome/updater/remove_uninstalled_apps_task.cc
+++ b/chrome/updater/remove_uninstalled_apps_task.cc
@@ -8,10 +8,10 @@
 #include <vector>
 
 #include "base/barrier_closure.h"
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/remove_uninstalled_apps_task.h b/chrome/updater/remove_uninstalled_apps_task.h
index 9e944f97..5c0a212 100644
--- a/chrome/updater/remove_uninstalled_apps_task.h
+++ b/chrome/updater/remove_uninstalled_apps_task.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/run_all_unittests.cc b/chrome/updater/run_all_unittests.cc
index 61f66a1..d4cad5c 100644
--- a/chrome/updater/run_all_unittests.cc
+++ b/chrome/updater/run_all_unittests.cc
@@ -5,11 +5,11 @@
 #include <iostream>
 
 #include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/process/process.h"
 #include "base/test/launcher/unit_test_launcher.h"
diff --git a/chrome/updater/setup.h b/chrome/updater/setup.h
index e3601ea..f57abaa 100644
--- a/chrome/updater/setup.h
+++ b/chrome/updater/setup.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_UPDATER_SETUP_H_
 #define CHROME_UPDATER_SETUP_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/updater/updater_scope.h"
 
 namespace updater {
diff --git a/chrome/updater/setup_linux.cc b/chrome/updater/setup_linux.cc
index 6f1370d..669ec13 100644
--- a/chrome/updater/setup_linux.cc
+++ b/chrome/updater/setup_linux.cc
@@ -5,7 +5,7 @@
 #include "base/logging.h"
 #include "chrome/updater/setup.h"
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/notreached.h"
 #include "base/task/thread_pool.h"
 #include "chrome/updater/posix/setup.h"
diff --git a/chrome/updater/setup_mac.mm b/chrome/updater/setup_mac.mm
index d102a2b..d4c0482 100644
--- a/chrome/updater/setup_mac.mm
+++ b/chrome/updater/setup_mac.mm
@@ -4,8 +4,8 @@
 
 #include "chrome/updater/setup.h"
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/updater/constants.h"
diff --git a/chrome/updater/setup_win.cc b/chrome/updater/setup_win.cc
index 0e945f47..e7f2b198 100644
--- a/chrome/updater/setup_win.cc
+++ b/chrome/updater/setup_win.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/updater/setup.h"
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chrome/updater/updater_scope.h"
diff --git a/chrome/updater/splash_screen.h b/chrome/updater/splash_screen.h
index 3c92559..47ce61a 100644
--- a/chrome/updater/splash_screen.h
+++ b/chrome/updater/splash_screen.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 
 namespace updater {
 
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc
index 0e64907..1521cc14 100644
--- a/chrome/updater/test/integration_tests.cc
+++ b/chrome/updater/test/integration_tests.cc
@@ -6,9 +6,9 @@
 #include <memory>
 #include <string>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/checked_math.h"
diff --git a/chrome/updater/test/integration_tests_helper.cc b/chrome/updater/test/integration_tests_helper.cc
index 235d29d..b0ec976 100644
--- a/chrome/updater/test/integration_tests_helper.cc
+++ b/chrome/updater/test/integration_tests_helper.cc
@@ -8,11 +8,11 @@
 #include <utility>
 
 #include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/updater/test/integration_tests_impl.cc b/chrome/updater/test/integration_tests_impl.cc
index 1ae777e9..0c1efa8e 100644
--- a/chrome/updater/test/integration_tests_impl.cc
+++ b/chrome/updater/test/integration_tests_impl.cc
@@ -12,9 +12,6 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_enumerator.h"
@@ -22,6 +19,9 @@
 #include "base/files/file_util.h"
 #include "base/files/memory_mapped_file.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
diff --git a/chrome/updater/test/integration_tests_impl.h b/chrome/updater/test/integration_tests_impl.h
index 75b8c01e..66985f4d 100644
--- a/chrome/updater/test/integration_tests_impl.h
+++ b/chrome/updater/test/integration_tests_impl.h
@@ -8,11 +8,11 @@
 #include <set>
 #include <string>
 
-#include "base/callback_forward.h"
-#include "base/callback_helpers.h"
 #include "base/containers/flat_map.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/callback_forward.h"
+#include "base/functional/callback_helpers.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc
index 190401ff..76cb236 100644
--- a/chrome/updater/test/integration_tests_win.cc
+++ b/chrome/updater/test/integration_tests_win.cc
@@ -14,12 +14,12 @@
 #include <vector>
 
 #include "base/base_paths.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/callback_helpers.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/path_service.h"
diff --git a/chrome/updater/test/server.h b/chrome/updater/test/server.h
index c7e2f71..dc52bac 100644
--- a/chrome/updater/test/server.h
+++ b/chrome/updater/test/server.h
@@ -9,7 +9,7 @@
 #include <memory>
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "chrome/updater/test/integration_test_commands.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
diff --git a/chrome/updater/update_block_check.cc b/chrome/updater/update_block_check.cc
index 5a4e82c..e835a53 100644
--- a/chrome/updater/update_block_check.cc
+++ b/chrome/updater/update_block_check.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "build/build_config.h"
 #include "chrome/updater/update_service.h"
 
diff --git a/chrome/updater/update_block_check.h b/chrome/updater/update_block_check.h
index 8713ca7..6b056feea 100644
--- a/chrome/updater/update_block_check.h
+++ b/chrome/updater/update_block_check.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_UPDATER_UPDATE_BLOCK_CHECK_H_
 #define CHROME_UPDATER_UPDATE_BLOCK_CHECK_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/updater/update_service.h"
 
 namespace updater {
diff --git a/chrome/updater/update_block_check_win.cc b/chrome/updater/update_block_check_win.cc
index c1b0316..a9b2e76 100644
--- a/chrome/updater/update_block_check_win.cc
+++ b/chrome/updater/update_block_check_win.cc
@@ -9,7 +9,7 @@
 
 #include <utility>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/win/windows_version.h"
diff --git a/chrome/updater/update_service.h b/chrome/updater/update_service.h
index bb92b82..e5c337a 100644
--- a/chrome/updater/update_service.h
+++ b/chrome/updater/update_service.h
@@ -8,9 +8,9 @@
 #include <ostream>
 #include <string>
 
-#include "base/callback_forward.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/version.h"
 #include "chrome/updater/enum_traits.h"
diff --git a/chrome/updater/update_service_impl.cc b/chrome/updater/update_service_impl.cc
index abad404..d8c7f108 100644
--- a/chrome/updater/update_service_impl.cc
+++ b/chrome/updater/update_service_impl.cc
@@ -11,14 +11,14 @@
 #include <vector>
 
 #include "base/barrier_closure.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/containers/queue.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
diff --git a/chrome/updater/update_service_impl.h b/chrome/updater/update_service_impl.h
index 2c11508d..c7c53e2 100644
--- a/chrome/updater/update_service_impl.h
+++ b/chrome/updater/update_service_impl.h
@@ -9,9 +9,9 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
 #include "base/containers/flat_map.h"
 #include "base/containers/queue.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "base/values.h"
diff --git a/chrome/updater/update_service_impl_inactive.cc b/chrome/updater/update_service_impl_inactive.cc
index 238a45f..51ab0134 100644
--- a/chrome/updater/update_service_impl_inactive.cc
+++ b/chrome/updater/update_service_impl_inactive.cc
@@ -8,8 +8,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/version.h"
diff --git a/chrome/updater/update_service_internal.h b/chrome/updater/update_service_internal.h
index d5e3c552..8b9eb30 100644
--- a/chrome/updater/update_service_internal.h
+++ b/chrome/updater/update_service_internal.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_UPDATER_UPDATE_SERVICE_INTERNAL_H_
 #define CHROME_UPDATER_UPDATE_SERVICE_INTERNAL_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/memory/ref_counted.h"
 
 namespace updater {
diff --git a/chrome/updater/update_service_internal_impl.cc b/chrome/updater/update_service_internal_impl.cc
index 15b34c98..bb5d4ee5 100644
--- a/chrome/updater/update_service_internal_impl.cc
+++ b/chrome/updater/update_service_internal_impl.cc
@@ -7,8 +7,8 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "chrome/updater/constants.h"
 #include "chrome/updater/service_proxy_factory.h"
diff --git a/chrome/updater/update_service_internal_impl.h b/chrome/updater/update_service_internal_impl.h
index 830301c..5d6527e 100644
--- a/chrome/updater/update_service_internal_impl.h
+++ b/chrome/updater/update_service_internal_impl.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_UPDATER_UPDATE_SERVICE_INTERNAL_IMPL_H_
 #define CHROME_UPDATER_UPDATE_SERVICE_INTERNAL_IMPL_H_
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/sequence_checker.h"
 #include "chrome/updater/update_service_internal.h"
 
diff --git a/chrome/updater/update_service_internal_impl_inactive.cc b/chrome/updater/update_service_internal_impl_inactive.cc
index 609af54..4ee5101 100644
--- a/chrome/updater/update_service_internal_impl_inactive.cc
+++ b/chrome/updater/update_service_internal_impl_inactive.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/updater/update_service_internal_impl_inactive.h"
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequenced_task_runner.h"
diff --git a/chrome/updater/update_service_internal_impl_qualifying.cc b/chrome/updater/update_service_internal_impl_qualifying.cc
index f44efdf..8fdb074 100644
--- a/chrome/updater/update_service_internal_impl_qualifying.cc
+++ b/chrome/updater/update_service_internal_impl_qualifying.cc
@@ -8,9 +8,9 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/update_usage_stats_task.cc b/chrome/updater/update_usage_stats_task.cc
index b8c8597..595b793 100644
--- a/chrome/updater/update_usage_stats_task.cc
+++ b/chrome/updater/update_usage_stats_task.cc
@@ -8,8 +8,8 @@
 #include <utility>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "base/task/thread_pool.h"
diff --git a/chrome/updater/update_usage_stats_task.h b/chrome/updater/update_usage_stats_task.h
index e032d4f..a296b61 100644
--- a/chrome/updater/update_usage_stats_task.h
+++ b/chrome/updater/update_usage_stats_task.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
diff --git a/chrome/updater/update_usage_stats_task_unittest.cc b/chrome/updater/update_usage_stats_task_unittest.cc
index 427f081..a995adc7 100644
--- a/chrome/updater/update_usage_stats_task_unittest.cc
+++ b/chrome/updater/update_usage_stats_task_unittest.cc
@@ -8,9 +8,9 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback_helpers.h"
 #include "base/strings/strcat.h"
 #include "base/test/bind.h"
 #include "build/branding_buildflags.h"
diff --git a/chrome/updater/updater.cc b/chrome/updater/updater.cc
index 009eb7b..6079f561 100644
--- a/chrome/updater/updater.cc
+++ b/chrome/updater/updater.cc
@@ -7,11 +7,11 @@
 #include <iterator>
 
 #include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/process/memory.h"
diff --git a/chrome/updater/util/launchd_util.cc b/chrome/updater/util/launchd_util.cc
index 8a9ddda..25e581a 100644
--- a/chrome/updater/util/launchd_util.cc
+++ b/chrome/updater/util/launchd_util.cc
@@ -4,10 +4,10 @@
 
 #include "chrome/updater/util/launchd_util.h"
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/process/launch.h"
diff --git a/chrome/updater/util/launchd_util.h b/chrome/updater/util/launchd_util.h
index 5d8dcf0d3..c448ccb 100644
--- a/chrome/updater/util/launchd_util.h
+++ b/chrome/updater/util/launchd_util.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/updater/updater_scope.h"
 
 namespace base {
diff --git a/chrome/updater/util/win_util.cc b/chrome/updater/util/win_util.cc
index 43134ae..51899da2 100644
--- a/chrome/updater/util/win_util.cc
+++ b/chrome/updater/util/win_util.cc
@@ -18,13 +18,13 @@
 #include <vector>
 
 #include "base/base_paths_win.h"
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/command_line.h"
 #include "base/containers/flat_map.h"
 #include "base/cxx17_backports.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback_helpers.h"
 #include "base/guid.h"
 #include "base/logging.h"
 #include "base/memory/free_deleter.h"
diff --git a/chrome/updater/util/win_util.h b/chrome/updater/util/win_util.h
index 5da480d7..10dffd6a 100644
--- a/chrome/updater/util/win_util.h
+++ b/chrome/updater/util/win_util.h
@@ -13,10 +13,10 @@
 #include <utility>
 #include <vector>
 
-#include "base/callback_helpers.h"
 #include "base/containers/span.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/functional/callback_helpers.h"
 #include "base/hash/hash.h"
 #include "base/process/process_iterator.h"
 #include "base/scoped_generic.h"
diff --git a/chrome/updater/win/action_handler.cc b/chrome/updater/win/action_handler.cc
index 0b2f964..7cee36da 100644
--- a/chrome/updater/win/action_handler.cc
+++ b/chrome/updater/win/action_handler.cc
@@ -5,11 +5,11 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/process/launch.h"
diff --git a/chrome/updater/win/installer/run_all_unittests.cc b/chrome/updater/win/installer/run_all_unittests.cc
index 0ba2558..3dccd8d 100644
--- a/chrome/updater/win/installer/run_all_unittests.cc
+++ b/chrome/updater/win/installer/run_all_unittests.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 "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 
diff --git a/chrome/updater/win/installer_api.cc b/chrome/updater/win/installer_api.cc
index d5f4d66..8e49f7e 100644
--- a/chrome/updater/win/installer_api.cc
+++ b/chrome/updater/win/installer_api.cc
@@ -7,13 +7,13 @@
 #include <iterator>
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/cxx17_backports.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/process/launch.h"
 #include "base/strings/strcat.h"
diff --git a/chrome/updater/win/setup/setup.cc b/chrome/updater/win/setup/setup.cc
index 1930b70..9d6dc574 100644
--- a/chrome/updater/win/setup/setup.cc
+++ b/chrome/updater/win/setup/setup.cc
@@ -10,12 +10,12 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/strings/strcat.h"
diff --git a/chrome/updater/win/setup/setup_util.cc b/chrome/updater/win/setup/setup_util.cc
index 0826dc0..3f6d4c2 100644
--- a/chrome/updater/win/setup/setup_util.cc
+++ b/chrome/updater/win/setup/setup_util.cc
@@ -14,13 +14,13 @@
 #include <unordered_map>
 #include <vector>
 
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/check_op.h"
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/no_destructor.h"
 #include "base/path_service.h"
diff --git a/chrome/updater/win/setup/setup_util.h b/chrome/updater/win/setup/setup_util.h
index 36b4f88..b9de5ac5 100644
--- a/chrome/updater/win/setup/setup_util.h
+++ b/chrome/updater/win/setup/setup_util.h
@@ -13,9 +13,9 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/check_op.h"
+#include "base/functional/callback_helpers.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/chrome/updater/win/setup/uninstall.cc b/chrome/updater/win/setup/uninstall.cc
index 41e1c2d7..a66ed888c 100644
--- a/chrome/updater/win/setup/uninstall.cc
+++ b/chrome/updater/win/setup/uninstall.cc
@@ -11,10 +11,10 @@
 #include <string>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/process/launch.h"
diff --git a/chrome/updater/win/ui/splash_screen.h b/chrome/updater/win/ui/splash_screen.h
index ae30591..551bc7a 100644
--- a/chrome/updater/win/ui/splash_screen.h
+++ b/chrome/updater/win/ui/splash_screen.h
@@ -9,7 +9,7 @@
 
 #include <string>
 
-#include "base/callback.h"
+#include "base/functional/callback.h"
 #include "base/threading/thread_checker.h"
 #include "base/win/atl.h"
 #include "base/win/scoped_gdi_object.h"
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc
index f779813..6413d01c 100644
--- a/chrome/utility/chrome_content_utility_client.cc
+++ b/chrome/utility/chrome_content_utility_client.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/path_service.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/profiler/thread_profiler.h"
diff --git a/chrome/utility/chrome_content_utility_client.h b/chrome/utility/chrome_content_utility_client.h
index 683d8794..0c67ab6f 100644
--- a/chrome/utility/chrome_content_utility_client.h
+++ b/chrome/utility/chrome_content_utility_client.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_
 #define CHROME_UTILITY_CHROME_CONTENT_UTILITY_CLIENT_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "content/public/utility/content_utility_client.h"
 
diff --git a/chrome/utility/image_writer/disk_unmounter_mac.h b/chrome/utility/image_writer/disk_unmounter_mac.h
index 46df7091..a28c1ed 100644
--- a/chrome/utility/image_writer/disk_unmounter_mac.h
+++ b/chrome/utility/image_writer/disk_unmounter_mac.h
@@ -10,8 +10,8 @@
 
 #include <memory>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/mac/foundation_util.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
diff --git a/chrome/utility/image_writer/image_writer.h b/chrome/utility/image_writer/image_writer.h
index c60b423..7493841 100644
--- a/chrome/utility/image_writer/image_writer.h
+++ b/chrome/utility/image_writer/image_writer.h
@@ -10,10 +10,10 @@
 #include <memory>
 #include <vector>
 
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "build/build_config.h"
diff --git a/chrome/utility/image_writer/image_writer_handler.cc b/chrome/utility/image_writer/image_writer_handler.cc
index a8329b9..48559d5 100644
--- a/chrome/utility/image_writer/image_writer_handler.cc
+++ b/chrome/utility/image_writer/image_writer_handler.cc
@@ -7,8 +7,8 @@
 #include <memory>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
 #include "chrome/services/removable_storage_writer/public/mojom/removable_storage_writer.mojom.h"
 #include "chrome/utility/image_writer/error_message_strings.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/utility/image_writer/image_writer_mac.cc b/chrome/utility/image_writer/image_writer_mac.cc
index d39e2853..5e566ab 100644
--- a/chrome/utility/image_writer/image_writer_mac.cc
+++ b/chrome/utility/image_writer/image_writer_mac.cc
@@ -13,9 +13,9 @@
 
 #include <memory>
 
-#include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/scoped_file.h"
+#include "base/functional/bind.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_ioobject.h"
 #include "base/posix/eintr_wrapper.h"
diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/importer/bookmark_html_reader.cc
index 687b328..81985a8 100644
--- a/chrome/utility/importer/bookmark_html_reader.cc
+++ b/chrome/utility/importer/bookmark_html_reader.cc
@@ -7,8 +7,8 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "base/callback.h"
 #include "base/files/file_util.h"
+#include "base/functional/callback.h"
 #include "base/i18n/icu_string_conversions.h"
 #include "base/strings/escape.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/importer/bookmark_html_reader.h
index f501234c..cc2532b 100644
--- a/chrome/utility/importer/bookmark_html_reader.h
+++ b/chrome/utility/importer/bookmark_html_reader.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback_forward.h"
+#include "base/functional/callback_forward.h"
 #include "chrome/common/importer/importer_data_types.h"
 #include "components/favicon_base/favicon_usage_data.h"
 
diff --git a/chrome/utility/importer/bookmark_html_reader_unittest.cc b/chrome/utility/importer/bookmark_html_reader_unittest.cc
index 87c26c9..dc0734ec 100644
--- a/chrome/utility/importer/bookmark_html_reader_unittest.cc
+++ b/chrome/utility/importer/bookmark_html_reader_unittest.cc
@@ -8,10 +8,10 @@
 
 #include <string>
 
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
 #include "base/files/file_path.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
+#include "base/functional/callback_helpers.h"
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/utility/importer/bookmarks_file_importer.cc b/chrome/utility/importer/bookmarks_file_importer.cc
index c86088c2..62f6f1b 100644
--- a/chrome/utility/importer/bookmarks_file_importer.cc
+++ b/chrome/utility/importer/bookmarks_file_importer.cc
@@ -6,8 +6,8 @@
 
 #include <stddef.h>
 
-#include "base/bind.h"
-#include "base/callback.h"
+#include "base/functional/bind.h"
+#include "base/functional/callback.h"
 #include "chrome/common/importer/imported_bookmark_entry.h"
 #include "chrome/common/importer/importer_bridge.h"
 #include "chrome/common/importer/importer_data_types.h"
diff --git a/chrome/utility/importer/external_process_importer_bridge.cc b/chrome/utility/importer/external_process_importer_bridge.cc
index 321fd28..603962a 100644
--- a/chrome/utility/importer/external_process_importer_bridge.cc
+++ b/chrome/utility/importer/external_process_importer_bridge.cc
@@ -7,9 +7,9 @@
 #include <algorithm>
 #include <utility>
 
-#include "base/bind.h"
 #include "base/check_op.h"
 #include "base/debug/dump_without_crashing.h"
+#include "base/functional/bind.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/task_runner.h"
diff --git a/chrome/utility/importer/profile_import_impl.cc b/chrome/utility/importer/profile_import_impl.cc
index 3f76626..1e363900 100644
--- a/chrome/utility/importer/profile_import_impl.cc
+++ b/chrome/utility/importer/profile_import_impl.cc
@@ -8,12 +8,11 @@
 #include <string>
 #include <utility>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/common/importer/profile_import.mojom.h"
 #include "chrome/utility/importer/external_process_importer_bridge.h"
diff --git a/chromecast/app/android/cast_crash_uploader_android.h b/chromecast/app/android/cast_crash_uploader_android.h
index cfe49db65..2895564 100644
--- a/chromecast/app/android/cast_crash_uploader_android.h
+++ b/chromecast/app/android/cast_crash_uploader_android.h
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "chromecast/app/cast_crash_uploader.h"
 #include "components/prefs/pref_service.h"
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc
index ef9f139..391c811 100644
--- a/chromecast/browser/cast_browser_main_parts.cc
+++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -26,7 +26,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/base/switches.h"
 #include "chromecast/base/bind_to_task_runner.h"
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc
index e35d9a1..4d8f91f 100644
--- a/chromecast/browser/cast_content_browser_client.cc
+++ b/chromecast/browser/cast_content_browser_client.cc
@@ -20,6 +20,7 @@
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
diff --git a/chromecast/browser/cast_content_browser_client.h b/chromecast/browser/cast_content_browser_client.h
index 14a354f..1b1834ea 100644
--- a/chromecast/browser/cast_content_browser_client.h
+++ b/chromecast/browser/cast_content_browser_client.h
@@ -10,6 +10,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
diff --git a/chromecast/browser/cast_feature_update_observer.cc b/chromecast/browser/cast_feature_update_observer.cc
index fc7cbaa..d2440e34 100644
--- a/chromecast/browser/cast_feature_update_observer.cc
+++ b/chromecast/browser/cast_feature_update_observer.cc
@@ -44,8 +44,8 @@
                      base::Unretained(this)));
 }
 
-void CastFeatureUpdateObserver::OnFeaturesUpdated(base::Value features) {
-  pref_service_->Set(prefs::kLatestDCSFeatures, std::move(features));
+void CastFeatureUpdateObserver::OnFeaturesUpdated(base::Value::Dict features) {
+  pref_service_->SetDict(prefs::kLatestDCSFeatures, std::move(features));
   pref_service_->CommitPendingWrite();
 }
 
diff --git a/chromecast/browser/cast_feature_update_observer.h b/chromecast/browser/cast_feature_update_observer.h
index ea528be..ecaeb06 100644
--- a/chromecast/browser/cast_feature_update_observer.h
+++ b/chromecast/browser/cast_feature_update_observer.h
@@ -31,7 +31,7 @@
 
  private:
   // chromecast::mojom::FeatureUpdateObserver implementation:
-  void OnFeaturesUpdated(base::Value features) override;
+  void OnFeaturesUpdated(base::Value::Dict features) override;
 
   void BindFeatureUpdateService();
 
diff --git a/chromecast/browser/cast_session_id_map.cc b/chromecast/browser/cast_session_id_map.cc
index e6001bd..7a70dd24 100644
--- a/chromecast/browser/cast_session_id_map.cc
+++ b/chromecast/browser/cast_session_id_map.cc
@@ -8,6 +8,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chromecast/browser/cast_web_contents_browsertest.cc b/chromecast/browser/cast_web_contents_browsertest.cc
index 74e4b33..f4594a2 100644
--- a/chromecast/browser/cast_web_contents_browsertest.cc
+++ b/chromecast/browser/cast_web_contents_browsertest.cc
@@ -19,8 +19,8 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromecast/base/chromecast_switches.h"
 #include "chromecast/base/metrics/cast_metrics_helper.h"
 #include "chromecast/browser/cast_browser_context.h"
diff --git a/chromecast/browser/cast_web_contents_impl.h b/chromecast/browser/cast_web_contents_impl.h
index 435d460..4a430bf 100644
--- a/chromecast/browser/cast_web_contents_impl.h
+++ b/chromecast/browser/cast_web_contents_impl.h
@@ -17,6 +17,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "chromecast/bindings/public/mojom/api_bindings.mojom.h"
 #include "chromecast/browser/cast_media_blocker.h"
diff --git a/chromecast/browser/cast_web_view_default.cc b/chromecast/browser/cast_web_view_default.cc
index 21d759c..37596fa 100644
--- a/chromecast/browser/cast_web_view_default.cc
+++ b/chromecast/browser/cast_web_view_default.cc
@@ -11,7 +11,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromecast/base/cast_features.h"
 #include "chromecast/base/chromecast_switches.h"
 #include "chromecast/base/metrics/cast_metrics_helper.h"
diff --git a/chromecast/browser/metrics/external_metrics.h b/chromecast/browser/metrics/external_metrics.h
index ee8bb5d..11fe686 100644
--- a/chromecast/browser/metrics/external_metrics.h
+++ b/chromecast/browser/metrics/external_metrics.h
@@ -10,6 +10,7 @@
 #include "base/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner_helpers.h"
 
 namespace metrics {
diff --git a/chromecast/browser/service_manager_connection.cc b/chromecast/browser/service_manager_connection.cc
index 42d30f2..e9163705 100644
--- a/chromecast/browser/service_manager_connection.cc
+++ b/chromecast/browser/service_manager_connection.cc
@@ -12,9 +12,9 @@
 #include "base/bind.h"
 #include "base/no_destructor.h"
 #include "base/task/current_thread.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/system/message_pipe.h"
diff --git a/chromecast/browser/service_manager_context.cc b/chromecast/browser/service_manager_context.cc
index 645c6e96..82dc166 100644
--- a/chromecast/browser/service_manager_context.cc
+++ b/chromecast/browser/service_manager_context.cc
@@ -20,6 +20,7 @@
 #include "base/process/process_handle.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/deferred_sequenced_task_runner.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chromecast/browser/cast_content_browser_client.h"
diff --git a/chromecast/cast_core/README.md b/chromecast/cast_core/README.md
new file mode 100644
index 0000000..ba52e24
--- /dev/null
+++ b/chromecast/cast_core/README.md
@@ -0,0 +1,42 @@
+# Introduction
+
+This directory defines the Cast Web Runtime, an implementation of the
+`//components/cast_streaming` Chromecast receiver, for use with the internal
+Cast Core library.
+
+# Building
+
+Building of this directory can be done by building the
+`chromecast/cast_core:core_runtime_simple` target with the following build
+flags:
+
+```
+is_debug = true
+dcheck_always_on = true
+is_component_build = false
+symbol_level = 2
+
+is_castos = true
+enable_cast_receiver = true
+cast_streaming_enable_remoting = true
+enable_cast_audio_renderer = false
+enable_cast_renderer = false
+
+ffmpeg_branding = "Chrome"
+proprietary_codecs = true
+```
+
+# Running
+
+Running the Cast Web Runtime on Linux can be done with the following steps:
+
+1. Build the Cast Web Runtime using the above flags
+2. Build Cast Core following instructions [here](go/cast-core-on-glinux#build).
+3. [Run](go/cast-core-on-glinux#run) the Cast Core and Platform Service
+applications built in step 2. Note that if it is your first time running Cast
+Core you will need to
+[generate certificates](go/cast-core-on-glinux#certificates).
+4. Run the `core_runtime_simple` application built in step 1. The runtime should
+immediately be registered with Cast Core.
+5. Cast from a Chrome instance running on the local machine. It may take a few
+minutes for the Cast Core instance to show up as a valid cast target.
diff --git a/chromecast/cast_core/runtime/browser/grpc_resource_data_source.cc b/chromecast/cast_core/runtime/browser/grpc_resource_data_source.cc
index 8f355e6e..7210e464 100644
--- a/chromecast/cast_core/runtime/browser/grpc_resource_data_source.cc
+++ b/chromecast/cast_core/runtime/browser/grpc_resource_data_source.cc
@@ -12,7 +12,6 @@
 #include "base/task/bind_post_task.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromecast/base/cast_constants.h"
 #include "net/base/mime_util.h"
 
diff --git a/chromecast/cast_core/runtime/browser/message_port_handler.cc b/chromecast/cast_core/runtime/browser/message_port_handler.cc
index 8af7e1a..43afe449 100644
--- a/chromecast/cast_core/runtime/browser/message_port_handler.cc
+++ b/chromecast/cast_core/runtime/browser/message_port_handler.cc
@@ -8,6 +8,7 @@
 
 #include "base/logging.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/cast/message_port/platform_message_port.h"
 #include "components/cast_receiver/browser/public/message_port_service.h"
diff --git a/chromecast/cast_core/runtime/browser/runtime_application_service_impl.cc b/chromecast/cast_core/runtime/browser/runtime_application_service_impl.cc
index e21ed22..0b5c5ca 100644
--- a/chromecast/cast_core/runtime/browser/runtime_application_service_impl.cc
+++ b/chromecast/cast_core/runtime/browser/runtime_application_service_impl.cc
@@ -7,6 +7,7 @@
 #include <string>
 
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/browser/cast_web_service.h"
 #include "chromecast/browser/cast_web_view.h"
 #include "chromecast/cast_core/grpc/grpc_status_or.h"
diff --git a/chromecast/cast_core/runtime/browser/runtime_application_service_impl.h b/chromecast/cast_core/runtime/browser/runtime_application_service_impl.h
index 0441a83..81972c24 100644
--- a/chromecast/cast_core/runtime/browser/runtime_application_service_impl.h
+++ b/chromecast/cast_core/runtime/browser/runtime_application_service_impl.h
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/browser/cast_content_window.h"
 #include "chromecast/browser/cast_web_view.h"
 #include "chromecast/cast_core/grpc/grpc_server.h"
diff --git a/chromecast/cast_core/runtime/browser/runtime_service_impl.h b/chromecast/cast_core/runtime/browser/runtime_service_impl.h
index cedbad3e..ee5a9de 100644
--- a/chromecast/cast_core/runtime/browser/runtime_service_impl.h
+++ b/chromecast/cast_core/runtime/browser/runtime_service_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chromecast/cast_core/grpc/grpc_server.h"
diff --git a/chromecast/common/cast_content_client.cc b/chromecast/common/cast_content_client.cc
index 906cc5b..cf203751 100644
--- a/chromecast/common/cast_content_client.cc
+++ b/chromecast/common/cast_content_client.cc
@@ -13,6 +13,7 @@
 #include "base/native_library.h"
 #include "base/path_service.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "chromecast/base/cast_constants.h"
 #include "chromecast/base/cast_paths.h"
diff --git a/chromecast/common/cast_content_client.h b/chromecast/common/cast_content_client.h
index 41d51fb3..8404b24 100644
--- a/chromecast/common/cast_content_client.h
+++ b/chromecast/common/cast_content_client.h
@@ -7,6 +7,7 @@
 
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "content/public/common/content_client.h"
 #include "url/gurl.h"
diff --git a/chromecast/common/mojom/feature_update.mojom b/chromecast/common/mojom/feature_update.mojom
index d154aac..ee344dac1 100644
--- a/chromecast/common/mojom/feature_update.mojom
+++ b/chromecast/common/mojom/feature_update.mojom
@@ -11,7 +11,7 @@
   // Triggered when there is an update to base::Feature configs because a
   // DCS download is completed. `features` is a dictionary which is ready to be
   // persisted to disk (via PrefService).
-  OnFeaturesUpdated(mojo_base.mojom.DeprecatedDictionaryValue features);
+  OnFeaturesUpdated(mojo_base.mojom.DictionaryValue features);
 };
 
 // This interface is implemented in the Cast Service process and allows the
diff --git a/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc b/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc
index da536e32..aae4814 100644
--- a/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc
+++ b/chromecast/device/bluetooth/le/gatt_client_manager_impl.cc
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chromecast/base/bind_to_task_runner.h"
 #include "chromecast/device/bluetooth/bluetooth_util.h"
diff --git a/chromecast/device/bluetooth/le/le_scan_manager_impl.cc b/chromecast/device/bluetooth/le/le_scan_manager_impl.cc
index bdcc9625..61dd02a 100644
--- a/chromecast/device/bluetooth/le/le_scan_manager_impl.cc
+++ b/chromecast/device/bluetooth/le/le_scan_manager_impl.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/containers/cxx20_erase.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/base/bind_to_task_runner.h"
 #include "chromecast/device/bluetooth/bluetooth_util.h"
 #include "chromecast/public/cast_media_shlib.h"
diff --git a/chromecast/device/bluetooth/le/le_scan_manager_impl_test.cc b/chromecast/device/bluetooth/le/le_scan_manager_impl_test.cc
index d63f3739..46ceafc5 100644
--- a/chromecast/device/bluetooth/le/le_scan_manager_impl_test.cc
+++ b/chromecast/device/bluetooth/le/le_scan_manager_impl_test.cc
@@ -10,7 +10,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromecast/device/bluetooth/bluetooth_util.h"
 #include "chromecast/device/bluetooth/le/remote_characteristic.h"
 #include "chromecast/device/bluetooth/le/remote_descriptor.h"
diff --git a/chromecast/device/bluetooth/le/remote_characteristic_impl.cc b/chromecast/device/bluetooth/le/remote_characteristic_impl.cc
index 54a275b5..693a74e 100644
--- a/chromecast/device/bluetooth/le/remote_characteristic_impl.cc
+++ b/chromecast/device/bluetooth/le/remote_characteristic_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/base/bind_to_task_runner.h"
 #include "chromecast/device/bluetooth/le/gatt_client_manager_impl.h"
 #include "chromecast/device/bluetooth/le/remote_descriptor_impl.h"
diff --git a/chromecast/device/bluetooth/le/remote_descriptor_impl.cc b/chromecast/device/bluetooth/le/remote_descriptor_impl.cc
index 44d042c..08052e0 100644
--- a/chromecast/device/bluetooth/le/remote_descriptor_impl.cc
+++ b/chromecast/device/bluetooth/le/remote_descriptor_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/base/bind_to_task_runner.h"
 #include "chromecast/device/bluetooth/le/gatt_client_manager_impl.h"
 #include "chromecast/device/bluetooth/le/remote_device_impl.h"
diff --git a/chromecast/device/bluetooth/le/remote_device_impl.cc b/chromecast/device/bluetooth/le/remote_device_impl.cc
index 4d077f8..1254008 100644
--- a/chromecast/device/bluetooth/le/remote_device_impl.cc
+++ b/chromecast/device/bluetooth/le/remote_device_impl.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chromecast/base/bind_to_task_runner.h"
 #include "chromecast/device/bluetooth/bluetooth_util.h"
diff --git a/chromecast/device/bluetooth/le/remote_service_impl.cc b/chromecast/device/bluetooth/le/remote_service_impl.cc
index ea738f7..aacda4c4 100644
--- a/chromecast/device/bluetooth/le/remote_service_impl.cc
+++ b/chromecast/device/bluetooth/le/remote_service_impl.cc
@@ -4,6 +4,7 @@
 
 #include "chromecast/device/bluetooth/le/remote_service_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/base/bind_to_task_runner.h"
 #include "chromecast/device/bluetooth/le/remote_characteristic_impl.h"
 
diff --git a/chromecast/external_mojo/external_service_support/fake_external_connector.cc b/chromecast/external_mojo/external_service_support/fake_external_connector.cc
index 15bfd8a..74f679d 100644
--- a/chromecast/external_mojo/external_service_support/fake_external_connector.cc
+++ b/chromecast/external_mojo/external_service_support/fake_external_connector.cc
@@ -6,7 +6,6 @@
 
 #include <utility>
 
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromecast/external_mojo/external_service_support/external_service.h"
 
 namespace chromecast {
diff --git a/chromecast/gpu/cast_content_gpu_client.h b/chromecast/gpu/cast_content_gpu_client.h
index 99afd079..06371bb 100644
--- a/chromecast/gpu/cast_content_gpu_client.h
+++ b/chromecast/gpu/cast_content_gpu_client.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/gpu/content_gpu_client.h"
 
 namespace chromecast {
@@ -32,4 +33,4 @@
 }  // namespace shell
 }  // namespace chromecast
 
-#endif  // CHROMECAST_GPU_CAST_CONTENT_GPU_CLIENT_H_
\ No newline at end of file
+#endif  // CHROMECAST_GPU_CAST_CONTENT_GPU_CLIENT_H_
diff --git a/chromecast/media/audio/capture_service/capture_service_receiver.cc b/chromecast/media/audio/capture_service/capture_service_receiver.cc
index 7e136e7..ea88370 100644
--- a/chromecast/media/audio/capture_service/capture_service_receiver.cc
+++ b/chromecast/media/audio/capture_service/capture_service_receiver.cc
@@ -14,7 +14,7 @@
 #include "base/logging.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/synchronization/waitable_event.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/media/audio/capture_service/message_parsing_utils.h"
 #include "chromecast/media/audio/net/audio_socket_service.h"
 #include "chromecast/net/small_message_socket.h"
diff --git a/chromecast/media/audio/cast_audio_manager.cc b/chromecast/media/audio/cast_audio_manager.cc
index 938933fb..3aab0be 100644
--- a/chromecast/media/audio/cast_audio_manager.cc
+++ b/chromecast/media/audio/cast_audio_manager.cc
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chromecast/media/api/cma_backend_factory.h"
 #include "chromecast/media/audio/audio_buildflags.h"
diff --git a/chromecast/media/audio/cast_audio_manager_alsa.cc b/chromecast/media/audio/cast_audio_manager_alsa.cc
index 9fc7592..a383d53 100644
--- a/chromecast/media/audio/cast_audio_manager_alsa.cc
+++ b/chromecast/media/audio/cast_audio_manager_alsa.cc
@@ -9,6 +9,7 @@
 #include "base/logging.h"
 #include "base/memory/free_deleter.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/media/api/cma_backend_factory.h"
 #include "chromecast/media/audio/audio_buildflags.h"
 #include "chromecast/media/audio/cast_audio_input_stream.h"
diff --git a/chromecast/media/audio/cast_audio_manager_android.cc b/chromecast/media/audio/cast_audio_manager_android.cc
index 3e5c998..b678cc1e 100644
--- a/chromecast/media/audio/cast_audio_manager_android.cc
+++ b/chromecast/media/audio/cast_audio_manager_android.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/media/audio/audio_buildflags.h"
 #include "chromecast/media/audio/cast_audio_input_stream.h"
 #include "chromecast/media/audio/cast_audio_output_stream.h"
diff --git a/chromecast/media/audio/cast_audio_mixer_unittest.cc b/chromecast/media/audio/cast_audio_mixer_unittest.cc
index 51668d9a7..9344c85 100644
--- a/chromecast/media/audio/cast_audio_mixer_unittest.cc
+++ b/chromecast/media/audio/cast_audio_mixer_unittest.cc
@@ -12,6 +12,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "chromecast/common/mojom/service_connector.mojom.h"
diff --git a/chromecast/media/audio/cast_audio_output_device.cc b/chromecast/media/audio/cast_audio_output_device.cc
index 8013b5a..327e320 100644
--- a/chromecast/media/audio/cast_audio_output_device.cc
+++ b/chromecast/media/audio/cast_audio_output_device.cc
@@ -14,6 +14,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "chromecast/media/audio/audio_io_thread.h"
 #include "chromecast/media/audio/audio_output_service/audio_output_service.pb.h"
diff --git a/chromecast/media/audio/cast_audio_output_stream.cc b/chromecast/media/audio/cast_audio_output_stream.cc
index 9cb3aaba..e2d28bd 100644
--- a/chromecast/media/audio/cast_audio_output_stream.cc
+++ b/chromecast/media/audio/cast_audio_output_stream.cc
@@ -17,7 +17,7 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/bind_post_task.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chromecast/base/bind_to_task_runner.h"
 #include "chromecast/base/metrics/cast_metrics_helper.h"
diff --git a/chromecast/media/audio/mixer_service/mixer_socket.h b/chromecast/media/audio/mixer_service/mixer_socket.h
index 1c7620e..9c9fea2 100644
--- a/chromecast/media/audio/mixer_service/mixer_socket.h
+++ b/chromecast/media/audio/mixer_service/mixer_socket.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/media/audio/net/audio_socket.h"
 
 namespace net {
diff --git a/chromecast/media/cdm/cast_cdm.cc b/chromecast/media/cdm/cast_cdm.cc
index 57efd94..14406e3 100644
--- a/chromecast/media/cdm/cast_cdm.cc
+++ b/chromecast/media/cdm/cast_cdm.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromecast/media/base/decrypt_context_impl.h"
 #include "chromecast/media/base/media_caps.h"
 #include "chromecast/media/common/media_resource_tracker.h"
diff --git a/chromecast/media/cma/backend/android/media_pipeline_backend_android.cc b/chromecast/media/cma/backend/android/media_pipeline_backend_android.cc
index 830a3f0a..0e4ffca3 100644
--- a/chromecast/media/cma/backend/android/media_pipeline_backend_android.cc
+++ b/chromecast/media/cma/backend/android/media_pipeline_backend_android.cc
@@ -7,6 +7,7 @@
 #include <limits>
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/base/task_runner_impl.h"
 #include "chromecast/media/cma/backend/android/audio_decoder_android.h"
 #include "chromecast/media/cma/backend/video_decoder_null.h"
diff --git a/chromecast/media/cma/backend/cma_backend_factory_impl.cc b/chromecast/media/cma/backend/cma_backend_factory_impl.cc
index f9590b8..ff5f678 100644
--- a/chromecast/media/cma/backend/cma_backend_factory_impl.cc
+++ b/chromecast/media/cma/backend/cma_backend_factory_impl.cc
@@ -4,6 +4,7 @@
 
 #include "chromecast/media/cma/backend/cma_backend_factory_impl.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/chromecast_buildflags.h"
 #include "chromecast/media/api/cma_backend.h"
 #include "chromecast/media/common/media_pipeline_backend_manager.h"
diff --git a/chromecast/media/cma/backend/cma_backend_factory_impl.h b/chromecast/media/cma/backend/cma_backend_factory_impl.h
index 35279cd..614276fe 100644
--- a/chromecast/media/cma/backend/cma_backend_factory_impl.h
+++ b/chromecast/media/cma/backend/cma_backend_factory_impl.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/media/api/cma_backend_factory.h"
 
 namespace chromecast {
diff --git a/chromecast/media/cma/backend/mixer/stream_mixer.cc b/chromecast/media/cma/backend/mixer/stream_mixer.cc
index 899f5d1..75900e78 100644
--- a/chromecast/media/cma/backend/mixer/stream_mixer.cc
+++ b/chromecast/media/cma/backend/mixer/stream_mixer.cc
@@ -20,9 +20,9 @@
 #include "base/logging.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/synchronization/condition_variable.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chromecast/base/chromecast_switches.h"
 #include "chromecast/base/thread_health_checker.h"
diff --git a/chromecast/media/cma/backend/volume_control.cc b/chromecast/media/cma/backend/volume_control.cc
index 6f2e249..2414945 100644
--- a/chromecast/media/cma/backend/volume_control.cc
+++ b/chromecast/media/cma/backend/volume_control.cc
@@ -87,8 +87,8 @@
         LoadSavedVolumes(storage_path_);
     for (auto type : {AudioContentType::kMedia, AudioContentType::kAlarm,
                       AudioContentType::kCommunication}) {
-      stored_values_.SetDoublePath(ContentTypeToDbFSPath(type),
-                                   saved_volumes[type]);
+      stored_values_.SetByDottedPath(ContentTypeToDbFSPath(type),
+                                     saved_volumes[type]);
     }
 
     base::Thread::Options options;
@@ -204,7 +204,7 @@
     for (auto type : {AudioContentType::kMedia, AudioContentType::kAlarm,
                       AudioContentType::kCommunication}) {
       absl::optional<double> dbfs =
-          stored_values_.FindDoubleKey(ContentTypeToDbFSPath(type));
+          stored_values_.FindDouble(ContentTypeToDbFSPath(type));
       CHECK(dbfs);
       volumes_[type] = VolumeControl::DbFSToVolume(*dbfs);
       volume_multipliers_[type] = 1.0f;
@@ -276,7 +276,7 @@
       }
     }
 
-    stored_values_.SetDoublePath(ContentTypeToDbFSPath(type), dbfs);
+    stored_values_.SetByDottedPath(ContentTypeToDbFSPath(type), dbfs);
     std::string output_js;
     base::JSONWriter::Write(stored_values_, &output_js);
     saved_volumes_writer_->WriteNow(std::make_unique<std::string>(output_js));
@@ -360,7 +360,7 @@
   }
 
   base::FilePath storage_path_;
-  base::DictionaryValue stored_values_;
+  base::Value::Dict stored_values_;
 
   base::Lock volume_lock_;
   base::flat_map<AudioContentType, float> volumes_;
diff --git a/chromecast/media/cma/base/demuxer_stream_for_test.cc b/chromecast/media/cma/base/demuxer_stream_for_test.cc
index 4754938..7916bd70 100644
--- a/chromecast/media/cma/base/demuxer_stream_for_test.cc
+++ b/chromecast/media/cma/base/demuxer_stream_for_test.cc
@@ -4,6 +4,7 @@
 
 #include "chromecast/media/cma/base/demuxer_stream_for_test.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "media/base/media_util.h"
 
diff --git a/chromecast/media/cma/base/demuxer_stream_for_test.h b/chromecast/media/cma/base/demuxer_stream_for_test.h
index fcc067f..1201c23b 100644
--- a/chromecast/media/cma/base/demuxer_stream_for_test.h
+++ b/chromecast/media/cma/base/demuxer_stream_for_test.h
@@ -8,7 +8,6 @@
 #include <list>
 
 #include "base/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromecast/media/cma/base/demuxer_stream_adapter.h"
 #include "media/base/decoder_buffer.h"
 #include "media/base/demuxer_stream.h"
diff --git a/chromecast/media/cma/test/mock_cma_backend_factory.h b/chromecast/media/cma/test/mock_cma_backend_factory.h
index 4df9bcae..a32fe38 100644
--- a/chromecast/media/cma/test/mock_cma_backend_factory.h
+++ b/chromecast/media/cma/test/mock_cma_backend_factory.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/media/api/cma_backend.h"
 #include "chromecast/media/api/cma_backend_factory.h"
 #include "chromecast/public/media/media_pipeline_device_params.h"
diff --git a/chromecast/media/common/media_pipeline_backend_manager.cc b/chromecast/media/common/media_pipeline_backend_manager.cc
index 161d440..9deb847 100644
--- a/chromecast/media/common/media_pipeline_backend_manager.cc
+++ b/chromecast/media/common/media_pipeline_backend_manager.cc
@@ -11,6 +11,8 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chromecast/base/metrics/cast_metrics_helper.h"
 #include "chromecast/chromecast_buildflags.h"
diff --git a/chromecast/media/common/media_pipeline_backend_manager.h b/chromecast/media/common/media_pipeline_backend_manager.h
index 216f5363..59a2a9b 100644
--- a/chromecast/media/common/media_pipeline_backend_manager.h
+++ b/chromecast/media/common/media_pipeline_backend_manager.h
@@ -13,6 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list_threadsafe.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "chromecast/media/api/cma_backend_factory.h"
diff --git a/chromecast/media/common/test_media_resource_tracker.cc b/chromecast/media/common/test_media_resource_tracker.cc
index 7d0a0cbd..42d705e9 100644
--- a/chromecast/media/common/test_media_resource_tracker.cc
+++ b/chromecast/media/common/test_media_resource_tracker.cc
@@ -4,6 +4,7 @@
 
 #include "chromecast/media/common/test_media_resource_tracker.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromecast {
diff --git a/chromecast/media/gpu/cast_gpu_factory_dummy.cc b/chromecast/media/gpu/cast_gpu_factory_dummy.cc
index 43f35bf..dac3387 100644
--- a/chromecast/media/gpu/cast_gpu_factory_dummy.cc
+++ b/chromecast/media/gpu/cast_gpu_factory_dummy.cc
@@ -4,6 +4,7 @@
 
 #include "chromecast/media/gpu/cast_gpu_factory_dummy.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/video_decoder.h"
 #include "media/video/video_encode_accelerator.h"
 #include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
diff --git a/chromecast/media/service/cast_mojo_media_client.cc b/chromecast/media/service/cast_mojo_media_client.cc
index fffe82a..16e0021 100644
--- a/chromecast/media/service/cast_mojo_media_client.cc
+++ b/chromecast/media/service/cast_mojo_media_client.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/media/api/cma_backend_factory.h"
 #include "chromecast/media/service/cast_renderer.h"
 #include "chromecast/public/media/media_pipeline_backend.h"
diff --git a/chromecast/media/service/cast_mojo_media_client.h b/chromecast/media/service/cast_mojo_media_client.h
index 1ccba532..8fad2545 100644
--- a/chromecast/media/service/cast_mojo_media_client.h
+++ b/chromecast/media/service/cast_mojo_media_client.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "chromecast/external_mojo/external_service_support/external_connector.h"
 #include "media/mojo/buildflags.h"
diff --git a/chromecast/metrics/metrics_recorder.cc b/chromecast/metrics/metrics_recorder.cc
index 21bde7a..ee917ff 100644
--- a/chromecast/metrics/metrics_recorder.cc
+++ b/chromecast/metrics/metrics_recorder.cc
@@ -22,7 +22,6 @@
 #include "base/observer_list.h"
 #include "base/synchronization/lock.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromecast/metrics/cast_event_builder.h"
 #include "net/base/ip_address.h"
diff --git a/chromecast/metrics/metrics_recorder_base.cc b/chromecast/metrics/metrics_recorder_base.cc
index 90e2a11f..cfe757a1 100644
--- a/chromecast/metrics/metrics_recorder_base.cc
+++ b/chromecast/metrics/metrics_recorder_base.cc
@@ -23,7 +23,6 @@
 #include "base/observer_list.h"
 #include "base/synchronization/lock.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromecast/metrics/cast_event_builder.h"
 #include "net/base/ip_address.h"
diff --git a/chromecast/mojo/interface_bundle.h b/chromecast/mojo/interface_bundle.h
index 2f24250..e9764055 100644
--- a/chromecast/mojo/interface_bundle.h
+++ b/chromecast/mojo/interface_bundle.h
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/logging.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromecast/mojo/binder_factory.h"
 #include "chromecast/mojo/mojom/remote_interfaces.mojom.h"
 #include "mojo/public/cpp/bindings/generic_pending_receiver.h"
diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc
index 0f528b69..2d6cbf5e 100644
--- a/chromecast/renderer/cast_content_renderer_client.cc
+++ b/chromecast/renderer/cast_content_renderer_client.cc
@@ -9,6 +9,7 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "chromecast/base/bitstream_audio_codecs.h"
 #include "chromecast/base/cast_features.h"
diff --git a/chromecast/renderer/cast_websocket_handshake_throttle_provider.cc b/chromecast/renderer/cast_websocket_handshake_throttle_provider.cc
index 78db29ebd..9d01186 100644
--- a/chromecast/renderer/cast_websocket_handshake_throttle_provider.cc
+++ b/chromecast/renderer/cast_websocket_handshake_throttle_provider.cc
@@ -6,6 +6,7 @@
 
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/renderer/activity_filtering_websocket_handshake_throttle.h"
 #include "services/network/public/cpp/features.h"
 
diff --git a/chromecast/renderer/cast_websocket_handshake_throttle_provider.h b/chromecast/renderer/cast_websocket_handshake_throttle_provider.h
index 668bbfd6..8e544f7 100644
--- a/chromecast/renderer/cast_websocket_handshake_throttle_provider.h
+++ b/chromecast/renderer/cast_websocket_handshake_throttle_provider.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "chromecast/renderer/cast_activity_url_filter_manager.h"
 #include "third_party/blink/public/platform/websocket_handshake_throttle_provider.h"
diff --git a/chromeos/ash/components/dbus/arc/arc_data_snapshotd_client.cc b/chromeos/ash/components/dbus/arc/arc_data_snapshotd_client.cc
index 5393a80..69cf3e9 100644
--- a/chromeos/ash/components/dbus/arc/arc_data_snapshotd_client.cc
+++ b/chromeos/ash/components/dbus/arc/arc_data_snapshotd_client.cc
@@ -10,7 +10,6 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/arc/fake_arc_data_snapshotd_client.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
diff --git a/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc b/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc
index 2d1eaa2..3127b8fb 100644
--- a/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc
+++ b/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc
@@ -8,7 +8,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
diff --git a/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc b/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc
index 65197792..6a1b1ae 100644
--- a/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc
+++ b/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace ash {
 
diff --git a/chromeos/ash/components/dbus/chunneld/chunneld_client.cc b/chromeos/ash/components/dbus/chunneld/chunneld_client.cc
index a3d54f5..13965a43 100644
--- a/chromeos/ash/components/dbus/chunneld/chunneld_client.cc
+++ b/chromeos/ash/components/dbus/chunneld/chunneld_client.cc
@@ -11,7 +11,6 @@
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/chunneld/fake_chunneld_client.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
diff --git a/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client_provider.h b/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client_provider.h
index ddac816..12fdfc3 100644
--- a/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client_provider.h
+++ b/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client_provider.h
@@ -9,6 +9,7 @@
 
 #include "base/component_export.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace dbus {
 class Bus;
diff --git a/chromeos/ash/components/dbus/dlcservice/dlcservice_client.cc b/chromeos/ash/components/dbus/dlcservice/dlcservice_client.cc
index c849d94..03749e14 100644
--- a/chromeos/ash/components/dbus/dlcservice/dlcservice_client.cc
+++ b/chromeos/ash/components/dbus/dlcservice/dlcservice_client.cc
@@ -23,7 +23,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/dlcservice/fake_dlcservice_client.h"
 #include "chromeos/dbus/constants/dbus_switches.h"
 #include "dbus/bus.h"
diff --git a/chromeos/ash/components/dbus/hiberman/hiberman_client.cc b/chromeos/ash/components/dbus/hiberman/hiberman_client.cc
index 8fd5e2f..a0ae9ca 100644
--- a/chromeos/ash/components/dbus/hiberman/hiberman_client.cc
+++ b/chromeos/ash/components/dbus/hiberman/hiberman_client.cc
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/ash/components/dbus/hiberman/fake_hiberman_client.h"
 #include "dbus/bus.h"
diff --git a/chromeos/ash/components/dbus/patchpanel/fake_patchpanel_client.cc b/chromeos/ash/components/dbus/patchpanel/fake_patchpanel_client.cc
index fa4f941..d231f19 100644
--- a/chromeos/ash/components/dbus/patchpanel/fake_patchpanel_client.cc
+++ b/chromeos/ash/components/dbus/patchpanel/fake_patchpanel_client.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/check_op.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace ash {
 
diff --git a/chromeos/ash/components/dbus/patchpanel/patchpanel_client.cc b/chromeos/ash/components/dbus/patchpanel/patchpanel_client.cc
index f9275dd..1e0f69c 100644
--- a/chromeos/ash/components/dbus/patchpanel/patchpanel_client.cc
+++ b/chromeos/ash/components/dbus/patchpanel/patchpanel_client.cc
@@ -10,7 +10,6 @@
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/strcat.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/patchpanel/fake_patchpanel_client.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
diff --git a/chromeos/ash/components/dbus/private_computing/fake_private_computing_client.cc b/chromeos/ash/components/dbus/private_computing/fake_private_computing_client.cc
index 0bc9ce1b..78a66d4 100644
--- a/chromeos/ash/components/dbus/private_computing/fake_private_computing_client.cc
+++ b/chromeos/ash/components/dbus/private_computing/fake_private_computing_client.cc
@@ -7,7 +7,6 @@
 #include <string>
 
 #include "base/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/private_computing/private_computing_service.pb.h"
 
 namespace ash {
diff --git a/chromeos/ash/components/dbus/session_manager/session_manager_client.cc b/chromeos/ash/components/dbus/session_manager/session_manager_client.cc
index 2eb7bbb..5092caaa 100644
--- a/chromeos/ash/components/dbus/session_manager/session_manager_client.cc
+++ b/chromeos/ash/components/dbus/session_manager/session_manager_client.cc
@@ -26,7 +26,6 @@
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/unguessable_token.h"
 #include "chromeos/ash/components/dbus/arc/arc.pb.h"
 #include "chromeos/ash/components/dbus/cryptohome/rpc.pb.h"
diff --git a/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client_unittest.cc b/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client_unittest.cc
index 8a10665f..4e6c63b 100644
--- a/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client_unittest.cc
+++ b/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client_unittest.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h"
 #include "dbus/mock_bus.h"
diff --git a/chromeos/ash/components/dbus/userdataauth/install_attributes_client_unittest.cc b/chromeos/ash/components/dbus/userdataauth/install_attributes_client_unittest.cc
index b310322..551b5a5 100644
--- a/chromeos/ash/components/dbus/userdataauth/install_attributes_client_unittest.cc
+++ b/chromeos/ash/components/dbus/userdataauth/install_attributes_client_unittest.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h"
 #include "dbus/mock_bus.h"
diff --git a/chromeos/ash/components/device_activity/device_active_use_case.cc b/chromeos/ash/components/device_activity/device_active_use_case.cc
index 1b89c1b0..7f41c692 100644
--- a/chromeos/ash/components/device_activity/device_active_use_case.cc
+++ b/chromeos/ash/components/device_activity/device_active_use_case.cc
@@ -39,6 +39,7 @@
       psm_delegate_(std::move(psm_delegate)),
       statistics_provider_(system::StatisticsProvider::GetInstance()) {
   DCHECK(psm_delegate_);
+  DCHECK(local_state_);
 }
 
 DeviceActiveUseCase::~DeviceActiveUseCase() = default;
diff --git a/chromeos/ash/components/device_activity/device_activity_client.cc b/chromeos/ash/components/device_activity/device_activity_client.cc
index 7fb5af4..e1c21a6 100644
--- a/chromeos/ash/components/device_activity/device_activity_client.cc
+++ b/chromeos/ash/components/device_activity/device_activity_client.cc
@@ -481,10 +481,17 @@
               GetUseCasePtr(psm_rlwe::RlweUseCase::CROS_FRESNEL_28DAY_ACTIVE);
           break;
         default:
-          VLOG(1) << "PSM use case is not supported yet.";
+          LOG(ERROR) << "PSM use case is not supported yet.";
           continue;
       }
 
+      // Crashes may occur due to device_active_use_case_ptr not being defined
+      // at this point.
+      if (device_active_use_case_ptr == nullptr) {
+        LOG(ERROR) << "Device active use case is not defined.";
+        return;
+      }
+
       if (!device_active_use_case_ptr->IsLastKnownPingTimestampSet()) {
         RecordPreservedFileState(
             DeviceActivityClient::PreservedFileState::kReadOkLocalStateEmpty);
diff --git a/chromeos/ash/components/device_activity/device_activity_controller.cc b/chromeos/ash/components/device_activity/device_activity_controller.cc
index 31dbf53f..95f575a57 100644
--- a/chromeos/ash/components/device_activity/device_activity_controller.cc
+++ b/chromeos/ash/components/device_activity/device_activity_controller.cc
@@ -7,6 +7,7 @@
 #include "base/check_op.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/rand_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h"
@@ -161,6 +162,7 @@
       DeviceActivityClient::DeviceActivityMethod::
           kDeviceActivityControllerConstructor);
 
+  DCHECK(local_state);
   DCHECK(!g_ash_device_activity_controller);
   g_ash_device_activity_controller = this;
 
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
index b0e0af2..0a1c206a 100644
--- a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
+++ b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
@@ -15,6 +15,7 @@
 #include "base/no_destructor.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "chromeos/ash/components/drivefs/mojom/drivefs.mojom.h"
diff --git a/chromeos/ash/components/login/auth/login_performer.cc b/chromeos/ash/components/login/auth/login_performer.cc
index 48088fb6..e5581b4 100644
--- a/chromeos/ash/components/login/auth/login_performer.cc
+++ b/chromeos/ash/components/login/auth/login_performer.cc
@@ -10,7 +10,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h"
 #include "chromeos/ash/components/login/auth/auth_metrics_recorder.h"
 #include "chromeos/ash/components/login/auth/public/auth_failure.h"
diff --git a/chromeos/ash/components/login/auth/recovery/cryptohome_recovery_service_client.cc b/chromeos/ash/components/login/auth/recovery/cryptohome_recovery_service_client.cc
index 56c90ce2..b8e98b1 100644
--- a/chromeos/ash/components/login/auth/recovery/cryptohome_recovery_service_client.cc
+++ b/chromeos/ash/components/login/auth/recovery/cryptohome_recovery_service_client.cc
@@ -13,6 +13,7 @@
 #include "base/callback.h"
 #include "base/notreached.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/components/login/auth/recovery/service_constants.h"
 #include "net/base/load_flags.h"
 #include "net/http/http_status_code.h"
diff --git a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc
index 222b32b..1b121671 100644
--- a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc
+++ b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/test/test_timeouts.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace ash {
diff --git a/chromeos/ash/components/memory/userspace_swap/userfaultfd.cc b/chromeos/ash/components/memory/userspace_swap/userfaultfd.cc
index d0c9839..5c778d3 100644
--- a/chromeos/ash/components/memory/userspace_swap/userfaultfd.cc
+++ b/chromeos/ash/components/memory/userspace_swap/userfaultfd.cc
@@ -25,7 +25,6 @@
 #include "base/task/thread_pool.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/components/memory/aligned_memory.h"
 
 namespace ash {
diff --git a/chromeos/ash/components/memory/zram_writeback_policy.cc b/chromeos/ash/components/memory/zram_writeback_policy.cc
index 959f01a..f7490caa 100644
--- a/chromeos/ash/components/memory/zram_writeback_policy.cc
+++ b/chromeos/ash/components/memory/zram_writeback_policy.cc
@@ -13,7 +13,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/process/process_metrics.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/ash/components/memory/memory.h"
 #include "chromeos/ash/components/memory/swap_configuration.h"
diff --git a/chromeos/ash/components/metrics/login_event_recorder.cc b/chromeos/ash/components/metrics/login_event_recorder.cc
index 2e45f94..caf8bde 100644
--- a/chromeos/ash/components/metrics/login_event_recorder.cc
+++ b/chromeos/ash/components/metrics/login_event_recorder.cc
@@ -22,7 +22,6 @@
 #include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "base/values.h"
diff --git a/chromeos/ash/components/network/network_connection_handler.cc b/chromeos/ash/components/network/network_connection_handler.cc
index 7fe36775..1911995 100644
--- a/chromeos/ash/components/network/network_connection_handler.cc
+++ b/chromeos/ash/components/network/network_connection_handler.cc
@@ -11,7 +11,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/ash/components/dbus/shill/shill_manager_client.h"
 #include "chromeos/ash/components/dbus/shill/shill_service_client.h"
diff --git a/chromeos/ash/components/network/network_device_handler_impl.cc b/chromeos/ash/components/network/network_device_handler_impl.cc
index c3789456..726954c 100644
--- a/chromeos/ash/components/network/network_device_handler_impl.cc
+++ b/chromeos/ash/components/network/network_device_handler_impl.cc
@@ -19,7 +19,6 @@
 #include "base/strings/string_util.h"
 #include "base/system/sys_info.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chromeos/ash/components/dbus/shill/shill_device_client.h"
diff --git a/chromeos/ash/components/network/onc/onc_certificate_importer_impl.cc b/chromeos/ash/components/network/onc/onc_certificate_importer_impl.cc
index 0bd7627..884ad91c 100644
--- a/chromeos/ash/components/network/onc/onc_certificate_importer_impl.cc
+++ b/chromeos/ash/components/network/onc/onc_certificate_importer_impl.cc
@@ -17,8 +17,6 @@
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chromeos/ash/components/network/network_event_log.h"
 #include "chromeos/ash/components/network/onc/network_onc_utils.h"
diff --git a/chromeos/ash/components/network/onc/onc_certificate_importer_impl_unittest.cc b/chromeos/ash/components/network/onc/onc_certificate_importer_impl_unittest.cc
index af1cca3d..b88c1e2 100644
--- a/chromeos/ash/components/network/onc/onc_certificate_importer_impl_unittest.cc
+++ b/chromeos/ash/components/network/onc/onc_certificate_importer_impl_unittest.cc
@@ -12,8 +12,8 @@
 #include "base/bind.h"
 #include "base/notreached.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "chromeos/ash/components/network/certificate_helper.h"
 #include "chromeos/components/onc/onc_parsed_certificates.h"
diff --git a/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc b/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc
index 75fa455a..05c9e8b 100644
--- a/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc
+++ b/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "chromeos/ash/components/network/network_profile.h"
 #include "chromeos/ash/components/network/network_profile_handler.h"
diff --git a/chromeos/ash/components/proximity_auth/messenger_impl.cc b/chromeos/ash/components/proximity_auth/messenger_impl.cc
index 06fa3a8f..ad0d485 100644
--- a/chromeos/ash/components/proximity_auth/messenger_impl.cc
+++ b/chromeos/ash/components/proximity_auth/messenger_impl.cc
@@ -12,7 +12,6 @@
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/multidevice/logging/logging.h"
 #include "chromeos/ash/components/proximity_auth/messenger_observer.h"
 #include "chromeos/ash/components/proximity_auth/remote_status_update.h"
diff --git a/chromeos/ash/components/settings/cros_settings_names.cc b/chromeos/ash/components/settings/cros_settings_names.cc
index e3fb004..2c64600 100644
--- a/chromeos/ash/components/settings/cros_settings_names.cc
+++ b/chromeos/ash/components/settings/cros_settings_names.cc
@@ -576,4 +576,10 @@
 // A boolean pref that indicates whether reporting XDR events is enabled or not.
 const char kDeviceReportXDREvents[] = "cros.device.device_report_xdr_events";
 
+// String representing a template for the 'client-name' member of the
+// 'client-info' IPP attribute that will be sent to IPP printers in case they
+// support it. Maps to the `DevicePrintingClientNameTemplate` policy.
+const char kDevicePrintingClientNameTemplate[] =
+    "cros.device.printing.client_name_template";
+
 }  // namespace ash
diff --git a/chromeos/ash/components/settings/cros_settings_names.h b/chromeos/ash/components/settings/cros_settings_names.h
index 42339dd..7fcee994 100644
--- a/chromeos/ash/components/settings/cros_settings_names.h
+++ b/chromeos/ash/components/settings/cros_settings_names.h
@@ -377,6 +377,9 @@
 COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_SETTINGS)
 extern const char kDeviceReportXDREvents[];
 
+COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_SETTINGS)
+extern const char kDevicePrintingClientNameTemplate[];
+
 }  // namespace ash
 
 namespace chromeos {
diff --git a/chromeos/ash/components/tether/host_scanner_operation.cc b/chromeos/ash/components/tether/host_scanner_operation.cc
index 4c45bba..74785fb 100644
--- a/chromeos/ash/components/tether/host_scanner_operation.cc
+++ b/chromeos/ash/components/tether/host_scanner_operation.cc
@@ -10,6 +10,7 @@
 #include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/default_clock.h"
 #include "chromeos/ash/components/multidevice/logging/logging.h"
 #include "chromeos/ash/components/tether/connection_preserver.h"
diff --git a/chromeos/ash/services/assistant/assistant_host.cc b/chromeos/ash/services/assistant/assistant_host.cc
index d95f2eff..cc847256b 100644
--- a/chromeos/ash/services/assistant/assistant_host.cc
+++ b/chromeos/ash/services/assistant/assistant_host.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/assistant/assistant_manager_service_impl.h"
 #include "chromeos/ash/services/assistant/libassistant_service_host.h"
 #include "chromeos/ash/services/libassistant/public/mojom/service_controller.mojom.h"
diff --git a/chromeos/ash/services/assistant/assistant_host.h b/chromeos/ash/services/assistant/assistant_host.h
index bacad18..31c6305 100644
--- a/chromeos/ash/services/assistant/assistant_host.h
+++ b/chromeos/ash/services/assistant/assistant_host.h
@@ -6,6 +6,7 @@
 #define CHROMEOS_ASH_SERVICES_ASSISTANT_ASSISTANT_HOST_H_
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "chromeos/ash/services/libassistant/public/mojom/audio_input_controller.mojom.h"
diff --git a/chromeos/ash/services/assistant/assistant_manager_service_impl.cc b/chromeos/ash/services/assistant/assistant_manager_service_impl.cc
index 6b8c65b..db1313e 100644
--- a/chromeos/ash/services/assistant/assistant_manager_service_impl.cc
+++ b/chromeos/ash/services/assistant/assistant_manager_service_impl.cc
@@ -25,6 +25,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/unguessable_token.h"
 #include "chromeos/ash/services/assistant/device_settings_host.h"
diff --git a/chromeos/ash/services/assistant/assistant_manager_service_impl.h b/chromeos/ash/services/assistant/assistant_manager_service_impl.h
index 6494be98..a995afa2 100644
--- a/chromeos/ash/services/assistant/assistant_manager_service_impl.h
+++ b/chromeos/ash/services/assistant/assistant_manager_service_impl.h
@@ -16,6 +16,7 @@
 #include "base/observer_list.h"
 #include "base/scoped_observation.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "chromeos/ash/services/assistant/assistant_host.h"
diff --git a/chromeos/ash/services/assistant/audio_decoder/assistant_audio_decoder.h b/chromeos/ash/services/assistant/audio_decoder/assistant_audio_decoder.h
index 375ccfc7..8fbd0359 100644
--- a/chromeos/ash/services/assistant/audio_decoder/assistant_audio_decoder.h
+++ b/chromeos/ash/services/assistant/audio_decoder/assistant_audio_decoder.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "chromeos/ash/services/assistant/public/mojom/assistant_audio_decoder.mojom.h"
 #include "media/filters/blocking_url_protocol.h"
diff --git a/chromeos/ash/services/assistant/audio_decoder/ipc_data_source.h b/chromeos/ash/services/assistant/audio_decoder/ipc_data_source.h
index 8a80265..360f445 100644
--- a/chromeos/ash/services/assistant/audio_decoder/ipc_data_source.h
+++ b/chromeos/ash/services/assistant/audio_decoder/ipc_data_source.h
@@ -7,6 +7,7 @@
 
 #include <stdint.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "chromeos/ash/services/assistant/public/mojom/assistant_audio_decoder.mojom.h"
 #include "media/base/data_source.h"
diff --git a/chromeos/ash/services/assistant/service.h b/chromeos/ash/services/assistant/service.h
index 3636b39..4e78ff0 100644
--- a/chromeos/ash/services/assistant/service.h
+++ b/chromeos/ash/services/assistant/service.h
@@ -16,6 +16,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chromeos/ash/services/assistant/assistant_manager_service.h"
diff --git a/chromeos/ash/services/assistant/test_support/fake_service_context.cc b/chromeos/ash/services/assistant/test_support/fake_service_context.cc
index 7534e09a..86b829f 100644
--- a/chromeos/ash/services/assistant/test_support/fake_service_context.cc
+++ b/chromeos/ash/services/assistant/test_support/fake_service_context.cc
@@ -4,6 +4,8 @@
 
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/assistant/public/cpp/device_actions.h"
 #include "chromeos/ash/services/assistant/test_support/fake_service_context.h"
 
diff --git a/chromeos/ash/services/assistant/test_support/fake_service_context.h b/chromeos/ash/services/assistant/test_support/fake_service_context.h
index 4dae4f3..d4766739 100644
--- a/chromeos/ash/services/assistant/test_support/fake_service_context.h
+++ b/chromeos/ash/services/assistant/test_support/fake_service_context.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/assistant/service_context.h"
 
diff --git a/chromeos/ash/services/assistant/test_support/fake_service_controller.h b/chromeos/ash/services/assistant/test_support/fake_service_controller.h
index bdaa08f..b6145d1 100644
--- a/chromeos/ash/services/assistant/test_support/fake_service_controller.h
+++ b/chromeos/ash/services/assistant/test_support/fake_service_controller.h
@@ -11,6 +11,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/libassistant/public/mojom/service_controller.mojom.h"
 #include "chromeos/ash/services/libassistant/public/mojom/settings_controller.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/chromeos/ash/services/bluetooth_config/device_pairing_handler.cc b/chromeos/ash/services/bluetooth_config/device_pairing_handler.cc
index 76a4432..3cda7ed9d 100644
--- a/chromeos/ash/services/bluetooth_config/device_pairing_handler.cc
+++ b/chromeos/ash/services/bluetooth_config/device_pairing_handler.cc
@@ -6,7 +6,6 @@
 
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_clock.h"
 #include "components/device_event_log/device_event_log.h"
 #include "device/bluetooth/bluetooth_common.h"
diff --git a/chromeos/ash/services/bluetooth_config/device_pairing_handler_impl.cc b/chromeos/ash/services/bluetooth_config/device_pairing_handler_impl.cc
index a9b2056..92606f6 100644
--- a/chromeos/ash/services/bluetooth_config/device_pairing_handler_impl.cc
+++ b/chromeos/ash/services/bluetooth_config/device_pairing_handler_impl.cc
@@ -4,6 +4,7 @@
 
 #include "chromeos/ash/services/bluetooth_config/device_pairing_handler_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/bluetooth_config/device_conversion_util.h"
 #include "components/device_event_log/device_event_log.h"
 
diff --git a/chromeos/ash/services/cellular_setup/euicc.cc b/chromeos/ash/services/cellular_setup/euicc.cc
index 096b1d2..69135dc 100644
--- a/chromeos/ash/services/cellular_setup/euicc.cc
+++ b/chromeos/ash/services/cellular_setup/euicc.cc
@@ -10,6 +10,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/strcat.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "chromeos/ash/components/network/cellular_connection_handler.h"
 #include "chromeos/ash/components/network/cellular_esim_installer.h"
diff --git a/chromeos/ash/services/ime/ime_service.h b/chromeos/ash/services/ime/ime_service.h
index 5ee7aaaf..b3f4330d 100644
--- a/chromeos/ash/services/ime/ime_service.h
+++ b/chromeos/ash/services/ime/ime_service.h
@@ -13,6 +13,7 @@
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/metrics/field_trial_params.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/ime/decoder/decoder_engine.h"
 #include "chromeos/ash/services/ime/decoder/system_engine.h"
 #include "chromeos/ash/services/ime/public/cpp/shared_lib/interfaces.h"
diff --git a/chromeos/ash/services/libassistant/audio/audio_input_impl.h b/chromeos/ash/services/libassistant/audio/audio_input_impl.h
index 3b27053e..3785c22 100644
--- a/chromeos/ash/services/libassistant/audio/audio_input_impl.h
+++ b/chromeos/ash/services/libassistant/audio/audio_input_impl.h
@@ -11,6 +11,7 @@
 
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/assistant/public/cpp/assistant_service.h"
 #include "chromeos/ash/services/libassistant/public/mojom/audio_input_controller.mojom.h"
 #include "chromeos/ash/services/libassistant/public/mojom/platform_delegate.mojom.h"
diff --git a/chromeos/ash/services/libassistant/audio/audio_media_data_source.h b/chromeos/ash/services/libassistant/audio/audio_media_data_source.h
index a060b233..99aa6b0 100644
--- a/chromeos/ash/services/libassistant/audio/audio_media_data_source.h
+++ b/chromeos/ash/services/libassistant/audio/audio_media_data_source.h
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/assistant/public/mojom/assistant_audio_decoder.mojom.h"
 #include "chromeos/assistant/internal/libassistant/shared_headers.h"
diff --git a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h
index 71d1fdc7c..5b1307c 100644
--- a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h
+++ b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h
@@ -12,6 +12,7 @@
 #include "base/component_export.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/assistant/public/cpp/assistant_service.h"
 #include "chromeos/ash/services/assistant/public/mojom/assistant_audio_decoder.mojom.h"
diff --git a/chromeos/ash/services/libassistant/audio/audio_stream_handler.h b/chromeos/ash/services/libassistant/audio/audio_stream_handler.h
index d6fa9c3..d12f252e 100644
--- a/chromeos/ash/services/libassistant/audio/audio_stream_handler.h
+++ b/chromeos/ash/services/libassistant/audio/audio_stream_handler.h
@@ -6,6 +6,7 @@
 #define CHROMEOS_ASH_SERVICES_LIBASSISTANT_AUDIO_AUDIO_STREAM_HANDLER_H_
 
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/assistant/public/mojom/assistant_audio_decoder.mojom.h"
 #include "chromeos/assistant/internal/libassistant/shared_headers.h"
diff --git a/chromeos/ash/services/libassistant/audio/fake_input_device.cc b/chromeos/ash/services/libassistant/audio/fake_input_device.cc
index f9c08968..498ad06 100644
--- a/chromeos/ash/services/libassistant/audio/fake_input_device.cc
+++ b/chromeos/ash/services/libassistant/audio/fake_input_device.cc
@@ -14,6 +14,7 @@
 #include "base/files/file.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/chromeos/ash/services/libassistant/audio/volume_control_impl.h b/chromeos/ash/services/libassistant/audio/volume_control_impl.h
index 8b153232..ba062da6 100644
--- a/chromeos/ash/services/libassistant/audio/volume_control_impl.h
+++ b/chromeos/ash/services/libassistant/audio/volume_control_impl.h
@@ -6,6 +6,7 @@
 #define CHROMEOS_ASH_SERVICES_LIBASSISTANT_AUDIO_VOLUME_CONTROL_IMPL_H_
 
 #include "ash/public/mojom/assistant_volume_control.mojom.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/libassistant/public/mojom/audio_output_delegate.mojom.h"
 #include "chromeos/ash/services/libassistant/public/mojom/platform_delegate.mojom-forward.h"
 #include "chromeos/assistant/internal/libassistant/shared_headers.h"
diff --git a/chromeos/ash/services/libassistant/conversation_controller.h b/chromeos/ash/services/libassistant/conversation_controller.h
index 39121e5..e4e00f42 100644
--- a/chromeos/ash/services/libassistant/conversation_controller.h
+++ b/chromeos/ash/services/libassistant/conversation_controller.h
@@ -10,6 +10,7 @@
 #include "base/cancelable_callback.h"
 #include "base/component_export.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/assistant/public/cpp/conversation_observer.h"
 #include "chromeos/ash/services/libassistant/grpc/assistant_client_observer.h"
 #include "chromeos/ash/services/libassistant/public/cpp/assistant_notification.h"
diff --git a/chromeos/ash/services/libassistant/conversation_state_listener_impl.h b/chromeos/ash/services/libassistant/conversation_state_listener_impl.h
index efe0b01e..928b402 100644
--- a/chromeos/ash/services/libassistant/conversation_state_listener_impl.h
+++ b/chromeos/ash/services/libassistant/conversation_state_listener_impl.h
@@ -6,6 +6,7 @@
 #define CHROMEOS_ASH_SERVICES_LIBASSISTANT_CONVERSATION_STATE_LISTENER_IMPL_H_
 
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/libassistant/grpc/assistant_client_observer.h"
 #include "chromeos/ash/services/libassistant/public/mojom/display_controller.mojom.h"
 #include "chromeos/assistant/internal/libassistant/shared_headers.h"
diff --git a/chromeos/ash/services/libassistant/grpc/assistant_client_impl.cc b/chromeos/ash/services/libassistant/grpc/assistant_client_impl.cc
index 22a4f63..5163968d6 100644
--- a/chromeos/ash/services/libassistant/grpc/assistant_client_impl.cc
+++ b/chromeos/ash/services/libassistant/grpc/assistant_client_impl.cc
@@ -13,7 +13,6 @@
 #include "base/containers/flat_set.h"
 #include "base/notreached.h"
 #include "base/system/sys_info.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/services/assistant/public/cpp/features.h"
 #include "chromeos/ash/services/libassistant/callback_utils.h"
 #include "chromeos/ash/services/libassistant/grpc/assistant_client_v1.h"
diff --git a/chromeos/ash/services/libassistant/grpc/external_services/customer_registration_client.cc b/chromeos/ash/services/libassistant/grpc/external_services/customer_registration_client.cc
index 9ac5b41..ba49b126 100644
--- a/chromeos/ash/services/libassistant/grpc/external_services/customer_registration_client.cc
+++ b/chromeos/ash/services/libassistant/grpc/external_services/customer_registration_client.cc
@@ -9,7 +9,6 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/task/bind_post_task.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/ash/services/libassistant/grpc/grpc_libassistant_client.h"
 #include "chromeos/ash/services/libassistant/grpc/grpc_state.h"
diff --git a/chromeos/ash/services/libassistant/grpc/grpc_http_connection_client.h b/chromeos/ash/services/libassistant/grpc/grpc_http_connection_client.h
index 52ed1b4..ad6cb6a 100644
--- a/chromeos/ash/services/libassistant/grpc/grpc_http_connection_client.h
+++ b/chromeos/ash/services/libassistant/grpc/grpc_http_connection_client.h
@@ -11,7 +11,7 @@
 #include "base/containers/flat_map.h"
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/lock.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/libassistant/grpc/grpc_client_thread.h"
 #include "chromeos/ash/services/libassistant/grpc/grpc_state.h"
 #include "chromeos/ash/services/libassistant/grpc/grpc_util.h"
diff --git a/chromeos/ash/services/libassistant/grpc/grpc_http_connection_delegate.h b/chromeos/ash/services/libassistant/grpc/grpc_http_connection_delegate.h
index d6c4f39..c4eea85f 100644
--- a/chromeos/ash/services/libassistant/grpc/grpc_http_connection_delegate.h
+++ b/chromeos/ash/services/libassistant/grpc/grpc_http_connection_delegate.h
@@ -6,7 +6,6 @@
 #define CHROMEOS_ASH_SERVICES_LIBASSISTANT_GRPC_GRPC_HTTP_CONNECTION_DELEGATE_H_
 
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/services/libassistant/grpc/grpc_http_connection_client.h"
 #include "chromeos/assistant/internal/libassistant/shared_headers.h"
 
diff --git a/chromeos/ash/services/libassistant/grpc/services_initializer_base.cc b/chromeos/ash/services/libassistant/grpc/services_initializer_base.cc
index c56c136..34e3a0d7 100644
--- a/chromeos/ash/services/libassistant/grpc/services_initializer_base.cc
+++ b/chromeos/ash/services/libassistant/grpc/services_initializer_base.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace ash::libassistant {
 
diff --git a/chromeos/ash/services/libassistant/grpc/services_initializer_base.h b/chromeos/ash/services/libassistant/grpc/services_initializer_base.h
index f6c19a9..466dee7 100644
--- a/chromeos/ash/services/libassistant/grpc/services_initializer_base.h
+++ b/chromeos/ash/services/libassistant/grpc/services_initializer_base.h
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "chromeos/ash/services/libassistant/grpc/async_service_driver.h"
 #include "third_party/grpc/src/include/grpcpp/completion_queue.h"
diff --git a/chromeos/ash/services/libassistant/libassistant_loader_impl.cc b/chromeos/ash/services/libassistant/libassistant_loader_impl.cc
index 86a6223..e09855fa8 100644
--- a/chromeos/ash/services/libassistant/libassistant_loader_impl.cc
+++ b/chromeos/ash/services/libassistant/libassistant_loader_impl.cc
@@ -14,7 +14,6 @@
 #include "base/no_destructor.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/chromeos_buildflags.h"
 #include "chromeos/ash/components/dbus/dlcservice/dlcservice_client.h"
diff --git a/chromeos/ash/services/libassistant/media_controller.cc b/chromeos/ash/services/libassistant/media_controller.cc
index a358abf..fd6fb70 100644
--- a/chromeos/ash/services/libassistant/media_controller.cc
+++ b/chromeos/ash/services/libassistant/media_controller.cc
@@ -5,7 +5,6 @@
 #include "chromeos/ash/services/libassistant/media_controller.h"
 
 #include "base/strings/string_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/services/libassistant/grpc/assistant_client.h"
 #include "chromeos/ash/services/libassistant/grpc/external_services/grpc_services_observer.h"
 #include "chromeos/ash/services/libassistant/grpc/utils/media_status_utils.h"
diff --git a/chromeos/ash/services/libassistant/power_manager_provider_impl.h b/chromeos/ash/services/libassistant/power_manager_provider_impl.h
index 68d2a6d..77b6a4d 100644
--- a/chromeos/ash/services/libassistant/power_manager_provider_impl.h
+++ b/chromeos/ash/services/libassistant/power_manager_provider_impl.h
@@ -12,6 +12,7 @@
 #include "base/component_export.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/libassistant/public/mojom/platform_delegate.mojom-forward.h"
 #include "chromeos/assistant/internal/libassistant/shared_headers.h"
 #include "chromeos/dbus/power/native_timer.h"
diff --git a/chromeos/ash/services/quick_pair/quick_pair_service_unittest.cc b/chromeos/ash/services/quick_pair/quick_pair_service_unittest.cc
index 2d99f15..9343eb5 100644
--- a/chromeos/ash/services/quick_pair/quick_pair_service_unittest.cc
+++ b/chromeos/ash/services/quick_pair/quick_pair_service_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/services/quick_pair/public/mojom/fast_pair_data_parser.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/chromeos/ash/services/recording/recording_encoder_muxer.cc b/chromeos/ash/services/recording/recording_encoder_muxer.cc
index eb33546..6cab834 100644
--- a/chromeos/ash/services/recording/recording_encoder_muxer.cc
+++ b/chromeos/ash/services/recording/recording_encoder_muxer.cc
@@ -11,6 +11,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_util.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/services/recording/public/mojom/recording_service.mojom.h"
 #include "chromeos/ash/services/recording/recording_service_constants.h"
 #include "media/base/audio_codecs.h"
diff --git a/chromeos/ash/services/recording/recording_service.cc b/chromeos/ash/services/recording/recording_service.cc
index 1fa4125..017e3640 100644
--- a/chromeos/ash/services/recording/recording_service.cc
+++ b/chromeos/ash/services/recording/recording_service.cc
@@ -10,6 +10,7 @@
 
 #include "base/check.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/chromeos/ash/services/recording/recording_service.h b/chromeos/ash/services/recording/recording_service.h
index 7d0d341..d592303 100644
--- a/chromeos/ash/services/recording/recording_service.h
+++ b/chromeos/ash/services/recording/recording_service.h
@@ -16,6 +16,7 @@
 #include "base/sequence_checker.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/threading/sequence_bound.h"
 #include "base/threading/thread_checker.h"
diff --git a/chromeos/ash/services/secure_channel/ble_advertiser_impl.cc b/chromeos/ash/services/secure_channel/ble_advertiser_impl.cc
index 5e46d08..5943e5ad 100644
--- a/chromeos/ash/services/secure_channel/ble_advertiser_impl.cc
+++ b/chromeos/ash/services/secure_channel/ble_advertiser_impl.cc
@@ -8,7 +8,7 @@
 #include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "chromeos/ash/components/multidevice/logging/logging.h"
 #include "chromeos/ash/services/secure_channel/bluetooth_helper.h"
diff --git a/chromeos/ash/services/secure_channel/ble_connection_manager_impl_unittest.cc b/chromeos/ash/services/secure_channel/ble_connection_manager_impl_unittest.cc
index e2cc6944..cfea698c 100644
--- a/chromeos/ash/services/secure_channel/ble_connection_manager_impl_unittest.cc
+++ b/chromeos/ash/services/secure_channel/ble_connection_manager_impl_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/containers/flat_map.h"
 #include "base/containers/flat_set.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/simple_test_clock.h"
 #include "base/test/task_environment.h"
diff --git a/chromeos/ash/services/secure_channel/public/cpp/client/secure_channel_client_impl.h b/chromeos/ash/services/secure_channel/public/cpp/client/secure_channel_client_impl.h
index 3a3eea5..5093e403 100644
--- a/chromeos/ash/services/secure_channel/public/cpp/client/secure_channel_client_impl.h
+++ b/chromeos/ash/services/secure_channel/public/cpp/client/secure_channel_client_impl.h
@@ -6,6 +6,7 @@
 #define CHROMEOS_ASH_SERVICES_SECURE_CHANNEL_PUBLIC_CPP_CLIENT_SECURE_CHANNEL_CLIENT_IMPL_H_
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ash/services/secure_channel/public/cpp/client/secure_channel_client.h"
 #include "chromeos/ash/services/secure_channel/public/mojom/secure_channel.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.cc b/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.cc
index f350ae8d..458e3899 100644
--- a/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.cc
+++ b/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.cc
@@ -6,7 +6,6 @@
 
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace chromeos {
 
diff --git a/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.h b/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.h
index a83c00bb..def4d7f8 100644
--- a/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.h
+++ b/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy.h
@@ -6,6 +6,7 @@
 #define CHROMEOS_COMPONENTS_CDM_FACTORY_DAEMON_CDM_FACTORY_DAEMON_PROXY_H_
 
 #include "base/component_export.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/components/cdm_factory_daemon/mojom/browser_cdm_factory.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
diff --git a/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy_ash.cc b/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy_ash.cc
index cd210b1..c784cbd 100644
--- a/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy_ash.cc
+++ b/chromeos/components/cdm_factory_daemon/cdm_factory_daemon_proxy_ash.cc
@@ -14,7 +14,6 @@
 #include "base/no_destructor.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chromeos/components/cdm_factory_daemon/content_decryption_module_adapter.h b/chromeos/components/cdm_factory_daemon/content_decryption_module_adapter.h
index 7502e830..ed0ce31 100644
--- a/chromeos/components/cdm_factory_daemon/content_decryption_module_adapter.h
+++ b/chromeos/components/cdm_factory_daemon/content_decryption_module_adapter.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner_helpers.h"
 #include "base/threading/thread_checker.h"
 #include "chromeos/components/cdm_factory_daemon/cdm_storage_adapter.h"
diff --git a/chromeos/dbus/ip_peripheral/ip_peripheral_service_client_unittest.cc b/chromeos/dbus/ip_peripheral/ip_peripheral_service_client_unittest.cc
index 26063e9..8c30f8b 100644
--- a/chromeos/dbus/ip_peripheral/ip_peripheral_service_client_unittest.cc
+++ b/chromeos/dbus/ip_peripheral/ip_peripheral_service_client_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
 #include "dbus/mock_bus.h"
diff --git a/chromeos/dbus/power/native_timer.cc b/chromeos/dbus/power/native_timer.cc
index 3860e601..6e1f657 100644
--- a/chromeos/dbus/power/native_timer.cc
+++ b/chromeos/dbus/power/native_timer.cc
@@ -17,7 +17,6 @@
 #include "base/posix/unix_domain_socket.h"
 #include "base/rand_util.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chromeos/dbus/power/power_manager_client.h"
diff --git a/chromeos/dbus/power/native_timer.h b/chromeos/dbus/power/native_timer.h
index 3d54cbc..4537e82 100644
--- a/chromeos/dbus/power/native_timer.h
+++ b/chromeos/dbus/power/native_timer.h
@@ -14,7 +14,6 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/chromeos/dbus/u2f/u2f_client.cc b/chromeos/dbus/u2f/u2f_client.cc
index b6ca637..bf30fe1 100644
--- a/chromeos/dbus/u2f/u2f_client.cc
+++ b/chromeos/dbus/u2f/u2f_client.cc
@@ -13,7 +13,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/dbus/tpm_manager/tpm_manager.pb.h"
 #include "chromeos/dbus/tpm_manager/tpm_manager_client.h"
 #include "chromeos/dbus/u2f/fake_u2f_client.h"
diff --git a/chromeos/printing/ppd_cache.cc b/chromeos/printing/ppd_cache.cc
index 79c73f8..3606cbc6 100644
--- a/chromeos/printing/ppd_cache.cc
+++ b/chromeos/printing/ppd_cache.cc
@@ -14,9 +14,9 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "chromeos/printing/printing_constants.h"
diff --git a/chromeos/printing/ppd_cache_unittest.cc b/chromeos/printing/ppd_cache_unittest.cc
index 9f352a5c5..90e1482 100644
--- a/chromeos/printing/ppd_cache_unittest.cc
+++ b/chromeos/printing/ppd_cache_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/printing/ppd_cache.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chromeos/printing/ppd_provider_unittest.cc b/chromeos/printing/ppd_provider_unittest.cc
index 6defdd7a..de376f85 100644
--- a/chromeos/printing/ppd_provider_unittest.cc
+++ b/chromeos/printing/ppd_provider_unittest.cc
@@ -23,8 +23,6 @@
 #include "base/test/simple_test_clock.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_message_loop.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "chromeos/printing/fake_printer_config_cache.h"
 #include "chromeos/printing/ppd_cache.h"
diff --git a/chromeos/process_proxy/process_output_watcher.cc b/chromeos/process_proxy/process_output_watcher.cc
index bf96d10..6982c11 100644
--- a/chromeos/process_proxy/process_output_watcher.cc
+++ b/chromeos/process_proxy/process_output_watcher.cc
@@ -17,7 +17,6 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/third_party/icu/icu_utf.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace {
 
diff --git a/chromeos/process_proxy/process_proxy.cc b/chromeos/process_proxy/process_proxy.cc
index cf3efe8..f07c5af 100644
--- a/chromeos/process_proxy/process_proxy.cc
+++ b/chromeos/process_proxy/process_proxy.cc
@@ -22,9 +22,9 @@
 #include "base/process/kill.h"
 #include "base/process/launch.h"
 #include "base/process/process.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "third_party/cros_system_api/switches/chrome_switches.h"
 
 namespace {
diff --git a/chromeos/process_proxy/process_proxy_unittest.cc b/chromeos/process_proxy/process_proxy_unittest.cc
index 5f269ee..e10c126 100644
--- a/chromeos/process_proxy/process_proxy_unittest.cc
+++ b/chromeos/process_proxy/process_proxy_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/process_proxy/process_proxy_registry.h"
 
 namespace chromeos {
diff --git a/chromeos/profiles/arm.afdo.newest.txt b/chromeos/profiles/arm.afdo.newest.txt
index 90c55cb..3040302 100644
--- a/chromeos/profiles/arm.afdo.newest.txt
+++ b/chromeos/profiles/arm.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-arm-none-110-5464.0-1672660372-benchmark-110.0.5481.27-r1-redacted.afdo.xz
+chromeos-chrome-arm-none-110-5464.0-1672660372-benchmark-110.0.5481.28-r1-redacted.afdo.xz
diff --git a/chromeos/services/tts/google_tts_stream.cc b/chromeos/services/tts/google_tts_stream.cc
index cefa6f7..c1a7c65 100644
--- a/chromeos/services/tts/google_tts_stream.cc
+++ b/chromeos/services/tts/google_tts_stream.cc
@@ -8,6 +8,7 @@
 #include <sys/resource.h>
 
 #include "base/files/file_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/services/tts/constants.h"
 #include "chromeos/services/tts/tts_service.h"
 
diff --git a/chromeos/services/tts/tts_player.cc b/chromeos/services/tts/tts_player.cc
index 4a9650d..6002856 100644
--- a/chromeos/services/tts/tts_player.cc
+++ b/chromeos/services/tts/tts_player.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chromeos/services/tts/tts_player.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace chromeos {
 namespace tts {
diff --git a/chromeos/services/tts/tts_player.h b/chromeos/services/tts/tts_player.h
index 6bd7e19..128c6c4a 100644
--- a/chromeos/services/tts/tts_player.h
+++ b/chromeos/services/tts/tts_player.h
@@ -8,6 +8,7 @@
 #include <queue>
 
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/time/time.h"
 #include "chromeos/services/tts/public/mojom/tts_service.mojom.h"
diff --git a/chromeos/tools/onc_validator/onc_validator.cc b/chromeos/tools/onc_validator/onc_validator.cc
index 5e6e94a..68912d02 100644
--- a/chromeos/tools/onc_validator/onc_validator.cc
+++ b/chromeos/tools/onc_validator/onc_validator.cc
@@ -88,8 +88,7 @@
           kStatusArgumentError);
 }
 
-std::unique_ptr<base::DictionaryValue> ReadDictionary(
-    const std::string& filename) {
+base::Value::Dict ReadDictionary(const std::string& filename) {
   base::FilePath path(filename);
   JSONFileValueDeserializer deserializer(path,
                                          base::JSON_ALLOW_TRAILING_COMMAS);
@@ -103,15 +102,13 @@
     return nullptr;
   }
 
-  std::unique_ptr<base::DictionaryValue> dict =
-      base::DictionaryValue::From(std::move(value));
-  if (!dict) {
+  if (!value->is_dict()) {
     LOG(ERROR) << "File '" << filename
                << "' does not contain a dictionary as expected, but type "
-               << value->GetType();
+               << base::Value::GetTypeName(value->type());
   }
 
-  return dict;
+  return std::move(*value).TakeDict();
 }
 
 int main(int argc, const char* argv[]) {
@@ -125,7 +122,7 @@
     return kStatusArgumentError;
   }
 
-  std::unique_ptr<base::DictionaryValue> onc_object = ReadDictionary(args[1]);
+  base::Value::Dict onc_object = ReadDictionary(args[1]);
 
   if (!onc_object)
     return kStatusJsonError;
@@ -157,7 +154,8 @@
   }
 
   chromeos::onc::Validator::Result result;
-  validator.ValidateAndRepairObject(signature, *onc_object, &result);
+  validator.ValidateAndRepairObject(
+      signature, Base::Value(std::move(onc_object)), &result);
 
   switch (result) {
     case chromeos::onc::Validator::VALID:
diff --git a/chromeos/ui/frame/multitask_menu/multitask_menu.cc b/chromeos/ui/frame/multitask_menu/multitask_menu.cc
index 9d95fb3..6cd22df 100644
--- a/chromeos/ui/frame/multitask_menu/multitask_menu.cc
+++ b/chromeos/ui/frame/multitask_menu/multitask_menu.cc
@@ -22,7 +22,8 @@
 namespace {
 
 constexpr int kMultitaskMenuBubbleCornerRadius = 8;
-constexpr int kRowPadding = 16;
+constexpr int kPaddingWide = 12;
+constexpr int kPaddingNarrow = 8;
 
 }  // namespace
 
@@ -72,22 +73,22 @@
       buttons));
 
   multitask_menu_view_->SetLayoutManager(std::make_unique<views::TableLayout>())
-      ->AddPaddingColumn(views::TableLayout::kFixedSize, kRowPadding)
+      ->AddPaddingColumn(views::TableLayout::kFixedSize, kPaddingWide)
       .AddColumn(views::LayoutAlignment::kCenter,
                  views::LayoutAlignment::kCenter,
                  views::TableLayout::kFixedSize,
                  views::TableLayout::ColumnSize::kUsePreferred, 0, 0)
-      .AddPaddingColumn(views::TableLayout::kFixedSize, kRowPadding)
+      .AddPaddingColumn(views::TableLayout::kFixedSize, kPaddingNarrow)
       .AddColumn(views::LayoutAlignment::kCenter,
                  views::LayoutAlignment::kCenter,
                  views::TableLayout::kFixedSize,
                  views::TableLayout::ColumnSize::kUsePreferred, 0, 0)
-      .AddPaddingColumn(views::TableLayout::kFixedSize, kRowPadding)
-      .AddPaddingRow(views::TableLayout::kFixedSize, kRowPadding)
+      .AddPaddingColumn(views::TableLayout::kFixedSize, kPaddingWide)
+      .AddPaddingRow(views::TableLayout::kFixedSize, kPaddingWide)
       .AddRows(1, views::TableLayout::kFixedSize, 0)
-      .AddPaddingRow(views::TableLayout::kFixedSize, kRowPadding)
+      .AddPaddingRow(views::TableLayout::kFixedSize, kPaddingNarrow)
       .AddRows(1, views::TableLayout::kFixedSize, 0)
-      .AddPaddingRow(views::TableLayout::kFixedSize, kRowPadding);
+      .AddPaddingRow(views::TableLayout::kFixedSize, kPaddingWide);
 
   display_observer_.emplace(this);
 }
diff --git a/codelabs/cpp101/solutions/factor.cc b/codelabs/cpp101/solutions/factor.cc
index bc30bb02..07f4f458 100644
--- a/codelabs/cpp101/solutions/factor.cc
+++ b/codelabs/cpp101/solutions/factor.cc
@@ -11,7 +11,6 @@
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -90,4 +89,4 @@
   }
 
   return 0;
-}
\ No newline at end of file
+}
diff --git a/codelabs/threading_and_scheduling/01-single-task-queue.cc b/codelabs/threading_and_scheduling/01-single-task-queue.cc
index c9c3ceab..6784f15 100644
--- a/codelabs/threading_and_scheduling/01-single-task-queue.cc
+++ b/codelabs/threading_and_scheduling/01-single-task-queue.cc
@@ -7,6 +7,7 @@
 #include "base/run_loop.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 
 // See the documentation below.
 enum class TaskType : unsigned char {
diff --git a/codelabs/threading_and_scheduling/02-task-queue-priorities.cc b/codelabs/threading_and_scheduling/02-task-queue-priorities.cc
index f12a078..a64cf4e 100644
--- a/codelabs/threading_and_scheduling/02-task-queue-priorities.cc
+++ b/codelabs/threading_and_scheduling/02-task-queue-priorities.cc
@@ -9,6 +9,7 @@
 #include "base/strings/string_piece.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 
 enum class TaskType : unsigned char {
   kSource1 = 1,
diff --git a/codelabs/threading_and_scheduling/03-randomized-task-queues.cc b/codelabs/threading_and_scheduling/03-randomized-task-queues.cc
index 1b73f7a..73b9746 100644
--- a/codelabs/threading_and_scheduling/03-randomized-task-queues.cc
+++ b/codelabs/threading_and_scheduling/03-randomized-task-queues.cc
@@ -9,6 +9,7 @@
 #include "base/strings/string_piece.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 
 enum class TaskType : unsigned char {
   kSource1 = 1,
diff --git a/codelabs/threading_and_scheduling/04-multiple-threads.cc b/codelabs/threading_and_scheduling/04-multiple-threads.cc
index e2c7bf8..7ea9b73e 100644
--- a/codelabs/threading_and_scheduling/04-multiple-threads.cc
+++ b/codelabs/threading_and_scheduling/04-multiple-threads.cc
@@ -8,6 +8,7 @@
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/sequence_manager_impl.h"  // For IOThreadDelegate.
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 
 // For this example, these are global so that each task running on each thread
diff --git a/components/assist_ranker/ranker_model_loader_impl.cc b/components/assist_ranker/ranker_model_loader_impl.cc
index 05fd5b6..55abe72 100644
--- a/components/assist_ranker/ranker_model_loader_impl.cc
+++ b/components/assist_ranker/ranker_model_loader_impl.cc
@@ -18,7 +18,6 @@
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/assist_ranker/proto/ranker_model.pb.h"
 #include "components/assist_ranker/ranker_url_fetcher.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/components/assist_ranker/ranker_model_loader_impl_unittest.cc b/components/assist_ranker/ranker_model_loader_impl_unittest.cc
index 2d02360..f9f2ba2 100644
--- a/components/assist_ranker/ranker_model_loader_impl_unittest.cc
+++ b/components/assist_ranker/ranker_model_loader_impl_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/ref_counted.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/assist_ranker/proto/ranker_model.pb.h"
 #include "components/assist_ranker/proto/translate_ranker_model.pb.h"
 #include "components/assist_ranker/ranker_model.h"
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc
index 75bb058d..8282188f 100644
--- a/components/autofill/content/renderer/password_generation_agent.cc
+++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -13,7 +13,7 @@
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/ranges/algorithm.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/autofill/content/renderer/form_autofill_util.h"
 #include "components/autofill/content/renderer/password_autofill_agent.h"
 #include "components/autofill/content/renderer/password_form_conversion_utils.h"
@@ -274,7 +274,8 @@
 
 void PasswordGenerationAgent::OnDestruct() {
   receiver_.reset();
-  base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
+  base::SingleThreadTaskRunner::GetCurrentDefault()->DeleteSoon(FROM_HERE,
+                                                                this);
 }
 
 void PasswordGenerationAgent::OnFieldAutofilled(
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn
index b9d7af6..4d19d5e5 100644
--- a/components/autofill/core/browser/BUILD.gn
+++ b/components/autofill/core/browser/BUILD.gn
@@ -165,9 +165,6 @@
     "data_model/phone_number.h",
     "data_model/test_data_creator.cc",
     "data_model/test_data_creator.h",
-    "fast_checkout_delegate.h",
-    "fast_checkout_delegate_impl.cc",
-    "fast_checkout_delegate_impl.h",
     "field_filler.cc",
     "field_filler.h",
     "field_type_utils.cc",
@@ -856,7 +853,6 @@
     "data_model/credit_card_unittest.cc",
     "data_model/iban_unittest.cc",
     "data_model/phone_number_unittest.cc",
-    "fast_checkout_delegate_impl_unittest.cc",
     "field_filler_unittest.cc",
     "field_type_utils_unittest.cc",
     "field_types_unittest.cc",
diff --git a/components/autofill/core/browser/autocomplete_history_manager_unittest.cc b/components/autofill/core/browser/autocomplete_history_manager_unittest.cc
index 11f5214..b9608e395 100644
--- a/components/autofill/core/browser/autocomplete_history_manager_unittest.cc
+++ b/components/autofill/core/browser/autocomplete_history_manager_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autocomplete_history_manager.h"
diff --git a/components/autofill/core/browser/autofill_client.h b/components/autofill/core/browser/autofill_client.h
index e4d1e84..078b328 100644
--- a/components/autofill/core/browser/autofill_client.h
+++ b/components/autofill/core/browser/autofill_client.h
@@ -15,13 +15,14 @@
 #include "base/i18n/rtl.h"
 #include "base/memory/weak_ptr.h"
 #include "build/build_config.h"
-#include "components/autofill/core/browser/fast_checkout_delegate.h"
 #include "components/autofill/core/browser/payments/legal_message_line.h"
 #include "components/autofill/core/browser/payments/risk_data_loader.h"
 #include "components/autofill/core/browser/ui/popup_item_ids.h"
 #include "components/autofill/core/browser/ui/popup_types.h"
 #include "components/autofill/core/browser/ui/touch_to_fill_delegate.h"
 #include "components/autofill/core/common/aliases.h"
+#include "components/autofill/core/common/form_data.h"
+#include "components/autofill/core/common/form_field_data.h"
 #include "components/autofill/core/common/form_interactions_flow.h"
 #include "components/autofill/core/common/unique_ids.h"
 #include "components/profile_metrics/browser_profile_type.h"
@@ -626,25 +627,29 @@
   // HasCreditCardScanFeature() returns true.
   virtual void ScanCreditCard(CreditCardScanCallback callback) = 0;
 
-  // Returns true if the Fast Checkout feature is both supported by platform and
-  // enabled. Should be called before `ShowFastCheckout` or `HideFastCheckout`.
-  virtual bool IsFastCheckoutSupported() = 0;
-
-  // Returns true if the form is one of the trigger forms for Fast Checkout on
-  // the domain. Should be called before `ShowFastCheckout`.
-  virtual bool IsFastCheckoutTriggerForm(const FormData& form,
-                                         const FormFieldData& field) = 0;
-
-  // Shows the FastCheckout surface (for autofilling information during the
-  // checkout flow) and returns `true` on success. `delegate` will be notified
-  // of events. Should be called only if `IsFastCheckoutSupported` returns true.
-  virtual bool ShowFastCheckout(
-      base::WeakPtr<FastCheckoutDelegate> delegate) = 0;
+  // Checks whether Fast Checkout is supported in the current situation. The
+  // checks are performed by `FastCheckoutTriggerValidator` and are more
+  // extensive than `IsFastCheckoutSupported()`.
+  // If it is, shows the FastCheckout surface (for autofilling information
+  // during the checkout flow) and returns `true` on success.
+  virtual bool TryToShowFastCheckout(const FormData& form,
+                                     const FormFieldData& field,
+                                     AutofillDriver* driver) = 0;
 
   // Hides the Fast Checkout surface (for autofilling information during the
-  // checkout flow) if one is currently shown. Should be called only if
-  // `IsFastCheckoutSupported` returns true.
-  virtual void HideFastCheckout() = 0;
+  // checkout flow) if one is currently shown.
+  // The internal UI state has to be reset by setting parameter
+  // `allow_further_runs = true` before a second Fast Checkout run can be
+  // started successfully.
+  virtual void HideFastCheckout(bool allow_further_runs) = 0;
+
+  // Returns true if the Fast Checkout feature is both supported by platform and
+  // enabled.
+  // TODO(crbug.com/1379149): Remove once bug is resolved.
+  virtual bool IsFastCheckoutSupported() = 0;
+
+  // Returns whether the FC surface is currently being shown.
+  virtual bool IsShowingFastCheckoutUI() = 0;
 
   // Returns true if the Touch To Fill feature is both supported by platform and
   // enabled. Should be called before |ShowTouchToFillCreditCard| or
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 93334c1..4cccb0a0 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -487,11 +487,11 @@
   NotifyObservers(&Observer::OnBeforeAskForValuesToFill);
   if (!base::FeatureList::IsEnabled(features::kAutofillParseAsync)
 #if BUILDFLAG(IS_ANDROID)
-      // TODO(crbug.com/1379149) Asynchronous parsing breaks Touch To Fill's the
+      // TODO(crbug.com/1379149) Asynchronous parsing breaks Touch To Fill's
       // keyboard suppression mechanism. Fast Checkout uses the same mechanism.
       // Also see crbug.com/1375966.
-      || client_->IsTouchToFillCreditCardSupported() ||
-      client_->IsFastCheckoutSupported()
+      || client()->IsTouchToFillCreditCardSupported() ||
+      client()->IsFastCheckoutSupported()
 #endif
   ) {
     OnAskForValuesToFillImpl(form, field, bounding_box,
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h
index 09d4362..42e5213 100644
--- a/components/autofill/core/browser/autofill_manager.h
+++ b/components/autofill/core/browser/autofill_manager.h
@@ -15,6 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "base/types/strong_alias.h"
diff --git a/components/autofill/core/browser/autofill_profile_save_strike_database_unittest.cc b/components/autofill/core/browser/autofill_profile_save_strike_database_unittest.cc
index 86045ba..e74a118 100644
--- a/components/autofill/core/browser/autofill_profile_save_strike_database_unittest.cc
+++ b/components/autofill/core/browser/autofill_profile_save_strike_database_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/autofill/core/browser/autofill_profile_save_strike_database.h"
 #include "components/autofill/core/browser/proto/strike_data.pb.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc
index 6e0fc3d..a181695 100644
--- a/components/autofill/core/browser/browser_autofill_manager.cc
+++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -60,7 +60,6 @@
 #include "components/autofill/core/browser/data_model/autofill_profile_comparator.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
 #include "components/autofill/core/browser/data_model/phone_number.h"
-#include "components/autofill/core/browser/fast_checkout_delegate_impl.h"
 #include "components/autofill/core/browser/field_type_utils.h"
 #include "components/autofill/core/browser/field_types.h"
 #include "components/autofill/core/browser/form_data_importer.h"
@@ -485,7 +484,6 @@
                       enable_download_manager),
       external_delegate_(
           std::make_unique<AutofillExternalDelegate>(this, driver)),
-      fast_checkout_delegate_(std::make_unique<FastCheckoutDelegateImpl>(this)),
       touch_to_fill_delegate_(std::make_unique<TouchToFillDelegateImpl>(this)),
       app_locale_(app_locale),
       personal_data_(client->GetPersonalDataManager()),
@@ -531,6 +529,12 @@
   // SimpleURLLoaders, which would immediately cancel the uploads.
   // As a consequence of this, votes are lost if the user generates blur votes
   // and closes the tab before the votes are sent (due to a navigation).
+
+  // Hides Fast Checkout UI, if required. Needs to use `unsafe_client()` instead
+  // of `client()` because the destructor can be called during prerendering.
+  // This call is also important to communicate the destruction of the
+  // `AutofillDriver` object to `FastCheckoutClient`.
+  unsafe_client()->HideFastCheckout(/*allow_further_runs=*/true);
 }
 
 base::WeakPtr<AutofillManager> BrowserAutofillManager::GetWeakPtr() {
@@ -1175,12 +1179,12 @@
   };
 
   auto ShouldShowSuggestion = [&] {
-    if (fast_checkout_delegate_->IsShowingFastCheckoutUI() ||
+    if (client()->IsShowingFastCheckoutUI() ||
         (form_element_was_clicked &&
-         fast_checkout_delegate_->TryToShowFastCheckout(form, field))) {
+         client()->TryToShowFastCheckout(form, field, driver()))) {
       // The Fast Checkout surface is shown, so abort showing regular Autofill
-      // UI. Now the flow is controlled by the `fast_checkout_delegate_` instead
-      // of `external_delegate_`.
+      // UI. Now the flow is controlled by the `FastCheckoutClient` instead of
+      // `external_delegate_`.
       // In principle, TTF and Fast Checkout triggering surfaces are different
       // and the two screens should never coincide.
       return false;
@@ -1523,7 +1527,7 @@
 
   single_field_form_fill_router_->CancelPendingQueries(this);
   client()->HideAutofillPopup(PopupHidingReason::kRendererEvent);
-  fast_checkout_delegate_->HideFastCheckoutUI();
+  client()->HideFastCheckout(/*allow_further_runs=*/false);
   touch_to_fill_delegate_->HideTouchToFill();
 }
 
@@ -2026,7 +2030,7 @@
   initial_interaction_timestamp_ = TimeTicks();
   autofill_suggestion_method_ = AutofillSuggestionMethod::kUnknown;
   external_delegate_->Reset();
-  fast_checkout_delegate_->Reset();
+  unsafe_client()->HideFastCheckout(/*allow_further_runs=*/true);
   touch_to_fill_delegate_->Reset();
   filling_context_.clear();
 }
diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h
index f1ffcf2..524220b 100644
--- a/components/autofill/core/browser/browser_autofill_manager.h
+++ b/components/autofill/core/browser/browser_autofill_manager.h
@@ -27,7 +27,6 @@
 #include "components/autofill/core/browser/autofill_driver.h"
 #include "components/autofill/core/browser/autofill_external_delegate.h"
 #include "components/autofill/core/browser/autofill_manager.h"
-#include "components/autofill/core/browser/fast_checkout_delegate.h"
 #include "components/autofill/core/browser/field_filler.h"
 #include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/browser/form_types.h"
@@ -330,11 +329,6 @@
     touch_to_fill_delegate_ = std::move(touch_to_fill_delegate);
   }
 
-  void SetFastCheckoutDelegateForTest(
-      std::unique_ptr<FastCheckoutDelegate> fast_checkout_delegate) {
-    fast_checkout_delegate_ = std::move(fast_checkout_delegate);
-  }
-
   static void DeterminePossibleFieldTypesForUploadForTest(
       const std::vector<AutofillProfile>& profiles,
       const std::vector<CreditCard>& credit_cards,
@@ -721,7 +715,6 @@
   // Delegates to perform external processing (display, selection) on
   // our behalf.
   std::unique_ptr<AutofillExternalDelegate> external_delegate_;
-  std::unique_ptr<FastCheckoutDelegate> fast_checkout_delegate_;
   std::unique_ptr<TouchToFillDelegateImpl> touch_to_fill_delegate_;
 
   std::string app_locale_;
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
index 4278386c..518e76e 100644
--- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -30,7 +30,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -151,6 +150,7 @@
               (const override));
   MOCK_METHOD(void, HideAutofillPopup, (PopupHidingReason reason), (override));
   MOCK_METHOD(bool, IsPasswordManagerEnabled, (), (override));
+  MOCK_METHOD(void, HideFastCheckout, (bool), (override));
 };
 
 class MockAutofillDownloadManager : public TestAutofillDownloadManager {
@@ -190,24 +190,6 @@
   MOCK_METHOD(void, HideTouchToFill, (), (override));
 };
 
-class MockFastCheckoutDelegate : public FastCheckoutDelegate {
- public:
-  MockFastCheckoutDelegate() = default;
-  MockFastCheckoutDelegate(const MockFastCheckoutDelegate&) = delete;
-  MockFastCheckoutDelegate& operator=(const MockFastCheckoutDelegate&) = delete;
-  ~MockFastCheckoutDelegate() override = default;
-
-  MOCK_METHOD(bool,
-              TryToShowFastCheckout,
-              (const FormData& form, const FormFieldData& field),
-              (override));
-  MOCK_METHOD(bool, IsShowingFastCheckoutUI, (), (const, override));
-  MOCK_METHOD(void, HideFastCheckoutUI, (), (override));
-  MOCK_METHOD(void, OnFastCheckoutUIHidden, (), (override));
-  MOCK_METHOD(AutofillDriver*, GetDriver, (), (override));
-  MOCK_METHOD(void, Reset, (), (override));
-};
-
 void ExpectFilledField(const char* expected_label,
                        const char* expected_name,
                        const char* expected_value,
@@ -470,11 +452,6 @@
     browser_autofill_manager_->SetTouchToFillDelegateImplForTest(
         std::move(touch_to_fill_delegate));
 
-    auto fast_checkout_delegate = std::make_unique<MockFastCheckoutDelegate>();
-    fast_checkout_delegate_ = fast_checkout_delegate.get();
-    browser_autofill_manager_->SetFastCheckoutDelegateForTest(
-        std::move(fast_checkout_delegate));
-
     auto test_strike_database = std::make_unique<TestStrikeDatabase>();
     strike_database_ = test_strike_database.get();
     autofill_client_.set_test_strike_database(std::move(test_strike_database));
@@ -834,7 +811,6 @@
   std::unique_ptr<MockAutofillDriver> autofill_driver_;
   std::unique_ptr<TestBrowserAutofillManager> browser_autofill_manager_;
   raw_ptr<TestAutofillExternalDelegate> external_delegate_;
-  raw_ptr<MockFastCheckoutDelegate> fast_checkout_delegate_;
   raw_ptr<MockTouchToFillDelegateImpl> touch_to_fill_delegate_;
   scoped_refptr<AutofillWebDataService> database_;
   raw_ptr<MockAutofillDownloadManager> download_manager_;
@@ -9614,7 +9590,8 @@
   EXPECT_CALL(autofill_client_,
               HideAutofillPopup(PopupHidingReason::kRendererEvent));
   EXPECT_CALL(*touch_to_fill_delegate_, HideTouchToFill);
-  EXPECT_CALL(*fast_checkout_delegate_, HideFastCheckoutUI);
+  EXPECT_CALL(autofill_client_, HideFastCheckout(/*allow_further_runs=*/false));
+  EXPECT_CALL(autofill_client_, HideFastCheckout(/*allow_further_runs=*/true));
   browser_autofill_manager_->OnHidePopup();
 }
 
@@ -9623,7 +9600,9 @@
   EXPECT_CALL(autofill_client_,
               HideAutofillPopup(PopupHidingReason::kEndEditing));
   EXPECT_CALL(*touch_to_fill_delegate_, HideTouchToFill).Times(0);
-  EXPECT_CALL(*fast_checkout_delegate_, HideFastCheckoutUI).Times(0);
+  EXPECT_CALL(autofill_client_, HideFastCheckout(/*allow_further_runs=*/false))
+      .Times(0);
+  EXPECT_CALL(autofill_client_, HideFastCheckout(/*allow_further_runs=*/true));
   browser_autofill_manager_->OnDidEndTextFieldEditing();
 }
 
diff --git a/components/autofill/core/browser/fast_checkout_delegate.h b/components/autofill/core/browser/fast_checkout_delegate.h
deleted file mode 100644
index 25809e9..0000000
--- a/components/autofill/core/browser/fast_checkout_delegate.h
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2022 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_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_H_
-
-#include "components/autofill/core/common/form_data.h"
-#include "components/autofill/core/common/form_field_data.h"
-
-namespace autofill {
-
-class AutofillDriver;
-
-// Enum that describes different outcomes to an attempt of triggering the
-// FastCheckout bottomsheet.
-// Do not remove or renumber entries in this enum. It needs to be kept in
-// sync with the enum of the same name in `enums.xml`.
-// The enum values are not exhaustive to avoid excessive metric collection.
-// Instead focus on the most interesting abort cases and only deal with cases
-// in which the FastCheckout feature is enabled and a script exists for the
-// form in question.
-enum class FastCheckoutTriggerOutcome {
-  // The sheet was shown.
-  kSuccess = 0,
-  // The sheet was not shown because it has already been shown before.
-  kFailureShownBefore = 1,
-  // The sheet was not shown because the clicked field is not focusable.
-  kFailureFieldNotFocusable = 2,
-  // The sheet was not shown because the clicked field is not empty.
-  kFailureFieldNotEmpty = 3,
-  // The sheet was not shown because Autofill UI cannot be shown.
-  kFailureCannotShowAutofillUi = 4,
-  // The sheet was not shown because there is no valid credit card.
-  kFailureNoValidCreditCard = 5,
-  // The sheet was not shown because there is no valid Autofill profile.
-  kFailureNoValidAutofillProfile = 6,
-  kMaxValue = kFailureNoValidAutofillProfile
-};
-
-constexpr char kUmaKeyFastCheckoutTriggerOutcome[] =
-    "Autofill.FastCheckout.TriggerOutcome";
-
-// Delegate for in-browser Fast Checkout (FC) surface display and selection.
-// Currently FC surface is eligible only for particular forms on click on
-// an empty focusable text input field.
-//
-// It is supposed to be owned by the given `BrowserAutofillManager`, and
-// interact with it and its `AutofillClient` and `AutofillDriver`.
-class FastCheckoutDelegate {
- public:
-  virtual ~FastCheckoutDelegate() = default;
-
-  // Checks whether FastCheckout is eligible for the given web form data. On
-  // success triggers the corresponding surface and returns `true`.
-  virtual bool TryToShowFastCheckout(const FormData& form,
-                                     const FormFieldData& field) = 0;
-
-  // Returns whether the FC surface is currently being shown.
-  virtual bool IsShowingFastCheckoutUI() const = 0;
-
-  // Hides the FC surface if one is shown.
-  virtual void HideFastCheckoutUI() = 0;
-
-  // Triggered after the fast checkout card is closed, either by dissmisal or by
-  // accepting the options.
-  virtual void OnFastCheckoutUIHidden() = 0;
-
-  // Returns a raw pointer to the Autofill driver. On implementations other than
-  // iOS, the pointer can safely be cast to a `ContentAutofillDriver*`.
-  virtual AutofillDriver* GetDriver() = 0;
-
-  // Resets the internal state of the delegate.
-  virtual void Reset() = 0;
-};
-
-}  // namespace autofill
-
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_H_
diff --git a/components/autofill/core/browser/fast_checkout_delegate_impl.cc b/components/autofill/core/browser/fast_checkout_delegate_impl.cc
deleted file mode 100644
index 2252de8..0000000
--- a/components/autofill/core/browser/fast_checkout_delegate_impl.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2022 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/autofill/core/browser/fast_checkout_delegate_impl.h"
-
-#include "base/memory/raw_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/metrics/histogram_functions.h"
-#include "components/autofill/core/browser/browser_autofill_manager.h"
-#include "components/autofill/core/browser/logging/log_manager.h"
-#include "components/autofill/core/common/autofill_internals/log_message.h"
-#include "components/autofill/core/common/autofill_internals/logging_scope.h"
-#include "components/autofill/core/common/logging/log_macros.h"
-
-namespace autofill {
-
-FastCheckoutDelegateImpl::FastCheckoutDelegateImpl(
-    BrowserAutofillManager* manager)
-    : manager_(manager) {
-  DCHECK(manager);
-}
-
-FastCheckoutDelegateImpl::~FastCheckoutDelegateImpl() {
-  // Invalidate pointers to avoid post hide callbacks.
-  weak_ptr_factory_.InvalidateWeakPtrs();
-  HideFastCheckoutUI();
-}
-
-bool FastCheckoutDelegateImpl::TryToShowFastCheckout(
-    const FormData& form,
-    const FormFieldData& field) {
-#if BUILDFLAG(IS_ANDROID)
-  LOG_AF(manager_->client()->GetLogManager())
-      << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-      << "Start of trying to trigger Fast Checkout.";
-#endif
-
-  // Trigger only on supported platforms.
-  if (!manager_->client()->IsFastCheckoutSupported()) {
-    LOG_AF(manager_->client()->GetLogManager())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because it is not supported.";
-    return false;
-  }
-
-  // Trigger only if the form is a trigger form for FC.
-  if (!manager_->client()->IsFastCheckoutTriggerForm(form, field)) {
-    LOG_AF(manager_->client()->GetLogManager())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because `form` is not a trigger form.";
-    return false;
-  }
-
-  // UMA drop out metrics are recorded after this point only to avoid collecting
-  // unnecessary metrics that would dominate the other data points.
-  // Trigger only if not shown before.
-  if (fast_checkout_state_ != FastCheckoutState::kNotShownYet) {
-    base::UmaHistogramEnumeration(
-        kUmaKeyFastCheckoutTriggerOutcome,
-        FastCheckoutTriggerOutcome::kFailureShownBefore);
-    LOG_AF(manager_->client()->GetLogManager())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because it was shown before.";
-    return false;
-  }
-
-  // Trigger only on focusable fields.
-  if (!field.is_focusable) {
-    base::UmaHistogramEnumeration(
-        kUmaKeyFastCheckoutTriggerOutcome,
-        FastCheckoutTriggerOutcome::kFailureFieldNotFocusable);
-    LOG_AF(manager_->client()->GetLogManager())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because field was not focusable.";
-    return false;
-  }
-
-  // Trigger only on empty fields.
-  if (!field.value.empty()) {
-    base::UmaHistogramEnumeration(
-        kUmaKeyFastCheckoutTriggerOutcome,
-        FastCheckoutTriggerOutcome::kFailureFieldNotEmpty);
-    LOG_AF(manager_->client()->GetLogManager())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because field was not empty.";
-    return false;
-  }
-
-  // Trigger only if the UI is available.
-  if (!manager_->driver()->CanShowAutofillUi()) {
-    base::UmaHistogramEnumeration(
-        kUmaKeyFastCheckoutTriggerOutcome,
-        FastCheckoutTriggerOutcome::kFailureCannotShowAutofillUi);
-    LOG_AF(manager_->client()->GetLogManager())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "not triggered because Autofill UI cannot be shown.";
-    return false;
-  }
-
-  // Finally try showing the surface.
-  if (!manager_->client()->ShowFastCheckout(GetWeakPtr())) {
-    LOG_AF(manager_->client()->GetLogManager())
-        << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-        << "An error occurred while trying to show the Fast Checkout UI.";
-    return false;
-  }
-
-  fast_checkout_state_ = FastCheckoutState::kIsShowing;
-  manager_->client()->HideAutofillPopup(
-      PopupHidingReason::kOverlappingWithFastCheckoutSurface);
-  base::UmaHistogramEnumeration(kUmaKeyFastCheckoutTriggerOutcome,
-                                FastCheckoutTriggerOutcome::kSuccess);
-  LOG_AF(manager_->client()->GetLogManager())
-      << LoggingScope::kFastCheckout << LogMessage::kFastCheckout
-      << "was triggered successfully.";
-  return true;
-}
-
-bool FastCheckoutDelegateImpl::IsShowingFastCheckoutUI() const {
-  return fast_checkout_state_ == FastCheckoutState::kIsShowing;
-}
-
-void FastCheckoutDelegateImpl::OnFastCheckoutUIHidden() {
-  fast_checkout_state_ = FastCheckoutState::kWasShown;
-}
-
-// TODO(crbug.com/1348538): Create a central point for TTF/FC hiding decision.
-void FastCheckoutDelegateImpl::HideFastCheckoutUI() {
-  if (IsShowingFastCheckoutUI()) {
-    manager_->client()->HideFastCheckout();
-    fast_checkout_state_ = FastCheckoutState::kWasShown;
-  }
-}
-
-AutofillDriver* FastCheckoutDelegateImpl::GetDriver() {
-  return manager_->driver();
-}
-
-void FastCheckoutDelegateImpl::Reset() {
-  HideFastCheckoutUI();
-  fast_checkout_state_ = FastCheckoutState::kNotShownYet;
-}
-
-base::WeakPtr<FastCheckoutDelegateImpl> FastCheckoutDelegateImpl::GetWeakPtr() {
-  return weak_ptr_factory_.GetWeakPtr();
-}
-
-}  // namespace autofill
diff --git a/components/autofill/core/browser/fast_checkout_delegate_impl.h b/components/autofill/core/browser/fast_checkout_delegate_impl.h
deleted file mode 100644
index 72e26aa3..0000000
--- a/components/autofill/core/browser/fast_checkout_delegate_impl.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2022 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_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_IMPL_H_
-#define COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_IMPL_H_
-
-#include "base/memory/raw_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "components/autofill/core/browser/fast_checkout_delegate.h"
-
-namespace autofill {
-
-class AutofillDriver;
-class BrowserAutofillManager;
-
-class FastCheckoutDelegateImpl : public FastCheckoutDelegate {
- public:
-  explicit FastCheckoutDelegateImpl(BrowserAutofillManager* manager);
-  FastCheckoutDelegateImpl(const FastCheckoutDelegateImpl&) = delete;
-  FastCheckoutDelegateImpl& operator=(const FastCheckoutDelegateImpl&) = delete;
-  ~FastCheckoutDelegateImpl() override;
-
-  // FastCheckoutDelegate:
-  bool TryToShowFastCheckout(const FormData& form,
-                             const FormFieldData& field) override;
-  bool IsShowingFastCheckoutUI() const override;
-  void HideFastCheckoutUI() override;
-  void OnFastCheckoutUIHidden() override;
-  AutofillDriver* GetDriver() override;
-  void Reset() override;
-
- private:
-  enum class FastCheckoutState {
-    kNotShownYet,
-    kIsShowing,
-    kWasShown,
-  };
-
-  base::WeakPtr<FastCheckoutDelegateImpl> GetWeakPtr();
-
-  FastCheckoutState fast_checkout_state_ = FastCheckoutState::kNotShownYet;
-  const raw_ptr<BrowserAutofillManager> manager_;
-  base::WeakPtrFactory<FastCheckoutDelegateImpl> weak_ptr_factory_{this};
-};
-
-}  // namespace autofill
-
-#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_FAST_CHECKOUT_DELEGATE_IMPL_H_
diff --git a/components/autofill/core/browser/fast_checkout_delegate_impl_unittest.cc b/components/autofill/core/browser/fast_checkout_delegate_impl_unittest.cc
deleted file mode 100644
index 79337257..0000000
--- a/components/autofill/core/browser/fast_checkout_delegate_impl_unittest.cc
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright 2022 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/autofill/core/browser/fast_checkout_delegate_impl.h"
-
-#include "base/test/metrics/histogram_tester.h"
-#include "base/test/task_environment.h"
-#include "components/autofill/core/browser/autofill_test_utils.h"
-#include "components/autofill/core/browser/fast_checkout_delegate.h"
-#include "components/autofill/core/browser/test_autofill_client.h"
-#include "components/autofill/core/browser/test_autofill_driver.h"
-#include "components/autofill/core/browser/test_browser_autofill_manager.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::Bucket;
-using base::BucketsAre;
-using testing::_;
-using testing::NiceMock;
-using testing::Ref;
-using testing::Return;
-
-namespace autofill {
-
-namespace {
-
-class MockAutofillDriver : public TestAutofillDriver {
- public:
-  MockAutofillDriver() = default;
-  MockAutofillDriver(const MockAutofillDriver&) = delete;
-  MockAutofillDriver& operator=(const MockAutofillDriver&) = delete;
-  ~MockAutofillDriver() override = default;
-
-  MOCK_METHOD(bool, CanShowAutofillUi, (), (const, override));
-};
-
-class MockAutofillClient : public TestAutofillClient {
- public:
-  MockAutofillClient() = default;
-  MockAutofillClient(const MockAutofillClient&) = delete;
-  MockAutofillClient& operator=(const MockAutofillClient&) = delete;
-  ~MockAutofillClient() override = default;
-
-  MOCK_METHOD(bool, IsFastCheckoutSupported, (), (override));
-  MOCK_METHOD(bool,
-              IsFastCheckoutTriggerForm,
-              (const FormData&, const FormFieldData&),
-              (override));
-  MOCK_METHOD(bool,
-              ShowFastCheckout,
-              (base::WeakPtr<FastCheckoutDelegate>),
-              (override));
-  MOCK_METHOD(void, HideFastCheckout, (), (override));
-  MOCK_METHOD(void, HideAutofillPopup, (PopupHidingReason reason), (override));
-
-  void ExpectDelegateWeakPtrFromShowInvalidatedOnHide() {
-    EXPECT_CALL(*this, ShowFastCheckout)
-        .WillOnce([this](base::WeakPtr<FastCheckoutDelegate> delegate) {
-          captured_delegate_ = delegate;
-          return true;
-        });
-    EXPECT_CALL(*this, HideFastCheckout).WillOnce([this]() {
-      EXPECT_FALSE(captured_delegate_);
-    });
-  }
-
- private:
-  base::WeakPtr<FastCheckoutDelegate> captured_delegate_;
-};
-
-}  // namespace
-
-class FastCheckoutDelegateImplTest : public testing::Test {
- protected:
-  void SetUp() override {
-    autofill_client_.SetPrefs(test::PrefServiceForTesting());
-    autofill_driver_ = std::make_unique<NiceMock<MockAutofillDriver>>();
-    browser_autofill_manager_ = std::make_unique<TestBrowserAutofillManager>(
-        autofill_driver_.get(), &autofill_client_);
-
-    auto fast_checkout_delegate = std::make_unique<FastCheckoutDelegateImpl>(
-        browser_autofill_manager_.get());
-    fast_checkout_delegate_ = fast_checkout_delegate.get();
-
-    browser_autofill_manager_->SetFastCheckoutDelegateForTest(
-        std::move(fast_checkout_delegate));
-
-    field_.is_focusable = true;
-    ON_CALL(autofill_client_, IsFastCheckoutSupported)
-        .WillByDefault(Return(true));
-    ON_CALL(autofill_client_, IsFastCheckoutTriggerForm)
-        .WillByDefault(Return(true));
-    ON_CALL(autofill_client_, ShowFastCheckout).WillByDefault(Return(true));
-    ON_CALL(*autofill_driver_, CanShowAutofillUi).WillByDefault(Return(true));
-  }
-
-  void TryToShowFastCheckout(bool expected_success) {
-    EXPECT_CALL(autofill_client_,
-                HideAutofillPopup(
-                    PopupHidingReason::kOverlappingWithFastCheckoutSurface))
-        .Times(expected_success ? 1 : 0);
-    EXPECT_EQ(expected_success,
-              fast_checkout_delegate_->TryToShowFastCheckout(form_, field_));
-    EXPECT_EQ(expected_success,
-              fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  }
-
-  FormData form_;
-  FormFieldData field_;
-
-  base::test::TaskEnvironment task_environment_;
-  base::HistogramTester histogram_tester_;
-  NiceMock<MockAutofillClient> autofill_client_;
-  std::unique_ptr<NiceMock<MockAutofillDriver>> autofill_driver_;
-  std::unique_ptr<TestBrowserAutofillManager> browser_autofill_manager_;
-  raw_ptr<FastCheckoutDelegateImpl> fast_checkout_delegate_;
-};
-
-TEST_F(FastCheckoutDelegateImplTest, TryToShowFastCheckoutSucceeds) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  TryToShowFastCheckout(/*expected_success=*/true);
-
-  histogram_tester_.ExpectUniqueSample(kUmaKeyFastCheckoutTriggerOutcome,
-                                       FastCheckoutTriggerOutcome::kSuccess,
-                                       1u);
-}
-
-TEST_F(FastCheckoutDelegateImplTest, TryToShowFastCheckoutFailsIfNotSupported) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  EXPECT_CALL(autofill_client_, IsFastCheckoutSupported)
-      .WillOnce(Return(false));
-  TryToShowFastCheckout(/*expected_success=*/false);
-
-  // Events are only logged if Fast Checkout is supported and there is a script.
-  histogram_tester_.ExpectTotalCount(kUmaKeyFastCheckoutTriggerOutcome, 0u);
-}
-
-TEST_F(FastCheckoutDelegateImplTest,
-       TryToShowFastCheckoutFailsIfFormNotTriggering) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  EXPECT_CALL(autofill_client_, IsFastCheckoutTriggerForm)
-      .WillOnce(Return(false));
-  TryToShowFastCheckout(/*expected_success=*/false);
-
-  // Events are only logged if Fast Checkout is supported and there is a script.
-  histogram_tester_.ExpectTotalCount(kUmaKeyFastCheckoutTriggerOutcome, 0u);
-}
-
-TEST_F(FastCheckoutDelegateImplTest,
-       TryToShowFastCheckoutFailsIfAlreadyShowing) {
-  TryToShowFastCheckout(/*expected_success=*/true);
-
-  EXPECT_CALL(
-      autofill_client_,
-      HideAutofillPopup(PopupHidingReason::kOverlappingWithFastCheckoutSurface))
-      .Times(0);
-  EXPECT_FALSE(fast_checkout_delegate_->TryToShowFastCheckout(form_, field_));
-  EXPECT_TRUE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-
-  EXPECT_THAT(
-      histogram_tester_.GetAllSamples(kUmaKeyFastCheckoutTriggerOutcome),
-      BucketsAre(Bucket(FastCheckoutTriggerOutcome::kSuccess, 1u),
-                 Bucket(FastCheckoutTriggerOutcome::kFailureShownBefore, 1u)));
-}
-
-TEST_F(FastCheckoutDelegateImplTest, TryToShowFastCheckoutFailsIfWasShown) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  TryToShowFastCheckout(/*expected_success=*/true);
-  // User accepts/dismisses the bottom sheet.
-  fast_checkout_delegate_->OnFastCheckoutUIHidden();
-  TryToShowFastCheckout(/*expected_success=*/false);
-
-  EXPECT_THAT(
-      histogram_tester_.GetAllSamples(kUmaKeyFastCheckoutTriggerOutcome),
-      BucketsAre(Bucket(FastCheckoutTriggerOutcome::kSuccess, 1u),
-                 Bucket(FastCheckoutTriggerOutcome::kFailureShownBefore, 1u)));
-}
-
-TEST_F(FastCheckoutDelegateImplTest,
-       TryToShowFastCheckoutFailsIfFieldNotFocusable) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  field_.is_focusable = false;
-  TryToShowFastCheckout(/*expected_success=*/false);
-
-  histogram_tester_.ExpectUniqueSample(
-      kUmaKeyFastCheckoutTriggerOutcome,
-      FastCheckoutTriggerOutcome::kFailureFieldNotFocusable, 1u);
-}
-
-TEST_F(FastCheckoutDelegateImplTest,
-       TryToShowFastCheckoutFailsIfFieldHasValue) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  field_.value = u"Initial value";
-  TryToShowFastCheckout(/*expected_success=*/false);
-
-  histogram_tester_.ExpectUniqueSample(
-      kUmaKeyFastCheckoutTriggerOutcome,
-      FastCheckoutTriggerOutcome::kFailureFieldNotEmpty, 1u);
-}
-
-TEST_F(FastCheckoutDelegateImplTest, TryToShowFastCheckoutFailsIfCanNotShowUi) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  EXPECT_CALL(*autofill_driver_, CanShowAutofillUi).WillOnce(Return(false));
-  TryToShowFastCheckout(/*expected_success=*/false);
-
-  histogram_tester_.ExpectUniqueSample(
-      kUmaKeyFastCheckoutTriggerOutcome,
-      FastCheckoutTriggerOutcome::kFailureCannotShowAutofillUi, 1u);
-}
-
-TEST_F(FastCheckoutDelegateImplTest, TryToShowFastCheckoutFailsIfShowFails) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  EXPECT_CALL(autofill_client_, ShowFastCheckout).WillOnce(Return(false));
-  TryToShowFastCheckout(/*expected_success=*/false);
-}
-
-TEST_F(FastCheckoutDelegateImplTest, HideFastCheckoutDoesNothingIfNotShown) {
-  ASSERT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-  EXPECT_CALL(autofill_client_, HideFastCheckout).Times(0);
-  fast_checkout_delegate_->HideFastCheckoutUI();
-  EXPECT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-}
-
-TEST_F(FastCheckoutDelegateImplTest, HideFastCheckoutHidesIfShown) {
-  TryToShowFastCheckout(/*expected_success=*/true);
-  EXPECT_CALL(autofill_client_, HideFastCheckout).Times(1);
-  fast_checkout_delegate_->HideFastCheckoutUI();
-  EXPECT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-}
-
-TEST_F(FastCheckoutDelegateImplTest, GetDriver) {
-  EXPECT_EQ(autofill_driver_.get(), fast_checkout_delegate_->GetDriver());
-}
-
-TEST_F(FastCheckoutDelegateImplTest, ResetFastCheckoutIfShown) {
-  TryToShowFastCheckout(/*expected_success=*/true);
-  EXPECT_CALL(autofill_client_, HideFastCheckout).Times(1);
-  fast_checkout_delegate_->Reset();
-  EXPECT_FALSE(fast_checkout_delegate_->IsShowingFastCheckoutUI());
-}
-
-TEST_F(FastCheckoutDelegateImplTest, ResetAllowsShowingFastCheckoutAgain) {
-  TryToShowFastCheckout(/*expected_success=*/true);
-
-  fast_checkout_delegate_->HideFastCheckoutUI();
-  TryToShowFastCheckout(/*expected_success=*/false);
-
-  fast_checkout_delegate_->Reset();
-  TryToShowFastCheckout(/*expected_success=*/true);
-}
-
-TEST_F(FastCheckoutDelegateImplTest, SafelyHideFastCheckoutInDtor) {
-  autofill_client_.ExpectDelegateWeakPtrFromShowInvalidatedOnHide();
-  TryToShowFastCheckout(/*expected_success=*/true);
-  browser_autofill_manager_.reset();
-}
-
-}  // namespace autofill
diff --git a/components/autofill/core/browser/field_filler.cc b/components/autofill/core/browser/field_filler.cc
index b7f64f9..8e987c84 100644
--- a/components/autofill/core/browser/field_filler.cc
+++ b/components/autofill/core/browser/field_filler.cc
@@ -505,6 +505,21 @@
   return false;
 }
 
+std::u16string TruncateCardNumberIfNecessary(const AutofillField& field,
+                                             const std::u16string& value) {
+  // Take the substring of the credit card number starting from the offset
+  // and ending at the field's max_length (or the entire string if
+  // max_length is 0).
+  // If the offset is greater than the length of the string, then the entire
+  // number should be returned;
+  if (field.credit_card_number_offset() < value.length()) {
+    return value.substr(
+        field.credit_card_number_offset(),
+        field.max_length > 0 ? field.max_length : std::u16string::npos);
+  }
+  return value;
+}
+
 // Returns the appropriate credit card number from |credit_card|. Truncates the
 // credit card number to be split across HTML form input fields depending on if
 // 'field.credit_card_number_offset()' is less than the length of the credit
@@ -539,16 +554,9 @@
     value = credit_card.GetInfo(CREDIT_CARD_NUMBER, app_locale);
   }
 
-  // |field|'s max_length truncates the credit card number to fit within.
-  if (field.credit_card_number_offset() < value.length()) {
-    // Take the substring of the credit card number starting from the offset and
-    // ending at the field's max_length (or the entire string if max_length is
-    // 0).
-    value = value.substr(
-        field.credit_card_number_offset(),
-        field.max_length > 0 ? field.max_length : std::u16string::npos);
-  }
-  return value;
+  // Check to truncate card number based on the field's credit card number
+  // offset and length of the credit card number.
+  return TruncateCardNumberIfNecessary(field, value);
 }
 
 // Returns the appropriate credit card number from |virtual_card|. Truncates the
@@ -571,16 +579,14 @@
         (field.credit_card_number_offset() == 0 &&
          (field.max_length == 0 || field.max_length >= value.length()));
 
-    if (!is_single_field)
+    if (!is_single_field) {
       value = virtual_card
                   .ObfuscatedNumberWithVisibleLastFourDigitsForSplitFields();
+    }
 
-    // Take the substring of the credit card number starting from the offset and
-    // ending at the field's max_length (or the entire string if max_length is
-    // 0).
-    value = value.substr(
-        field.credit_card_number_offset(),
-        field.max_length > 0 ? field.max_length : std::u16string::npos);
+    // Check to truncate card number based on the field's credit card number
+    // offset and length of the credit card number.
+    return TruncateCardNumberIfNecessary(field, value);
   }
 
   return value;
diff --git a/components/autofill/core/browser/field_filler_unittest.cc b/components/autofill/core/browser/field_filler_unittest.cc
index 54f46f37..31b653a 100644
--- a/components/autofill/core/browser/field_filler_unittest.cc
+++ b/components/autofill/core/browser/field_filler_unittest.cc
@@ -412,7 +412,7 @@
 // Verify that the correct value is returned if the maximum length of the credit
 // card value exceeds the actual length.
 TEST_F(AutofillFieldFillerTest,
-       FillFormField_MaxLength_CreditCardField_MaxLenghtExceedsLength) {
+       FillFormField_MaxLength_CreditCardField_MaxLengthExceedsLength) {
   AutofillField field;
   field.max_length = 30;
   field.set_credit_card_number_offset(2);
@@ -436,7 +436,7 @@
        FillFormField_MaxLength_CreditCardField_OffsetExceedsLength) {
   AutofillField field;
   field.max_length = 18;
-  field.set_credit_card_number_offset(30);
+  field.set_credit_card_number_offset(19);
   field.set_heuristic_type(GetActivePatternSource(), CREDIT_CARD_NUMBER);
 
   // Credit card related field.
@@ -2190,7 +2190,6 @@
 TEST_F(AutofillFieldFillerTest, PreviewVirtualCardNumber) {
   AutofillField field;
   field.set_heuristic_type(GetActivePatternSource(), CREDIT_CARD_NUMBER);
-  field.set_credit_card_number_offset(50);
   field.form_control_type = "text";
 
   CreditCard card = test::GetVirtualCard();
@@ -2212,6 +2211,33 @@
   EXPECT_EQ(expected, field.value);
 }
 
+// Verify that the obfuscated virtual card number is returned if the offset is
+// greater than 0 and the offset exceeds the length.
+TEST_F(AutofillFieldFillerTest, PreviewVirtualCardNumber_OffsetExceedsLength) {
+  AutofillField field;
+  field.max_length = 17;
+  field.set_credit_card_number_offset(18);
+  field.form_control_type = "text";
+  field.set_heuristic_type(GetActivePatternSource(), CREDIT_CARD_NUMBER);
+
+  CreditCard card = test::GetVirtualCard();
+  card.SetNumber(u"5454545454545454");
+  CreditCardTestApi(&card).set_network_for_virtual_card(kMasterCard);
+  FieldFiller filler(/*app_locale=*/"en-US", /*address_normalizer=*/nullptr);
+  filler.FillFormField(field, &card, /*forced_fill_values=*/{}, &field,
+                       /*cvc=*/std::u16string(),
+                       mojom::RendererFormDataAction::kPreview);
+
+  // ••••••••••••5454‬
+  std::u16string expected =
+      u"\x2022\x2022\x2022\x2022\x2022\x2022\x2022\x2022\x2022\x2022\x2022"
+      u"\x2022"
+      u"5454";
+
+  // Verify that the field is previewed with the full card number.
+  EXPECT_EQ(expected, field.value);
+}
+
 TEST_F(AutofillFieldFillerTest, PreviewVirtualCardholderName) {
   std::u16string name = u"Jone Doe";
 
diff --git a/components/autofill/core/browser/geo/alternative_state_name_map_updater.cc b/components/autofill/core/browser/geo/alternative_state_name_map_updater.cc
index 94407f896..07537099 100644
--- a/components/autofill/core/browser/geo/alternative_state_name_map_updater.cc
+++ b/components/autofill/core/browser/geo/alternative_state_name_map_updater.cc
@@ -18,6 +18,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "components/autofill/core/browser/geo/country_data.h"
diff --git a/components/autofill/core/browser/geo/alternative_state_name_map_updater.h b/components/autofill/core/browser/geo/alternative_state_name_map_updater.h
index f782345..1af0016 100644
--- a/components/autofill/core/browser/geo/alternative_state_name_map_updater.h
+++ b/components/autofill/core/browser/geo/alternative_state_name_map_updater.h
@@ -17,6 +17,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/autofill/core/browser/geo/alternative_state_name_map.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
 
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
index d78fa44..e8c04e4 100644
--- a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
@@ -27,7 +27,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/components/autofill/core/browser/payments/credit_card_cvc_authenticator_unittest.cc b/components/autofill/core/browser/payments/credit_card_cvc_authenticator_unittest.cc
index 295c6902..e3813e3c 100644
--- a/components/autofill/core/browser/payments/credit_card_cvc_authenticator_unittest.cc
+++ b/components/autofill/core/browser/payments/credit_card_cvc_authenticator_unittest.cc
@@ -24,7 +24,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autocomplete_history_manager.h"
diff --git a/components/autofill/core/browser/payments/credit_card_fido_authenticator_unittest.cc b/components/autofill/core/browser/payments/credit_card_fido_authenticator_unittest.cc
index 700324d..9957e7e 100644
--- a/components/autofill/core/browser/payments/credit_card_fido_authenticator_unittest.cc
+++ b/components/autofill/core/browser/payments/credit_card_fido_authenticator_unittest.cc
@@ -25,7 +25,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "build/build_config.h"
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 184bf5b..aaff6cb 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
@@ -22,7 +22,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
diff --git a/components/autofill/core/browser/payments/full_card_request_unittest.cc b/components/autofill/core/browser/payments/full_card_request_unittest.cc
index 972bb97..972f67c 100644
--- a/components/autofill/core/browser/payments/full_card_request_unittest.cc
+++ b/components/autofill/core/browser/payments/full_card_request_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
diff --git a/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc b/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc
index 68890fa..caa13ba7 100644
--- a/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/local_card_migration_manager_unittest.cc
@@ -21,7 +21,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
diff --git a/components/autofill/core/browser/payments/payments_client_unittest.cc b/components/autofill/core/browser/payments/payments_client_unittest.cc
index 4842f8e..9a638a3 100644
--- a/components/autofill/core/browser/payments/payments_client_unittest.cc
+++ b/components/autofill/core/browser/payments/payments_client_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
diff --git a/components/autofill/core/browser/personal_data_manager_test_base.cc b/components/autofill/core/browser/personal_data_manager_test_base.cc
index 9cb7399..cc945c2 100644
--- a/components/autofill/core/browser/personal_data_manager_test_base.cc
+++ b/components/autofill/core/browser/personal_data_manager_test_base.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/autofill/core/browser/personal_data_manager_test_base.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_clock.h"
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc
index 58df5214e1..1786613 100644
--- a/components/autofill/core/browser/personal_data_manager_unittest.cc
+++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -24,7 +24,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/components/autofill/core/browser/strike_database_integrator_test_strike_database_unittest.cc b/components/autofill/core/browser/strike_database_integrator_test_strike_database_unittest.cc
index 04271061..e7174f90 100644
--- a/components/autofill/core/browser/strike_database_integrator_test_strike_database_unittest.cc
+++ b/components/autofill/core/browser/strike_database_integrator_test_strike_database_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/autofill/core/browser/proto/strike_data.pb.h"
 #include "components/autofill/core/browser/strike_database_integrator_base.h"
 #include "components/autofill/core/browser/test_autofill_clock.h"
diff --git a/components/autofill/core/browser/strike_database_unittest.cc b/components/autofill/core/browser/strike_database_unittest.cc
index 999c681..5b826d4 100644
--- a/components/autofill/core/browser/strike_database_unittest.cc
+++ b/components/autofill/core/browser/strike_database_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/proto/strike_data.pb.h"
 #include "components/leveldb_proto/public/proto_database.h"
diff --git a/components/autofill/core/browser/test_autofill_client.cc b/components/autofill/core/browser/test_autofill_client.cc
index 3104267..4de0cc7 100644
--- a/components/autofill/core/browser/test_autofill_client.cc
+++ b/components/autofill/core/browser/test_autofill_client.cc
@@ -293,22 +293,22 @@
 
 void TestAutofillClient::ScanCreditCard(CreditCardScanCallback callback) {}
 
+bool TestAutofillClient::TryToShowFastCheckout(const FormData& form,
+                                               const FormFieldData& field,
+                                               AutofillDriver* driver) {
+  return false;
+}
+
+void TestAutofillClient::HideFastCheckout(bool allow_further_runs) {}
+
 bool TestAutofillClient::IsFastCheckoutSupported() {
   return false;
 }
 
-bool TestAutofillClient::IsFastCheckoutTriggerForm(const FormData& form,
-                                                   const FormFieldData& field) {
+bool TestAutofillClient::IsShowingFastCheckoutUI() {
   return false;
 }
 
-bool TestAutofillClient::ShowFastCheckout(
-    base::WeakPtr<FastCheckoutDelegate> delegate) {
-  return false;
-}
-
-void TestAutofillClient::HideFastCheckout() {}
-
 bool TestAutofillClient::IsTouchToFillCreditCardSupported() {
   return false;
 }
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h
index f083c80..e566bbbc 100644
--- a/components/autofill/core/browser/test_autofill_client.h
+++ b/components/autofill/core/browser/test_autofill_client.h
@@ -160,11 +160,12 @@
       AddressProfileSavePromptCallback callback) override;
   bool HasCreditCardScanFeature() override;
   void ScanCreditCard(CreditCardScanCallback callback) override;
+  bool TryToShowFastCheckout(const FormData& form,
+                             const FormFieldData& field,
+                             AutofillDriver* driver) override;
+  void HideFastCheckout(bool allow_further_runs) override;
   bool IsFastCheckoutSupported() override;
-  bool IsFastCheckoutTriggerForm(const FormData& form,
-                                 const FormFieldData& field) override;
-  bool ShowFastCheckout(base::WeakPtr<FastCheckoutDelegate> delegate) override;
-  void HideFastCheckout() override;
+  bool IsShowingFastCheckoutUI() override;
   bool IsTouchToFillCreditCardSupported() override;
   bool ShowTouchToFillCreditCard(
       base::WeakPtr<TouchToFillDelegate> delegate,
diff --git a/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc
index eede36d..82d99ef 100644
--- a/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc
+++ b/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/autofill/core/browser/webdata/autofill_entry.h"
 #include "components/autofill/core/browser/webdata/autofill_table.h"
diff --git a/components/autofill_payments_strings.grdp b/components/autofill_payments_strings.grdp
index 73aae9a..895dbe40 100644
--- a/components/autofill_payments_strings.grdp
+++ b/components/autofill_payments_strings.grdp
@@ -776,6 +776,18 @@
     <message name="IDS_AUTOFILL_CREDIT_CARD_CONTINUE_BUTTON" desc="The label of the button, which would fill in the web form with card credentials." formatter_data="android_java">
       Continue
     </message>
+    <message name="IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CONTENT_DESCRIPTION" desc="Accessibility string read when the bottom sheet is opened. It describes the bottom sheet where a user can pick a credit card to fill into a form." formatter_data="android_java">
+      List of credit cards to be filled on touch.
+    </message>
+    <message name="IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_HALF_HEIGHT" desc="Accessibility string read when the bottom sheet showing a list of the user's credit cards is opened at half height. The sheet will occupy the bottom half the screen." formatter_data="android_java">
+      List of credit cards to be filled on touch opened at half height.
+    </message>
+    <message name="IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_FULL_HEIGHT" desc="Accessibility string read when the bottom sheet showing a list of the user's credit cards is opened at full height. The sheet will occupy the entire screen." formatter_data="android_java">
+      List of credit cards to be filled on touch opened at full height.
+    </message>
+    <message name="IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CLOSED" desc="Accessibility string read when the bottom sheet showing a list of the user's credit cards is closed." formatter_data="android_java">
+      List of credit cards is closed.
+    </message>
   </if>
 
 </grit-part>
diff --git a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CLOSED.png.sha1 b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CLOSED.png.sha1
new file mode 100644
index 0000000..75d0e6d
--- /dev/null
+++ b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CLOSED.png.sha1
@@ -0,0 +1 @@
+fd77d526608b323ee6edf337cf6b70d7be313c0a
\ No newline at end of file
diff --git a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CONTENT_DESCRIPTION.png.sha1 b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CONTENT_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..75d0e6d
--- /dev/null
+++ b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_CONTENT_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+fd77d526608b323ee6edf337cf6b70d7be313c0a
\ No newline at end of file
diff --git a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_FULL_HEIGHT.png.sha1 b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_FULL_HEIGHT.png.sha1
new file mode 100644
index 0000000..75d0e6d
--- /dev/null
+++ b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_FULL_HEIGHT.png.sha1
@@ -0,0 +1 @@
+fd77d526608b323ee6edf337cf6b70d7be313c0a
\ No newline at end of file
diff --git a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_HALF_HEIGHT.png.sha1 b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_HALF_HEIGHT.png.sha1
new file mode 100644
index 0000000..d93c1d24
--- /dev/null
+++ b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_CREDIT_CARD_BOTTOM_SHEET_HALF_HEIGHT.png.sha1
@@ -0,0 +1 @@
+eda36378080df1fe7902e36d921c3c07948d4c70
\ No newline at end of file
diff --git a/components/breadcrumbs/core/breadcrumb_persistent_storage_manager.h b/components/breadcrumbs/core/breadcrumb_persistent_storage_manager.h
index 09bc015..eb9d1e9f 100644
--- a/components/breadcrumbs/core/breadcrumb_persistent_storage_manager.h
+++ b/components/breadcrumbs/core/breadcrumb_persistent_storage_manager.h
@@ -10,6 +10,7 @@
 
 #include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "components/breadcrumbs/core/breadcrumb_manager.h"
diff --git a/components/browser_sync/sync_api_component_factory_impl.cc b/components/browser_sync/sync_api_component_factory_impl.cc
index 2980ba8..1ade4ad 100644
--- a/components/browser_sync/sync_api_component_factory_impl.cc
+++ b/components/browser_sync/sync_api_component_factory_impl.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/default_clock.h"
diff --git a/components/browser_ui/widget/android/java/res/values/dimens.xml b/components/browser_ui/widget/android/java/res/values/dimens.xml
index 7ab6fd8..63433c4 100644
--- a/components/browser_ui/widget/android/java/res/values/dimens.xml
+++ b/components/browser_ui/widget/android/java/res/values/dimens.xml
@@ -12,6 +12,7 @@
     <dimen name="clear_text_button_end_padding">10dp</dimen>
     <dimen name="default_rounded_corner_radius">8dp</dimen>
     <dimen name="card_rounded_corner_radius">16dp</dimen>
+    <dimen name="card_rounded_corner_small_radius">4dp</dimen>
     <dimen name="dialog_corner_radius">24dp</dimen>
     <dimen name="sheet_background_elev">@dimen/default_elevation_0</dimen>
 
diff --git a/components/browser_watcher/exit_code_watcher_win.cc b/components/browser_watcher/exit_code_watcher_win.cc
index 97331f8e..e707566 100644
--- a/components/browser_watcher/exit_code_watcher_win.cc
+++ b/components/browser_watcher/exit_code_watcher_win.cc
@@ -15,7 +15,6 @@
 #include "base/process/process_handle.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace browser_watcher {
 namespace {
diff --git a/components/browsing_data/content/cache_storage_helper_unittest.cc b/components/browsing_data/content/cache_storage_helper_unittest.cc
index dc222e7..83e3c88 100644
--- a/components/browsing_data/content/cache_storage_helper_unittest.cc
+++ b/components/browsing_data/content/cache_storage_helper_unittest.cc
@@ -5,7 +5,6 @@
 #include "components/browsing_data/content/cache_storage_helper.h"
 
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/components/browsing_data/content/file_system_helper.h b/components/browsing_data/content/file_system_helper.h
index a4f80c17..70c50e4 100644
--- a/components/browsing_data/content/file_system_helper.h
+++ b/components/browsing_data/content/file_system_helper.h
@@ -14,6 +14,7 @@
 
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "storage/common/file_system/file_system_types.h"
 #include "url/origin.h"
 
diff --git a/components/browsing_data/content/indexed_db_helper_unittest.cc b/components/browsing_data/content/indexed_db_helper_unittest.cc
index a5da1d4c..cf6eb7f0 100644
--- a/components/browsing_data/content/indexed_db_helper_unittest.cc
+++ b/components/browsing_data/content/indexed_db_helper_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/components/browsing_data/content/service_worker_helper_unittest.cc b/components/browsing_data/content/service_worker_helper_unittest.cc
index 554c3cd..85f3903 100644
--- a/components/browsing_data/content/service_worker_helper_unittest.cc
+++ b/components/browsing_data/content/service_worker_helper_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/components/browsing_data/content/shared_worker_helper_unittest.cc b/components/browsing_data/content/shared_worker_helper_unittest.cc
index 5381c1e7..b846459a 100644
--- a/components/browsing_data/content/shared_worker_helper_unittest.cc
+++ b/components/browsing_data/content/shared_worker_helper_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "components/browsing_data/content/shared_worker_helper.h"
 
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/components/browsing_topics/browsing_topics_state.h b/components/browsing_topics/browsing_topics_state.h
index a8f6348..028e1d3d 100644
--- a/components/browsing_topics/browsing_topics_state.h
+++ b/components/browsing_topics/browsing_topics_state.h
@@ -7,6 +7,7 @@
 
 #include "base/containers/queue.h"
 #include "base/files/important_file_writer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/browsing_topics/common/common_types.h"
 #include "components/browsing_topics/epoch_topics.h"
diff --git a/components/captive_portal/core/captive_portal_detector_unittest.cc b/components/captive_portal/core/captive_portal_detector_unittest.cc
index 98067db5..ac8491d2 100644
--- a/components/captive_portal/core/captive_portal_detector_unittest.cc
+++ b/components/captive_portal/core/captive_portal_detector_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/captive_portal/core/captive_portal_testing_utils.h"
 #include "net/base/net_errors.h"
diff --git a/components/cast_receiver/README.md b/components/cast_receiver/README.md
index 9d90795..f494e35 100644
--- a/components/cast_receiver/README.md
+++ b/components/cast_receiver/README.md
@@ -1,5 +1,156 @@
+# Introduction
+
 This component provides the shared Cast receiver implementation that is used by
 various embedders throughout Chromium. It is planned to be used for WebEngine,
 Chromecast hardware, and others.
 
-TODO(crbug.com/1357171): Expand on documentation
+# Usage
+
+The specifics of integrating this component with an existing Chromium embedder
+are described below. The canonical implementation of this component can be found
+at
+[`//chromecast/cast_core`](https://source.chromium.org/chromium/chromium/src/+/main:chromecast/cast_core/).
+For specific usages of the below described APIs, see its
+[RuntimeServiceImpl](https://source.chromium.org/chromium/chromium/src/+/main:chromecast/cast_core/runtime/browser/runtime_service_impl.h;l=33)
+and
+[RuntimeApplicationServiceImpl](https://source.chromium.org/chromium/chromium/src/+/main:chromecast/cast_core/runtime/browser/runtime_application_service_impl.h)
+classes, which use this component to implement a
+[`gRPC`-defined service](https://source.chromium.org/chromium/chromium/src/+/main:third_party/cast_core/public/src/proto/runtime/runtime_service.proto).
+
+## Integration With Existing Code
+
+Integration with an existing Chromium embedder is relateively easy, with only
+a small number of integration points required:
+
+### Browser-Side Integration
+
+Browser-side integration has two parts:
+
+#### Permissions Management
+
+The
+[`Permissions Manager`](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/permissions_manager.h)
+is used to define the
+[permissions](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/permissions/permission_utils.h;drc=b8524150039182faf7988e9478a9eff89728ac03;l=23)
+that can be used by a given application. It is integrated into an existing
+Chromium embedder by
+[calling into](https://source.chromium.org/chromium/chromium/src/+/main:chromecast/browser/cast_permission_manager.cc;l=104)
+the
+[PermissionsManager::GetPermissionsStatus()](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/permissions_manager.h;l=37)
+function from the embedder's implementation of
+[`content::PermissionControllerDelegate::GetPermissionStatus()`](https://source.chromium.org/chromium/chromium/src/+/main:content/public/browser/permission_controller_delegate.h;l=75).
+
+#### Runtime Hooks
+
+The remaining integration is done by creating an instance of the
+[`ContentBrowserClientMixins` class](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/content_browser_client_mixins.h;l=45)
+in the `ContentBrowserClient` implementation for this embedder. For instance,
+this is
+[currently done](https://source.chromium.org/chromium/chromium/src/+/main:chromecast/cast_core/runtime/browser/cast_runtime_content_browser_client.cc;l=54)
+in the Cast Core implementation. From there, the `OnWebContentsCreated()` and
+`CreateURLLoaderThrottles()` functions must be called from the
+`ContentBrowserClient` functions of the same name.
+
+The embedder may additionally call `AddApplicationStateObserver()` or
+`AddStreamingResolutionObserver()` to subscribe to state change events for the
+runtime.
+
+### Renderer-Side Integration
+
+Renderer side integration is done very similarly to the runtime hooks for the
+browser-side integration as described above. Specifically, from the embedder's
+`ContentRendererClient` implementation, an instance of
+`ContentRendererClientMixins` must be
+[created](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/renderer/public/content_renderer_client_mixins.h;l=34)
+as is
+[currently done](https://source.chromium.org/chromium/chromium/src/+/main:chromecast/renderer/cast_content_renderer_client.cc;l=88)
+in the Cast Core implementation. Then, the functions of this calls must all be
+called from the appropriate `ContentRendererClient` functions as outlined in the
+class's documentation.
+
+## Running Applications
+
+### Lifetime of an Application
+
+Once the above integration is done, applications can be created by first
+[creating an instance](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/content_browser_client_mixins.h;l=88)
+of `RuntimeApplicationDispatcher` using the
+`ContentBrowserClientMixins::CreateApplicationDispatcher()` function, then
+calling
+[`CreateApplication()`](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/runtime_application_dispatcher.h;l=36)
+and providing
+[basic information about the application](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/application_config.h)
+(such as application id, requested permissions, etc). Note that this requires a
+template parameter of a type implementing the
+[`EmbedderApplication` interface](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/embedder_application.h;l=29).
+
+After creation, an application will always exist in one of the following
+lifetime states, transitioning between them using functions defined in the
+[`RuntimeApplication` interface](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/runtime_application.h;l=19):
+
+1. _Created_: In this state, the `RuntimeApplication` object has been created,
+but nothing else has been done.
+2. _Loaded_: In this state, information pertaining to the application has been
+provided (e.g. any platform-specific application info), and is considered to
+have started "running", but no content should be displayed on the screen.
+3. _Launched_: The application has been displayed on the screen, and the user
+may interact with it.
+4. _Stopped_: The application is no longer running and should not be displayed.
+
+It is expected that the application will be _loaded_ immediately after being
+_created_, and then _launched_ shortly after.
+
+When the application is to be destroyed, this can be done through calling
+`RuntimeApplicationDispatcher::DestroyApplication()`.
+
+### Embedder-Specific Application Details
+
+Implementing
+[`EmbedderApplication`](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/embedder_application.h;l=29)
+is where the majority of the embedder's work is located. Doing so requires the
+following:
+
+- Callbacks to inform the embedder's infrastructure of application state changes
+(`NotifyApplicationStarted()`, `NotifyApplicationStopped()`, and
+`NotifyMediaPlaybackChanged()`).
+- Accessors to the application-specific data for displaying its contents
+(`GetWebContents()` and `GetAllBindings()`).
+- Embedder-specific controls for the underlying application
+ (`GetMessagePortService()` and `GetContentWindowControls()`).
+- Other optional overloads that may be needed depending on the embedder's
+infrastructure.
+
+Implementing this type therefore requires at minimum implementations of the
+following two embedder-specific classes:
+- `ContentWindowControls`: Used for controlling the UX Window associated with
+this application.
+- `MessagePortService`: A wrapper around message port functionality, used to
+handle communication with services outside of this component.
+
+### Connecting Runtime Applications and Embedder Applications
+
+When
+[creating an instance](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/runtime_application_dispatcher.h;l=28)
+of `EmbedderApplication` through `RuntimeApplicationDispatcher`, an instance of
+[`RuntimeApplication`](https://source.chromium.org/chromium/chromium/src/+/main:components/cast_receiver/browser/public/runtime_application.h;l=19)
+is provided, which can be used for control of this application. Specifically:
+
+- Application Lifetime can be controlled through the `Load()`, `Launch()`, and
+`Stop()` functions.
+- Application State can be controlled with the `SetMediaBlocking()`,
+`SetVisibility()`, `SetTouchInputEnabled()`, and `SetUrlRewriteRules()`
+functions.
+
+A pointer to this instance of `EmbedderApplication` will also be provided to the
+`RuntimeApplicaiton`, which will use the callbacks and controls as described
+previously throughout the application's lifetime.
+
+# Architecture
+
+TODO(crbug.com/1357171): Add additional documentation.
+
+# Known Issues and Limitations
+
+- TODO(crbug.com/1405480): DRM is not supported.
+- TODO(crbug.com/1403250): Remoting has a number of issues currently being
+investigated.
diff --git a/components/cast_receiver/browser/bindings_manager.cc b/components/cast_receiver/browser/bindings_manager.cc
index 0b69894..45b07737 100644
--- a/components/cast_receiver/browser/bindings_manager.cc
+++ b/components/cast_receiver/browser/bindings_manager.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/notreached.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/cast/message_port/blink_message_port_adapter.h"
 #include "components/cast/message_port/platform_message_port.h"
 #include "components/cast_receiver/browser/public/message_port_service.h"
diff --git a/components/cast_receiver/browser/runtime_application_base.h b/components/cast_receiver/browser/runtime_application_base.h
index feac3156..c7371fc 100644
--- a/components/cast_receiver/browser/runtime_application_base.h
+++ b/components/cast_receiver/browser/runtime_application_base.h
@@ -12,6 +12,7 @@
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "components/cast_receiver/browser/application_client.h"
 #include "components/cast_receiver/browser/public/application_config.h"
diff --git a/components/cast_streaming/browser/cast_streaming_session.cc b/components/cast_streaming/browser/cast_streaming_session.cc
index c5a066cc..9e38f59 100644
--- a/components/cast_streaming/browser/cast_streaming_session.cc
+++ b/components/cast_streaming/browser/cast_streaming_session.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/cast_streaming/browser/stream_consumer.h"
 #include "components/cast_streaming/public/config_conversions.h"
diff --git a/components/cast_streaming/browser/playback_command_dispatcher.cc b/components/cast_streaming/browser/playback_command_dispatcher.cc
index 569e7a6..2b0ce72 100644
--- a/components/cast_streaming/browser/playback_command_dispatcher.cc
+++ b/components/cast_streaming/browser/playback_command_dispatcher.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/cast_streaming/browser/renderer_rpc_call_translator.h"
 #include "components/cast_streaming/public/rpc_call_message_handler.h"
 #include "media/mojo/mojom/renderer.mojom.h"
diff --git a/components/cast_streaming/browser/renderer_control_multiplexer.cc b/components/cast_streaming/browser/renderer_control_multiplexer.cc
index 2ae8b7c..231dc2b3 100644
--- a/components/cast_streaming/browser/renderer_control_multiplexer.cc
+++ b/components/cast_streaming/browser/renderer_control_multiplexer.cc
@@ -5,6 +5,7 @@
 #include "components/cast_streaming/browser/renderer_control_multiplexer.h"
 
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 
 namespace cast_streaming {
diff --git a/components/cast_streaming/browser/renderer_control_multiplexer.h b/components/cast_streaming/browser/renderer_control_multiplexer.h
index 091dcea9..d5356b3 100644
--- a/components/cast_streaming/browser/renderer_control_multiplexer.h
+++ b/components/cast_streaming/browser/renderer_control_multiplexer.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/mojo/mojom/renderer.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/components/cast_streaming/renderer/frame_injecting_demuxer.h b/components/cast_streaming/renderer/frame_injecting_demuxer.h
index 2b3ae63..c467b69 100644
--- a/components/cast_streaming/renderer/frame_injecting_demuxer.h
+++ b/components/cast_streaming/renderer/frame_injecting_demuxer.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_CAST_STREAMING_RENDERER_FRAME_INJECTING_DEMUXER_H_
 #define COMPONENTS_CAST_STREAMING_RENDERER_FRAME_INJECTING_DEMUXER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/cast_streaming/public/mojom/demuxer_connector.mojom.h"
 #include "media/base/demuxer.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc b/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc
index c1f51846..eea26db0 100644
--- a/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc
+++ b/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc
@@ -6,6 +6,7 @@
 
 #include "base/notreached.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace cast_streaming {
 namespace {
diff --git a/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.cc b/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.cc
index 36cb1de..b6e14c4 100644
--- a/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.cc
+++ b/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.cc
@@ -4,6 +4,7 @@
 
 #include "components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/cast_streaming/renderer/playback_command_forwarding_renderer.h"
 
 namespace cast_streaming {
diff --git a/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.h b/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.h
index 4b55d6ed..6e6c39a4 100644
--- a/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.h
+++ b/components/cast_streaming/renderer/playback_command_forwarding_renderer_factory.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/renderer_factory.h"
 #include "media/mojo/mojom/renderer.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/components/cast_streaming/renderer/public/resource_provider.h b/components/cast_streaming/renderer/public/resource_provider.h
index 87d1a5d..2081b5b4 100644
--- a/components/cast_streaming/renderer/public/resource_provider.h
+++ b/components/cast_streaming/renderer/public/resource_provider.h
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/cast_streaming/public/mojom/demuxer_connector.mojom.h"
 #include "components/cast_streaming/public/mojom/renderer_controller.mojom.h"
 #include "media/mojo/mojom/renderer.mojom.h"
diff --git a/components/cast_streaming/renderer/resource_provider_impl.cc b/components/cast_streaming/renderer/resource_provider_impl.cc
index d3ca1504..e1d7f28 100644
--- a/components/cast_streaming/renderer/resource_provider_impl.cc
+++ b/components/cast_streaming/renderer/resource_provider_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/cast_streaming/public/cast_streaming_url.h"
 #include "components/cast_streaming/public/features.h"
diff --git a/components/cast_streaming/renderer/web_codecs/stream_control_channel.cc b/components/cast_streaming/renderer/web_codecs/stream_control_channel.cc
index b990be46..c3a7510 100644
--- a/components/cast_streaming/renderer/web_codecs/stream_control_channel.cc
+++ b/components/cast_streaming/renderer/web_codecs/stream_control_channel.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/cast_streaming/renderer/web_codecs/stream_control_channel.h"
+#include "base/task/sequenced_task_runner.h"
 
 #include <utility>
 
diff --git a/components/cdm/browser/cdm_message_filter_android.cc b/components/cdm/browser/cdm_message_filter_android.cc
index 8b3d126..40c1620 100644
--- a/components/cdm/browser/cdm_message_filter_android.cc
+++ b/components/cdm/browser/cdm_message_filter_android.cc
@@ -12,6 +12,7 @@
 #include "base/android/build_info.h"
 #include "base/feature_list.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/cdm/common/cdm_messages_android.h"
 #include "content/public/browser/android/android_overlay_provider.h"
diff --git a/components/certificate_transparency/chrome_require_ct_delegate.cc b/components/certificate_transparency/chrome_require_ct_delegate.cc
index 81a3255..6bac56b 100644
--- a/components/certificate_transparency/chrome_require_ct_delegate.cc
+++ b/components/certificate_transparency/chrome_require_ct_delegate.cc
@@ -21,7 +21,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "components/url_formatter/url_fixer.h"
 #include "components/url_matcher/url_matcher.h"
diff --git a/components/chromeos_camera/gpu_jpeg_encode_accelerator_factory.cc b/components/chromeos_camera/gpu_jpeg_encode_accelerator_factory.cc
index afceff1..eb3a17f 100644
--- a/components/chromeos_camera/gpu_jpeg_encode_accelerator_factory.cc
+++ b/components/chromeos_camera/gpu_jpeg_encode_accelerator_factory.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "media/base/media_switches.h"
 #include "media/gpu/buildflags.h"
diff --git a/components/chromeos_camera/mojo_mjpeg_decode_accelerator.cc b/components/chromeos_camera/mojo_mjpeg_decode_accelerator.cc
index d77e4ee..2a2fc6d 100644
--- a/components/chromeos_camera/mojo_mjpeg_decode_accelerator.cc
+++ b/components/chromeos_camera/mojo_mjpeg_decode_accelerator.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/components/commerce/core/commerce_feature_list.cc b/components/commerce/core/commerce_feature_list.cc
index 89a83c7..ac25489 100644
--- a/components/commerce/core/commerce_feature_list.cc
+++ b/components/commerce/core/commerce_feature_list.cc
@@ -136,10 +136,6 @@
              base::FEATURE_DISABLED_BY_DEFAULT);
 #endif  // BUILDFLAG(IS_ANDROID)
 
-BASE_FEATURE(kShoppingListEnableDesyncResolution,
-             "ShoppingListEnableDesyncResolution",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 BASE_FEATURE(kShoppingPDPMetrics,
              "ShoppingPDPMetrics",
              base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/commerce/core/commerce_feature_list.h b/components/commerce/core/commerce_feature_list.h
index 1edd84246..ceb070b 100644
--- a/components/commerce/core/commerce_feature_list.h
+++ b/components/commerce/core/commerce_feature_list.h
@@ -76,7 +76,6 @@
 extern const base::FeatureParam<bool> kDeleteAllMerchantsOnClearBrowsingHistory;
 BASE_DECLARE_FEATURE(kShoppingList);
 BASE_DECLARE_FEATURE(kShoppingListRegionLaunched);
-BASE_DECLARE_FEATURE(kShoppingListEnableDesyncResolution);
 BASE_DECLARE_FEATURE(kShoppingPDPMetrics);
 BASE_DECLARE_FEATURE(kShoppingPDPMetricsRegionLaunched);
 BASE_DECLARE_FEATURE(kRetailCoupons);
diff --git a/components/commerce/core/shopping_power_bookmark_data_provider_unittest.cc b/components/commerce/core/shopping_power_bookmark_data_provider_unittest.cc
index 7355444..f282c8cc 100644
--- a/components/commerce/core/shopping_power_bookmark_data_provider_unittest.cc
+++ b/components/commerce/core/shopping_power_bookmark_data_provider_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_node.h"
 #include "components/bookmarks/test/test_bookmark_client.h"
@@ -113,4 +112,4 @@
 }
 
 }  // namespace
-}  // namespace commerce
\ No newline at end of file
+}  // namespace commerce
diff --git a/components/commerce/core/shopping_service.cc b/components/commerce/core/shopping_service.cc
index 7024e1bd..b395425f 100644
--- a/components/commerce/core/shopping_service.cc
+++ b/components/commerce/core/shopping_service.cc
@@ -273,9 +273,6 @@
 }
 
 void ShoppingService::UpdateProductInfoCacheForRemoval(const GURL& url) {
-  if (!IsProductInfoApiEnabled())
-    return;
-
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Check if the previously navigated URL cache needs to be cleared. If more
@@ -410,9 +407,6 @@
     ProductInfoCallback callback,
     optimization_guide::OptimizationGuideDecision decision,
     const optimization_guide::OptimizationMetadata& metadata) {
-  if (!IsProductInfoApiEnabled())
-    return;
-
   // If optimization guide returns negative, return a negative signal with an
   // empty data object.
   if (decision != optimization_guide::OptimizationGuideDecision::kTrue) {
diff --git a/components/commerce/core/webui/shopping_list_handler.cc b/components/commerce/core/webui/shopping_list_handler.cc
index b03fb35..889940e 100644
--- a/components/commerce/core/webui/shopping_list_handler.cc
+++ b/components/commerce/core/webui/shopping_list_handler.cc
@@ -92,10 +92,10 @@
       pref_service_(prefs),
       tracker_(tracker),
       locale_(locale) {
-  if (base::FeatureList::IsEnabled(kShoppingList)) {
-    scoped_observation_.Observe(bookmark_model);
-    shopping_service_->ScheduleSavedProductUpdate();
-  }
+  // It is safe to schedule updates and observe bookmarks. If the feature is
+  // disabled, no new information will be fetched or provided to the frontend.
+  scoped_observation_.Observe(bookmark_model);
+  shopping_service_->ScheduleSavedProductUpdate();
 }
 
 ShoppingListHandler::~ShoppingListHandler() = default;
diff --git a/components/component_updater/installer_policies/optimization_hints_component_installer_unittest.cc b/components/component_updater/installer_policies/optimization_hints_component_installer_unittest.cc
index afcafc6f..dc8c323 100644
--- a/components/component_updater/installer_policies/optimization_hints_component_installer_unittest.cc
+++ b/components/component_updater/installer_policies/optimization_hints_component_installer_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "components/component_updater/mock_component_updater_service.h"
 #include "components/optimization_guide/core/optimization_guide_constants.h"
diff --git a/components/component_updater/installer_policies/trust_token_key_commitments_component_installer_policy_unittest.cc b/components/component_updater/installer_policies/trust_token_key_commitments_component_installer_policy_unittest.cc
index 5dc0cda..e4fc5d1 100644
--- a/components/component_updater/installer_policies/trust_token_key_commitments_component_installer_policy_unittest.cc
+++ b/components/component_updater/installer_policies/trust_token_key_commitments_component_installer_policy_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/test/scoped_command_line.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "base/version.h"
 #include "components/component_updater/component_updater_switches.h"
diff --git a/components/content_capture/browser/content_capture_receiver.h b/components/content_capture/browser/content_capture_receiver.h
index 5a505c9..6dd9fe9 100644
--- a/components/content_capture/browser/content_capture_receiver.h
+++ b/components/content_capture/browser/content_capture_receiver.h
@@ -10,6 +10,7 @@
 #include "base/cancelable_callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/content_capture/browser/content_capture_frame.h"
 #include "components/content_capture/common/content_capture.mojom.h"
 #include "components/content_capture/common/content_capture_data.h"
diff --git a/components/content_creation/notes/core/templates/template_store.h b/components/content_creation/notes/core/templates/template_store.h
index a0ba5a55..d253bde 100644
--- a/components/content_creation/notes/core/templates/template_store.h
+++ b/components/content_creation/notes/core/templates/template_store.h
@@ -95,4 +95,4 @@
 
 }  // namespace content_creation
 
-#endif  // COMPONENTS_CONTENT_CREATION_NOTES_CORE_TEMPLATES_TEMPLATE_STORE_H_
\ No newline at end of file
+#endif  // COMPONENTS_CONTENT_CREATION_NOTES_CORE_TEMPLATES_TEMPLATE_STORE_H_
diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc
index fc8c3a3b..ebfab871 100644
--- a/components/content_settings/core/browser/host_content_settings_map.cc
+++ b/components/content_settings/core/browser/host_content_settings_map.cc
@@ -628,28 +628,6 @@
         continue;
       }
 
-      ContentSettingsPattern::SchemeType scheme =
-          setting_entry.primary_pattern.GetScheme();
-      base::UmaHistogramEnumeration("ContentSettings.ExceptionScheme", scheme,
-                                    ContentSettingsPattern::SCHEME_MAX);
-
-      if (scheme == ContentSettingsPattern::SCHEME_FILE) {
-        base::UmaHistogramBoolean("ContentSettings.ExceptionSchemeFile.HasPath",
-                                  setting_entry.primary_pattern.HasPath());
-        size_t num_values;
-        int histogram_value =
-            ContentSettingTypeToHistogramValue(content_type, &num_values);
-        if (setting_entry.primary_pattern.HasPath()) {
-          base::UmaHistogramExactLinear(
-              "ContentSettings.ExceptionSchemeFile.Type.WithPath",
-              histogram_value, num_values);
-        } else {
-          base::UmaHistogramExactLinear(
-              "ContentSettings.ExceptionSchemeFile.Type.WithoutPath",
-              histogram_value, num_values);
-        }
-      }
-
       if (setting_entry.source == "preference") {
         // |content_info| will be non-nullptr iff |content_type| is a content
         // setting rather than a website setting.
diff --git a/components/content_settings/core/common/content_settings_pattern.cc b/components/content_settings/core/common/content_settings_pattern.cc
index 30568ff..e0f8f0c 100644
--- a/components/content_settings/core/common/content_settings_pattern.cc
+++ b/components/content_settings/core/common/content_settings_pattern.cc
@@ -619,11 +619,6 @@
   return parts_.host;
 }
 
-bool ContentSettingsPattern::HasPath() const {
-  DCHECK_EQ(GetScheme(), SCHEME_FILE);
-  return !parts_.is_path_wildcard && !parts_.path.empty();
-}
-
 ContentSettingsPattern::Relation ContentSettingsPattern::Compare(
     const ContentSettingsPattern& other) const {
   // Two invalid patterns are identical in the way they behave. They don't match
diff --git a/components/content_settings/core/common/content_settings_pattern.h b/components/content_settings/core/common/content_settings_pattern.h
index 83da1001..9f28436 100644
--- a/components/content_settings/core/common/content_settings_pattern.h
+++ b/components/content_settings/core/common/content_settings_pattern.h
@@ -227,10 +227,6 @@
   // Returns the host of a pattern.
   const std::string& GetHost() const;
 
-  // True if this pattern has a non-empty path.  Can only be used for patterns
-  // with file: schemes.
-  bool HasPath() const;
-
   // Compares the pattern with a given |other| pattern and returns the
   // |Relation| of the two patterns.
   Relation Compare(const ContentSettingsPattern& other) const;
diff --git a/components/content_settings/core/common/content_settings_pattern_unittest.cc b/components/content_settings/core/common/content_settings_pattern_unittest.cc
index 2a2e883..713b475e 100644
--- a/components/content_settings/core/common/content_settings_pattern_unittest.cc
+++ b/components/content_settings/core/common/content_settings_pattern_unittest.cc
@@ -898,13 +898,6 @@
             Pattern("devtools://devtools/").GetScheme());
 }
 
-TEST(ContentSettingsPatternTest, FileSchemeHasPath) {
-  EXPECT_FALSE(Pattern("file:///*").HasPath());
-  EXPECT_TRUE(Pattern("file:///foo").HasPath());
-  EXPECT_TRUE(Pattern("file:///foo/bar/").HasPath());
-  EXPECT_TRUE(Pattern("file:///foo/bar/test.html").HasPath());
-}
-
 TEST(ContentSettingsPatternTest, MatchesSingleOrigin) {
   EXPECT_FALSE(Pattern("*").MatchesSingleOrigin());
   EXPECT_FALSE(Pattern("*://example.com:443").MatchesSingleOrigin());
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index 0a690de..b33f342 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -19,7 +19,6 @@
 import("//url/features.gni")
 
 _templates_dir = "$target_gen_dir/templates"
-_gn_path = "//buildtools/linux64/gn"
 
 declare_args() {
   # In integrated mode, CronetEngine will use the shared network task runner by
@@ -567,10 +566,10 @@
   jar_path = "$_package_dir/cronet_impl_native_java.jar"
   supports_android = true
   requires_android = true
-
-  # To avoid dual definition of classes some dependencies are added
+  
+  # To avoid dual definition of classes some dependencies are added 
   # downstream (Maven deps, BUILD dependencies), and the bytecode check
-  # doesn't like that.
+  # doesn't like that. 
   enable_bytecode_checks = false
 
   deps = [
@@ -743,7 +742,7 @@
     _excludes += invoker.jar_excluded_patterns
   }
   if (!defined(invoker.remove_gen_jni) || invoker.remove_gen_jni) {
-    _excludes += [ "*/GEN_JNI.class" ]
+    _excludes += ["*/GEN_JNI.class"]
   }
   dist_jar(target_name) {
     requires_android = true
@@ -751,7 +750,7 @@
     use_unprocessed_jars = true
     no_build_hooks = true
     jar_excluded_patterns = _excludes
-    forward_variables_from(invoker, "*", [ "jar_excluded_patterns" ])
+    forward_variables_from(invoker, "*", ["jar_excluded_patterns"])
   }
 }
 
@@ -1643,26 +1642,6 @@
     ]
   }
 
-  action("dependencies_checks") {
-    script = "//components/cronet/tools/check_cronet_dependencies.py"
-    inputs = [ "//components/cronet/android/dependencies.txt" ]
-    sources = [
-      "$_gn_path",
-      "//components/cronet/tools/check_cronet_dependencies.sh",
-    ]
-    outputs = [ "$target_gen_dir/$target_name.stamp" ]
-    args = [
-      "--new_dependencies_script",
-      rebase_path("//components/cronet/tools/check_cronet_dependencies.sh",
-                  root_build_dir),
-      "--old_dependencies",
-      rebase_path(inputs[0], root_build_dir),
-      "--stamp",
-      rebase_path(outputs[0], root_build_dir),
-    ]
-    deps = [ ":cronet" ]
-  }
-
   group("cronet_package_android") {
     # Marked as testonly as it contains test-only targets too.
     testonly = true
@@ -1681,7 +1660,6 @@
         ":cronet_package_copy_resources",
         ":cronet_sizes",
         ":cronet_test_package",
-        ":dependencies_checks",
         ":generate_javadoc",
         ":generate_licenses",
         ":jar_cronet_api_source",
diff --git a/components/cronet/android/cronet_context_adapter.cc b/components/cronet/android/cronet_context_adapter.cc
index dc377342..6a69fac4 100644
--- a/components/cronet/android/cronet_context_adapter.cc
+++ b/components/cronet/android/cronet_context_adapter.cc
@@ -30,7 +30,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "components/cronet/android/buildflags.h"
diff --git a/components/cronet/android/cronet_integrated_mode_state.cc b/components/cronet/android/cronet_integrated_mode_state.cc
index 8e7f1464..dcf3ba7 100644
--- a/components/cronet/android/cronet_integrated_mode_state.cc
+++ b/components/cronet/android/cronet_integrated_mode_state.cc
@@ -5,6 +5,7 @@
 #include "components/cronet/android/cronet_integrated_mode_state.h"
 
 #include "base/atomicops.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace cronet {
 namespace {
diff --git a/components/cronet/android/cronet_integrated_mode_state.h b/components/cronet/android/cronet_integrated_mode_state.h
index 8b4a179..f65a1267 100644
--- a/components/cronet/android/cronet_integrated_mode_state.h
+++ b/components/cronet/android/cronet_integrated_mode_state.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_CRONET_ANDROID_CRONET_INTEGRATED_MODE_STATE_H_
 #define COMPONENTS_CRONET_ANDROID_CRONET_INTEGRATED_MODE_STATE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 
 namespace cronet {
diff --git a/components/cronet/android/cronet_library_loader.cc b/components/cronet/android/cronet_library_loader.cc
index 52f4ac5..8838c44 100644
--- a/components/cronet/android/cronet_library_loader.cc
+++ b/components/cronet/android/cronet_library_loader.cc
@@ -19,6 +19,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/current_thread.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_executor.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "build/build_config.h"
diff --git a/components/cronet/android/dependencies.txt b/components/cronet/android/dependencies.txt
deleted file mode 100644
index 96488e45..0000000
--- a/components/cronet/android/dependencies.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-//base
-//base/allocator
-//base/allocator/partition_allocator
-//base/android/jni_generator
-//base/numerics
-//base/third_party/double_conversion
-//base/third_party/dynamic_annotations
-//base/third_party/symbolize
-//base/third_party/xdg_mime
-//base/third_party/xdg_user_dirs
-//base/tracing/protos
-//build
-//build/android
-//build/android/bytecode
-//build/config
-//build/config/clang
-//build/config/compiler
-//build/config/sanitizers
-//build/rust
-//buildtools/third_party/libc++
-//buildtools/third_party/libc++abi
-//buildtools/third_party/libunwind
-//build/win
-//clank/third_party/google3
-//components/cronet
-//components/cronet/android
-//components/cronet/native
-//components/grpc_support
-//components/metrics
-//components/nacl/common
-//components/prefs
-//components/prefs/android
-//crypto
-//net
-//net/android
-//net/base/registry_controlled_domains
-//net/cert
-//net/data/ssl/chrome_root_store
-//net/dns
-//net/dns/public
-//net/http
-//net/third_party/quiche
-//net/tools/huffman_trie
-//net/tools/root_store_tool
-//net/tools/transport_security_state_generator
-//net/traffic_annotation
-//third_party/abseil-cpp
-//third_party/android_deps
-//third_party/android_ndk
-//third_party/android_sdk
-//third_party/androidx
-//third_party/ashmem
-//third_party/boringssl
-//third_party/boringssl/src/third_party/fiat
-//third_party/brotli
-//third_party/ced
-//third_party/icu
-//third_party/ijar
-//third_party/jdk
-//third_party/jsoncpp
-//third_party/libevent
-//third_party/metrics_proto
-//third_party/modp_b64
-//third_party/perfetto
-//third_party/perfetto/protos/third_party/chromium
-//third_party/protobuf
-//third_party/zlib
-//tools/android/errorprone_plugin
-//tools/grit
-//tools/gritsettings
-//url
diff --git a/components/cronet/android/test/cronet_test_util.cc b/components/cronet/android/test/cronet_test_util.cc
index 56b1977..a1fe6ea 100644
--- a/components/cronet/android/test/cronet_test_util.cc
+++ b/components/cronet/android/test/cronet_test_util.cc
@@ -10,7 +10,7 @@
 #include "base/message_loop/message_pump.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/task/sequence_manager/sequence_manager.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/cronet/android/cronet_context_adapter.h"
 #include "components/cronet/android/cronet_tests_jni_headers/CronetTestUtil_jni.h"
 #include "components/cronet/android/cronet_url_request_adapter.h"
diff --git a/components/cronet/cronet_context.cc b/components/cronet/cronet_context.cc
index a651bd7..68829cbc 100644
--- a/components/cronet/cronet_context.cc
+++ b/components/cronet/cronet_context.cc
@@ -25,9 +25,9 @@
 #include "base/memory/raw_ptr.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/metrics/statistics_recorder.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/components/cronet/cronet_context.h b/components/cronet/cronet_context.h
index a1eb1ed..55cdcaa 100644
--- a/components/cronet/cronet_context.h
+++ b/components/cronet/cronet_context.h
@@ -15,6 +15,7 @@
 #include "base/containers/queue.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
 #include "base/values.h"
diff --git a/components/cronet/cronet_global_state_stubs.cc b/components/cronet/cronet_global_state_stubs.cc
index d110cae..dff15ee9 100644
--- a/components/cronet/cronet_global_state_stubs.cc
+++ b/components/cronet/cronet_global_state_stubs.cc
@@ -8,6 +8,8 @@
 
 #include "base/at_exit.h"
 #include "base/feature_list.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "net/proxy_resolution/configured_proxy_resolution_service.h"
diff --git a/components/cronet/ios/Cronet.mm b/components/cronet/ios/Cronet.mm
index 717f352..1e4f587 100644
--- a/components/cronet/ios/Cronet.mm
+++ b/components/cronet/ios/Cronet.mm
@@ -12,6 +12,7 @@
 #include "base/mac/bundle_locations.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/synchronization/lock.h"
+#import "base/task/single_thread_task_runner.h"
 #include "components/cronet/cronet_global_state.h"
 #include "components/cronet/ios/accept_languages_table.h"
 #include "components/cronet/ios/cronet_environment.h"
diff --git a/components/cronet/ios/cronet_environment.h b/components/cronet/ios/cronet_environment.h
index 4351dc5..975155c8 100644
--- a/components/cronet/ios/cronet_environment.h
+++ b/components/cronet/ios/cronet_environment.h
@@ -15,6 +15,8 @@
 #include "base/files/scoped_file.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/values.h"
 #include "components/cronet/url_request_context_config.h"
diff --git a/components/cronet/ios/cronet_environment.mm b/components/cronet/ios/cronet_environment.mm
index a0c595a7..c9f410b 100644
--- a/components/cronet/ios/cronet_environment.mm
+++ b/components/cronet/ios/cronet_environment.mm
@@ -17,6 +17,8 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/path_service.h"
 #include "base/synchronization/waitable_event.h"
+#import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "components/cronet/cronet_buildflags.h"
diff --git a/components/cronet/ios/cronet_global_state_ios.mm b/components/cronet/ios/cronet_global_state_ios.mm
index 3e21509..12fbd2dd 100644
--- a/components/cronet/ios/cronet_global_state_ios.mm
+++ b/components/cronet/ios/cronet_global_state_ios.mm
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/callback.h"
+#import "base/task/sequenced_task_runner.h"
 #include "ios/web/common/user_agent.h"
 #include "ios/web/public/init/ios_global_state.h"
 #include "ios/web/public/init/ios_global_state_configuration.h"
diff --git a/components/cronet/ios/ios_global_state_configuration.cc b/components/cronet/ios/ios_global_state_configuration.cc
index 279e322..0b3b4e2 100644
--- a/components/cronet/ios/ios_global_state_configuration.cc
+++ b/components/cronet/ios/ios_global_state_configuration.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "ios/web/public/init/ios_global_state_configuration.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace ios_global_state {
 
diff --git a/components/cronet/ios/test/cronet_test_base.mm b/components/cronet/ios/test/cronet_test_base.mm
index 3d1289d..3246117 100644
--- a/components/cronet/ios/test/cronet_test_base.mm
+++ b/components/cronet/ios/test/cronet_test_base.mm
@@ -5,6 +5,7 @@
 #include "cronet_test_base.h"
 
 #include "base/location.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "crypto/sha2.h"
 #include "net/base/net_errors.h"
diff --git a/components/cronet/native/upload_data_sink.h b/components/cronet/native/upload_data_sink.h
index e9b6ae0..a4833fd 100644
--- a/components/cronet/native/upload_data_sink.h
+++ b/components/cronet/native/upload_data_sink.h
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/cronet/cronet_context.h"
 #include "components/cronet/cronet_upload_data_stream.h"
 #include "components/cronet/cronet_url_request.h"
diff --git a/components/cronet/network_tasks_unittest.cc b/components/cronet/network_tasks_unittest.cc
index ea5adda..7422838 100644
--- a/components/cronet/network_tasks_unittest.cc
+++ b/components/cronet/network_tasks_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <latch>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "components/cronet/cronet_global_state.h"
diff --git a/components/cronet/tools/check_cronet_dependencies.py b/components/cronet/tools/check_cronet_dependencies.py
deleted file mode 100755
index ccb1287f..0000000
--- a/components/cronet/tools/check_cronet_dependencies.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2022 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""check_cronet_dependencies.py - Keep track of Cronet's dependencies."""
-
-import argparse
-import os
-import subprocess
-import sys
-
-REPOSITORY_ROOT = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir))
-
-sys.path.insert(0, os.path.join(REPOSITORY_ROOT, 'build/android/gyp'))
-from util import build_utils  # pylint: disable=wrong-import-position
-
-
-def normalize_third_party_dep(dependency):
-  third_party_str = 'third_party/'
-  if third_party_str not in dependency:
-    raise ValueError('Dependency is not third_party dependency')
-  root_end_index = dependency.rfind(third_party_str) + len(third_party_str)
-  dependency_name_end_index = dependency.find("/", root_end_index)
-  if dependency_name_end_index == -1:
-    return dependency
-  return dependency[:dependency_name_end_index]
-
-
-def dedup_third_party_deps_internal(dependencies, root_deps=None):
-  if root_deps is None:
-    root_deps = set()
-  deduped_deps = []
-  for dependency in dependencies:
-    if dependency[-1] == '/':
-      raise ValueError('Dependencies must not have a trailing forward slash')
-
-    if 'third_party/' not in dependency:
-      # We don't apply any filtering to non third_party deps.
-      deduped_deps.append(dependency)
-      continue
-
-    # Take the last occurrence to consider //third_party/foo and
-    # //third_party/foo/third_party/bar as two distinct dependencies.
-    third_party_dep_segments = dependency.split('third_party/')
-    third_party_dep = third_party_dep_segments[-1]
-    if '/' not in third_party_dep:
-      # Root dependencies are always unique.
-      # Note: We append the amount of splits to differentiate between
-      # //third_party/foo and //third_party/bar/third_party/foo.
-      root_dep = str(len(third_party_dep_segments)) + third_party_dep
-      root_deps.add(root_dep)
-      deduped_deps.append(normalize_third_party_dep(dependency))
-    else:
-      third_party_dep_root = (str(len(third_party_dep_segments)) +
-                              third_party_dep.split('/')[0])
-      if third_party_dep_root not in root_deps:
-        root_deps.add(third_party_dep_root)
-        deduped_deps.append(normalize_third_party_dep(dependency))
-  return (deduped_deps, root_deps)
-
-
-def dedup_third_party_deps(old_dependencies, new_dependencies):
-  """Maintains only a single target for each third_party dependency."""
-  (_, root_deps) = dedup_third_party_deps_internal(old_dependencies)
-  (deduped_deps, _) = dedup_third_party_deps_internal(new_dependencies,
-                                                      root_deps=root_deps)
-  return '\n'.join(deduped_deps)
-
-
-def main():
-  parser = argparse.ArgumentParser(
-      prog='Check cronet dependencies',
-      description=
-      "Checks whether Cronet's current dependencies match the known ones.")
-  parser.add_argument(
-      '--new_dependencies_script',
-      type=str,
-      help='Relative path to the script that outputs new dependencies',
-      required=True,
-  )
-  parser.add_argument(
-      '--old_dependencies',
-      type=str,
-      help='Relative path to file that contains the old dependencies',
-      required=True,
-  )
-  parser.add_argument(
-      '--stamp',
-      help='Path to touch on success',
-  )
-  args = parser.parse_args()
-
-  new_dependencies = subprocess.check_output(
-      [args.new_dependencies_script, args.old_dependencies]).decode('utf-8')
-  with open(args.old_dependencies, 'r') as f:
-    new_dependencies = dedup_third_party_deps(f.read().splitlines(),
-                                              new_dependencies.splitlines())
-  if new_dependencies != '':
-    print('New dependencies detected:')
-    print(new_dependencies)
-    print('Please update: ' + args.old_dependencies)
-    sys.exit(-1)
-  else:
-    build_utils.Touch(args.stamp)
-
-
-if __name__ == '__main__':
-  main()
diff --git a/components/cronet/tools/check_cronet_dependencies.sh b/components/cronet/tools/check_cronet_dependencies.sh
deleted file mode 100755
index fd39d9d..0000000
--- a/components/cronet/tools/check_cronet_dependencies.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-# Copyright 2022 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# check_cronet_dependencies.sh - Prints new Cronet's deps to stdout.
-#
-# Arguments:
-#   $1: relative path to file containing old/known Cronet's dependencies.
-#
-# Output:
-#   Exit code 0: deduped list of new Cronet's dependencies to stdout.
-#   Otherwise: something went wrong.
-
-set -e
-
-OLD_DEPS=$(realpath "$1")
-GN_PATH=$(realpath "../../buildtools/linux64/gn")
-TMP_DIR=$(mktemp -d -p ./)
-trap "rm -rf ${TMP_DIR}" EXIT
-
-# gn desc *might* modify the target build dir. To be sure that doesn't affect
-# the current build, create a new build dir with the same gn args and run gn
-# desc there instead.
-GN_ARGS=$(cat args.gn | tr '\n' ' ' | sed "s/ = /=/g")
-"$GN_PATH" gen "$TMP_DIR" --args="$GN_ARGS" &>/dev/null
-
-(
-cd $TMP_DIR
-NEW_DEPS=$(mktemp -p ./)
-
-# Create new dependencies list and drop duplicates.
-"$GN_PATH" desc ./ //components/cronet/android:cronet deps --all |
-  awk -F ':' '{new_deps[$1]=1}; END{for(dep in new_deps) print dep}' |
-  sort > "$NEW_DEPS"
-
-# Filter out dependencies that already existed. I.e., print new dependencies to
-# stdout.
-awk 'NR==FNR {old_deps[$0]=1; next} {if(!old_deps[$0]) print $0}' \
-  "$OLD_DEPS" "$NEW_DEPS" |
-  sort
-)
diff --git a/components/dbus/thread_linux/dbus_thread_linux.cc b/components/dbus/thread_linux/dbus_thread_linux.cc
index 8651ed3..7bdd83c 100644
--- a/components/dbus/thread_linux/dbus_thread_linux.cc
+++ b/components/dbus/thread_linux/dbus_thread_linux.cc
@@ -5,6 +5,7 @@
 #include "components/dbus/thread_linux/dbus_thread_linux.h"
 
 #include "base/task/lazy_thread_pool_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace dbus_thread_linux {
 
diff --git a/components/desks_storage/core/local_desk_data_manager.h b/components/desks_storage/core/local_desk_data_manager.h
index 00ea059..a411120 100644
--- a/components/desks_storage/core/local_desk_data_manager.h
+++ b/components/desks_storage/core/local_desk_data_manager.h
@@ -16,6 +16,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner_helpers.h"
 #include "components/account_id/account_id.h"
 #include "components/desks_storage/core/desk_model.h"
diff --git a/components/desks_storage/core/local_desk_data_manager_unittests.cc b/components/desks_storage/core/local_desk_data_manager_unittests.cc
index fb4f11e..794d5ba 100644
--- a/components/desks_storage/core/local_desk_data_manager_unittests.cc
+++ b/components/desks_storage/core/local_desk_data_manager_unittests.cc
@@ -19,7 +19,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/account_id/account_id.h"
diff --git a/components/device_event_log/device_event_log_impl.cc b/components/device_event_log/device_event_log_impl.cc
index aaeba0d..696ab905 100644
--- a/components/device_event_log/device_event_log_impl.cc
+++ b/components/device_event_log/device_event_log_impl.cc
@@ -20,6 +20,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
 
diff --git a/components/device_signals/core/system_signals/posix/posix_platform_delegate_unittest.cc b/components/device_signals/core/system_signals/posix/posix_platform_delegate_unittest.cc
index 792dafa..3c1ee25 100644
--- a/components/device_signals/core/system_signals/posix/posix_platform_delegate_unittest.cc
+++ b/components/device_signals/core/system_signals/posix/posix_platform_delegate_unittest.cc
@@ -6,25 +6,34 @@
 
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
 #include "base/scoped_environment_variable_override.h"
 #include "base/strings/stringprintf.h"
-#include "components/device_signals/test/test_constants.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace device_signals {
 
 namespace {
+
 constexpr char kHome2EnvVariableName[] = "Home2";
 constexpr char kNonsenseEnvVariableName[] = "7D849956400F45A9985648574F4C72E4";
+
+constexpr base::FilePath::CharType kTestFileName[] =
+    FILE_PATH_LITERAL("test_filename");
+
 }  // namespace
 
 class PosixPlatformDelegateTest : public testing::Test {
  protected:
-  PosixPlatformDelegateTest()
-      : home_dir_(base::GetHomeDir()), binary_path_(test::GetSignedExePath()) {}
+  PosixPlatformDelegateTest() : home_dir_(base::GetHomeDir()) {
+    EXPECT_TRUE(scoped_dir_.CreateUniqueTempDir());
+    binary_path_ = scoped_dir_.GetPath().Append(base::FilePath(kTestFileName));
+    EXPECT_TRUE(base::WriteFile(binary_path_, "irrelevant file content"));
+  }
 
+  base::ScopedTempDir scoped_dir_;
   const base::FilePath home_dir_;
-  const base::FilePath binary_path_;
+  base::FilePath binary_path_;
   PosixPlatformDelegate platform_delegate_;
 };
 
@@ -98,15 +107,14 @@
 }
 
 TEST_F(PosixPlatformDelegateTest, ResolveFilePath_EnvVarMissingSeparator) {
-  // Tests the "$Home2signed.exe" cases, which is treated as invalid.
+  // Tests the "$Home2test_filename" case, which is treated as invalid.
   base::ScopedEnvironmentVariableOverride env_override(
-      kHome2EnvVariableName, test::GetTestDataDir().value());
-  const std::string file_name = test::GetSignedExePath().BaseName().value();
+      kHome2EnvVariableName, scoped_dir_.GetPath().value());
 
   base::FilePath resolved_file_path;
   EXPECT_FALSE(platform_delegate_.ResolveFilePath(
-      base::FilePath::FromUTF8Unsafe(base::StringPrintf(
-          "$%s%s", kHome2EnvVariableName, file_name.c_str())),
+      base::FilePath::FromUTF8Unsafe(
+          base::StringPrintf("$%s%s", kHome2EnvVariableName, kTestFileName)),
       &resolved_file_path));
 }
 
diff --git a/components/device_signals/core/system_signals/win/win_platform_delegate_unittest.cc b/components/device_signals/core/system_signals/win/win_platform_delegate_unittest.cc
index c1709b7..96cad380 100644
--- a/components/device_signals/core/system_signals/win/win_platform_delegate_unittest.cc
+++ b/components/device_signals/core/system_signals/win/win_platform_delegate_unittest.cc
@@ -14,7 +14,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
-#include "components/device_signals/test/test_constants.h"
+#include "components/device_signals/test/win/scoped_executable_files.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace device_signals {
@@ -58,6 +58,7 @@
   base::ScopedTempDir scoped_dir_;
   base::FilePath absolute_file_path_;
   std::unique_ptr<base::Environment> env_;
+  test::ScopedExecutableFiles scoped_executable_files_;
   WinPlatformDelegate platform_delegate_;
 };
 
@@ -96,7 +97,7 @@
 }
 
 TEST_F(WinPlatformDelegateTest, GetSigningCertificatesPublicKeyHashes_Signed) {
-  base::FilePath signed_exe_path = test::GetSignedExePath();
+  base::FilePath signed_exe_path = scoped_executable_files_.GetSignedExePath();
   ASSERT_TRUE(base::PathExists(signed_exe_path));
 
   auto public_keys =
@@ -111,7 +112,8 @@
 
 TEST_F(WinPlatformDelegateTest,
        GetSigningCertificatesPublicKeyHashes_MultiSigned) {
-  base::FilePath multi_signed_exe_path = test::GetMultiSignedExePath();
+  base::FilePath multi_signed_exe_path =
+      scoped_executable_files_.GetMultiSignedExePath();
   ASSERT_TRUE(base::PathExists(multi_signed_exe_path));
 
   auto public_keys = platform_delegate_.GetSigningCertificatesPublicKeyHashes(
@@ -129,7 +131,7 @@
 }
 
 TEST_F(WinPlatformDelegateTest, GetSigningCertificatePublicKeysHash_Empty) {
-  base::FilePath empty_exe_path = test::GetEmptyExePath();
+  base::FilePath empty_exe_path = scoped_executable_files_.GetEmptyExePath();
   ASSERT_TRUE(base::PathExists(empty_exe_path));
 
   auto public_keys =
@@ -139,18 +141,20 @@
 }
 
 TEST_F(WinPlatformDelegateTest, GetProductMetadata_Success) {
-  base::FilePath metadata_exe_path = test::GetMetadataExePath();
+  base::FilePath metadata_exe_path =
+      scoped_executable_files_.GetMetadataExePath();
   ASSERT_TRUE(base::PathExists(metadata_exe_path));
 
   auto metadata = platform_delegate_.GetProductMetadata(metadata_exe_path);
 
   ASSERT_TRUE(metadata);
-  EXPECT_EQ(metadata->name, test::GetMetadataProductName());
-  EXPECT_EQ(metadata->version, test::GetMetadataProductVersion());
+  EXPECT_EQ(metadata->name, scoped_executable_files_.GetMetadataProductName());
+  EXPECT_EQ(metadata->version,
+            scoped_executable_files_.GetMetadataProductVersion());
 }
 
 TEST_F(WinPlatformDelegateTest, GetProductMetadata_Empty) {
-  base::FilePath empty_exe_path = test::GetEmptyExePath();
+  base::FilePath empty_exe_path = scoped_executable_files_.GetEmptyExePath();
   ASSERT_TRUE(base::PathExists(empty_exe_path));
 
   EXPECT_FALSE(platform_delegate_.GetProductMetadata(empty_exe_path));
diff --git a/components/device_signals/test/BUILD.gn b/components/device_signals/test/BUILD.gn
index 654dec3..ae5a74d 100644
--- a/components/device_signals/test/BUILD.gn
+++ b/components/device_signals/test/BUILD.gn
@@ -11,6 +11,15 @@
     "test_constants.h",
   ]
 
+  if (is_win) {
+    sources += [
+      "win/files_data.cc",
+      "win/files_data.h",
+      "win/scoped_executable_files.cc",
+      "win/scoped_executable_files.h",
+    ]
+  }
+
   deps = [
     "//base",
     "//base/test:test_support",
diff --git a/components/device_signals/test/test_constants.cc b/components/device_signals/test/test_constants.cc
index b58e5db..1975790c 100644
--- a/components/device_signals/test/test_constants.cc
+++ b/components/device_signals/test/test_constants.cc
@@ -11,8 +11,6 @@
 
 namespace {
 
-constexpr char kProductName[] = "Test Product Name";
-constexpr char kProductVersion[] = "1.0.0.2";
 constexpr char kTestBundleProductName[] = "TestApp";
 constexpr char kTestBundleProductVersion[] = "10.8";
 
@@ -26,30 +24,6 @@
       .AppendASCII("device_signals");
 }
 
-base::FilePath GetSignedExePath() {
-  return GetTestDataDir().AppendASCII("signed.exe");
-}
-
-base::FilePath GetMultiSignedExePath() {
-  return GetTestDataDir().AppendASCII("multi-signed.exe");
-}
-
-base::FilePath GetMetadataExePath() {
-  return GetTestDataDir().AppendASCII("metadata.exe");
-}
-
-base::FilePath GetEmptyExePath() {
-  return GetTestDataDir().AppendASCII("empty.exe");
-}
-
-std::string GetMetadataProductName() {
-  return kProductName;
-}
-
-std::string GetMetadataProductVersion() {
-  return kProductVersion;
-}
-
 base::FilePath GetTestBundlePath() {
   return GetTestDataDir().AppendASCII("TestApp.app");
 }
diff --git a/components/device_signals/test/test_constants.h b/components/device_signals/test/test_constants.h
index a8f9c03..440fd64 100644
--- a/components/device_signals/test/test_constants.h
+++ b/components/device_signals/test/test_constants.h
@@ -16,25 +16,6 @@
 // Returns an absolute path to test data directory containing test resources.
 base::FilePath GetTestDataDir();
 
-// Returns an absolute path to the signed.exe file in the test data directory.
-base::FilePath GetSignedExePath();
-
-// Returns an absolute path to the multi-signed.exe file in the test data
-// directory.
-base::FilePath GetMultiSignedExePath();
-
-// Returns an absolute path to the metadata.exe file in the test data directory.
-base::FilePath GetMetadataExePath();
-
-// Returns an absolute path to the empty.exe file in the test data directory.
-base::FilePath GetEmptyExePath();
-
-// Returns the expected product name of the metadata.exe test file.
-std::string GetMetadataProductName();
-
-// Returns the expected product version of the metadata.exe test file.
-std::string GetMetadataProductVersion();
-
 // Returns an absolute path to the TestApp.app test bundle.
 base::FilePath GetTestBundlePath();
 
diff --git a/components/device_signals/test/win/files_data.cc b/components/device_signals/test/win/files_data.cc
new file mode 100644
index 0000000..fa879fa
--- /dev/null
+++ b/components/device_signals/test/win/files_data.cc
@@ -0,0 +1,2109 @@
+// Copyright 2022 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/device_signals/test/win/files_data.h"
+
+namespace device_signals::test {
+
+const char kSignedExeBase64[] =
+    "TVqQAAMAAAAEAAAA//"
+    "8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAA4fug4A"
+    "tAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAA"
+    "AAAACUcP2A0BGT09ARk9PQEZPT2WkA09MRk9PQEZLTmRGT09lpBtPAEZPT2WkQ05gRk9PZaRfT"
+    "yxGT09lpAtPREZPTUmljaNARk9MAAAAAAAAAAFBFAABMAQMAWECNTgAAAAAAAAAA4AADAQsBCQ"
+    "AAYgAAADQAAAAAAACCEQAAABAAAACAAAAAAEAAABAAAAACAAAFAAAAAAAAAAUAAAAAAAAAAMAA"
+    "AAAEAAAEQwEAAwAAgAAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAAAAAAAAAAAAAXJUAACgAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAJAAAIgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAYJIAAEAAAAAAAAAAAAAAAACAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALn"
+    "RleHQAAACUYQAAABAAAABiAAAABAAAAAAAAAAAAAAAAAAAIAAAYC5yZGF0YQAAmhoAAACAAAAA"
+    "HAAAAGYAAAAAAAAAAAAAAAAAAEAAAEAuZGF0YQAAAPwXAAAAoAAAAA4AAACCAAAAAAAAAAAAAA"
+    "AAAABAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAFWL7DPAXcOL/1WL7IM9aKxAAAJ0BeilBgAA/3UI6PIEAABo/"
+    "wAAAOg0AgAAWVldw2oUaNCSQADo9BQAALhNWgAAZjkFAABAAHU4oTwAQACBuAAAQABQRQAAdSe"
+    "5CwEAAGY5iBgAQAB1GYO4dABAAA52EDPJOYjoAEAAD5XBiU3k6wSDZeQAagHocxQAAFmFwHUIa"
+    "hzobv///1no1BIAAIXAdQhqEOhd////WehnDgAAg2X8AOgKDAAAhcB9CGob6EgBAABZ/"
+    "xUAgEAAo/"
+    "i3QADotwoAAKNgrEAA6PIJAACFwH0IagjoIgEAAFnoaQcAAIXAfQhqCegRAQAAWWoB6MgBAABZ"
+    "hcB0B1Do/gAAAFmhfKxAAKOArEAAUP81dKxAAP81cKxAAOjV/v//g8QMiUXgg33kAHUGUOg/"
+    "AwAA6GYDAADrLotF7IsIiwmJTdxQUeikBQAAWVnDi2Xoi0XciUXgg33kAHUGUOglAwAA6EUDAA"
+    "DHRfz+////i0Xg6PQTAADD6JUVAADppP7//4v/"
+    "VYvsi0UIiwCBOGNzbeB1KoN4EAN1JItAFD0gBZMZdBU9IQWTGXQOPSIFkxl0Bz0AQJkBdQXo6h"
+    "UAADPAXcIEAGiMEUAA/xUEgEAAM8DDi/9Vi+xXv+gDAABX/xUMgEAA/3UI/"
+    "xUIgEAAgcfoAwAAgf9g6gAAdwSFwHTeX13Di/9Vi+zoqQQAAP91COj2AgAA/"
+    "zUEoEAA6LUNAABo/wAAAP/Qg8QMXcOL/1WL7GgogUAA/"
+    "xUIgEAAhcB0FWgYgUAAUP8VEIBAAIXAdAX/dQj/0F3Di/9Vi+z/dQjoyP///1n/dQj/"
+    "FRSAQADMagjo+RYAAFnDagjoFhYAAFnDi/9Vi+xWi/DrC4sGhcB0Av/Qg8YEO3UIcvBeXcOL/"
+    "1WL7FaLdQgzwOsPhcB1EIsOhcl0Av/Rg8YEO3UMcuxeXcOL/"
+    "1WL7IM98LdAAAB0GWjwt0AA6G0aAABZhcB0Cv91CP8V8LdAAFnopBkAAGgEgUAAaPCAQADoof/"
+    "//1lZhcB1Qmg9H0AA6G4ZAAC46IBAAMcEJOyAQADoY////"
+    "4M99LdAAABZdBto9LdAAOgVGgAAWYXAdAxqAGoCagD/"
+    "FfS3QAAzwF3Dahho8JJAAOjUEQAAagjoFRYAAFmDZfwAM9tDOR2crEAAD4TFAAAAiR2YrEAAik"
+    "UQopSsQACDfQwAD4WdAAAA/zXot0AA6EQMAABZi/iJfdiF/3R4/zXkt0AA6C8MAABZi/"
+    "CJddyJfeSJdeCD7gSJddw793JX6AsMAAA5BnTtO/dySv826AUMAACL+Oj1CwAAiQb/1/"
+    "816LdAAOjvCwAAi/j/"
+    "NeS3QADo4gsAAIPEDDl95HUFOUXgdA6JfeSJfdiJReCL8Il13It92OufaAyBQAC4CIFAAOhf/"
+    "v//WWgUgUAAuBCBQADoT/7//1nHRfz+////"
+    "6B8AAACDfRAAdSiJHZysQABqCOhDFAAAWf91COj8/f//"
+    "M9tDg30QAHQIagjoKhQAAFnD6PoQAADDi/9Vi+xqAGoA/3UI6MP+//+DxAxdw4v/"
+    "VYvsagBqAf91COit/v//g8QMXcNqAWoAagDonf7//4PEDMNqAWoBagDojv7//4PEDMOL/"
+    "1boBwsAAIvwVujWGwAAVuhhGwAAVujJFAAAVuhGGwAAVugxGwAAVugZGQAAVuj+"
+    "AQAAVujrEgAAaJIUQADoWQoAAIPEJKMEoEAAXsOL/1WL7FFRU4tdCFZXM/Yz/4l9/Dsc/"
+    "QigQAB0CUeJffyD/xdy7oP/Fw+DdwEAAGoD6CkfAABZg/"
+    "gBD4Q0AQAAagPoGB8AAFmFwHUNgz0AoEAAAQ+EGwEAAIH7/"
+    "AAAAA+"
+    "EQQEAAGjohkAAuxQDAABTv6CsQABX6HweAACDxAyFwHQNVlZWVlboGhQAAIPEFGgEAQAAvrmsQ"
+    "ABWagDGBb2tQAAA/"
+    "xUggEAAhcB1JmjQhkAAaPsCAABW6DoeAACDxAyFwHQPM8BQUFBQUOjWEwAAg8QUVuiTHQAAQFm"
+    "D+"
+    "Dx2OFbohh0AAIPuOwPGagO5tK9AAGjMhkAAK8hRUOisHAAAg8QUhcB0ETP2VlZWVlbokxMAAIP"
+    "EFOsCM/ZoyIZAAFNX6BIcAACDxAyFwHQNVlZWVlbobxMAAIPEFItF/"
+    "P80xQygQABTV+jtGwAAg8QMhcB0DVZWVlZW6EoTAACDxBRoECABAGighkAAV+"
+    "hgGgAAg8QM6zJq9P8VHIBAAIvYO950JIP7/3QfagCNRfhQjTT9DKBAAP826NEcAABZUP82U/"
+    "8VGIBAAF9eW8nDagPorR0AAFmD+AF0FWoD6KAdAABZhcB1H4M9AKBAAAF1Fmj8AAAA6Cn+//"
+    "9o/wAAAOgf/v//WVnDw4v/"
+    "VYvsUVFW6KsKAACL8IX2D4RGAQAAi1ZcocygQABXi30Ii8pTOTl0DovYa9sMg8EMA9o7y3Lua8"
+    "AMA8I7yHMIOTl1BIvB6wIzwIXAdAqLWAiJXfyF23UHM8Dp+"
+    "wAAAIP7BXUMg2AIADPAQOnqAAAAg/sBD4TeAAAAi05giU34i00MiU5gi0gEg/"
+    "kID4W4AAAAiw3AoEAAiz3EoEAAi9ED+"
+    "TvXfSRryQyLflyDZDkIAIs9wKBAAIsdxKBAAEID34PBDDvTfOKLXfyLAIt+"
+    "ZD2OAADAdQnHRmSDAAAA6149kAAAwHUJx0ZkgQAAAOtOPZEAAMB1CcdGZIQAAADrPj2TAADAdQ"
+    "nHRmSFAAAA6y49jQAAwHUJx0ZkggAAAOsePY8AAMB1CcdGZIYAAADrDj2SAADAdQfHRmSKAAAA"
+    "/3Zkagj/01mJfmTrB4NgCABR/9OLRfhZiUZgg8j/"
+    "W19eycODPey3QAAAdQXoECUAAFaLNWCsQABXM/+F9nUYg8j/"
+    "6aAAAAA8PXQBR1bo+BoAAFmNdAYBigaEwHXqagRHV+j1HAAAi/hZWYk9fKxAAIX/"
+    "dMuLNWCsQABT60JW6McaAACL2EOAPj1ZdDFqAVPoxxwAAFlZiQeFwHROVlNQ6DEbAACDxAyFwH"
+    "QPM8BQUFBQUOjNEAAAg8QUg8cEA/"
+    "OAPgB1uf81YKxAAOi5GwAAgyVgrEAAAIMnAMcF4LdAAAEAAAAzwFlbX17D/"
+    "zV8rEAA6JMbAACDJXysQAAAg8j/6+SL/"
+    "1WL7FGLTRBTM8BWiQeL8otVDMcBAQAAADlFCHQJi10Ig0UIBIkTiUX8gD4idRAzwDlF/"
+    "LMiD5TARolF/Os8/weF0nQIigaIAkKJVQyKHg+2w1BG6FckAABZhcB0E/"
+    "8Hg30MAHQKi00Migb/"
+    "RQyIAUaLVQyLTRCE23Qyg338AHWpgPsgdAWA+wl1n4XSdATGQv8Ag2X8AIA+AA+"
+    "E6QAAAIoGPCB0BDwJdQZG6/NO6+OAPgAPhNAAAACDfQgAdAmLRQiDRQgEiRD/"
+    "ATPbQzPJ6wJGQYA+XHT5gD4idSb2wQF1H4N9/AB0DI1GAYA4InUEi/"
+    "DrDTPAM9s5RfwPlMCJRfzR6YXJdBJJhdJ0BMYCXEL/"
+    "B4XJdfGJVQyKBoTAdFWDffwAdQg8IHRLPAl0R4XbdD0PvsBQhdJ0I+"
+    "hyIwAAWYXAdA2KBotNDP9FDIgBRv8Hi00Migb/RQyIAesN6E8jAABZhcB0A0b/B/"
+    "8Hi1UMRulW////hdJ0B8YCAEKJVQz/B4tNEOkO////i0UIXluFwHQDgyAA/wHJw4v/"
+    "VYvsg+wMUzPbVlc5Hey3QAB1BeiMIgAAaAQBAAC+uK9AAFZTiB28sEAA/"
+    "xUggEAAofi3QACJNYysQAA7w3QHiUX8OBh1A4l1/ItV/I1F+FBTU4199OgK/v//i0X4g8QMPf/"
+    "//z9zSotN9IP5/3NCi/jB5wKNBA87wXI2UOj4GQAAi/BZO/N0KYtV/I1F+FAD/ldWjX306Mn9/"
+    "/+LRfiDxAxIo3CsQACJNXSsQAAzwOsDg8j/X15bycOL/"
+    "1WL7KHAsEAAg+wMU1aLNTiAQABXM9sz/zvDdS7/1ov4O/t0DMcFwLBAAAEAAADrI/"
+    "8VNIBAAIP4eHUKagJYo8CwQADrBaHAsEAAg/gBD4WBAAAAO/t1D//Wi/"
+    "g7+3UHM8DpygAAAIvHZjkfdA5AQGY5GHX5QEBmORh18os1MIBAAFNTUyvHU9H4QFBXU1OJRfT/"
+    "1olF+DvDdC9Q6B4ZAABZiUX8O8N0IVNT/3X4UP919FdTU//WhcB1DP91/OhuGAAAWYld/Itd/"
+    "Ff/FSyAQACLw+tcg/gCdAQ7w3WC/xUogEAAi/A78w+Ecv///"
+    "zgedApAOBh1+0A4GHX2K8ZAUIlF+Oi3GAAAi/hZO/t1DFb/FSSAQADpRf////"
+    "91+FZX6E4hAACDxAxW/xUkgEAAi8dfXlvJw2pUaBCTQADoYQgAADP/"
+    "iX38jUWcUP8VRIBAAMdF/P7///"
+    "9qQGogXlbooRgAAFlZO8cPhBQCAACj4LZAAIk10LZAAI2IAAgAAOswxkAEAIMI/"
+    "8ZABQqJeAjGQCQAxkAlCsZAJgqJeDjGQDQAg8BAiw3gtkAAgcEACAAAO8FyzGY5fc4PhAoBAAC"
+    "LRdA7xw+E/wAAAIs4jVgEjQQ7iUXkvgAIAAA7/nwCi/"
+    "7HReABAAAA61tqQGog6BMYAABZWYXAdFaLTeCNDI3gtkAAiQGDBdC2QAAgjZAACAAA6yrGQAQA"
+    "gwj/xkAFCoNgCACAYCSAxkAlCsZAJgqDYDgAxkA0AIPAQIsRA9Y7wnLS/"
+    "0XgOT3QtkAAfJ3rBos90LZAAINl4ACF/35ti0XkiwiD+f90VoP5/nRRigOoAXRLqAh1C1H/"
+    "FUCAQACFwHQ8i3Xgi8bB+AWD5h/"
+    "B5gYDNIXgtkAAi0XkiwCJBooDiEYEaKAPAACNRgxQ6BESAABZWYXAD4TJAAAA/0YI/"
+    "0XgQ4NF5AQ5feB8kzPbi/PB5gYDNeC2QACLBoP4/3QLg/"
+    "j+dAaATgSA63LGRgSBhdt1BWr2WOsKi8NI99gbwIPA9VD/FRyAQACL+IP//3RDhf90P1f/"
+    "FUCAQACFwHQ0iT4l/wAAAIP4AnUGgE4EQOsJg/"
+    "gDdQSATgQIaKAPAACNRgxQ6HsRAABZWYXAdDf/RgjrCoBOBEDHBv7///9Dg/sDD4xn/////"
+    "zXQtkAA/xU8gEAAM8DrETPAQMOLZejHRfz+////g8j/6F8GAADDi/"
+    "9WuMCSQAC+wJJAAFeL+DvGcw+LB4XAdAL/0IPHBDv+cvFfXsOL/"
+    "1a4yJJAAL7IkkAAV4v4O8ZzD4sHhcB0Av/Qg8cEO/5y8V9ew4v/VYvsVv81FKFAAIs1TIBAAP/"
+    "WhcB0IaEQoUAAg/j/dBdQ/zUUoUAA/9b/"
+    "0IXAdAiLgPgBAADrJ76Qh0AAVv8VCIBAAIXAdQtW6Cry//"
+    "9ZhcB0GGiAh0AAUP8VEIBAAIXAdAj/dQj/0IlFCItFCF5dw2oA6If///9Zw4v/"
+    "VYvsVv81FKFAAIs1TIBAAP/WhcB0IaEQoUAAg/j/dBdQ/zUUoUAA/9b/"
+    "0IXAdAiLgPwBAADrJ76Qh0AAVv8VCIBAAIXAdQtW6K/x//"
+    "9ZhcB0GGish0AAUP8VEIBAAIXAdAj/dQj/0IlFCItFCF5dw/8VUIBAAMIEAIv/"
+    "Vv81FKFAAP8VTIBAAIvwhfZ1G/81yLBAAOhl////"
+    "WYvwVv81FKFAAP8VVIBAAIvGXsOhEKFAAIP4/3QWUP810LBAAOg7////Wf/Qgw0QoUAA/"
+    "6EUoUAAg/j/dA5Q/xVYgEAAgw0UoUAA/+l9BwAAagxoMJNAAOhaBAAAvpCHQABW/"
+    "xUIgEAAhcB1B1bo8PD//1mJReSLdQjHRlwIh0AAM/9HiX4UhcB0JGiAh0AAUIsdEIBAAP/"
+    "TiYb4AQAAaKyHQAD/deT/04mG/"
+    "AEAAIl+cMaGyAAAAEPGhksBAABDx0Zo4KNAAGoN6DEIAABZg2X8AP92aP8VXIBAAMdF/P7////"
+    "oPgAAAGoM6BAIAABZiX38i0UMiUZshcB1CKHoqUAAiUZs/3Zs6CghAABZx0X8/v///"
+    "+gVAAAA6N0DAADDM/9Hi3UIag3o+AYAAFnDagzo7wYAAFnDi/9WV/"
+    "8VNIBAAP81EKFAAIv46JH+////"
+    "0IvwhfZ1TmgUAgAAagHotRMAAIvwWVmF9nQ6Vv81EKFAAP81zLBAAOjo/f//Wf/"
+    "QhcB0GGoAVujF/v//WVn/FWSAQACDTgT/iQbrCVbooxIAAFkz9lf/FWCAQABfi8Zew4v/Vuh//"
+    "///i/CF9nUIahDoze///"
+    "1mLxl7DaghoWJNAAOjgAgAAi3UIhfYPhPgAAACLRiSFwHQHUOhWEgAAWYtGLIXAdAdQ6EgSAAB"
+    "Zi0Y0hcB0B1DoOhIAAFmLRjyFwHQHUOgsEgAAWYtGQIXAdAdQ6B4SAABZi0ZEhcB0B1DoEBIAA"
+    "FmLRkiFwHQHUOgCEgAAWYtGXD0Ih0AAdAdQ6PERAABZag3oowYAAFmDZfwAi35ohf90Glf/"
+    "FWiAQACFwHUPgf/go0AAdAdX6MQRAABZx0X8/v///"
+    "+hXAAAAagzoagYAAFnHRfwBAAAAi35shf90I1foGiAAAFk7PeipQAB0FIH/"
+    "EKlAAHQMgz8AdQdX6CYeAABZx0X8/v///"
+    "+geAAAAVuhsEQAAWegdAgAAwgQAi3UIag3oOQUAAFnDi3UIagzoLQUAAFnDi/"
+    "9WV76Qh0AAVv8VCIBAAIXAdQdW6E/u//9Zi/iF/w+EXgEAAIs1EIBAAGjch0AAV//"
+    "WaNCHQABXo8SwQAD/1mjEh0AAV6PIsEAA/9ZovIdAAFejzLBAAP/"
+    "Wgz3EsEAAAIs1VIBAAKPQsEAAdBaDPciwQAAAdA2DPcywQAAAdASFwHUkoUyAQACjyLBAAKFYg"
+    "EAAxwXEsEAAUCBAAIk1zLBAAKPQsEAA/xVQgEAAoxShQACD+P8PhMwAAAD/NciwQABQ/"
+    "9aFwA+EuwAAAOiB8P///zXEsEAA6BP7////NciwQACjxLBAAOgD+////zXMsEAAo8iwQADo8/"
+    "r///810LBAAKPMsEAA6OP6//+DxBCj0LBAAOhvAwAAhcB0ZWhEIkAA/zXEsEAA6D37//9Z/"
+    "9CjEKFAAIP4/3RIaBQCAABqAejXEAAAi/BZWYX2dDRW/zUQoUAA/zXMsEAA6Ar7//9Z/"
+    "9CFwHQbagBW6Of7//9ZWf8VZIBAAINOBP+JBjPAQOsH6JL7//8zwF9ew4v/"
+    "VYvsM8A5RQhqAA+"
+    "UwGgAEAAAUP8VbIBAAKPUsEAAhcB1Al3DM8BAo8y2QABdw2iQJUAAZP81AAAAAItEJBCJbCQQj"
+    "WwkECvgU1ZXofipQAAxRfwzxVCJZej/dfiLRfzHRfz+////"
+    "iUX4jUXwZKMAAAAAw4tN8GSJDQAAAABZX19eW4vlXVHDzMzMzMzMzIv/"
+    "VYvsg+wYU4tdDFaLcwgzNfipQABXiwbGRf8Ax0X0AQAAAI17EIP4/"
+    "nQNi04EA88zDDjohSkAAItODItGCAPPMww46HUpAACLRQj2QARmD4UWAQAAi00QjVXoiVP8i1s"
+    "MiUXoiU3sg/"
+    "v+dF+NSQCNBFuLTIYUjUSGEIlF8IsAiUX4hcl0FIvX6DQqAADGRf8BhcB8QH9Hi0X4i9iD+"
+    "P51zoB9/wB0JIsGg/"
+    "j+"
+    "dA2LTgQDzzMMOOgCKQAAi04Mi1YIA88zDDro8igAAItF9F9eW4vlXcPHRfQAAAAA68mLTQiBOW"
+    "NzbeB1KYM9yLZAAAB0IGjItkAA6MMGAACDxASFwHQPi1UIagFS/"
+    "xXItkAAg8QIi00M6NcpAACLRQw5WAx0Emj4qUAAV4vTi8jo2ikAAItFDItN+IlIDIsGg/"
+    "j+dA2LTgQDzzMMOOhvKAAAi04Mi1YIA88zDDroXygAAItF8ItICIvX6G0pAAC6/v///"
+    "zlTDA+EUv///2j4qUAAV4vL6IUpAADpHP///4v/"
+    "VYvsg+wQofipQACDZfgAg2X8AFNXv07mQLu7AAD//zvHdA2Fw3QJ99Cj/KlAAOtgVo1F+FD/"
+    "FYSAQACLdfwzdfj/FYCAQAAz8P8VZIBAADPw/xV8gEAAM/CNRfBQ/xV4gEAAi0X0M0XwM/"
+    "A793UHvk/mQLvrC4XzdQeLxsHgEAvwiTX4qUAA99aJNfypQABeX1vJw2oIaICTQADocv3//"
+    "+hn+v//i0B4hcB0FoNl/AD/0OsHM8BAw4tl6MdF/P7////ozigAAOiL/f//w2iyJ0AA6G73//"
+    "9Zo9iwQADDi/9WVzP2v+CwQACDPPUkoUAAAXUejQT1IKFAAIk4aKAPAAD/"
+    "MIPHGOgjCAAAWVmFwHQMRoP+JHzSM8BAX17DgyT1IKFAAAAzwOvxi/"
+    "9Tix1IgEAAVr4goUAAV4s+hf90E4N+BAF0DVf/01foUgwAAIMmAFmDxgiB/"
+    "kCiQAB83L4goUAAX4sGhcB0CYN+BAF1A1D/04PGCIH+QKJAAHzmXlvDi/9Vi+yLRQj/"
+    "NMUgoUAA/xWIgEAAXcNqDGigk0AA6G/8//8z/0eJfeQz2zkd1LBAAHUY6Ont//9qHug37P//"
+    "aP8AAADoeen//1lZi3UIjTT1IKFAADkedASLx+tuahjoSgwAAFmL+Dv7dQ/"
+    "oPAIAAMcADAAAADPA61FqCuhZAAAAWYld/"
+    "DkedSxooA8AAFfoGgcAAFlZhcB1F1fogAsAAFnoBgIAAMcADAAAAIld5OsLiT7rB1foZQsAAFn"
+    "HRfz+////6AkAAACLReToB/z//8NqCugo////WcOL/1WL7ItFCFaNNMUgoUAAgz4AdRNQ6CL//"
+    "/9ZhcB1CGoR6G3o//9Z/zb/FYyAQABeXcOL/1WL7ItFCKMwskAAXcOL/"
+    "1WL7IHsKAMAAKH4qUAAM8WJRfyDpdj8//8AU2pMjYXc/P//agBQ6PknAACNhdj8//+JhSj9//"
+    "+NhTD9//+DxAyJhSz9//+JheD9//+Jjdz9//+Jldj9//+JndT9//+JtdD9//+Jvcz9//"
+    "9mjJX4/f//ZoyN7P3//2aMncj9//9mjIXE/f//ZoylwP3//2aMrbz9//+cj4Xw/f//"
+    "i0UEjU0Ex4Uw/f//AQABAImF6P3//4mN9P3//4tJ/ImN5P3//8eF2Pz//xcEAMDHhdz8//"
+    "8BAAAAiYXk/P///xWcgEAAagCL2P8VBIBAAI2FKP3//1D/"
+    "FZiAQACFwHUMhdt1CGoC6AgnAABZaBcEAMD/FZSAQABQ/xWQgEAAi038M81b6G4kAADJw4v/"
+    "VYvs/zUwskAA6Oz0//9ZhcB0A13/4GoC6MkmAABZXemy/v//i/"
+    "9Vi+yLRQgzyTsEzUCiQAB0E0GD+S1y8Y1I7YP5EXcOag1YXcOLBM1EokAAXcMFRP///"
+    "2oOWTvIG8AjwYPACF3D6GL2//+FwHUGuKijQADDg8AIw4v/VYvsUVNWV/816LdAAOht9P///"
+    "zXkt0AAi/iJffzoXfT//"
+    "4vwWVk79w+CgwAAAIveK9+NQwSD+"
+    "ARyd1fouyYAAIv4jUMEWTv4c0i4AAgAADv4cwKLxwPHO8dyD1D/"
+    "dfzoGgoAAFlZhcB1Fo1HEDvHckBQ/3X86AQKAABZWYXAdDHB+wJQjTSY6Hjz//9Zo+i3QAD/"
+    "dQjoavP//4kGg8YEVuhf8///WaPkt0AAi0UIWesCM8BfXlvJw4v/VmoEaiDobgkAAIvwVug48/"
+    "//g8QMo+i3QACj5LdAAIX2dQVqGFhew4MmADPAXsNqDGjAk0AA6Nz4///oH+b//4Nl/AD/"
+    "dQjo+P7//1mJReTHRfz+////6AkAAACLReTo+Pj//8Po/uX//8OL/1WL7P91COi3////"
+    "99gbwPfYWUhdw4v/Vlcz/423sKNAAP826LXy//+DxwRZiQaD/yhy6F9ew8zMzMyL/"
+    "1WL7ItNCLhNWgAAZjkBdAQzwF3Di0E8A8GBOFBFAAB17zPSuQsBAABmOUgYD5TCi8Jdw8zMzMz"
+    "MzMzMzMzMi/"
+    "9Vi+yLRQiLSDwDyA+3QRRTVg+"
+    "3cQYz0leNRAgYhfZ2G4t9DItIDDv5cgmLWAgD2Tv7cgpCg8AoO9Zy6DPAX15bXcPMzMzMzMzMz"
+    "MzMzMyL/"
+    "1WL7Gr+aOCTQABokCVAAGShAAAAAFCD7AhTVleh+KlAADFF+DPFUI1F8GSjAAAAAIll6MdF/"
+    "AAAAABoAABAAOgq////g8QEhcB0VYtFCC0AAEAAUGgAAEAA6FD///"
+    "+DxAiFwHQ7i0Akwegf99CD4AHHRfz+////"
+    "i03wZIkNAAAAAFlfXluL5V3Di0XsiwiLATPSPQUAAMAPlMKLwsOLZejHRfz+////"
+    "M8CLTfBkiQ0AAAAAWV9eW4vlXcOL/1WL7ItFCKM0skAAoziyQACjPLJAAKNAskAAXcOL/"
+    "1WL7ItFCIsNzKBAAFY5UAR0D4vxa/YMA3UIg8AMO8Zy7GvJDANNCF47wXMFOVAEdAIzwF3D/"
+    "zU8skAA6HHx//9Zw2ogaACUQADotfb//zP/iX3kiX3Yi10Ig/"
+    "sLf0x0FYvDagJZK8F0IivBdAgrwXRkK8F1ROgK8///i/iJfdiF/3UUg8j/"
+    "6WEBAAC+NLJAAKE0skAA62D/d1yL0+hd////i/CDxgiLButai8OD6A90PIPoBnQrSHQc6F/8//"
+    "/HABYAAAAzwFBQUFBQ6OX7//"
+    "+DxBTrrr48skAAoTyyQADrFr44skAAoTiyQADrCr5AskAAoUCyQADHReQBAAAAUOit8P//"
+    "iUXgWTPAg33gAQ+E2AAAADlF4HUHagPoReX//zlF5HQHUOgg+v//WTPAiUX8g/"
+    "sIdAqD+wt0BYP7BHUbi09giU3UiUdgg/sIdUCLT2SJTdDHR2SMAAAAg/"
+    "sIdS6LDcCgQACJTdyLDcSgQACLFcCgQAADyjlN3H0Zi03ca8kMi1dciUQRCP9F3Ovb6BXw//"
+    "+JBsdF/P7////oFQAAAIP7CHUf/3dkU/9V4FnrGYtdCIt92IN95AB0CGoA6K74//9Zw1P/"
+    "VeBZg/sIdAqD+wt0BYP7BHURi0XUiUdgg/sIdQaLRdCJR2QzwOhX9f//w4v/"
+    "VYvsi0UIo0iyQABdw4v/VYvsi0UIo1SyQABdw4v/VYvsi0UIo1iyQABdw2oQaCCUQADo2PT//"
+    "4Nl/AD/dQz/dQj/"
+    "FaSAQACJReTrL4tF7IsAiwCJReAzyT0XAADAD5TBi8HDi2XogX3gFwAAwHUIagj/"
+    "FWCAQACDZeQAx0X8/v///4tF5OjK9P//w4v/VYvsi0UIo1yyQABdw4v/VYvs/zVcskAA6BPv//"
+    "9ZhcB0D/91CP/QWYXAdAUzwEBdwzPAXcOL/1WL7IPsFFNWV+ji7v//"
+    "g2X8AIM9YLJAAACL2A+FjgAAAGhMiEAA/xWggEAAi/iF/w+EKgEAAIs1EIBAAGhAiEAAV//"
+    "WhcAPhBQBAABQ6Czu///HBCQwiEAAV6NgskAA/9ZQ6Bfu///HBCQciEAAV6NkskAA/9ZQ6ALu/"
+    "//HBCQAiEAAV6NoskAA/9ZQ6O3t//9Zo3CyQACFwHQUaOiHQABX/9ZQ6NXt//"
+    "9Zo2yyQAChbLJAADvDdE85HXCyQAB0R1DoM+7///81cLJAAIvw6Cbu//9ZWYv4hfZ0LIX/dCj/"
+    "1oXAdBmNTfhRagyNTexRagFQ/9eFwHQG9kX0AXUJgU0QAAAgAOs5oWSyQAA7w3QwUOjj7f//"
+    "WYXAdCX/0IlF/IXAdByhaLJAADvDdBNQ6Mbt//9ZhcB0CP91/P/QiUX8/zVgskAA6K7t//"
+    "9ZhcB0EP91EP91DP91CP91/P/Q6wIzwF9eW8nDi/"
+    "9Vi+yLRQhTM9tWVzvDdAeLfQw7+3cb6OH4//9qFl6JMFNTU1NT6Gr4//+DxBSLxus8i3UQO/"
+    "N1BIgY69qL0DgadARCT3X4O/t07ooOiApCRjrLdANPdfM7+3UQiBjomvj//2oiWYkIi/"
+    "HrtTPAX15bXcOL/1WL7FNWi3UIM9tXOV0UdRA783UQOV0MdRIzwF9eW13DO/"
+    "N0B4t9DDv7dxvoWPj//2oWXokwU1NTU1Po4ff//"
+    "4PEFIvG69U5XRR1BIge68qLVRA703UEiB7r0YN9FP+LxnUPigqICEBCOst0Hk918+"
+    "sZigqICEBCOst0CE90Bf9NFHXuOV0UdQKIGDv7dYuDfRT/dQ+LRQxqUIhcBv9Y6Xj///"
+    "+IHuje9///"
+    "aiJZiQiL8euCzMzMzMzMzMzMzMyLTCQE98EDAAAAdCSKAYPBAYTAdE73wQMAAAB17wUAAAAAja"
+    "QkAAAAAI2kJAAAAACLAbr//"
+    "v5+A9CD8P8zwoPBBKkAAQGBdOiLQfyEwHQyhOR0JKkAAP8AdBOpAAAA/"
+    "3QC682NQf+LTCQEK8HDjUH+i0wkBCvBw41B/YtMJAQrwcONQfyLTCQEK8HDi/"
+    "9Vi+yLTQhTM9tWVzvLdAeLfQw7+3cb6CL3//9qFl6JMFNTU1NT6Kv2//+DxBSLxuswi3UQO/"
+    "N1BIgZ69qL0YoGiAJCRjrDdANPdfM7+3UQiBno5/b//2oiWYkIi/HrwTPAX15bXcOL/"
+    "1WL7ItNCFYz9jvOfB6D+QJ+DIP5A3UUoWisQADrKKForEAAiQ1orEAA6xvopfb//"
+    "1ZWVlZWxwAWAAAA6C32//+DxBSDyP9eXcNqDGhAlEAA6Gbw//"
+    "+LdQiF9nR1gz3MtkAAA3VDagTol/T//1mDZfwAVuieDwAAWYlF5IXAdAlWUOi/"
+    "DwAAWVnHRfz+////6AsAAACDfeQAdTf/dQjrCmoE6IPz//"
+    "9Zw1ZqAP811LBAAP8VdIBAAIXAdRboFfb//4vw/xU0gEAAUOjF9f//iQZZ6Crw///Di/"
+    "9Vi+xWVzP2/3UI6BgeAACL+FmF/3UnOQV0skAAdh9W/"
+    "xUMgEAAjYboAwAAOwV0skAAdgODyP+L8IP4/3XKi8dfXl3Di/9Vi+xWVzP2agD/dQz/"
+    "dQjomB4AAIv4g8QMhf91JzkFdLJAAHYfVv8VDIBAAI2G6AMAADsFdLJAAHYDg8j/i/"
+    "CD+P91w4vHX15dw4v/VYvsVlcz9v91DP91COhsHwAAi/hZWYX/"
+    "dSw5RQx0JzkFdLJAAHYfVv8VDIBAAI2G6AMAADsFdLJAAHYDg8j/i/"
+    "CD+"
+    "P91wYvHX15dwy2kAwAAdCKD6AR0F4PoDXQMSHQDM8DDuAQEAADDuBIEAADDuAQIAADDuBEEAAD"
+    "Di/9WV4vwaAEBAAAz/"
+    "41GHFdQ6G8bAAAzwA+"
+    "3yIvBiX4EiX4IiX4MweEQC8GNfhCrq6u54KNAAIPEDI1GHCvOvwEBAACKFAGIEEBPdfeNhh0BA"
+    "AC+AAEAAIoUCIgQQE51919ew4v/VYvsgewcBQAAofipQAAzxYlF/FNXjYXo+v//"
+    "UP92BP8VqIBAAL8AAQAAhcAPhPsAAAAzwIiEBfz+//9AO8dy9IqF7vr//8aF/P7//"
+    "yCEwHQujZ3v+v//D7bID7YDO8h3FivBQFCNlA38/v//aiBS6KwaAACDxAxDigNDhMB12GoA/"
+    "3YMjYX8+v///3YEUFeNhfz+//9QagFqAOi9JQAAM9tT/3YEjYX8/f//V1BXjYX8/v//UFf/"
+    "dgxT6J4jAACDxERT/3YEjYX8/P//V1BXjYX8/v//UGgAAgAA/3YMU+h5IwAAg8QkM8APt4xF/"
+    "Pr///bBAXQOgEwGHRCKjAX8/f//6xH2wQJ0FYBMBh0giowF/Pz//"
+    "4iMBh0BAADrCMaEBh0BAAAAQDvHcr7rVo2GHQEAAMeF5Pr//5////8zySmF5Pr//4uV5Pr//"
+    "42EDh0BAAAD0I1aIIP7GXcMgEwOHRCK0YDCIOsPg/"
+    "oZdw6ATA4dIIrRgOogiBDrA8YAAEE7z3LCi038XzPNW+j/FgAAycNqDGhglEAA6NPs///oyOn/"
+    "/4v4oRCqQACFR3B0HYN/bAB0F4t3aIX2dQhqIOiK2f//WYvG6Ovs///Dag3o5vD//"
+    "1mDZfwAi3doiXXkOzUIqEAAdDaF9nQaVv8VaIBAAIXAdQ+B/uCjQAB0B1bo/Pv//"
+    "1mhCKhAAIlHaIs1CKhAAIl15Fb/FVyAQADHRfz+////6AUAAADrjot15GoN6Kvv//9Zw4v/"
+    "VYvsi0UIVovxxkYMAIXAdWPoHen//"
+    "4lGCItIbIkOi0hoiU4Eiw47DeipQAB0EosNEKpAAIVIcHUH6N8KAACJBotGBDsFCKhAAHQWi0Y"
+    "Iiw0QqkAAhUhwdQjo/P7//"
+    "4lGBItGCPZAcAJ1FINIcALGRgwB6wqLCIkOi0AEiUYEi8ZeXcIEAIv/"
+    "VYvsg+wQUzPbU41N8Ohl////iR14skAAg/7+dR7HBXiyQAABAAAA/"
+    "xWwgEAAOF38dEWLTfiDYXD96zyD/v11EscFeLJAAAEAAAD/FayAQADr24P+/"
+    "HUSi0Xwi0AExwV4skAAAQAAAOvEOF38dAeLRfiDYHD9i8ZbycOL/"
+    "1WL7IPsIKH4qUAAM8WJRfxTi10MVot1CFfoZP///4v4M/aJfQg7/nUOi8PoMPz//"
+    "zPA6Z0BAACJdeQzwDm4EKhAAA+EkQAAAP9F5IPAMD3wAAAAcueB/+j9AAAPhHABAACB/"
+    "+n9AAAPhGQBAAAPt8dQ/xW0gEAAhcAPhFIBAACNRehQV/"
+    "8VqIBAAIXAD4QzAQAAaAEBAACNQxxWUOhFFwAAM9JCg8QMiXsEiXMMOVXoD4b4AAAAgH3uAA+"
+    "EzwAAAI1174oOhMkPhMIAAAAPtkb/"
+    "D7bJ6aYAAABoAQEAAI1DHFZQ6P4WAACLTeSDxAxryTCJdeCNsSCoQACJdeTrKopGAYTAdCgPtj"
+    "4PtsDrEotF4IqADKhAAAhEOx0PtkYBRzv4duqLfQhGRoA+AHXRi3Xk/"
+    "0Xgg8YIg33gBIl15HLpi8eJewTHQwgBAAAA6OD6//"
+    "9qBolDDI1DEI2JFKhAAFpmizFBZokwQUBASnXzi/PoUPv//+m3/v//gEwDHQRAO8F29kZGgH7/"
+    "AA+FNP///41DHrn+AAAAgAgIQEl1+YtDBOiL+v//"
+    "iUMMiVMI6wOJcwgzwA+3yIvBweEQC8GNexCrq6vrqDk1eLJAAA+FWP7//4PI/4tN/"
+    "F9eM81b6HMTAADJw2oUaICUQADoR+n//4NN4P/oOOb//4v4iX3c6FX8//+LX2iLdQjodf3//"
+    "4lFCDtDBA+EVwEAAGggAgAA6C/5//9Zi9iF2w+ERgEAALmIAAAAi3doi/vzpYMjAFP/"
+    "dQjouP3//1lZiUXghcAPhfwAAACLddz/dmj/FWiAQACFwHURi0ZoPeCjQAB0B1DoUfj//"
+    "1mJXmhTiz1cgEAA/9f2RnACD4XqAAAA9gUQqkAAAQ+F3QAAAGoN6ODs//"
+    "9Zg2X8AItDBKOIskAAi0MIo4yyQACLQwyjkLJAADPAiUXkg/"
+    "gFfRBmi0xDEGaJDEV8skAAQOvoM8CJReQ9AQEAAH0NikwYHIiIAKZAAEDr6TPAiUXkPQABAAB9"
+    "EIqMGB0BAACIiAinQABA6+b/NQioQAD/FWiAQACFwHUToQioQAA94KNAAHQHUOiY9///"
+    "WYkdCKhAAFP/18dF/P7////oAgAAAOswag3oWev//1nD6yWD+P91IIH74KNAAHQHU+hi9///"
+    "Wejo7f//xwAWAAAA6wSDZeAAi0Xg6P/n///Dgz3st0AAAHUSav3oVv7//"
+    "1nHBey3QAABAAAAM8DDi/9Vi+yD7BD/dQiNTfDoTfv//"
+    "w+"
+    "2RQyLTfSKVRSEVAEddR6DfRAAdBKLTfCLicgAAAAPtwRBI0UQ6wIzwIXAdAMzwECAffwAdAeLT"
+    "fiDYXD9ycOL/1WL7GoEagD/dQhqAOia////"
+    "g8QQXcNVi+xXVot1DItNEIt9CIvBi9EDxjv+dgg7+A+"
+    "CpAEAAIH5AAEAAHIfgz2otkAAAHQWV1aD5w+D5g87/"
+    "l5fdQheX13pnh8AAPfHAwAAAHUVwekCg+IDg/kIcirzpf8klXQ/"
+    "QACQi8e6AwAAAIPpBHIMg+ADA8j/JIWIPkAA/ySNhD9AAJD/"
+    "JI0IP0AAkJg+QADEPkAA6D5AACPRigaIB4pGAYhHAYpGAsHpAohHAoPGA4PHA4P5CHLM86X/"
+    "JJV0P0AAjUkAI9GKBogHikYBwekCiEcBg8YCg8cCg/kIcqbzpf8klXQ/"
+    "QACQI9GKBogHg8YBwekCg8cBg/kIcojzpf8klXQ/QACNSQBrP0AAWD9AAFA/"
+    "QABIP0AAQD9AADg/QAAwP0AAKD9AAItEjuSJRI/ki0SO6IlEj+iLRI7siUSP7ItEjvCJRI/"
+    "wi0SO9IlEj/SLRI74iUSP+ItEjvyJRI/8jQSNAAAAAAPwA/j/JJV0P0AAi/+EP0AAjD9AAJg/"
+    "QACsP0AAi0UIXl/Jw5CKBogHi0UIXl/Jw5CKBogHikYBiEcBi0UIXl/"
+    "Jw41JAIoGiAeKRgGIRwGKRgKIRwKLRQheX8nDkI10MfyNfDn898cDAAAAdSTB6QKD4gOD+"
+    "QhyDf3zpfz/JJUQQUAAi//32f8kjcBAQACNSQCLx7oDAAAAg/kEcgyD4AMryP8khRRAQAD/"
+    "JI0QQUAAkCRAQABIQEAAcEBAAIpGAyPRiEcDg+4BwekCg+8Bg/kIcrL986X8/"
+    "ySVEEFAAI1JAIpGAyPRiEcDikYCwekCiEcCg+4Cg+8Cg/kIcoj986X8/"
+    "ySVEEFAAJCKRgMj0YhHA4pGAohHAopGAcHpAohHAYPuA4PvA4P5CA+CVv////3zpfz/"
+    "JJUQQUAAjUkAxEBAAMxAQADUQEAA3EBAAORAQADsQEAA9EBAAAdBQACLRI4ciUSPHItEjhiJRI"
+    "8Yi0SOFIlEjxSLRI4QiUSPEItEjgyJRI8Mi0SOCIlEjwiLRI4EiUSPBI0EjQAAAAAD8AP4/"
+    "ySVEEFAAIv/IEFAAChBQAA4QUAATEFAAItFCF5fycOQikYDiEcDi0UIXl/"
+    "Jw41JAIpGA4hHA4pGAohHAotFCF5fycOQikYDiEcDikYCiEcCikYBiEcBi0UIXl/Jw4v/"
+    "VYvsU1aLdQiLhrwAAAAz21c7w3RvPeCqQAB0aIuGsAAAADvDdF45GHVai4a4AAAAO8N0FzkYdR"
+    "NQ6Bnz////trwAAADosR8AAFlZi4a0AAAAO8N0FzkYdRNQ6Pjy////trwAAADoSx8AAFlZ/"
+    "7awAAAA6ODy////trwAAADo1fL//1lZi4bAAAAAO8N0RDkYdUCLhsQAAAAt/gAAAFDotPL//"
+    "4uGzAAAAL+AAAAAK8dQ6KHy//+LhtAAAAArx1Dok/L///+2wAAAAOiI8v//"
+    "g8QQjb7UAAAAiwc9IKpAAHQXOZi0AAAAdQ9Q6DEdAAD/N+hh8v//WVmNflDHRQgGAAAAgX/"
+    "4CKlAAHQRiwc7w3QLORh1B1DoPPL//1k5X/x0EotHBDvDdAs5GHUHUOgl8v//"
+    "WYPHEP9NCHXHVugW8v//WV9eW13Di/9Vi+xTVos1XIBAAFeLfQhX/9aLh7AAAACFwHQDUP/"
+    "Wi4e4AAAAhcB0A1D/1ouHtAAAAIXAdANQ/9aLh8AAAACFwHQDUP/"
+    "WjV9Qx0UIBgAAAIF7+AipQAB0CYsDhcB0A1D/1oN7/AB0CotDBIXAdANQ/9aDwxD/"
+    "TQh11ouH1AAAAAW0AAAAUP/WX15bXcOL/1WL7FeLfQiF/w+EgwAAAFNWizVogEAAV//"
+    "Wi4ewAAAAhcB0A1D/1ouHuAAAAIXAdANQ/9aLh7QAAACFwHQDUP/Wi4fAAAAAhcB0A1D/"
+    "1o1fUMdFCAYAAACBe/gIqUAAdAmLA4XAdANQ/9aDe/wAdAqLQwSFwHQDUP/Wg8MQ/"
+    "00IddaLh9QAAAAFtAAAAFD/1l5bi8dfXcOF/3Q3hcB0M1aLMDv3dChXiTjowf7//"
+    "1mF9nQbVuhF////gz4AWXUPgf4QqUAAdAdW6Fn9//9Zi8dewzPAw2oMaKCUQADoEOH//+gF3v/"
+    "/i/ChEKpAAIVGcHQig35sAHQc6O7d//+LcGyF9nUIaiDows3//1mLxugj4f//w2oM6B7l//"
+    "9Zg2X8AI1GbIs96KlAAOhp////iUXkx0X8/v///+gCAAAA68FqDOgZ5P//WYt15MOL/"
+    "1WL7IsNsLZAAKG0tkAAa8kUA8jrEYtVCCtQDIH6AAAQAHIJg8AUO8Fy6zPAXcOL/"
+    "1WL7IPsEItNCItBEFaLdQxXi/"
+    "4reQyDxvzB7w+"
+    "Lz2nJBAIAAI2MAUQBAACJTfCLDkmJTfz2wQEPhdMCAABTjRwxixOJVfSLVvyJVfiLVfSJXQz2w"
+    "gF1dMH6BEqD+j92A2o/WotLBDtLCHVCuwAAAICD+iBzGYvK0+uNTAIE99MhXLhE/"
+    "gl1I4tNCCEZ6xyNSuDT641MAgT30yGcuMQAAAD+"
+    "CXUGi00IIVkEi10Mi1MIi1sEi038A030iVoEi1UMi1oEi1IIiVMIiU38i9HB+gRKg/o/"
+    "dgNqP1qLXfiD4wGJXfQPhY8AAAArdfiLXfjB+wRqP4l1DEteO952AoveA034i9HB+"
+    "gRKiU38O9Z2AovWO9p0XotNDItxBDtxCHU7vgAAAICD+yBzF4vL0+731iF0uET+"
+    "TAMEdSGLTQghMesajUvg0+731iG0uMQAAAD+"
+    "TAMEdQaLTQghcQSLTQyLcQiLSQSJTgSLTQyLcQSLSQiJTgiLdQzrA4tdCIN99AB1CDvaD4SAAA"
+    "AAi03wjQzRi1kEiU4IiV4EiXEEi04EiXEIi04EO04IdWCKTAIEiE0P/sGITAIEg/"
+    "ogcyWAfQ8AdQ6LyrsAAACA0+"
+    "uLTQgJGbsAAACAi8rT641EuEQJGOspgH0PAHUQjUrguwAAAIDT64tNCAlZBI1K4LoAAACA0+"
+    "qNhLjEAAAACRCLRfyJBolEMPyLRfD/"
+    "CA+F8wAAAKG4skAAhcAPhNgAAACLDcS2QACLNXCAQABoAEAAAMHhDwNIDLsAgAAAU1H/"
+    "1osNxLZAAKG4skAAugAAAIDT6glQCKG4skAAi0AQiw3EtkAAg6SIxAAAAAChuLJAAItAEP5IQ6"
+    "G4skAAi0gQgHlDAHUJg2AE/qG4skAAg3gI/3VlU2oA/3AM/9ahuLJAAP9wEGoA/zXUsEAA/"
+    "xV0gEAAiw2wtkAAobiyQABryRSLFbS2QAAryI1MEexRjUgUUVDodRsAAItFCIPEDP8NsLZAADs"
+    "FuLJAAHYEg20IFKG0tkAAo7y2QACLRQijuLJAAIk9xLZAAFtfXsnDocC2QABWizWwtkAAVzP/"
+    "O/B1NIPAEGvAFFD/NbS2QABX/zXUsEAA/"
+    "xXAgEAAO8d1BDPA63iDBcC2QAAQizWwtkAAo7S2QABr9hQDNbS2QABoxEEAAGoI/zXUsEAA/"
+    "xW4gEAAiUYQO8d0x2oEaAAgAABoAAAQAFf/FbyAQACJRgw7x3US/3YQV/"
+    "811LBAAP8VdIBAAOubg04I/4k+iX4E/wWwtkAAi0YQgwj/i8ZfXsOL/"
+    "1WL7FFRi00Ii0EIU1aLcRBXM9vrAwPAQ4XAffmLw2nABAIAAI2EMEQBAABqP4lF+"
+    "FqJQAiJQASDwAhKdfRqBIv7aAAQAADB5w8DeQxoAIAAAFf/FbyAQACFwHUIg8j/"
+    "6Z0AAACNlwBwAACJVfw7+ndDi8orz8HpDI1HEEGDSPj/g4jsDwAA/42Q/A8AAIkQjZD87///"
+    "x0D88A8AAIlQBMeA6A8AAPAPAAAFABAAAEl1y4tV/"
+    "ItF+AX4AQAAjU8MiUgEiUEIjUoMiUgIiUEEg2SeRAAz/"
+    "0eJvJ7EAAAAikZDisj+wYTAi0UIiE5DdQMJeAS6AAAAgIvL0+r30iFQCIvDX15bycOL/"
+    "1WL7IPsDItNCItBEFNWi3UQV4t9DIvXK1EMg8YXweoPi8ppyQQCAACNjAFEAQAAiU30i0/"
+    "8g+bwSTvxjXw5/IsfiU0QiV38D45VAQAA9sMBD4VFAQAAA9k78w+POwEAAItN/"
+    "MH5BEmJTfiD+T92Bmo/"
+    "WYlN+ItfBDtfCHVDuwAAAICD+SBzGtPri034jUwBBPfTIVyQRP4JdSaLTQghGesfg8Hg0+"
+    "uLTfiNTAEE99MhnJDEAAAA/gl1BotNCCFZBItPCItfBIlZBItPBIt/"
+    "CIl5CItNECvOAU38g338AA+OpQAAAIt9/ItNDMH/BE+NTDH8g/8/"
+    "dgNqP1+LXfSNHPuJXRCLWwSJWQSLXRCJWQiJSwSLWQSJSwiLWQQ7WQh1V4pMBwSITRP+"
+    "wYhMBwSD/"
+    "yBzHIB9EwB1DovPuwAAAIDT64tNCAkZjUSQRIvP6yCAfRMAdRCNT+"
+    "C7AAAAgNPri00ICVkEjYSQxAAAAI1P4LoAAACA0+oJEItVDItN/"
+    "I1EMvyJCIlMAfzrA4tVDI1GAYlC/IlEMvjpPAEAADPA6TgBAAAPjS8BAACLXQwpdRCNTgGJS/"
+    "yNXDP8i3UQwf4EToldDIlL/IP+P3YDaj9e9kX8AQ+FgAAAAIt1/MH+BE6D/j92A2o/"
+    "XotPBDtPCHVCuwAAAICD/iBzGYvO0+uNdAYE99MhXJBE/"
+    "g51I4tNCCEZ6xyNTuDT641MBgT30yGckMQAAAD+"
+    "CXUGi00IIVkEi10Mi08Ii3cEiXEEi3cIi08EiXEIi3UQA3X8iXUQwf4EToP+"
+    "P3YDaj9ei030jQzxi3kEiUsIiXsEiVkEi0sEiVkIi0sEO0sIdVeKTAYEiE0P/sGITAYEg/"
+    "4gcxyAfQ8AdQ6Lzr8AAACA0++"
+    "LTQgJOY1EkESLzusggH0PAHUQjU7gvwAAAIDT74tNCAl5BI2EkMQAAACNTuC6AAAAgNPqCRCLR"
+    "RCJA4lEGPwzwEBfXlvJw4v/"
+    "VYvsg+wUobC2QACLTQhrwBQDBbS2QACDwReD4fCJTfDB+QRTSYP5IFZXfQuDzv/T7oNN+P/"
+    "rDYPB4IPK/zP20+qJVfiLDby2QACL2esRi1MEizsjVfgj/"
+    "gvXdQqDwxSJXQg72HLoO9h1f4sdtLZAAOsRi1MEizsjVfgj/"
+    "gvXdQqDwxSJXQg72XLoO9l1W+"
+    "sMg3sIAHUKg8MUiV0IO9hy8DvYdTGLHbS2QADrCYN7CAB1CoPDFIldCDvZcvA72XUV6KD6//"
+    "+L2IldCIXbdQczwOkJAgAAU+g6+///WYtLEIkBi0MQgzj/dOWJHby2QACLQxCLEIlV/IP6/"
+    "3QUi4yQxAAAAIt8kEQjTfgj/gvPdSmDZfwAi5DEAAAAjUhEizkjVfgj/gvXdQ7/"
+    "RfyLkYQAAACDwQTr54tV/IvKackEAgAAjYwBRAEAAIlN9ItMkEQz/"
+    "yPOdRKLjJDEAAAAI034aiBf6wMDyUeFyX35i030i1T5BIsKK03wi/HB/gROg/4/"
+    "iU34fgNqP1479w+EAQEAAItKBDtKCHVcg/"
+    "8guwAAAIB9JovP0+uLTfyNfDgE99OJXewjXIhEiVyIRP4PdTOLTeyLXQghC+ssjU/"
+    "g0+uLTfyNjIjEAAAAjXw4BPfTIRn+"
+    "D4ld7HULi10Ii03sIUsE6wOLXQiDffgAi0oIi3oEiXkEi0oEi3oIiXkID4SNAAAAi030jQzxi3"
+    "kEiUoIiXoEiVEEi0oEiVEIi0oEO0oIdV6KTAYEiE0L/sGD/iCITAYEfSOAfQsAdQu/"
+    "AAAAgIvO0+8JO4vOvwAAAIDT74tN/"
+    "Al8iETrKYB9CwB1DY1O4L8AAACA0+"
+    "8JewSLTfyNvIjEAAAAjU7gvgAAAIDT7gk3i034hcl0C4kKiUwR/"
+    "OsDi034i3XwA9GNTgGJColMMvyLdfSLDo15AYk+"
+    "hcl1GjsduLJAAHUSi038Ow3EtkAAdQeDJbiyQAAAi038iQiNQgRfXlvJwzsN+"
+    "KlAAHUC88PpGBcAAMzMzFNWV4tUJBCLRCQUi0wkGFVSUFFRaPBPQABk/"
+    "zUAAAAAofipQAAzxIlEJAhkiSUAAAAAi0QkMItYCItMJCwzGYtwDIP+/nQ7i1QkNIP6/nQEO/"
+    "J2Lo00do1csxCLC4lIDIN7BAB1zGgBAQAAi0MI6L4YAAC5AQAAAItDCOjQGAAA67BkjwUAAAAA"
+    "g8QYX15bw4tMJAT3QQQGAAAAuAEAAAB0M4tEJAiLSAgzyOg+////VYtoGP9wDP9wEP9wFOg+//"
+    "//g8QMXYtEJAiLVCQQiQK4AwAAAMNVi0wkCIsp/3Ec/3EY/3Eo6BX///"
+    "+DxAxdwgQAVVZXU4vqM8Az2zPSM/Yz///RW19eXcOL6ovxi8FqAegbGAAAM8Az2zPJM9Iz///"
+    "mVYvsU1ZXagBqAGiXUEAAUej3IAAAX15bXcNVi2wkCFJR/3QkFOi0/v//g8QMXcIIAIv/"
+    "VYvsgewoAwAAofipQAAzxYlF/PYFAKpAAAFWdAhqCug7xP//WeiD3f//hcB0CGoW6IXd//"
+    "9Z9gUAqkAAAg+EygAAAImF4P3//4mN3P3//4mV2P3//4md1P3//4m10P3//4m9zP3//"
+    "2aMlfj9//9mjI3s/f//ZoydyP3//2aMhcT9//9mjKXA/f//ZoytvP3//5yPhfD9//"
+    "+LdQSNRQSJhfT9///HhTD9//8BAAEAibXo/f//i0D8alCJheT9//+Nhdj8//"
+    "9qAFDoXgAAAI2F2Pz//4PEDImFKP3//42FMP3//2oAx4XY/P//FQAAQIm15Pz//4mFLP3///"
+    "8VBIBAAI2FKP3//1D/FZiAQABqA+jJwv//"
+    "zIMlrLZAAADDzMzMzMzMzMzMzMzMzMyLVCQMi0wkBIXSdGkzwIpEJAiEwHUWgfoAAQAAcg6DPa"
+    "i2QAAAdAXp/"
+    "hYAAFeL+"
+    "YP6BHIx99mD4QN0DCvRiAeDxwGD6QF19ovIweAIA8GLyMHgEAPBi8qD4gPB6QJ0BvOrhdJ0Cog"
+    "Hg8cBg+oBdfaLRCQIX8OLRCQEw2oQaMCUQADoytL//zPAi10IM/873w+VwDvHdR3oz9j//"
+    "8cAFgAAAFdXV1dX6FfY//+DxBSDyP/rU4M9zLZAAAN1OGoE6NXW//9ZiX38U+jd8f//"
+    "WYlF4DvHdAuLc/yD7gmJdeTrA4t15MdF/P7////oJQAAADl94HUQU1f/NdSwQAD/"
+    "FciAQACL8IvG6IrS///DM/+LXQiLdeRqBOij1f//WcNqAugIv///WcOL/"
+    "1WL7ItFCIXAdBKD6AiBON3dAAB1B1Dom+H//1ldw2oMaOCUQADo/tH//"
+    "4Nl5ACLdQg7Nbi2QAB3ImoE6DDW//9Zg2X8AFboFvn//1mJReTHRfz+////"
+    "6AkAAACLReToCtL//8NqBOgr1f//WcOL/1WL7FaLdQiD/"
+    "uAPh6EAAABTV4s9uIBAAIM91LBAAAB1GOgiw///ah7ocMH//2j/AAAA6LK+//9ZWaHMtkAAg/"
+    "gBdQ6F9nQEi8brAzPAQFDrHIP4A3ULVuhT////WYXAdRaF9nUBRoPGD4Pm8FZqAP811LBAAP/"
+    "Xi9iF23UuagxeOQXstUAAdBX/dQjotNz//1mFwHQPi3UI6Xv////oMdf//4kw6CrX//"
+    "+JMF+Lw1vrFFbojdz//1noFtf//8cADAAAADPAXl3DagxoAJVAAOjl0P//i00IM/"
+    "87z3YuauBYM9L38TtFDBvAQHUf6OLW///HAAwAAABXV1dXV+hq1v//"
+    "g8QUM8Dp1QAAAA+vTQyL8Yl1CDv3dQMz9kYz24ld5IP+4Hdpgz3MtkAAA3VLg8YPg+"
+    "bwiXUMi0UIOwW4tkAAdzdqBOi41P//WYl9/P91COid9///WYlF5MdF/P7////"
+    "oXwAAAItd5DvfdBH/dQhXU+jz/P//"
+    "g8QMO991YVZqCP811LBAAP8VuIBAAIvYO991TDk97LVAAHQzVuik2///WYXAD4Vy////"
+    "i0UQO8cPhFD////HAAwAAADpRf///zP/i3UMagToXNP//"
+    "1nDO991DYtFEDvHdAbHAAwAAACLw+gZ0P//w2oQaCCVQADox8///4tdCIXbdQ7/dQzo/f3//"
+    "1npzAEAAIt1DIX2dQxT6DPf//9Z6bcBAACDPcy2QAADD4WTAQAAM/+JfeSD/"
+    "uAPh4oBAABqBOjF0///WYl9/FPoze7//1mJReA7xw+EngAAADs1uLZAAHdJVlNQ6K/z//"
+    "+DxAyFwHQFiV3k6zVW6H72//9ZiUXkO8d0J4tD/Eg7xnICi8ZQU/915Oj55///U+h97v//"
+    "iUXgU1Doo+7//4PEGDl95HVIO/d1BjP2Rol1DIPGD4Pm8Il1DFZX/zXUsEAA/"
+    "xW4gEAAiUXkO8d0IItD/Eg7xnICi8ZQU/915Oil5///U/914OhW7v//g8QUx0X8/v///"
+    "+guAAAAg33gAHUxhfZ1AUaDxg+D5vCJdQxWU2oA/zXUsEAA/xXAgEAAi/"
+    "jrEot1DItdCGoE6PbR//9Zw4t95IX/D4W/AAAAOT3stUAAdCxW6PjZ//9ZhcAPhdL+///oedT/"
+    "/zl94HVsi/D/FTSAQABQ6CTU//9ZiQbrX4X/D4WDAAAA6FTU//"
+    "85feB0aMcADAAAAOtxhfZ1AUZWU2oA/zXUsEAA/xXAgEAAi/iF/3VWOQXstUAAdDRW6I/Z//"
+    "9ZhcB0H4P+4HbNVuh/2f//WegI1P//xwAMAAAAM8DoJs7//8Po9dP//+l8////hf91Fujn0///"
+    "i/D/FTSAQABQ6JfT//+JBlmLx+vSi/"
+    "9Vi+yD7BSh+KlAADPFiUX8U1Yz21eL8TkdvLJAAHU4U1Mz/0dXaNiIQABoAAEAAFP/"
+    "FdiAQACFwHQIiT28skAA6xX/"
+    "FTSAQACD+Hh1CscFvLJAAAIAAAA5XRR+IotNFItFEEk4GHQIQDvLdfaDyf+"
+    "LRRQrwUg7RRR9AUCJRRShvLJAAIP4Ag+ErAEAADvDD4SkAQAAg/"
+    "gBD4XMAQAAiV34OV0gdQiLBotABIlFIIs11IBAADPAOV0kU1P/dRQPlcD/"
+    "dRCNBMUBAAAAUP91IP/Wi/g7+w+EjwEAAH5DauAz0lj394P4AnI3jUQ/"
+    "CD0ABAAAdxPo7hEAAIvEO8N0HMcAzMwAAOsRUOjv+v//"
+    "WTvDdAnHAN3dAACDwAiJRfTrA4ld9Dld9A+EPgEAAFf/dfT/dRT/dRBqAf91IP/"
+    "WhcAPhOMAAACLNdiAQABTU1f/dfT/dQz/dQj/"
+    "1ovIiU34O8sPhMIAAAD3RQwABAAAdCk5XRwPhLAAAAA7TRwPj6cAAAD/dRz/dRhX/3X0/3UM/"
+    "3UI/9bpkAAAADvLfkVq4DPSWPfxg/gCcjmNRAkIPQAEAAB3FugvEQAAi/"
+    "Q783RqxwbMzAAAg8YI6xpQ6C36//9ZO8N0CccA3d0AAIPACIvw6wIz9jvzdEH/dfhWV/"
+    "919P91DP91CP8V2IBAAIXAdCJTUzldHHUEU1PrBv91HP91GP91+FZT/3Ug/"
+    "xUwgEAAiUX4Vuhm+f//Wf919Ohd+f//"
+    "i0X4WelZAQAAiV30iV3wOV0IdQiLBotAFIlFCDldIHUIiwaLQASJRSD/"
+    "dQjoshAAAFmJReyD+P91BzPA6SEBAAA7RSAPhNsAAABTU41NFFH/dRBQ/"
+    "3Ug6NAQAACDxBiJRfQ7w3TUizXQgEAAU1P/dRRQ/3UM/3UI/9aJRfg7w3UHM/bptwAAAH49g/"
+    "jgdziDwAg9AAQAAHcW6BkQAACL/Dv7dN3HB8zMAACDxwjrGlDoF/n//"
+    "1k7w3QJxwDd3QAAg8AIi/jrAjP/O/t0tP91+FNX6GD3//+DxAz/dfhX/3UU/3X0/3UM/3UI/"
+    "9aJRfg7w3UEM/brJf91HI1F+P91GFBX/3Ug/3Xs6B8QAACL8Il18IPEGPfeG/YjdfhX6Dv4//"
+    "9Z6xr/dRz/dRj/dRT/dRD/dQz/dQj/FdCAQACL8Dld9HQJ/3X06MnZ//"
+    "9Zi0XwO8N0DDlFGHQHUOi22f//WYvGjWXgX15bi038M83oM/T//8nDi/9Vi+yD7BD/"
+    "dQiNTfDoxd3///91KI1N8P91JP91IP91HP91GP91FP91EP91DOgo/P//"
+    "g8QggH38AHQHi034g2Fw/cnDi/9Vi+xRUaH4qUAAM8WJRfyhwLJAAFNWM9tXi/"
+    "k7w3U6jUX4UDP2RlZo2IhAAFb/FeCAQACFwHQIiTXAskAA6zT/"
+    "FTSAQACD+Hh1CmoCWKPAskAA6wWhwLJAAIP4Ag+EzwAAADvDD4THAAAAg/"
+    "gBD4XoAAAAiV34OV0YdQiLB4tABIlFGIs11IBAADPAOV0gU1P/dRAPlcD/"
+    "dQyNBMUBAAAAUP91GP/Wi/g7+w+EqwAAAH48gf/w//9/"
+    "dzSNRD8IPQAEAAB3E+gyDgAAi8Q7w3QcxwDMzAAA6xFQ6DP3//"
+    "9ZO8N0CccA3d0AAIPACIvYhdt0aY0EP1BqAFPofvX//4PEDFdT/3UQ/3UMagH/dRj/1oXAdBH/"
+    "dRRQU/91CP8V4IBAAIlF+FPod/b//"
+    "4tF+FnrdTP2OV0cdQiLB4tAFIlFHDldGHUIiweLQASJRRj/"
+    "dRzo0w0AAFmD+P91BDPA60c7RRh0HlNTjU0QUf91DFD/dRjo+w0AAIvwg8QYO/"
+    "N03Il1DP91FP91EP91DP91CP91HP8V3IBAAIv4O/N0B1bot9f//1mLx41l7F9eW4tN/"
+    "DPN6DTy///Jw4v/VYvsg+wQ/3UIjU3w6Mbb////dSSNTfD/dSD/dRz/dRj/dRT/dRD/"
+    "dQzoFv7//4PEHIB9/AB0B4tN+INhcP3Jw1WL7IPsCIl9/"
+    "Il1+It1DIt9CItNEMHpB+"
+    "sGjZsAAAAAZg9vBmYPb04QZg9vViBmD29eMGYPfwdmD39PEGYPf1cgZg9/"
+    "XzBmD29mQGYPb25QZg9vdmBmD29+cGYPf2dAZg9/"
+    "b1BmD393YGYPf39wjbaAAAAAjb+AAAAASXWji3X4i338i+Vdw1WL7IPsHIl99Il1+Ild/"
+    "ItdDIvDmYvIi0UIM8oryoPhDzPKK8qZi/gz+iv6g+cPM/or+ovRC9d1Sot1EIvOg+F/iU3oO/"
+    "F0EyvxVlNQ6Cf///"
+    "+DxAyLRQiLTeiFyXR3i10Qi1UMA9Mr0YlV7APYK9mJXfCLdeyLffCLTejzpItFCOtTO891NffZ"
+    "g8EQiU3ki3UMi30Ii03k86SLTQgDTeSLVQwDVeSLRRArReRQUlHoTP///"
+    "4PEDItFCOsai3UMi30Ii00Qi9HB6QLzpYvKg+"
+    "ED86SLRQiLXfyLdfiLffSL5V3DagxoQJVAAOhcxv//"
+    "g2X8AGYPKMHHReQBAAAA6yOLReyLAIsAPQUAAMB0Cj0dAADAdAMzwMMzwEDDi2Xog2XkAMdF/"
+    "P7///+LReToXsb//8OL/1WL7IPsGDPAU4lF/"
+    "IlF9IlF+"
+    "FOcWIvINQAAIABQnZxaK9F0H1GdM8APoolF9Ild6IlV7IlN8LgBAAAAD6KJVfyJRfhb90X8AAA"
+    "ABHQO6Fz///+FwHQFM8BA6wIzwFvJw+iZ////o6i2QAAzwMOL/"
+    "1WL7FaLdQiF9g+EgQEAAP92BOge1f///3YI6BbV////dgzoDtX///92EOgG1f///3YU6P7U///"
+    "/dhjo9tT///826O/U////diDo59T///92JOjf1P///3Yo6NfU////dizoz9T///92MOjH1P///"
+    "3Y06L/U////dhzot9T///92OOiv1P///3Y86KfU//+DxED/dkDonNT///92ROiU1P///"
+    "3ZI6IzU////dkzohNT///92UOh81P///3ZU6HTU////dljobNT///92XOhk1P///3Zg6FzU///"
+    "/dmToVNT///92aOhM1P///3Zs6ETU////dnDoPNT///92dOg01P///3Z46CzU////dnzoJNT//"
+    "4PEQP+2gAAAAOgW1P///7aEAAAA6AvU////togAAADoANT///+2jAAAAOj10////"
+    "7aQAAAA6OrT////tpQAAADo39P///+2mAAAAOjU0////7acAAAA6MnT////tqAAAADovtP///"
+    "+2pAAAAOiz0////7aoAAAA6KjT//+DxCxeXcOL/1WL7FaLdQiF9nQ1iwY7BeCqQAB0B1DohdP/"
+    "/1mLRgQ7BeSqQAB0B1Doc9P//1mLdgg7NeiqQAB0B1boYdP//1leXcOL/"
+    "1WL7FaLdQiF9nR+i0YMOwXsqkAAdAdQ6D/T//9Zi0YQOwXwqkAAdAdQ6C3T//"
+    "9Zi0YUOwX0qkAAdAdQ6BvT//9Zi0YYOwX4qkAAdAdQ6AnT//9Zi0YcOwX8qkAAdAdQ6PfS//"
+    "9Zi0YgOwUAq0AAdAdQ6OXS//9Zi3YkOzUEq0AAdAdW6NPS//"
+    "9ZXl3DzFWL7FYzwFBQUFBQUFBQi1UMjUkAigIKwHQJg8IBD6sEJOvxi3UIg8n/"
+    "jUkAg8EBigYKwHQJg8YBD6MEJHPui8GDxCBeycPMzMzMzMzMzMzMi1QkBItMJAj3wgMAAAB1PI"
+    "sCOgF1LgrAdCY6YQF1JQrkdB3B6BA6QQJ1GQrAdBE6YQN1EIPBBIPCBArkddKL/"
+    "zPAw5AbwNHgg8ABw/"
+    "fCAQAAAHQYigKDwgE6AXXng8EBCsB03PfCAgAAAHSkZosCg8ICOgF1zgrAdMY6YQF1xQrkdL2D"
+    "wQLriMzMzMzMzMzMVYvsVjPAUFBQUFBQUFCLVQyNSQCKAgrAdAmDwgEPqwQk6/GLdQiL/"
+    "4oGCsB0DIPGAQ+jBCRz8Y1G/4PEIF7Jw1WL7FdWi3UMi00Qi30Ii8GL0QPGO/"
+    "52CDv4D4KkAQAAgfkAAQAAch+DPai2QAAAdBZXVoPnD4PmDzv+Xl91CF5fXemO+v//"
+    "98cDAAAAdRXB6QKD4gOD+QhyKvOl/ySVhGRAAJCLx7oDAAAAg+kEcgyD4AMDyP8khZhjQAD/"
+    "JI2UZEAAkP8kjRhkQACQqGNAANRjQAD4Y0AAI9GKBogHikYBiEcBikYCwekCiEcCg8YDg8cDg/"
+    "kIcszzpf8klYRkQACNSQAj0YoGiAeKRgHB6QKIRwGDxgKDxwKD+QhypvOl/"
+    "ySVhGRAAJAj0YoGiAeDxgHB6QKDxwGD+QhyiPOl/"
+    "ySVhGRAAI1JAHtkQABoZEAAYGRAAFhkQABQZEAASGRAAEBkQAA4ZEAAi0SO5IlEj+"
+    "SLRI7oiUSP6ItEjuyJRI/si0SO8IlEj/CLRI70iUSP9ItEjviJRI/4i0SO/IlEj/"
+    "yNBI0AAAAAA/AD+P8klYRkQACL/"
+    "5RkQACcZEAAqGRAALxkQACLRQheX8nDkIoGiAeLRQheX8nDkIoGiAeKRgGIRwGLRQheX8nDjUk"
+    "AigaIB4pGAYhHAYpGAohHAotFCF5fycOQjXQx/I18Ofz3xwMAAAB1JMHpAoPiA4P5CHIN/fOl/"
+    "P8klSBmQACL//fZ/ySN0GVAAI1JAIvHugMAAACD+QRyDIPgAyvI/"
+    "ySFJGVAAP8kjSBmQACQNGVAAFhlQACAZUAAikYDI9GIRwOD7gHB6QKD7wGD+Qhysv3zpfz/"
+    "JJUgZkAAjUkAikYDI9GIRwOKRgLB6QKIRwKD7gKD7wKD+QhyiP3zpfz/"
+    "JJUgZkAAkIpGAyPRiEcDikYCiEcCikYBwekCiEcBg+4Dg+8Dg/kID4JW/////fOl/"
+    "P8klSBmQACNSQDUZUAA3GVAAORlQADsZUAA9GVAAPxlQAAEZkAAF2ZAAItEjhyJRI8ci0SOGIl"
+    "EjxiLRI4UiUSPFItEjhCJRI8Qi0SODIlEjwyLRI4IiUSPCItEjgSJRI8EjQSNAAAAAAPwA/j/"
+    "JJUgZkAAi/8wZkAAOGZAAEhmQABcZkAAi0UIXl/"
+    "Jw5CKRgOIRwOLRQheX8nDjUkAikYDiEcDikYCiEcCi0UIXl/"
+    "Jw5CKRgOIRwOKRgKIRwKKRgGIRwGLRQheX8nDi/"
+    "9Vi+"
+    "yB7CgDAACj0LNAAIkNzLNAAIkVyLNAAIkdxLNAAIk1wLNAAIk9vLNAAGaMFeizQABmjA3cs0AA"
+    "ZowduLNAAGaMBbSzQABmjCWws0AAZowtrLNAAJyPBeCzQACLRQCj1LNAAItFBKPYs0AAjUUIo+"
+    "SzQACLheD8///"
+    "HBSCzQAABAAEAodizQACj1LJAAMcFyLJAAAkEAMDHBcyyQAABAAAAofipQACJhdj8//+h/"
+    "KlAAImF3Pz///8VnIBAAKMYs0AAagHoiOr//1lqAP8VBIBAAGgUkkAA/"
+    "xWYgEAAgz0Ys0AAAHUIagHoZOr//1loCQQAwP8VlIBAAFD/"
+    "FZCAQADJw8xVi+xTVldVagBqAGiUZ0AA/"
+    "3UI6PoJAABdX15bi+Vdw4tMJAT3QQQGAAAAuAEAAAB0MotEJBSLSPwzyOiS5///"
+    "VYtoEItQKFKLUCRS6BQAAACDxAhdi0QkCItUJBCJArgDAAAAw1NWV4tEJBBVUGr+aJxnQABk/"
+    "zUAAAAAofipQAAzxFCNRCQEZKMAAAAAi0QkKItYCItwDIP+/"
+    "3Q6g3wkLP90Bjt0JCx2LY00dosMs4lMJAyJSAyDfLMEAHUXaAEBAACLRLMI6EkAAACLRLMI6F8"
+    "AAADrt4tMJARkiQ0AAAAAg8QYX15bwzPAZIsNAAAAAIF5BJxnQAB1EItRDItSDDlRCHUFuAEAA"
+    "ADDU1G7IKtAAOsLU1G7IKtAAItMJAyJSwiJQwSJawxVUVBYWV1ZW8IEAP/Qw1WL7IPsBIl9/"
+    "It9CItNDMHpB2YP78DrCI2kJAAAAACQZg9/B2YPf0cQZg9/RyBmD39HMGYPf0dAZg9/"
+    "R1BmD39HYGYPf0dwjb+AAAAASXXQi338i+Vdw1WL7IPsEIl9/ItFCJmL+DP6K/"
+    "qD5w8z+iv6hf91PItNEIvRg+J/iVX0O8p0EivKUVDoc////"
+    "4PECItFCItV9IXSdEUDRRArwolF+"
+    "DPAi334i03086qLRQjrLvffg8cQiX3wM8CLfQiLTfDzqotF8ItNCItVEAPIK9BSagBR6H7///"
+    "+DxAyLRQiLffyL5V3Di/9Vi+yD7BhT/3UQjU3o6EjP//"
+    "+LXQiNQwE9AAEAAHcPi0Xoi4DIAAAAD7cEWOt1iV0IwX0ICI1F6FCLRQgl/"
+    "wAAAFDopwIAAFlZhcB0EopFCGoCiEX4iF35xkX6AFnrCjPJiF34xkX5AEGLRehqAf9wFP9wBI1"
+    "F/FBRjUX4UI1F6GoBUOj58v//g8QghcB1EDhF9HQHi0Xwg2Bw/"
+    "TPA6xQPt0X8I0UMgH30AHQHi03wg2Fw/"
+    "VvJw8zMzMzMzMzMzMzMzMzMzFGNTCQIK8iD4Q8DwRvJC8FZ6WoCAABRjUwkCCvIg+"
+    "EHA8EbyQvBWelUAgAAi/9Vi+yD7Ayh+KlAADPFiUX8agaNRfRQaAQQAAD/dQjGRfoA/"
+    "xXMgEAAhcB1BYPI/+sKjUX0UOj5AQAAWYtN/DPN6Hvk///Jw4v/VYvsg+w0ofipQAAzxYlF/"
+    "ItFEItNGIlF2ItFFFOJRdCLAFaJRdyLRQhXM/"
+    "+JTcyJfeCJfdQ7RQwPhF8BAACLNaiAQACNTehRUP/Wix3UgEAAhcB0XoN96AF1WI1F6FD/dQz/"
+    "1oXAdEuDfegBdUWLddzHRdQBAAAAg/7/dQz/ddjoJMj//4vwWUY7935bgf7w//9/"
+    "d1ONRDYIPQAEAAB3L+jk/v//i8Q7x3Q4xwDMzAAA6y1XV/913P912GoB/3UI/"
+    "9OL8Dv3dcMzwOnRAAAAUOjJ5///WTvHdAnHAN3dAACDwAiJReTrA4l95Dl95HTYjQQ2UFf/"
+    "deToDOb//4PEDFb/deT/ddz/ddhqAf91CP/ThcB0f4tdzDvfdB1XV/91HFNW/3XkV/"
+    "91DP8VMIBAAIXAdGCJXeDrW4sdMIBAADl91HUUV1dXV1b/deRX/3UM/9OL8Dv3dDxWagHoWsn/"
+    "/1lZiUXgO8d0K1dXVlBW/3XkV/91DP/TO8d1Dv914OhkyP//WYl94OsLg33c/3QFi03QiQH/"
+    "deTok+b//1mLReCNZcBfXluLTfwzzejH4v//ycOL/1WL7IPsEP91DI1N8OhZzP//"
+    "D7ZFCItN8IuJyAAAAA+3BEElAIAAAIB9/AB0B4tN+INhcP3Jw4v/"
+    "VYvsagpqAP91COhoAgAAg8QMXcPMzMzMzMzMzMxRjUwkBCvIG8D30CPIi8QlAPD//"
+    "zvIcgqLwVmUiwCJBCTDLQAQAACFAOvpi/9Vi+yD7BRWV/91CI1N7OjVy///i0UQi3UMM/"
+    "87x3QCiTA793Us6BO+//9XV1dXV8cAFgAAAOibvf//g8QUgH34AHQHi0X0g2Bw/"
+    "TPA6dgBAAA5fRR0DIN9FAJ8yYN9FCR/w4tN7FOKHol9/"
+    "I1+AYO5rAAAAAF+F41F7FAPtsNqCFDoBvz//"
+    "4tN7IPEDOsQi5HIAAAAD7bDD7cEQoPgCIXAdAWKH0frx4D7LXUGg00YAusFgPsrdQOKH0eLRRS"
+    "FwA+MSwEAAIP4AQ+EQgEAAIP4JA+POQEAAIXAdSqA+"
+    "zB0CcdFFAoAAADrNIoHPHh0DTxYdAnHRRQIAAAA6yHHRRQQAAAA6wqD+"
+    "BB1E4D7MHUOigc8eHQEPFh1BEeKH0eLscgAAAC4/////"
+    "zPS93UUD7bLD7cMTvbBBHQID77Lg+"
+    "kw6xv3wQMBAAB0MYrLgOlhgPkZD77LdwOD6SCDwck7TRRzGYNNGAg5RfxyJ3UEO8p2IYNNGASD"
+    "fRAAdSOLRRhPqAh1IIN9EAB0A4t9DINl/ADrW4td/A+vXRQD2Yld/IofR+uLvv///"
+    "3+oBHUbqAF1PYPgAnQJgX38AAAAgHcJhcB1Kzl1/HYm6HK8///2RRgBxwAiAAAAdAaDTfz/6w/"
+    "2RRgCagBYD5XAA8aJRfyLRRCFwHQCiTj2RRgCdAP3XfyAffgAdAeLRfSDYHD9i0X86xiLRRCFw"
+    "HQCiTCAffgAdAeLRfSDYHD9M8BbX17Jw4v/VYvsM8BQ/3UQ/3UM/"
+    "3UIOQWUskAAdQdo8KlAAOsBUOir/f//"
+    "g8QUXcPMzMzMzMzMzMzMzFWL7FdWU4tNEAvJdE2LdQiLfQy3QbNatiCNSQCKJgrkigd0JwrAdC"
+    "ODxgGDxwE653IGOuN3AgLmOsdyBjrDdwICxjrgdQuD6QF10TPJOuB0Cbn/////"
+    "cgL32YvBW15fycPMzMzMzMzMzMzMzMzMzMxWi0QkFAvAdSiLTCQQi0QkDDPS9/"
+    "GL2ItEJAj38Yvwi8P3ZCQQi8iLxvdkJBAD0etHi8iLXCQQi1QkDItEJAjR6dHb0erR2AvJdfT3"
+    "84vw92QkFIvIi0QkEPfmA9FyDjtUJAx3CHIPO0QkCHYJTitEJBAbVCQUM9srRCQIG1QkDPfa99"
+    "iD2gCLyovTi9mLyIvGXsIQAMzMzMzMzMzMzMzMi0QkCItMJBALyItMJAx1CYtEJAT34cIQAFP3"
+    "4YvYi0QkCPdkJBQD2ItEJAj34QPTW8IQAMzMzMzMzMzMzMzMzI1C/"
+    "1vDjaQkAAAAAI1kJAAzwIpEJAhTi9jB4AiLVCQI98IDAAAAdBWKCoPCATrLdM+"
+    "EyXRR98IDAAAAdesL2FeLw8HjEFYL2IsKv//+/n6LwYv3M8sD8AP5g/H/g/D/"
+    "M88zxoPCBIHhAAEBgXUcJQABAYF00yUAAQEBdQiB5gAAAIB1xF5fWzPAw4tC/"
+    "DrDdDaEwHTvOuN0J4TkdOfB6BA6w3QVhMB03DrjdAaE5HTU65ZeX41C/1vDjUL+Xl9bw41C/"
+    "V5fW8ONQvxeX1vD/"
+    "yXEgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAbJYAAH6WAACclgAAsJYAALiWAADKlgAA2JYAAOSWAAD0lgAACpcAACSXAAA8lwAAVpcAAGy"
+    "XAAB8lwAAlpcAAKiXAAC2lwAAyJcAAOCXAADulwAA+"
+    "pcAAAiYAAASmAAAKpgAADqYAABQmAAAaJgAAHaYAACEmAAAkJgAAKqYAAC6mAAA0JgAAOqYAAA"
+    "CmQAAGpkAAC6ZAABCmQAAXpkAAHKZAACCmQAAqpkAALaZAADAmQAAzJkAAN6ZAADqmQAA+"
+    "pkAAAiaAAAUmgAAIJoAADKaAABCmgAAWJoAAGiaAAB6mgAAAAAAAAAAAAAAAAAAAAAAABcsQAB"
+    "3PUAAel9AAM4RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAENvckV4aXRQcm9jZXNzAABtAHMAYwBvA"
+    "HIAZQBlAC4AZABsAGwAAABydW50aW1lIGVycm9yIAAADQoAAFRMT1NTIGVycm9yDQoAAABTSU5"
+    "HIGVycm9yDQoAAAAARE9NQUlOIGVycm9yDQoAAAAAAABSNjAzNA0KQW4gYXBwbGljYXRpb24ga"
+    "GFzIG1hZGUgYW4gYXR0ZW1wdCB0byBsb2FkIHRoZSBDIHJ1bnRpbWUgbGlicmFyeSBpbmNvcnJ"
+    "lY3RseS4KUGxlYXNlIGNvbnRhY3QgdGhlIGFwcGxpY2F0aW9uJ3Mgc3VwcG9ydCB0ZWFtIGZvc"
+    "iBtb3JlIGluZm9ybWF0aW9uLg0KAAAAAAAAUjYwMzMNCi0gQXR0ZW1wdCB0byB1c2UgTVNJTCB"
+    "jb2RlIGZyb20gdGhpcyBhc3NlbWJseSBkdXJpbmcgbmF0aXZlIGNvZGUgaW5pdGlhbGl6YXRpb"
+    "24KVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gSXQgaXMgbW9zdCB"
+    "saWtlbHkgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGFuIE1TSUwtY29tcGlsZWQgKC9jbHIpIGZ1b"
+    "mN0aW9uIGZyb20gYSBuYXRpdmUgY29uc3RydWN0b3Igb3IgZnJvbSBEbGxNYWluLg0KAABSNjA"
+    "zMg0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciBsb2NhbGUgaW5mb3JtYXRpb24NCgAAAAAAAFI2M"
+    "DMxDQotIEF0dGVtcHQgdG8gaW5pdGlhbGl6ZSB0aGUgQ1JUIG1vcmUgdGhhbiBvbmNlLgpUaGl"
+    "zIGluZGljYXRlcyBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLg0KAABSNjAzMA0KLSBDUlQgb"
+    "m90IGluaXRpYWxpemVkDQoAAFI2MDI4DQotIHVuYWJsZSB0byBpbml0aWFsaXplIGhlYXANCgA"
+    "AAABSNjAyNw0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciBsb3dpbyBpbml0aWFsaXphdGlvbg0KA"
+    "AAAAFI2MDI2DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIHN0ZGlvIGluaXRpYWxpemF0aW9uDQo"
+    "AAAAAUjYwMjUNCi0gcHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGwNCgAAAFI2MDI0DQotIG5vd"
+    "CBlbm91Z2ggc3BhY2UgZm9yIF9vbmV4aXQvYXRleGl0IHRhYmxlDQoAAAAAUjYwMTkNCi0gdW5"
+    "hYmxlIHRvIG9wZW4gY29uc29sZSBkZXZpY2UNCgAAAABSNjAxOA0KLSB1bmV4cGVjdGVkIGhlY"
+    "XAgZXJyb3INCgAAAABSNjAxNw0KLSB1bmV4cGVjdGVkIG11bHRpdGhyZWFkIGxvY2sgZXJyb3I"
+    "NCgAAAABSNjAxNg0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciB0aHJlYWQgZGF0YQ0KAA0KVGhpc"
+    "yBhcHBsaWNhdGlvbiBoYXMgcmVxdWVzdGVkIHRoZSBSdW50aW1lIHRvIHRlcm1pbmF0ZSBpdCB"
+    "pbiBhbiB1bnVzdWFsIHdheS4KUGxlYXNlIGNvbnRhY3QgdGhlIGFwcGxpY2F0aW9uJ3Mgc3Vwc"
+    "G9ydCB0ZWFtIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KAAAAUjYwMDkNCi0gbm90IGVub3VnaCB"
+    "zcGFjZSBmb3IgZW52aXJvbm1lbnQNCgBSNjAwOA0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciBhc"
+    "md1bWVudHMNCgAAAFI2MDAyDQotIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgbm90IGxvYWRlZA0"
+    "KAAAAAE1pY3Jvc29mdCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAALi4uADxwc"
+    "m9ncmFtIG5hbWUgdW5rbm93bj4AAFJ1bnRpbWUgRXJyb3IhCgpQcm9ncmFtOiAAAAAAAAAABQA"
+    "AwAsAAAAAAAAAHQAAwAQAAAAAAAAAlgAAwAQAAAAAAAAAjQAAwAgAAAAAAAAAjgAAwAgAAAAAA"
+    "AAAjwAAwAgAAAAAAAAAkAAAwAgAAAAAAAAAkQAAwAgAAAAAAAAAkgAAwAgAAAAAAAAAkwAAwAg"
+    "AAAAAAAAARW5jb2RlUG9pbnRlcgAAAEsARQBSAE4ARQBMADMAMgAuAEQATABMAAAAAABEZWNvZ"
+    "GVQb2ludGVyAAAARmxzRnJlZQBGbHNTZXRWYWx1ZQBGbHNHZXRWYWx1ZQBGbHNBbGxvYwAAAAB"
+    "HZXRQcm9jZXNzV2luZG93U3RhdGlvbgBHZXRVc2VyT2JqZWN0SW5mb3JtYXRpb25BAAAAR2V0T"
+    "GFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAVVNFUjMyLkRMTAA"
+    "AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2N"
+    "zg5Ojs8PT4/"
+    "QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dn"
+    "d4eXp7fH1+"
+    "fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAIAAgACAAIA"
+    "AgACAAIAAoACgAKAAoACgAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAASAAQ"
+    "ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACEAIQAhACEAIQAhACEAIQAhACEABAAEAAQAB"
+    "AAEAAQABAAgQCBAIEAgQCBAIEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA"
+    "AQABABAAEAAQABAAEAAQAIIAggCCAIIAggCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg"
+    "ACAAIAAgACAAIAAgAQABAAEAAQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAIAAgACAAIAAgACAAIAAgACAAaAAoACgAKAAoACAAIAAgACAAIAAgACAAIAAgACAAIAAgAC"
+    "AAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAhACEAIQAhACEAIQA"
+    "hACEAIQAhAAQABAAEAAQABAAEAAQAIEBgQGBAYEBgQGBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ"
+    "EBAQEBAQEBAQEBAQEBAQEBAQEQABAAEAAQABAAEACCAYIBggGCAYIBggECAQIBAgECAQIBAgEC"
+    "AQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBEAAQABAAEAAgACAAIAAgACAAIAAgACAAIAAgAC"
+    "AAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABIABAAEAAQABAA"
+    "EAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAUABQAEAAQABAAEAAQABQAEAAQABAAEAAQABAAAQ"
+    "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAAAQEBAQEBAQEB"
+    "AQEBAQECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgEQAA"
+    "IBAgECAQIBAgECAQIBAgEBAQAAAACAgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6Ch"
+    "oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/"
+    "wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/"
+    "T19vf4+fr7/P3+/"
+    "wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY"
+    "3ODk6Ozw9Pj9AYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpbXF1eX2BhYmNkZWZnaGlqa2xtb"
+    "m9wcXJzdHV2d3h5ent8fX5/"
+    "gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+"
+    "goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/"
+    "Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/"
+    "v+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+"
+    "wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/"
+    "g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/"
+    "wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY"
+    "3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BBQkNERUZHSElKS0xNT"
+    "k9QUVJTVFVWV1hZWnt8fX5/"
+    "gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+"
+    "goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/"
+    "Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/"
+    "v9ISDptbTpzcwAAAABkZGRkLCBNTU1NIGRkLCB5eXl5AE1NL2RkL3l5AAAAAFBNAABBTQAARGV"
+    "jZW1iZXIAAAAATm92ZW1iZXIAAAAAT2N0b2JlcgBTZXB0ZW1iZXIAAABBdWd1c3QAAEp1bHkAA"
+    "AAASnVuZQAAAABBcHJpbAAAAE1hcmNoAAAARmVicnVhcnkAAAAASmFudWFyeQBEZWMATm92AE9"
+    "jdABTZXAAQXVnAEp1bABKdW4ATWF5AEFwcgBNYXIARmViAEphbgBTYXR1cmRheQAAAABGcmlkY"
+    "XkAAFRodXJzZGF5AAAAAFdlZG5lc2RheQAAAFR1ZXNkYXkATW9uZGF5AABTdW5kYXkAAFNhdAB"
+    "GcmkAVGh1AFdlZABUdWUATW9uAFN1bgDIskAAILNAAFN1bk1vblR1ZVdlZFRodUZyaVNhdAAAA"
+    "EphbkZlYk1hckFwck1heUp1bkp1bEF1Z1NlcE9jdE5vdkRlYwAAAAAAAAAASAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+"
+    "KlAALCSQAADAAAAAAAAAAAAAACQJQAA8E8AAJxnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///"
+    "8AAAAAzP///wAAAAD+////RBFAAFgRQAAAAAAA/v///wAAAADI////AAAAAP7///"
+    "8AAAAAZBRAAAAAAAD+////AAAAAIz///8AAAAA/v///wAfQAAEH0AAAAAAAP7///8AAAAA1P//"
+    "/wAAAAD+////AAAAAJkhQAD+////AAAAAKghQAD+////AAAAANj///8AAAAA/v///"
+    "wAAAABbI0AA/v///wAAAABnI0AA/v///wAAAADY////AAAAAP7////SJ0AA1idAAAAAAAD+///"
+    "/AAAAANT///8AAAAA/v///wAAAABvKUAAAAAAAP7///8AAAAA1P///wAAAAD+////"
+    "AAAAAH4sQAAAAAAA/v///wAAAADY////AAAAAP7////bLUAA7y1AAAAAAAD+////AAAAAMD///"
+    "8AAAAA/v///wAAAADdL0AAAAAAAP7///8AAAAA0P///wAAAAD+////bTBAAIQwQAAAAAAA/v//"
+    "/wAAAADU////AAAAAP7///8AAAAAFDVAAAAAAAD+////AAAAANT///8AAAAA/v///"
+    "wAAAADpOEAAAAAAAP7///8AAAAAzP///wAAAAD+////AAAAAD49QAAAAAAA/v///wAAAADU///"
+    "/AAAAAP7///8AAAAAfkRAAAAAAAD+////AAAAAND///8AAAAA/v///wAAAADsUkAAAAAAAP7//"
+    "/8AAAAA1P///wAAAAD+////AAAAAGxTQAAAAAAA/v///wAAAADU////AAAAAP7///"
+    "8AAAAANlVAAAAAAAD+////AAAAAND///8AAAAA/v///wAAAACbVkAAAAAAAP7///8AAAAA1P//"
+    "/wAAAAD+////"
+    "5V5AAAFfQACElQAAAAAAAAAAAACMmgAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbJYAAH6WAA"
+    "CclgAAsJYAALiWAADKlgAA2JYAAOSWAAD0lgAACpcAACSXAAA8lwAAVpcAAGyXAAB8lwAAlpcA"
+    "AKiXAAC2lwAAyJcAAOCXAADulwAA+"
+    "pcAAAiYAAASmAAAKpgAADqYAABQmAAAaJgAAHaYAACEmAAAkJgAAKqYAAC6mAAA0JgAAOqYAAA"
+    "CmQAAGpkAAC6ZAABCmQAAXpkAAHKZAACCmQAAqpkAALaZAADAmQAAzJkAAN6ZAADqmQAA+"
+    "pkAAAiaAAAUmgAAIJoAADKaAABCmgAAWJoAAGiaAAB6mgAAAAAAAIYBR2V0Q29tbWFuZExpbmV"
+    "BAKUEU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyABgCR2V0TW9kdWxlSGFuZGxlVwAAsgRTb"
+    "GVlcABFAkdldFByb2NBZGRyZXNzAAAZAUV4aXRQcm9jZXNzACUFV3JpdGVGaWxlAGQCR2V0U3R"
+    "kSGFuZGxlAAATAkdldE1vZHVsZUZpbGVOYW1lQQAAYAFGcmVlRW52aXJvbm1lbnRTdHJpbmdzQ"
+    "QDYAUdldEVudmlyb25tZW50U3RyaW5ncwBhAUZyZWVFbnZpcm9ubWVudFN0cmluZ3NXABEFV2l"
+    "kZUNoYXJUb011bHRpQnl0ZQACAkdldExhc3RFcnJvcgAA2gFHZXRFbnZpcm9ubWVudFN0cmluZ"
+    "3NXAABvBFNldEhhbmRsZUNvdW50AADzAUdldEZpbGVUeXBlAGICR2V0U3RhcnR1cEluZm9BANE"
+    "ARGVsZXRlQ3JpdGljYWxTZWN0aW9uAMcEVGxzR2V0VmFsdWUAxQRUbHNBbGxvYwAAyARUbHNTZ"
+    "XRWYWx1ZQDGBFRsc0ZyZWUA7wJJbnRlcmxvY2tlZEluY3JlbWVudAAAcwRTZXRMYXN0RXJyb3I"
+    "AAMUBR2V0Q3VycmVudFRocmVhZElkAADrAkludGVybG9ja2VkRGVjcmVtZW50AADNAkhlYXBDc"
+    "mVhdGUAAOwEVmlydHVhbEZyZWUAzwJIZWFwRnJlZQAApwNRdWVyeVBlcmZvcm1hbmNlQ291bnR"
+    "lcgCTAkdldFRpY2tDb3VudAAAwQFHZXRDdXJyZW50UHJvY2Vzc0lkAHkCR2V0U3lzdGVtVGltZ"
+    "UFzRmlsZVRpbWUAOQNMZWF2ZUNyaXRpY2FsU2VjdGlvbgAA7gBFbnRlckNyaXRpY2FsU2VjdGl"
+    "vbgAAwARUZXJtaW5hdGVQcm9jZXNzAADAAUdldEN1cnJlbnRQcm9jZXNzANMEVW5oYW5kbGVkR"
+    "XhjZXB0aW9uRmlsdGVyAAAAA0lzRGVidWdnZXJQcmVzZW50ADwDTG9hZExpYnJhcnlBAADjAkl"
+    "uaXRpYWxpemVDcml0aWNhbFNlY3Rpb25BbmRTcGluQ291bnQAcgFHZXRDUEluZm8AaAFHZXRBQ"
+    "1AAADcCR2V0T0VNQ1AAAAoDSXNWYWxpZENvZGVQYWdlAMsCSGVhcEFsbG9jAOkEVmlydHVhbEF"
+    "sbG9jAADSAkhlYXBSZUFsbG9jABgEUnRsVW53aW5kANQCSGVhcFNpemUAAAQCR2V0TG9jYWxlS"
+    "W5mb0EAACsDTENNYXBTdHJpbmdBAABnA011bHRpQnl0ZVRvV2lkZUNoYXIALQNMQ01hcFN0cml"
+    "uZ1cAAGYCR2V0U3RyaW5nVHlwZUEAAGkCR2V0U3RyaW5nVHlwZVcAAEtFUk5FTDMyLmRsbAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACSFEAAAgAAAHCGQAAIAAAARIZAAAkAAAAYhkA"
+    "ACgAAAICFQAAQAAAAVIVAABEAAAAkhUAAEgAAAACFQAATAAAA1IRAABgAAACchEAAGQAAAHSEQ"
+    "AAaAAAAPIRAABsAAAAEhEAAHAAAANyDQAAeAAAAvINAAB8AAABYg0AAIAAAACCDQAAhAAAAKIJ"
+    "AACIAAACIgUAAeAAAAHSBQAB5AAAAZIFAAHoAAABUgUAA/AAAAFCBQAD/"
+    "AAAAQIFAAAMAAAAHAAAAeAAAAAoAAAD/////"
+    "gAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAA//////////"
+    "8QAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAA"
+    "AAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAA"
+    "AAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA"
+    "0AAAAGAAAACQAAAAcAAAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAA"
+    "FgAAAA0AAAAWAAAADwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAA"
+    "ACAAAAQQAAAA0AAABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAA"
+    "AAsAAABsAAAADQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAA"
+    "AACgAAAIIAAAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQA"
+    "AAALAAAApwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAwAAAAIAAAA/"
+    "VJAAP1SQAD9UkAA/VJAAP1SQAD9UkAA/VJAAP1SQAD9UkAA/"
+    "VJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQE"
+    "BAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egA"
+    "AAAAAAEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAICAgICAgICAgICAgI"
+    "CAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWJjZ"
+    "GVmZ2hpamtsbW5vcHFyc3R1dnd4eXoAAAAAAABBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAADgo0AAAQIECKQDAABggnmCIQAAAAAAAACm3wAAAAAAAKGlA"
+    "AAAAAAAgZ/g/"
+    "AAAAABAfoD8AAAAAKgDAADBo9qjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgf4AAAAAAABA/"
+    "gAAAAAAALUDAADBo9qjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgf4AAAAAAABB/"
+    "gAAAAAAALYDAADPouSiGgDlouiiWwAAAAAAAAAAAAAAAAAAAAAAgf4AAAAAAABAfqH+"
+    "AAAAAFEFAABR2l7aIABf2mraMgAAAAAAAAAAAAAAAAAAAAAAgdPY3uD5AAAxfoH+"
+    "AAAAAOSLQAAAAAAAQwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKlA"
+    "AAAAAAAAAAAAAAAAAAipQAAAAAAAAAAAAAAAAAAIqUAAAAAAAAAAAAAAAAAACKlAAAAAAAAAAA"
+    "AAAAAAAAipQAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAOCqQAAAAAAAAAAAAOCJ"
+    "QABojkAA6I9AACCqQAAQqUAAAQAAABCpQADgo0AATuZAu7EZv0QDAAAAAAAAAAAAAAAAAAAA/"
+    "v///+CJQADii0AAAAAAABCSQAAMkkAACJJAAASSQAAAkkAA/"
+    "JFAAPiRQADwkUAA6JFAAOCRQADUkUAAyJFAAMCRQAC0kUAAsJFAAKyRQACokUAApJFAAKCRQAC"
+    "ckUAAmJFAAJSRQACQkUAAjJFAAIiRQACEkUAAfJFAAHCRQABokUAAYJFAAKCRQABYkUAAUJFAA"
+    "EiRQAA8kUAANJFAACiRQAAckUAAGJFAABSRQAAIkUAA9JBAAOiQQAAJBAAAAQAAAAAAAAAgqkA"
+    "ALgAAANyqQADEskAAxLJAAMSyQADEskAAxLJAAMSyQADEskAAxLJAAMSyQAB/f39/f39/"
+    "f+CqQAABAAAALgAAAAEAAAAgBZMZAAAAAAAAAAAAAAAAgHAAAAEAAADw8f//"
+    "AAAAAFBTVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAABQRFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAQKtAAICrQAD/////AAAAAAAAAAD/////AAAAAAAAAAD///"
+    "//HgAAADsAAABaAAAAeAAAAJcAAAC1AAAA1AAAAPMAAAARAQAAMAEAAE4BAABtAQAA/////"
+    "x4AAAA6AAAAWQAAAHcAAACWAAAAtAAAANMAAADyAAAAEAEAAC8BAABNAQAAbAEAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAMAAAACAgAwggN"
+    "8BgkqhkiG9w0BBwKgggNtMIIDaQIBATELMAkGBSsOAwIaBQAwaAYKKwYBBAGCNwIBBKBaMFgwM"
+    "wYKKwYBBAGCNwIBDzAlAwEAoCCiHoAcADwAPAA8AE8AYgBzAG8AbABlAHQAZQA+"
+    "AD4APjAhMAkGBSsOAwIaBQAEFMrxEbhsXtVmCa29KlIyavoVFBUfoIIBwzCCAb8wggFtoAMCAQ"
+    "ICEIa7r5OFwoyHTfEB2UeZDakwCQYFKw4DAh0FADAWMRQwEgYDVQQDEwtSb290IEFnZW5jeTAe"
+    "Fw0xMTEwMDYwNTQ5NTRaFw0zOTEyMzEyMzU5NTlaMCIxIDAeBgNVBAMTF0pvZSdzLVNvZnR3YX"
+    "JlLUVtcG9yaXVtMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCi8GGUS51z5seX0BfONcI4"
+    "PRxkxns17SyVjkujctWriDRPiA/"
+    "0OMqBnLxTwS7WGVE7EON5yJw3V1anySZ9p8ZZ2YZNzcsx+Nx5bDQpqecNymavJj+"
+    "l36xqBK5mU4g9jRWxDo1UUoU9DqHVF8bYzDhiqmNBpeAFI53TvsOUYGkGrQIDAQABo0swSTBHB"
+    "gNVHQEEQDA+"
+    "gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc"
+    "+41KpcNfQwCQYFKw4DAh0FAANBAHmguJ5+ybm2AMRkeq1NZN0HYU0myz/"
+    "48Nhy3OoKV8vuvJfaznXN4v2/"
+    "n5LgNHMDJoYiyoXKrOyMCOTlhpGi02sxggEkMIIBIAIBATAqMBYxFDASBgNVBAMTC1Jvb3QgQW"
+    "dlbmN5AhCGu6+"
+    "ThcKMh03xAdlHmQ2pMAkGBSsOAwIaBQCgUjAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BC"
+    "QMxDAYKKwYBBAGCNwIBBDAjBgkqhkiG9w0BCQQxFgQUrTK/"
+    "hWLFIiQw3pmtC8vRolOrYiswDQYJKoZIhvcNAQEBBQAEgYCKLbPMW0nLtKmzA0L7Jsqxp9khzD"
+    "AztsdT7+jTg7B/cRRKd+l/zX/"
+    "z8I2u5ej7PdbssJdULHOLL740wohqsSZI1q+NiIJwk5kAt2Kc2E1yd+VN07SdrN8cMXSMmT/"
+    "h4/qjy/9fcWoGI49TG+8n55LgWv+mnwAQN6CnxFfTaizPEA==";
+
+const char kMultiSignedExeBase64[] =
+    "TVqQAAMAAAAEAAAA//"
+    "8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAA4fug4A"
+    "tAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAA"
+    "AAAACUcP2A0BGT09ARk9PQEZPT2WkA09MRk9PQEZLTmRGT09lpBtPAEZPT2WkQ05gRk9PZaRfT"
+    "yxGT09lpAtPREZPTUmljaNARk9MAAAAAAAAAAFBFAABMAQMAWECNTgAAAAAAAAAA4AADAQsBCQ"
+    "AAYgAAADQAAAAAAACCEQAAABAAAACAAAAAAEAAABAAAAACAAAFAAAAAAAAAAUAAAAAAAAAAMAA"
+    "AAAEAABeXwEAAwAAgAAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAAAAAAAAAAAAAXJUAACgAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAJAAABgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAYJIAAEAAAAAAAAAAAAAAAACAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALn"
+    "RleHQAAACUYQAAABAAAABiAAAABAAAAAAAAAAAAAAAAAAAIAAAYC5yZGF0YQAAmhoAAACAAAAA"
+    "HAAAAGYAAAAAAAAAAAAAAAAAAEAAAEAuZGF0YQAAAPwXAAAAoAAAAA4AAACCAAAAAAAAAAAAAA"
+    "AAAABAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAFWL7DPAXcOL/1WL7IM9aKxAAAJ0BeilBgAA/3UI6PIEAABo/"
+    "wAAAOg0AgAAWVldw2oUaNCSQADo9BQAALhNWgAAZjkFAABAAHU4oTwAQACBuAAAQABQRQAAdSe"
+    "5CwEAAGY5iBgAQAB1GYO4dABAAA52EDPJOYjoAEAAD5XBiU3k6wSDZeQAagHocxQAAFmFwHUIa"
+    "hzobv///1no1BIAAIXAdQhqEOhd////WehnDgAAg2X8AOgKDAAAhcB9CGob6EgBAABZ/"
+    "xUAgEAAo/"
+    "i3QADotwoAAKNgrEAA6PIJAACFwH0IagjoIgEAAFnoaQcAAIXAfQhqCegRAQAAWWoB6MgBAABZ"
+    "hcB0B1Do/gAAAFmhfKxAAKOArEAAUP81dKxAAP81cKxAAOjV/v//g8QMiUXgg33kAHUGUOg/"
+    "AwAA6GYDAADrLotF7IsIiwmJTdxQUeikBQAAWVnDi2Xoi0XciUXgg33kAHUGUOglAwAA6EUDAA"
+    "DHRfz+////i0Xg6PQTAADD6JUVAADppP7//4v/"
+    "VYvsi0UIiwCBOGNzbeB1KoN4EAN1JItAFD0gBZMZdBU9IQWTGXQOPSIFkxl0Bz0AQJkBdQXo6h"
+    "UAADPAXcIEAGiMEUAA/xUEgEAAM8DDi/9Vi+xXv+gDAABX/xUMgEAA/3UI/"
+    "xUIgEAAgcfoAwAAgf9g6gAAdwSFwHTeX13Di/9Vi+zoqQQAAP91COj2AgAA/"
+    "zUEoEAA6LUNAABo/wAAAP/Qg8QMXcOL/1WL7GgogUAA/"
+    "xUIgEAAhcB0FWgYgUAAUP8VEIBAAIXAdAX/dQj/0F3Di/9Vi+z/dQjoyP///1n/dQj/"
+    "FRSAQADMagjo+RYAAFnDagjoFhYAAFnDi/9Vi+xWi/DrC4sGhcB0Av/Qg8YEO3UIcvBeXcOL/"
+    "1WL7FaLdQgzwOsPhcB1EIsOhcl0Av/Rg8YEO3UMcuxeXcOL/"
+    "1WL7IM98LdAAAB0GWjwt0AA6G0aAABZhcB0Cv91CP8V8LdAAFnopBkAAGgEgUAAaPCAQADoof/"
+    "//1lZhcB1Qmg9H0AA6G4ZAAC46IBAAMcEJOyAQADoY////"
+    "4M99LdAAABZdBto9LdAAOgVGgAAWYXAdAxqAGoCagD/"
+    "FfS3QAAzwF3Dahho8JJAAOjUEQAAagjoFRYAAFmDZfwAM9tDOR2crEAAD4TFAAAAiR2YrEAAik"
+    "UQopSsQACDfQwAD4WdAAAA/zXot0AA6EQMAABZi/iJfdiF/3R4/zXkt0AA6C8MAABZi/"
+    "CJddyJfeSJdeCD7gSJddw793JX6AsMAAA5BnTtO/dySv826AUMAACL+Oj1CwAAiQb/1/"
+    "816LdAAOjvCwAAi/j/"
+    "NeS3QADo4gsAAIPEDDl95HUFOUXgdA6JfeSJfdiJReCL8Il13It92OufaAyBQAC4CIFAAOhf/"
+    "v//WWgUgUAAuBCBQADoT/7//1nHRfz+////"
+    "6B8AAACDfRAAdSiJHZysQABqCOhDFAAAWf91COj8/f//"
+    "M9tDg30QAHQIagjoKhQAAFnD6PoQAADDi/9Vi+xqAGoA/3UI6MP+//+DxAxdw4v/"
+    "VYvsagBqAf91COit/v//g8QMXcNqAWoAagDonf7//4PEDMNqAWoBagDojv7//4PEDMOL/"
+    "1boBwsAAIvwVujWGwAAVuhhGwAAVujJFAAAVuhGGwAAVugxGwAAVugZGQAAVuj+"
+    "AQAAVujrEgAAaJIUQADoWQoAAIPEJKMEoEAAXsOL/1WL7FFRU4tdCFZXM/Yz/4l9/Dsc/"
+    "QigQAB0CUeJffyD/xdy7oP/Fw+DdwEAAGoD6CkfAABZg/"
+    "gBD4Q0AQAAagPoGB8AAFmFwHUNgz0AoEAAAQ+EGwEAAIH7/"
+    "AAAAA+"
+    "EQQEAAGjohkAAuxQDAABTv6CsQABX6HweAACDxAyFwHQNVlZWVlboGhQAAIPEFGgEAQAAvrmsQ"
+    "ABWagDGBb2tQAAA/"
+    "xUggEAAhcB1JmjQhkAAaPsCAABW6DoeAACDxAyFwHQPM8BQUFBQUOjWEwAAg8QUVuiTHQAAQFm"
+    "D+"
+    "Dx2OFbohh0AAIPuOwPGagO5tK9AAGjMhkAAK8hRUOisHAAAg8QUhcB0ETP2VlZWVlbokxMAAIP"
+    "EFOsCM/ZoyIZAAFNX6BIcAACDxAyFwHQNVlZWVlbobxMAAIPEFItF/"
+    "P80xQygQABTV+jtGwAAg8QMhcB0DVZWVlZW6EoTAACDxBRoECABAGighkAAV+"
+    "hgGgAAg8QM6zJq9P8VHIBAAIvYO950JIP7/3QfagCNRfhQjTT9DKBAAP826NEcAABZUP82U/"
+    "8VGIBAAF9eW8nDagPorR0AAFmD+AF0FWoD6KAdAABZhcB1H4M9AKBAAAF1Fmj8AAAA6Cn+//"
+    "9o/wAAAOgf/v//WVnDw4v/"
+    "VYvsUVFW6KsKAACL8IX2D4RGAQAAi1ZcocygQABXi30Ii8pTOTl0DovYa9sMg8EMA9o7y3Lua8"
+    "AMA8I7yHMIOTl1BIvB6wIzwIXAdAqLWAiJXfyF23UHM8Dp+"
+    "wAAAIP7BXUMg2AIADPAQOnqAAAAg/sBD4TeAAAAi05giU34i00MiU5gi0gEg/"
+    "kID4W4AAAAiw3AoEAAiz3EoEAAi9ED+"
+    "TvXfSRryQyLflyDZDkIAIs9wKBAAIsdxKBAAEID34PBDDvTfOKLXfyLAIt+"
+    "ZD2OAADAdQnHRmSDAAAA6149kAAAwHUJx0ZkgQAAAOtOPZEAAMB1CcdGZIQAAADrPj2TAADAdQ"
+    "nHRmSFAAAA6y49jQAAwHUJx0ZkggAAAOsePY8AAMB1CcdGZIYAAADrDj2SAADAdQfHRmSKAAAA"
+    "/3Zkagj/01mJfmTrB4NgCABR/9OLRfhZiUZgg8j/"
+    "W19eycODPey3QAAAdQXoECUAAFaLNWCsQABXM/+F9nUYg8j/"
+    "6aAAAAA8PXQBR1bo+BoAAFmNdAYBigaEwHXqagRHV+j1HAAAi/hZWYk9fKxAAIX/"
+    "dMuLNWCsQABT60JW6McaAACL2EOAPj1ZdDFqAVPoxxwAAFlZiQeFwHROVlNQ6DEbAACDxAyFwH"
+    "QPM8BQUFBQUOjNEAAAg8QUg8cEA/"
+    "OAPgB1uf81YKxAAOi5GwAAgyVgrEAAAIMnAMcF4LdAAAEAAAAzwFlbX17D/"
+    "zV8rEAA6JMbAACDJXysQAAAg8j/6+SL/"
+    "1WL7FGLTRBTM8BWiQeL8otVDMcBAQAAADlFCHQJi10Ig0UIBIkTiUX8gD4idRAzwDlF/"
+    "LMiD5TARolF/Os8/weF0nQIigaIAkKJVQyKHg+2w1BG6FckAABZhcB0E/"
+    "8Hg30MAHQKi00Migb/"
+    "RQyIAUaLVQyLTRCE23Qyg338AHWpgPsgdAWA+wl1n4XSdATGQv8Ag2X8AIA+AA+"
+    "E6QAAAIoGPCB0BDwJdQZG6/NO6+OAPgAPhNAAAACDfQgAdAmLRQiDRQgEiRD/"
+    "ATPbQzPJ6wJGQYA+XHT5gD4idSb2wQF1H4N9/AB0DI1GAYA4InUEi/"
+    "DrDTPAM9s5RfwPlMCJRfzR6YXJdBJJhdJ0BMYCXEL/"
+    "B4XJdfGJVQyKBoTAdFWDffwAdQg8IHRLPAl0R4XbdD0PvsBQhdJ0I+"
+    "hyIwAAWYXAdA2KBotNDP9FDIgBRv8Hi00Migb/RQyIAesN6E8jAABZhcB0A0b/B/"
+    "8Hi1UMRulW////hdJ0B8YCAEKJVQz/B4tNEOkO////i0UIXluFwHQDgyAA/wHJw4v/"
+    "VYvsg+wMUzPbVlc5Hey3QAB1BeiMIgAAaAQBAAC+uK9AAFZTiB28sEAA/"
+    "xUggEAAofi3QACJNYysQAA7w3QHiUX8OBh1A4l1/ItV/I1F+FBTU4199OgK/v//i0X4g8QMPf/"
+    "//z9zSotN9IP5/3NCi/jB5wKNBA87wXI2UOj4GQAAi/BZO/N0KYtV/I1F+FAD/ldWjX306Mn9/"
+    "/+LRfiDxAxIo3CsQACJNXSsQAAzwOsDg8j/X15bycOL/"
+    "1WL7KHAsEAAg+wMU1aLNTiAQABXM9sz/zvDdS7/1ov4O/t0DMcFwLBAAAEAAADrI/"
+    "8VNIBAAIP4eHUKagJYo8CwQADrBaHAsEAAg/gBD4WBAAAAO/t1D//Wi/"
+    "g7+3UHM8DpygAAAIvHZjkfdA5AQGY5GHX5QEBmORh18os1MIBAAFNTUyvHU9H4QFBXU1OJRfT/"
+    "1olF+DvDdC9Q6B4ZAABZiUX8O8N0IVNT/3X4UP919FdTU//WhcB1DP91/OhuGAAAWYld/Itd/"
+    "Ff/FSyAQACLw+tcg/gCdAQ7w3WC/xUogEAAi/A78w+Ecv///"
+    "zgedApAOBh1+0A4GHX2K8ZAUIlF+Oi3GAAAi/hZO/t1DFb/FSSAQADpRf////"
+    "91+FZX6E4hAACDxAxW/xUkgEAAi8dfXlvJw2pUaBCTQADoYQgAADP/"
+    "iX38jUWcUP8VRIBAAMdF/P7///"
+    "9qQGogXlbooRgAAFlZO8cPhBQCAACj4LZAAIk10LZAAI2IAAgAAOswxkAEAIMI/"
+    "8ZABQqJeAjGQCQAxkAlCsZAJgqJeDjGQDQAg8BAiw3gtkAAgcEACAAAO8FyzGY5fc4PhAoBAAC"
+    "LRdA7xw+E/wAAAIs4jVgEjQQ7iUXkvgAIAAA7/nwCi/"
+    "7HReABAAAA61tqQGog6BMYAABZWYXAdFaLTeCNDI3gtkAAiQGDBdC2QAAgjZAACAAA6yrGQAQA"
+    "gwj/xkAFCoNgCACAYCSAxkAlCsZAJgqDYDgAxkA0AIPAQIsRA9Y7wnLS/"
+    "0XgOT3QtkAAfJ3rBos90LZAAINl4ACF/35ti0XkiwiD+f90VoP5/nRRigOoAXRLqAh1C1H/"
+    "FUCAQACFwHQ8i3Xgi8bB+AWD5h/"
+    "B5gYDNIXgtkAAi0XkiwCJBooDiEYEaKAPAACNRgxQ6BESAABZWYXAD4TJAAAA/0YI/"
+    "0XgQ4NF5AQ5feB8kzPbi/PB5gYDNeC2QACLBoP4/3QLg/"
+    "j+dAaATgSA63LGRgSBhdt1BWr2WOsKi8NI99gbwIPA9VD/FRyAQACL+IP//3RDhf90P1f/"
+    "FUCAQACFwHQ0iT4l/wAAAIP4AnUGgE4EQOsJg/"
+    "gDdQSATgQIaKAPAACNRgxQ6HsRAABZWYXAdDf/RgjrCoBOBEDHBv7///9Dg/sDD4xn/////"
+    "zXQtkAA/xU8gEAAM8DrETPAQMOLZejHRfz+////g8j/6F8GAADDi/"
+    "9WuMCSQAC+wJJAAFeL+DvGcw+LB4XAdAL/0IPHBDv+cvFfXsOL/"
+    "1a4yJJAAL7IkkAAV4v4O8ZzD4sHhcB0Av/Qg8cEO/5y8V9ew4v/VYvsVv81FKFAAIs1TIBAAP/"
+    "WhcB0IaEQoUAAg/j/dBdQ/zUUoUAA/9b/"
+    "0IXAdAiLgPgBAADrJ76Qh0AAVv8VCIBAAIXAdQtW6Cry//"
+    "9ZhcB0GGiAh0AAUP8VEIBAAIXAdAj/dQj/0IlFCItFCF5dw2oA6If///9Zw4v/"
+    "VYvsVv81FKFAAIs1TIBAAP/WhcB0IaEQoUAAg/j/dBdQ/zUUoUAA/9b/"
+    "0IXAdAiLgPwBAADrJ76Qh0AAVv8VCIBAAIXAdQtW6K/x//"
+    "9ZhcB0GGish0AAUP8VEIBAAIXAdAj/dQj/0IlFCItFCF5dw/8VUIBAAMIEAIv/"
+    "Vv81FKFAAP8VTIBAAIvwhfZ1G/81yLBAAOhl////"
+    "WYvwVv81FKFAAP8VVIBAAIvGXsOhEKFAAIP4/3QWUP810LBAAOg7////Wf/Qgw0QoUAA/"
+    "6EUoUAAg/j/dA5Q/xVYgEAAgw0UoUAA/+l9BwAAagxoMJNAAOhaBAAAvpCHQABW/"
+    "xUIgEAAhcB1B1bo8PD//1mJReSLdQjHRlwIh0AAM/9HiX4UhcB0JGiAh0AAUIsdEIBAAP/"
+    "TiYb4AQAAaKyHQAD/deT/04mG/"
+    "AEAAIl+cMaGyAAAAEPGhksBAABDx0Zo4KNAAGoN6DEIAABZg2X8AP92aP8VXIBAAMdF/P7////"
+    "oPgAAAGoM6BAIAABZiX38i0UMiUZshcB1CKHoqUAAiUZs/3Zs6CghAABZx0X8/v///"
+    "+gVAAAA6N0DAADDM/9Hi3UIag3o+AYAAFnDagzo7wYAAFnDi/9WV/"
+    "8VNIBAAP81EKFAAIv46JH+////"
+    "0IvwhfZ1TmgUAgAAagHotRMAAIvwWVmF9nQ6Vv81EKFAAP81zLBAAOjo/f//Wf/"
+    "QhcB0GGoAVujF/v//WVn/FWSAQACDTgT/iQbrCVbooxIAAFkz9lf/FWCAQABfi8Zew4v/Vuh//"
+    "///i/CF9nUIahDoze///"
+    "1mLxl7DaghoWJNAAOjgAgAAi3UIhfYPhPgAAACLRiSFwHQHUOhWEgAAWYtGLIXAdAdQ6EgSAAB"
+    "Zi0Y0hcB0B1DoOhIAAFmLRjyFwHQHUOgsEgAAWYtGQIXAdAdQ6B4SAABZi0ZEhcB0B1DoEBIAA"
+    "FmLRkiFwHQHUOgCEgAAWYtGXD0Ih0AAdAdQ6PERAABZag3oowYAAFmDZfwAi35ohf90Glf/"
+    "FWiAQACFwHUPgf/go0AAdAdX6MQRAABZx0X8/v///"
+    "+hXAAAAagzoagYAAFnHRfwBAAAAi35shf90I1foGiAAAFk7PeipQAB0FIH/"
+    "EKlAAHQMgz8AdQdX6CYeAABZx0X8/v///"
+    "+geAAAAVuhsEQAAWegdAgAAwgQAi3UIag3oOQUAAFnDi3UIagzoLQUAAFnDi/"
+    "9WV76Qh0AAVv8VCIBAAIXAdQdW6E/u//9Zi/iF/w+EXgEAAIs1EIBAAGjch0AAV//"
+    "WaNCHQABXo8SwQAD/1mjEh0AAV6PIsEAA/9ZovIdAAFejzLBAAP/"
+    "Wgz3EsEAAAIs1VIBAAKPQsEAAdBaDPciwQAAAdA2DPcywQAAAdASFwHUkoUyAQACjyLBAAKFYg"
+    "EAAxwXEsEAAUCBAAIk1zLBAAKPQsEAA/xVQgEAAoxShQACD+P8PhMwAAAD/NciwQABQ/"
+    "9aFwA+EuwAAAOiB8P///zXEsEAA6BP7////NciwQACjxLBAAOgD+////zXMsEAAo8iwQADo8/"
+    "r///810LBAAKPMsEAA6OP6//+DxBCj0LBAAOhvAwAAhcB0ZWhEIkAA/zXEsEAA6D37//9Z/"
+    "9CjEKFAAIP4/3RIaBQCAABqAejXEAAAi/BZWYX2dDRW/zUQoUAA/zXMsEAA6Ar7//9Z/"
+    "9CFwHQbagBW6Of7//9ZWf8VZIBAAINOBP+JBjPAQOsH6JL7//8zwF9ew4v/"
+    "VYvsM8A5RQhqAA+"
+    "UwGgAEAAAUP8VbIBAAKPUsEAAhcB1Al3DM8BAo8y2QABdw2iQJUAAZP81AAAAAItEJBCJbCQQj"
+    "WwkECvgU1ZXofipQAAxRfwzxVCJZej/dfiLRfzHRfz+////"
+    "iUX4jUXwZKMAAAAAw4tN8GSJDQAAAABZX19eW4vlXVHDzMzMzMzMzIv/"
+    "VYvsg+wYU4tdDFaLcwgzNfipQABXiwbGRf8Ax0X0AQAAAI17EIP4/"
+    "nQNi04EA88zDDjohSkAAItODItGCAPPMww46HUpAACLRQj2QARmD4UWAQAAi00QjVXoiVP8i1s"
+    "MiUXoiU3sg/"
+    "v+dF+NSQCNBFuLTIYUjUSGEIlF8IsAiUX4hcl0FIvX6DQqAADGRf8BhcB8QH9Hi0X4i9iD+"
+    "P51zoB9/wB0JIsGg/"
+    "j+"
+    "dA2LTgQDzzMMOOgCKQAAi04Mi1YIA88zDDro8igAAItF9F9eW4vlXcPHRfQAAAAA68mLTQiBOW"
+    "NzbeB1KYM9yLZAAAB0IGjItkAA6MMGAACDxASFwHQPi1UIagFS/"
+    "xXItkAAg8QIi00M6NcpAACLRQw5WAx0Emj4qUAAV4vTi8jo2ikAAItFDItN+IlIDIsGg/"
+    "j+dA2LTgQDzzMMOOhvKAAAi04Mi1YIA88zDDroXygAAItF8ItICIvX6G0pAAC6/v///"
+    "zlTDA+EUv///2j4qUAAV4vL6IUpAADpHP///4v/"
+    "VYvsg+wQofipQACDZfgAg2X8AFNXv07mQLu7AAD//zvHdA2Fw3QJ99Cj/KlAAOtgVo1F+FD/"
+    "FYSAQACLdfwzdfj/FYCAQAAz8P8VZIBAADPw/xV8gEAAM/CNRfBQ/xV4gEAAi0X0M0XwM/"
+    "A793UHvk/mQLvrC4XzdQeLxsHgEAvwiTX4qUAA99aJNfypQABeX1vJw2oIaICTQADocv3//"
+    "+hn+v//i0B4hcB0FoNl/AD/0OsHM8BAw4tl6MdF/P7////ozigAAOiL/f//w2iyJ0AA6G73//"
+    "9Zo9iwQADDi/9WVzP2v+CwQACDPPUkoUAAAXUejQT1IKFAAIk4aKAPAAD/"
+    "MIPHGOgjCAAAWVmFwHQMRoP+JHzSM8BAX17DgyT1IKFAAAAzwOvxi/"
+    "9Tix1IgEAAVr4goUAAV4s+hf90E4N+BAF0DVf/01foUgwAAIMmAFmDxgiB/"
+    "kCiQAB83L4goUAAX4sGhcB0CYN+BAF1A1D/04PGCIH+QKJAAHzmXlvDi/9Vi+yLRQj/"
+    "NMUgoUAA/xWIgEAAXcNqDGigk0AA6G/8//8z/0eJfeQz2zkd1LBAAHUY6Ont//9qHug37P//"
+    "aP8AAADoeen//1lZi3UIjTT1IKFAADkedASLx+tuahjoSgwAAFmL+Dv7dQ/"
+    "oPAIAAMcADAAAADPA61FqCuhZAAAAWYld/"
+    "DkedSxooA8AAFfoGgcAAFlZhcB1F1fogAsAAFnoBgIAAMcADAAAAIld5OsLiT7rB1foZQsAAFn"
+    "HRfz+////6AkAAACLReToB/z//8NqCugo////WcOL/1WL7ItFCFaNNMUgoUAAgz4AdRNQ6CL//"
+    "/9ZhcB1CGoR6G3o//9Z/zb/FYyAQABeXcOL/1WL7ItFCKMwskAAXcOL/"
+    "1WL7IHsKAMAAKH4qUAAM8WJRfyDpdj8//8AU2pMjYXc/P//agBQ6PknAACNhdj8//+JhSj9//"
+    "+NhTD9//+DxAyJhSz9//+JheD9//+Jjdz9//+Jldj9//+JndT9//+JtdD9//+Jvcz9//"
+    "9mjJX4/f//ZoyN7P3//2aMncj9//9mjIXE/f//ZoylwP3//2aMrbz9//+cj4Xw/f//"
+    "i0UEjU0Ex4Uw/f//AQABAImF6P3//4mN9P3//4tJ/ImN5P3//8eF2Pz//xcEAMDHhdz8//"
+    "8BAAAAiYXk/P///xWcgEAAagCL2P8VBIBAAI2FKP3//1D/"
+    "FZiAQACFwHUMhdt1CGoC6AgnAABZaBcEAMD/FZSAQABQ/xWQgEAAi038M81b6G4kAADJw4v/"
+    "VYvs/zUwskAA6Oz0//9ZhcB0A13/4GoC6MkmAABZXemy/v//i/"
+    "9Vi+yLRQgzyTsEzUCiQAB0E0GD+S1y8Y1I7YP5EXcOag1YXcOLBM1EokAAXcMFRP///"
+    "2oOWTvIG8AjwYPACF3D6GL2//+FwHUGuKijQADDg8AIw4v/VYvsUVNWV/816LdAAOht9P///"
+    "zXkt0AAi/iJffzoXfT//"
+    "4vwWVk79w+CgwAAAIveK9+NQwSD+"
+    "ARyd1fouyYAAIv4jUMEWTv4c0i4AAgAADv4cwKLxwPHO8dyD1D/"
+    "dfzoGgoAAFlZhcB1Fo1HEDvHckBQ/3X86AQKAABZWYXAdDHB+wJQjTSY6Hjz//9Zo+i3QAD/"
+    "dQjoavP//4kGg8YEVuhf8///WaPkt0AAi0UIWesCM8BfXlvJw4v/VmoEaiDobgkAAIvwVug48/"
+    "//g8QMo+i3QACj5LdAAIX2dQVqGFhew4MmADPAXsNqDGjAk0AA6Nz4///oH+b//4Nl/AD/"
+    "dQjo+P7//1mJReTHRfz+////6AkAAACLReTo+Pj//8Po/uX//8OL/1WL7P91COi3////"
+    "99gbwPfYWUhdw4v/Vlcz/423sKNAAP826LXy//+DxwRZiQaD/yhy6F9ew8zMzMyL/"
+    "1WL7ItNCLhNWgAAZjkBdAQzwF3Di0E8A8GBOFBFAAB17zPSuQsBAABmOUgYD5TCi8Jdw8zMzMz"
+    "MzMzMzMzMi/"
+    "9Vi+yLRQiLSDwDyA+3QRRTVg+"
+    "3cQYz0leNRAgYhfZ2G4t9DItIDDv5cgmLWAgD2Tv7cgpCg8AoO9Zy6DPAX15bXcPMzMzMzMzMz"
+    "MzMzMyL/"
+    "1WL7Gr+aOCTQABokCVAAGShAAAAAFCD7AhTVleh+KlAADFF+DPFUI1F8GSjAAAAAIll6MdF/"
+    "AAAAABoAABAAOgq////g8QEhcB0VYtFCC0AAEAAUGgAAEAA6FD///"
+    "+DxAiFwHQ7i0Akwegf99CD4AHHRfz+////"
+    "i03wZIkNAAAAAFlfXluL5V3Di0XsiwiLATPSPQUAAMAPlMKLwsOLZejHRfz+////"
+    "M8CLTfBkiQ0AAAAAWV9eW4vlXcOL/1WL7ItFCKM0skAAoziyQACjPLJAAKNAskAAXcOL/"
+    "1WL7ItFCIsNzKBAAFY5UAR0D4vxa/YMA3UIg8AMO8Zy7GvJDANNCF47wXMFOVAEdAIzwF3D/"
+    "zU8skAA6HHx//9Zw2ogaACUQADotfb//zP/iX3kiX3Yi10Ig/"
+    "sLf0x0FYvDagJZK8F0IivBdAgrwXRkK8F1ROgK8///i/iJfdiF/3UUg8j/"
+    "6WEBAAC+NLJAAKE0skAA62D/d1yL0+hd////i/CDxgiLButai8OD6A90PIPoBnQrSHQc6F/8//"
+    "/HABYAAAAzwFBQUFBQ6OX7//"
+    "+DxBTrrr48skAAoTyyQADrFr44skAAoTiyQADrCr5AskAAoUCyQADHReQBAAAAUOit8P//"
+    "iUXgWTPAg33gAQ+E2AAAADlF4HUHagPoReX//zlF5HQHUOgg+v//WTPAiUX8g/"
+    "sIdAqD+wt0BYP7BHUbi09giU3UiUdgg/sIdUCLT2SJTdDHR2SMAAAAg/"
+    "sIdS6LDcCgQACJTdyLDcSgQACLFcCgQAADyjlN3H0Zi03ca8kMi1dciUQRCP9F3Ovb6BXw//"
+    "+JBsdF/P7////oFQAAAIP7CHUf/3dkU/9V4FnrGYtdCIt92IN95AB0CGoA6K74//9Zw1P/"
+    "VeBZg/sIdAqD+wt0BYP7BHURi0XUiUdgg/sIdQaLRdCJR2QzwOhX9f//w4v/"
+    "VYvsi0UIo0iyQABdw4v/VYvsi0UIo1SyQABdw4v/VYvsi0UIo1iyQABdw2oQaCCUQADo2PT//"
+    "4Nl/AD/dQz/dQj/"
+    "FaSAQACJReTrL4tF7IsAiwCJReAzyT0XAADAD5TBi8HDi2XogX3gFwAAwHUIagj/"
+    "FWCAQACDZeQAx0X8/v///4tF5OjK9P//w4v/VYvsi0UIo1yyQABdw4v/VYvs/zVcskAA6BPv//"
+    "9ZhcB0D/91CP/QWYXAdAUzwEBdwzPAXcOL/1WL7IPsFFNWV+ji7v//"
+    "g2X8AIM9YLJAAACL2A+FjgAAAGhMiEAA/xWggEAAi/iF/w+EKgEAAIs1EIBAAGhAiEAAV//"
+    "WhcAPhBQBAABQ6Czu///HBCQwiEAAV6NgskAA/9ZQ6Bfu///HBCQciEAAV6NkskAA/9ZQ6ALu/"
+    "//HBCQAiEAAV6NoskAA/9ZQ6O3t//9Zo3CyQACFwHQUaOiHQABX/9ZQ6NXt//"
+    "9Zo2yyQAChbLJAADvDdE85HXCyQAB0R1DoM+7///81cLJAAIvw6Cbu//9ZWYv4hfZ0LIX/dCj/"
+    "1oXAdBmNTfhRagyNTexRagFQ/9eFwHQG9kX0AXUJgU0QAAAgAOs5oWSyQAA7w3QwUOjj7f//"
+    "WYXAdCX/0IlF/IXAdByhaLJAADvDdBNQ6Mbt//9ZhcB0CP91/P/QiUX8/zVgskAA6K7t//"
+    "9ZhcB0EP91EP91DP91CP91/P/Q6wIzwF9eW8nDi/"
+    "9Vi+yLRQhTM9tWVzvDdAeLfQw7+3cb6OH4//9qFl6JMFNTU1NT6Gr4//+DxBSLxus8i3UQO/"
+    "N1BIgY69qL0DgadARCT3X4O/t07ooOiApCRjrLdANPdfM7+3UQiBjomvj//2oiWYkIi/"
+    "HrtTPAX15bXcOL/1WL7FNWi3UIM9tXOV0UdRA783UQOV0MdRIzwF9eW13DO/"
+    "N0B4t9DDv7dxvoWPj//2oWXokwU1NTU1Po4ff//"
+    "4PEFIvG69U5XRR1BIge68qLVRA703UEiB7r0YN9FP+LxnUPigqICEBCOst0Hk918+"
+    "sZigqICEBCOst0CE90Bf9NFHXuOV0UdQKIGDv7dYuDfRT/dQ+LRQxqUIhcBv9Y6Xj///"
+    "+IHuje9///"
+    "aiJZiQiL8euCzMzMzMzMzMzMzMyLTCQE98EDAAAAdCSKAYPBAYTAdE73wQMAAAB17wUAAAAAja"
+    "QkAAAAAI2kJAAAAACLAbr//"
+    "v5+A9CD8P8zwoPBBKkAAQGBdOiLQfyEwHQyhOR0JKkAAP8AdBOpAAAA/"
+    "3QC682NQf+LTCQEK8HDjUH+i0wkBCvBw41B/YtMJAQrwcONQfyLTCQEK8HDi/"
+    "9Vi+yLTQhTM9tWVzvLdAeLfQw7+3cb6CL3//9qFl6JMFNTU1NT6Kv2//+DxBSLxuswi3UQO/"
+    "N1BIgZ69qL0YoGiAJCRjrDdANPdfM7+3UQiBno5/b//2oiWYkIi/HrwTPAX15bXcOL/"
+    "1WL7ItNCFYz9jvOfB6D+QJ+DIP5A3UUoWisQADrKKForEAAiQ1orEAA6xvopfb//"
+    "1ZWVlZWxwAWAAAA6C32//+DxBSDyP9eXcNqDGhAlEAA6Gbw//"
+    "+LdQiF9nR1gz3MtkAAA3VDagTol/T//1mDZfwAVuieDwAAWYlF5IXAdAlWUOi/"
+    "DwAAWVnHRfz+////6AsAAACDfeQAdTf/dQjrCmoE6IPz//"
+    "9Zw1ZqAP811LBAAP8VdIBAAIXAdRboFfb//4vw/xU0gEAAUOjF9f//iQZZ6Crw///Di/"
+    "9Vi+xWVzP2/3UI6BgeAACL+FmF/3UnOQV0skAAdh9W/"
+    "xUMgEAAjYboAwAAOwV0skAAdgODyP+L8IP4/3XKi8dfXl3Di/9Vi+xWVzP2agD/dQz/"
+    "dQjomB4AAIv4g8QMhf91JzkFdLJAAHYfVv8VDIBAAI2G6AMAADsFdLJAAHYDg8j/i/"
+    "CD+P91w4vHX15dw4v/VYvsVlcz9v91DP91COhsHwAAi/hZWYX/"
+    "dSw5RQx0JzkFdLJAAHYfVv8VDIBAAI2G6AMAADsFdLJAAHYDg8j/i/"
+    "CD+"
+    "P91wYvHX15dwy2kAwAAdCKD6AR0F4PoDXQMSHQDM8DDuAQEAADDuBIEAADDuAQIAADDuBEEAAD"
+    "Di/9WV4vwaAEBAAAz/"
+    "41GHFdQ6G8bAAAzwA+"
+    "3yIvBiX4EiX4IiX4MweEQC8GNfhCrq6u54KNAAIPEDI1GHCvOvwEBAACKFAGIEEBPdfeNhh0BA"
+    "AC+AAEAAIoUCIgQQE51919ew4v/VYvsgewcBQAAofipQAAzxYlF/FNXjYXo+v//"
+    "UP92BP8VqIBAAL8AAQAAhcAPhPsAAAAzwIiEBfz+//9AO8dy9IqF7vr//8aF/P7//"
+    "yCEwHQujZ3v+v//D7bID7YDO8h3FivBQFCNlA38/v//aiBS6KwaAACDxAxDigNDhMB12GoA/"
+    "3YMjYX8+v///3YEUFeNhfz+//9QagFqAOi9JQAAM9tT/3YEjYX8/f//V1BXjYX8/v//UFf/"
+    "dgxT6J4jAACDxERT/3YEjYX8/P//V1BXjYX8/v//UGgAAgAA/3YMU+h5IwAAg8QkM8APt4xF/"
+    "Pr///bBAXQOgEwGHRCKjAX8/f//6xH2wQJ0FYBMBh0giowF/Pz//"
+    "4iMBh0BAADrCMaEBh0BAAAAQDvHcr7rVo2GHQEAAMeF5Pr//5////8zySmF5Pr//4uV5Pr//"
+    "42EDh0BAAAD0I1aIIP7GXcMgEwOHRCK0YDCIOsPg/"
+    "oZdw6ATA4dIIrRgOogiBDrA8YAAEE7z3LCi038XzPNW+j/FgAAycNqDGhglEAA6NPs///oyOn/"
+    "/4v4oRCqQACFR3B0HYN/bAB0F4t3aIX2dQhqIOiK2f//WYvG6Ovs///Dag3o5vD//"
+    "1mDZfwAi3doiXXkOzUIqEAAdDaF9nQaVv8VaIBAAIXAdQ+B/uCjQAB0B1bo/Pv//"
+    "1mhCKhAAIlHaIs1CKhAAIl15Fb/FVyAQADHRfz+////6AUAAADrjot15GoN6Kvv//9Zw4v/"
+    "VYvsi0UIVovxxkYMAIXAdWPoHen//"
+    "4lGCItIbIkOi0hoiU4Eiw47DeipQAB0EosNEKpAAIVIcHUH6N8KAACJBotGBDsFCKhAAHQWi0Y"
+    "Iiw0QqkAAhUhwdQjo/P7//"
+    "4lGBItGCPZAcAJ1FINIcALGRgwB6wqLCIkOi0AEiUYEi8ZeXcIEAIv/"
+    "VYvsg+wQUzPbU41N8Ohl////iR14skAAg/7+dR7HBXiyQAABAAAA/"
+    "xWwgEAAOF38dEWLTfiDYXD96zyD/v11EscFeLJAAAEAAAD/FayAQADr24P+/"
+    "HUSi0Xwi0AExwV4skAAAQAAAOvEOF38dAeLRfiDYHD9i8ZbycOL/"
+    "1WL7IPsIKH4qUAAM8WJRfxTi10MVot1CFfoZP///4v4M/aJfQg7/nUOi8PoMPz//"
+    "zPA6Z0BAACJdeQzwDm4EKhAAA+EkQAAAP9F5IPAMD3wAAAAcueB/+j9AAAPhHABAACB/"
+    "+n9AAAPhGQBAAAPt8dQ/xW0gEAAhcAPhFIBAACNRehQV/"
+    "8VqIBAAIXAD4QzAQAAaAEBAACNQxxWUOhFFwAAM9JCg8QMiXsEiXMMOVXoD4b4AAAAgH3uAA+"
+    "EzwAAAI1174oOhMkPhMIAAAAPtkb/"
+    "D7bJ6aYAAABoAQEAAI1DHFZQ6P4WAACLTeSDxAxryTCJdeCNsSCoQACJdeTrKopGAYTAdCgPtj"
+    "4PtsDrEotF4IqADKhAAAhEOx0PtkYBRzv4duqLfQhGRoA+AHXRi3Xk/"
+    "0Xgg8YIg33gBIl15HLpi8eJewTHQwgBAAAA6OD6//"
+    "9qBolDDI1DEI2JFKhAAFpmizFBZokwQUBASnXzi/PoUPv//+m3/v//gEwDHQRAO8F29kZGgH7/"
+    "AA+FNP///41DHrn+AAAAgAgIQEl1+YtDBOiL+v//"
+    "iUMMiVMI6wOJcwgzwA+3yIvBweEQC8GNexCrq6vrqDk1eLJAAA+FWP7//4PI/4tN/"
+    "F9eM81b6HMTAADJw2oUaICUQADoR+n//4NN4P/oOOb//4v4iX3c6FX8//+LX2iLdQjodf3//"
+    "4lFCDtDBA+EVwEAAGggAgAA6C/5//9Zi9iF2w+ERgEAALmIAAAAi3doi/vzpYMjAFP/"
+    "dQjouP3//1lZiUXghcAPhfwAAACLddz/dmj/FWiAQACFwHURi0ZoPeCjQAB0B1DoUfj//"
+    "1mJXmhTiz1cgEAA/9f2RnACD4XqAAAA9gUQqkAAAQ+F3QAAAGoN6ODs//"
+    "9Zg2X8AItDBKOIskAAi0MIo4yyQACLQwyjkLJAADPAiUXkg/"
+    "gFfRBmi0xDEGaJDEV8skAAQOvoM8CJReQ9AQEAAH0NikwYHIiIAKZAAEDr6TPAiUXkPQABAAB9"
+    "EIqMGB0BAACIiAinQABA6+b/NQioQAD/FWiAQACFwHUToQioQAA94KNAAHQHUOiY9///"
+    "WYkdCKhAAFP/18dF/P7////oAgAAAOswag3oWev//1nD6yWD+P91IIH74KNAAHQHU+hi9///"
+    "Wejo7f//xwAWAAAA6wSDZeAAi0Xg6P/n///Dgz3st0AAAHUSav3oVv7//"
+    "1nHBey3QAABAAAAM8DDi/9Vi+yD7BD/dQiNTfDoTfv//"
+    "w+"
+    "2RQyLTfSKVRSEVAEddR6DfRAAdBKLTfCLicgAAAAPtwRBI0UQ6wIzwIXAdAMzwECAffwAdAeLT"
+    "fiDYXD9ycOL/1WL7GoEagD/dQhqAOia////"
+    "g8QQXcNVi+xXVot1DItNEIt9CIvBi9EDxjv+dgg7+A+"
+    "CpAEAAIH5AAEAAHIfgz2otkAAAHQWV1aD5w+D5g87/"
+    "l5fdQheX13pnh8AAPfHAwAAAHUVwekCg+IDg/kIcirzpf8klXQ/"
+    "QACQi8e6AwAAAIPpBHIMg+ADA8j/JIWIPkAA/ySNhD9AAJD/"
+    "JI0IP0AAkJg+QADEPkAA6D5AACPRigaIB4pGAYhHAYpGAsHpAohHAoPGA4PHA4P5CHLM86X/"
+    "JJV0P0AAjUkAI9GKBogHikYBwekCiEcBg8YCg8cCg/kIcqbzpf8klXQ/"
+    "QACQI9GKBogHg8YBwekCg8cBg/kIcojzpf8klXQ/QACNSQBrP0AAWD9AAFA/"
+    "QABIP0AAQD9AADg/QAAwP0AAKD9AAItEjuSJRI/ki0SO6IlEj+iLRI7siUSP7ItEjvCJRI/"
+    "wi0SO9IlEj/SLRI74iUSP+ItEjvyJRI/8jQSNAAAAAAPwA/j/JJV0P0AAi/+EP0AAjD9AAJg/"
+    "QACsP0AAi0UIXl/Jw5CKBogHi0UIXl/Jw5CKBogHikYBiEcBi0UIXl/"
+    "Jw41JAIoGiAeKRgGIRwGKRgKIRwKLRQheX8nDkI10MfyNfDn898cDAAAAdSTB6QKD4gOD+"
+    "QhyDf3zpfz/JJUQQUAAi//32f8kjcBAQACNSQCLx7oDAAAAg/kEcgyD4AMryP8khRRAQAD/"
+    "JI0QQUAAkCRAQABIQEAAcEBAAIpGAyPRiEcDg+4BwekCg+8Bg/kIcrL986X8/"
+    "ySVEEFAAI1JAIpGAyPRiEcDikYCwekCiEcCg+4Cg+8Cg/kIcoj986X8/"
+    "ySVEEFAAJCKRgMj0YhHA4pGAohHAopGAcHpAohHAYPuA4PvA4P5CA+CVv////3zpfz/"
+    "JJUQQUAAjUkAxEBAAMxAQADUQEAA3EBAAORAQADsQEAA9EBAAAdBQACLRI4ciUSPHItEjhiJRI"
+    "8Yi0SOFIlEjxSLRI4QiUSPEItEjgyJRI8Mi0SOCIlEjwiLRI4EiUSPBI0EjQAAAAAD8AP4/"
+    "ySVEEFAAIv/IEFAAChBQAA4QUAATEFAAItFCF5fycOQikYDiEcDi0UIXl/"
+    "Jw41JAIpGA4hHA4pGAohHAotFCF5fycOQikYDiEcDikYCiEcCikYBiEcBi0UIXl/Jw4v/"
+    "VYvsU1aLdQiLhrwAAAAz21c7w3RvPeCqQAB0aIuGsAAAADvDdF45GHVai4a4AAAAO8N0FzkYdR"
+    "NQ6Bnz////trwAAADosR8AAFlZi4a0AAAAO8N0FzkYdRNQ6Pjy////trwAAADoSx8AAFlZ/"
+    "7awAAAA6ODy////trwAAADo1fL//1lZi4bAAAAAO8N0RDkYdUCLhsQAAAAt/gAAAFDotPL//"
+    "4uGzAAAAL+AAAAAK8dQ6KHy//+LhtAAAAArx1Dok/L///+2wAAAAOiI8v//"
+    "g8QQjb7UAAAAiwc9IKpAAHQXOZi0AAAAdQ9Q6DEdAAD/N+hh8v//WVmNflDHRQgGAAAAgX/"
+    "4CKlAAHQRiwc7w3QLORh1B1DoPPL//1k5X/x0EotHBDvDdAs5GHUHUOgl8v//"
+    "WYPHEP9NCHXHVugW8v//WV9eW13Di/9Vi+xTVos1XIBAAFeLfQhX/9aLh7AAAACFwHQDUP/"
+    "Wi4e4AAAAhcB0A1D/1ouHtAAAAIXAdANQ/9aLh8AAAACFwHQDUP/"
+    "WjV9Qx0UIBgAAAIF7+AipQAB0CYsDhcB0A1D/1oN7/AB0CotDBIXAdANQ/9aDwxD/"
+    "TQh11ouH1AAAAAW0AAAAUP/WX15bXcOL/1WL7FeLfQiF/w+EgwAAAFNWizVogEAAV//"
+    "Wi4ewAAAAhcB0A1D/1ouHuAAAAIXAdANQ/9aLh7QAAACFwHQDUP/Wi4fAAAAAhcB0A1D/"
+    "1o1fUMdFCAYAAACBe/gIqUAAdAmLA4XAdANQ/9aDe/wAdAqLQwSFwHQDUP/Wg8MQ/"
+    "00IddaLh9QAAAAFtAAAAFD/1l5bi8dfXcOF/3Q3hcB0M1aLMDv3dChXiTjowf7//"
+    "1mF9nQbVuhF////gz4AWXUPgf4QqUAAdAdW6Fn9//9Zi8dewzPAw2oMaKCUQADoEOH//+gF3v/"
+    "/i/ChEKpAAIVGcHQig35sAHQc6O7d//+LcGyF9nUIaiDows3//1mLxugj4f//w2oM6B7l//"
+    "9Zg2X8AI1GbIs96KlAAOhp////iUXkx0X8/v///+gCAAAA68FqDOgZ5P//WYt15MOL/"
+    "1WL7IsNsLZAAKG0tkAAa8kUA8jrEYtVCCtQDIH6AAAQAHIJg8AUO8Fy6zPAXcOL/"
+    "1WL7IPsEItNCItBEFaLdQxXi/"
+    "4reQyDxvzB7w+"
+    "Lz2nJBAIAAI2MAUQBAACJTfCLDkmJTfz2wQEPhdMCAABTjRwxixOJVfSLVvyJVfiLVfSJXQz2w"
+    "gF1dMH6BEqD+j92A2o/WotLBDtLCHVCuwAAAICD+iBzGYvK0+uNTAIE99MhXLhE/"
+    "gl1I4tNCCEZ6xyNSuDT641MAgT30yGcuMQAAAD+"
+    "CXUGi00IIVkEi10Mi1MIi1sEi038A030iVoEi1UMi1oEi1IIiVMIiU38i9HB+gRKg/o/"
+    "dgNqP1qLXfiD4wGJXfQPhY8AAAArdfiLXfjB+wRqP4l1DEteO952AoveA034i9HB+"
+    "gRKiU38O9Z2AovWO9p0XotNDItxBDtxCHU7vgAAAICD+yBzF4vL0+731iF0uET+"
+    "TAMEdSGLTQghMesajUvg0+731iG0uMQAAAD+"
+    "TAMEdQaLTQghcQSLTQyLcQiLSQSJTgSLTQyLcQSLSQiJTgiLdQzrA4tdCIN99AB1CDvaD4SAAA"
+    "AAi03wjQzRi1kEiU4IiV4EiXEEi04EiXEIi04EO04IdWCKTAIEiE0P/sGITAIEg/"
+    "ogcyWAfQ8AdQ6LyrsAAACA0+"
+    "uLTQgJGbsAAACAi8rT641EuEQJGOspgH0PAHUQjUrguwAAAIDT64tNCAlZBI1K4LoAAACA0+"
+    "qNhLjEAAAACRCLRfyJBolEMPyLRfD/"
+    "CA+F8wAAAKG4skAAhcAPhNgAAACLDcS2QACLNXCAQABoAEAAAMHhDwNIDLsAgAAAU1H/"
+    "1osNxLZAAKG4skAAugAAAIDT6glQCKG4skAAi0AQiw3EtkAAg6SIxAAAAAChuLJAAItAEP5IQ6"
+    "G4skAAi0gQgHlDAHUJg2AE/qG4skAAg3gI/3VlU2oA/3AM/9ahuLJAAP9wEGoA/zXUsEAA/"
+    "xV0gEAAiw2wtkAAobiyQABryRSLFbS2QAAryI1MEexRjUgUUVDodRsAAItFCIPEDP8NsLZAADs"
+    "FuLJAAHYEg20IFKG0tkAAo7y2QACLRQijuLJAAIk9xLZAAFtfXsnDocC2QABWizWwtkAAVzP/"
+    "O/B1NIPAEGvAFFD/NbS2QABX/zXUsEAA/"
+    "xXAgEAAO8d1BDPA63iDBcC2QAAQizWwtkAAo7S2QABr9hQDNbS2QABoxEEAAGoI/zXUsEAA/"
+    "xW4gEAAiUYQO8d0x2oEaAAgAABoAAAQAFf/FbyAQACJRgw7x3US/3YQV/"
+    "811LBAAP8VdIBAAOubg04I/4k+iX4E/wWwtkAAi0YQgwj/i8ZfXsOL/"
+    "1WL7FFRi00Ii0EIU1aLcRBXM9vrAwPAQ4XAffmLw2nABAIAAI2EMEQBAABqP4lF+"
+    "FqJQAiJQASDwAhKdfRqBIv7aAAQAADB5w8DeQxoAIAAAFf/FbyAQACFwHUIg8j/"
+    "6Z0AAACNlwBwAACJVfw7+ndDi8orz8HpDI1HEEGDSPj/g4jsDwAA/42Q/A8AAIkQjZD87///"
+    "x0D88A8AAIlQBMeA6A8AAPAPAAAFABAAAEl1y4tV/"
+    "ItF+AX4AQAAjU8MiUgEiUEIjUoMiUgIiUEEg2SeRAAz/"
+    "0eJvJ7EAAAAikZDisj+wYTAi0UIiE5DdQMJeAS6AAAAgIvL0+r30iFQCIvDX15bycOL/"
+    "1WL7IPsDItNCItBEFNWi3UQV4t9DIvXK1EMg8YXweoPi8ppyQQCAACNjAFEAQAAiU30i0/"
+    "8g+bwSTvxjXw5/IsfiU0QiV38D45VAQAA9sMBD4VFAQAAA9k78w+POwEAAItN/"
+    "MH5BEmJTfiD+T92Bmo/"
+    "WYlN+ItfBDtfCHVDuwAAAICD+SBzGtPri034jUwBBPfTIVyQRP4JdSaLTQghGesfg8Hg0+"
+    "uLTfiNTAEE99MhnJDEAAAA/gl1BotNCCFZBItPCItfBIlZBItPBIt/"
+    "CIl5CItNECvOAU38g338AA+OpQAAAIt9/ItNDMH/BE+NTDH8g/8/"
+    "dgNqP1+LXfSNHPuJXRCLWwSJWQSLXRCJWQiJSwSLWQSJSwiLWQQ7WQh1V4pMBwSITRP+"
+    "wYhMBwSD/"
+    "yBzHIB9EwB1DovPuwAAAIDT64tNCAkZjUSQRIvP6yCAfRMAdRCNT+"
+    "C7AAAAgNPri00ICVkEjYSQxAAAAI1P4LoAAACA0+oJEItVDItN/"
+    "I1EMvyJCIlMAfzrA4tVDI1GAYlC/IlEMvjpPAEAADPA6TgBAAAPjS8BAACLXQwpdRCNTgGJS/"
+    "yNXDP8i3UQwf4EToldDIlL/IP+P3YDaj9e9kX8AQ+FgAAAAIt1/MH+BE6D/j92A2o/"
+    "XotPBDtPCHVCuwAAAICD/iBzGYvO0+uNdAYE99MhXJBE/"
+    "g51I4tNCCEZ6xyNTuDT641MBgT30yGckMQAAAD+"
+    "CXUGi00IIVkEi10Mi08Ii3cEiXEEi3cIi08EiXEIi3UQA3X8iXUQwf4EToP+"
+    "P3YDaj9ei030jQzxi3kEiUsIiXsEiVkEi0sEiVkIi0sEO0sIdVeKTAYEiE0P/sGITAYEg/"
+    "4gcxyAfQ8AdQ6Lzr8AAACA0++"
+    "LTQgJOY1EkESLzusggH0PAHUQjU7gvwAAAIDT74tNCAl5BI2EkMQAAACNTuC6AAAAgNPqCRCLR"
+    "RCJA4lEGPwzwEBfXlvJw4v/"
+    "VYvsg+wUobC2QACLTQhrwBQDBbS2QACDwReD4fCJTfDB+QRTSYP5IFZXfQuDzv/T7oNN+P/"
+    "rDYPB4IPK/zP20+qJVfiLDby2QACL2esRi1MEizsjVfgj/"
+    "gvXdQqDwxSJXQg72HLoO9h1f4sdtLZAAOsRi1MEizsjVfgj/"
+    "gvXdQqDwxSJXQg72XLoO9l1W+"
+    "sMg3sIAHUKg8MUiV0IO9hy8DvYdTGLHbS2QADrCYN7CAB1CoPDFIldCDvZcvA72XUV6KD6//"
+    "+L2IldCIXbdQczwOkJAgAAU+g6+///WYtLEIkBi0MQgzj/dOWJHby2QACLQxCLEIlV/IP6/"
+    "3QUi4yQxAAAAIt8kEQjTfgj/gvPdSmDZfwAi5DEAAAAjUhEizkjVfgj/gvXdQ7/"
+    "RfyLkYQAAACDwQTr54tV/IvKackEAgAAjYwBRAEAAIlN9ItMkEQz/"
+    "yPOdRKLjJDEAAAAI034aiBf6wMDyUeFyX35i030i1T5BIsKK03wi/HB/gROg/4/"
+    "iU34fgNqP1479w+EAQEAAItKBDtKCHVcg/"
+    "8guwAAAIB9JovP0+uLTfyNfDgE99OJXewjXIhEiVyIRP4PdTOLTeyLXQghC+ssjU/"
+    "g0+uLTfyNjIjEAAAAjXw4BPfTIRn+"
+    "D4ld7HULi10Ii03sIUsE6wOLXQiDffgAi0oIi3oEiXkEi0oEi3oIiXkID4SNAAAAi030jQzxi3"
+    "kEiUoIiXoEiVEEi0oEiVEIi0oEO0oIdV6KTAYEiE0L/sGD/iCITAYEfSOAfQsAdQu/"
+    "AAAAgIvO0+8JO4vOvwAAAIDT74tN/"
+    "Al8iETrKYB9CwB1DY1O4L8AAACA0+"
+    "8JewSLTfyNvIjEAAAAjU7gvgAAAIDT7gk3i034hcl0C4kKiUwR/"
+    "OsDi034i3XwA9GNTgGJColMMvyLdfSLDo15AYk+"
+    "hcl1GjsduLJAAHUSi038Ow3EtkAAdQeDJbiyQAAAi038iQiNQgRfXlvJwzsN+"
+    "KlAAHUC88PpGBcAAMzMzFNWV4tUJBCLRCQUi0wkGFVSUFFRaPBPQABk/"
+    "zUAAAAAofipQAAzxIlEJAhkiSUAAAAAi0QkMItYCItMJCwzGYtwDIP+/nQ7i1QkNIP6/nQEO/"
+    "J2Lo00do1csxCLC4lIDIN7BAB1zGgBAQAAi0MI6L4YAAC5AQAAAItDCOjQGAAA67BkjwUAAAAA"
+    "g8QYX15bw4tMJAT3QQQGAAAAuAEAAAB0M4tEJAiLSAgzyOg+////VYtoGP9wDP9wEP9wFOg+//"
+    "//g8QMXYtEJAiLVCQQiQK4AwAAAMNVi0wkCIsp/3Ec/3EY/3Eo6BX///"
+    "+DxAxdwgQAVVZXU4vqM8Az2zPSM/Yz///RW19eXcOL6ovxi8FqAegbGAAAM8Az2zPJM9Iz///"
+    "mVYvsU1ZXagBqAGiXUEAAUej3IAAAX15bXcNVi2wkCFJR/3QkFOi0/v//g8QMXcIIAIv/"
+    "VYvsgewoAwAAofipQAAzxYlF/PYFAKpAAAFWdAhqCug7xP//WeiD3f//hcB0CGoW6IXd//"
+    "9Z9gUAqkAAAg+EygAAAImF4P3//4mN3P3//4mV2P3//4md1P3//4m10P3//4m9zP3//"
+    "2aMlfj9//9mjI3s/f//ZoydyP3//2aMhcT9//9mjKXA/f//ZoytvP3//5yPhfD9//"
+    "+LdQSNRQSJhfT9///HhTD9//8BAAEAibXo/f//i0D8alCJheT9//+Nhdj8//"
+    "9qAFDoXgAAAI2F2Pz//4PEDImFKP3//42FMP3//2oAx4XY/P//FQAAQIm15Pz//4mFLP3///"
+    "8VBIBAAI2FKP3//1D/FZiAQABqA+jJwv//"
+    "zIMlrLZAAADDzMzMzMzMzMzMzMzMzMyLVCQMi0wkBIXSdGkzwIpEJAiEwHUWgfoAAQAAcg6DPa"
+    "i2QAAAdAXp/"
+    "hYAAFeL+"
+    "YP6BHIx99mD4QN0DCvRiAeDxwGD6QF19ovIweAIA8GLyMHgEAPBi8qD4gPB6QJ0BvOrhdJ0Cog"
+    "Hg8cBg+oBdfaLRCQIX8OLRCQEw2oQaMCUQADoytL//zPAi10IM/873w+VwDvHdR3oz9j//"
+    "8cAFgAAAFdXV1dX6FfY//+DxBSDyP/rU4M9zLZAAAN1OGoE6NXW//9ZiX38U+jd8f//"
+    "WYlF4DvHdAuLc/yD7gmJdeTrA4t15MdF/P7////oJQAAADl94HUQU1f/NdSwQAD/"
+    "FciAQACL8IvG6IrS///DM/+LXQiLdeRqBOij1f//WcNqAugIv///WcOL/"
+    "1WL7ItFCIXAdBKD6AiBON3dAAB1B1Dom+H//1ldw2oMaOCUQADo/tH//"
+    "4Nl5ACLdQg7Nbi2QAB3ImoE6DDW//9Zg2X8AFboFvn//1mJReTHRfz+////"
+    "6AkAAACLReToCtL//8NqBOgr1f//WcOL/1WL7FaLdQiD/"
+    "uAPh6EAAABTV4s9uIBAAIM91LBAAAB1GOgiw///ah7ocMH//2j/AAAA6LK+//9ZWaHMtkAAg/"
+    "gBdQ6F9nQEi8brAzPAQFDrHIP4A3ULVuhT////WYXAdRaF9nUBRoPGD4Pm8FZqAP811LBAAP/"
+    "Xi9iF23UuagxeOQXstUAAdBX/dQjotNz//1mFwHQPi3UI6Xv////oMdf//4kw6CrX//"
+    "+JMF+Lw1vrFFbojdz//1noFtf//8cADAAAADPAXl3DagxoAJVAAOjl0P//i00IM/"
+    "87z3YuauBYM9L38TtFDBvAQHUf6OLW///HAAwAAABXV1dXV+hq1v//"
+    "g8QUM8Dp1QAAAA+vTQyL8Yl1CDv3dQMz9kYz24ld5IP+4Hdpgz3MtkAAA3VLg8YPg+"
+    "bwiXUMi0UIOwW4tkAAdzdqBOi41P//WYl9/P91COid9///WYlF5MdF/P7////"
+    "oXwAAAItd5DvfdBH/dQhXU+jz/P//"
+    "g8QMO991YVZqCP811LBAAP8VuIBAAIvYO991TDk97LVAAHQzVuik2///WYXAD4Vy////"
+    "i0UQO8cPhFD////HAAwAAADpRf///zP/i3UMagToXNP//"
+    "1nDO991DYtFEDvHdAbHAAwAAACLw+gZ0P//w2oQaCCVQADox8///4tdCIXbdQ7/dQzo/f3//"
+    "1npzAEAAIt1DIX2dQxT6DPf//9Z6bcBAACDPcy2QAADD4WTAQAAM/+JfeSD/"
+    "uAPh4oBAABqBOjF0///WYl9/FPoze7//1mJReA7xw+EngAAADs1uLZAAHdJVlNQ6K/z//"
+    "+DxAyFwHQFiV3k6zVW6H72//9ZiUXkO8d0J4tD/Eg7xnICi8ZQU/915Oj55///U+h97v//"
+    "iUXgU1Doo+7//4PEGDl95HVIO/d1BjP2Rol1DIPGD4Pm8Il1DFZX/zXUsEAA/"
+    "xW4gEAAiUXkO8d0IItD/Eg7xnICi8ZQU/915Oil5///U/914OhW7v//g8QUx0X8/v///"
+    "+guAAAAg33gAHUxhfZ1AUaDxg+D5vCJdQxWU2oA/zXUsEAA/xXAgEAAi/"
+    "jrEot1DItdCGoE6PbR//9Zw4t95IX/D4W/AAAAOT3stUAAdCxW6PjZ//9ZhcAPhdL+///oedT/"
+    "/zl94HVsi/D/FTSAQABQ6CTU//9ZiQbrX4X/D4WDAAAA6FTU//"
+    "85feB0aMcADAAAAOtxhfZ1AUZWU2oA/zXUsEAA/xXAgEAAi/iF/3VWOQXstUAAdDRW6I/Z//"
+    "9ZhcB0H4P+4HbNVuh/2f//WegI1P//xwAMAAAAM8DoJs7//8Po9dP//+l8////hf91Fujn0///"
+    "i/D/FTSAQABQ6JfT//+JBlmLx+vSi/"
+    "9Vi+yD7BSh+KlAADPFiUX8U1Yz21eL8TkdvLJAAHU4U1Mz/0dXaNiIQABoAAEAAFP/"
+    "FdiAQACFwHQIiT28skAA6xX/"
+    "FTSAQACD+Hh1CscFvLJAAAIAAAA5XRR+IotNFItFEEk4GHQIQDvLdfaDyf+"
+    "LRRQrwUg7RRR9AUCJRRShvLJAAIP4Ag+ErAEAADvDD4SkAQAAg/"
+    "gBD4XMAQAAiV34OV0gdQiLBotABIlFIIs11IBAADPAOV0kU1P/dRQPlcD/"
+    "dRCNBMUBAAAAUP91IP/Wi/g7+w+EjwEAAH5DauAz0lj394P4AnI3jUQ/"
+    "CD0ABAAAdxPo7hEAAIvEO8N0HMcAzMwAAOsRUOjv+v//"
+    "WTvDdAnHAN3dAACDwAiJRfTrA4ld9Dld9A+EPgEAAFf/dfT/dRT/dRBqAf91IP/"
+    "WhcAPhOMAAACLNdiAQABTU1f/dfT/dQz/dQj/"
+    "1ovIiU34O8sPhMIAAAD3RQwABAAAdCk5XRwPhLAAAAA7TRwPj6cAAAD/dRz/dRhX/3X0/3UM/"
+    "3UI/9bpkAAAADvLfkVq4DPSWPfxg/gCcjmNRAkIPQAEAAB3FugvEQAAi/"
+    "Q783RqxwbMzAAAg8YI6xpQ6C36//9ZO8N0CccA3d0AAIPACIvw6wIz9jvzdEH/dfhWV/"
+    "919P91DP91CP8V2IBAAIXAdCJTUzldHHUEU1PrBv91HP91GP91+FZT/3Ug/"
+    "xUwgEAAiUX4Vuhm+f//Wf919Ohd+f//"
+    "i0X4WelZAQAAiV30iV3wOV0IdQiLBotAFIlFCDldIHUIiwaLQASJRSD/"
+    "dQjoshAAAFmJReyD+P91BzPA6SEBAAA7RSAPhNsAAABTU41NFFH/dRBQ/"
+    "3Ug6NAQAACDxBiJRfQ7w3TUizXQgEAAU1P/dRRQ/3UM/3UI/9aJRfg7w3UHM/bptwAAAH49g/"
+    "jgdziDwAg9AAQAAHcW6BkQAACL/Dv7dN3HB8zMAACDxwjrGlDoF/n//"
+    "1k7w3QJxwDd3QAAg8AIi/jrAjP/O/t0tP91+FNX6GD3//+DxAz/dfhX/3UU/3X0/3UM/3UI/"
+    "9aJRfg7w3UEM/brJf91HI1F+P91GFBX/3Ug/3Xs6B8QAACL8Il18IPEGPfeG/YjdfhX6Dv4//"
+    "9Z6xr/dRz/dRj/dRT/dRD/dQz/dQj/FdCAQACL8Dld9HQJ/3X06MnZ//"
+    "9Zi0XwO8N0DDlFGHQHUOi22f//WYvGjWXgX15bi038M83oM/T//8nDi/9Vi+yD7BD/"
+    "dQiNTfDoxd3///91KI1N8P91JP91IP91HP91GP91FP91EP91DOgo/P//"
+    "g8QggH38AHQHi034g2Fw/cnDi/9Vi+xRUaH4qUAAM8WJRfyhwLJAAFNWM9tXi/"
+    "k7w3U6jUX4UDP2RlZo2IhAAFb/FeCAQACFwHQIiTXAskAA6zT/"
+    "FTSAQACD+Hh1CmoCWKPAskAA6wWhwLJAAIP4Ag+EzwAAADvDD4THAAAAg/"
+    "gBD4XoAAAAiV34OV0YdQiLB4tABIlFGIs11IBAADPAOV0gU1P/dRAPlcD/"
+    "dQyNBMUBAAAAUP91GP/Wi/g7+w+EqwAAAH48gf/w//9/"
+    "dzSNRD8IPQAEAAB3E+gyDgAAi8Q7w3QcxwDMzAAA6xFQ6DP3//"
+    "9ZO8N0CccA3d0AAIPACIvYhdt0aY0EP1BqAFPofvX//4PEDFdT/3UQ/3UMagH/dRj/1oXAdBH/"
+    "dRRQU/91CP8V4IBAAIlF+FPod/b//"
+    "4tF+FnrdTP2OV0cdQiLB4tAFIlFHDldGHUIiweLQASJRRj/"
+    "dRzo0w0AAFmD+P91BDPA60c7RRh0HlNTjU0QUf91DFD/dRjo+w0AAIvwg8QYO/"
+    "N03Il1DP91FP91EP91DP91CP91HP8V3IBAAIv4O/N0B1bot9f//1mLx41l7F9eW4tN/"
+    "DPN6DTy///Jw4v/VYvsg+wQ/3UIjU3w6Mbb////dSSNTfD/dSD/dRz/dRj/dRT/dRD/"
+    "dQzoFv7//4PEHIB9/AB0B4tN+INhcP3Jw1WL7IPsCIl9/"
+    "Il1+It1DIt9CItNEMHpB+"
+    "sGjZsAAAAAZg9vBmYPb04QZg9vViBmD29eMGYPfwdmD39PEGYPf1cgZg9/"
+    "XzBmD29mQGYPb25QZg9vdmBmD29+cGYPf2dAZg9/"
+    "b1BmD393YGYPf39wjbaAAAAAjb+AAAAASXWji3X4i338i+Vdw1WL7IPsHIl99Il1+Ild/"
+    "ItdDIvDmYvIi0UIM8oryoPhDzPKK8qZi/gz+iv6g+cPM/or+ovRC9d1Sot1EIvOg+F/iU3oO/"
+    "F0EyvxVlNQ6Cf///"
+    "+DxAyLRQiLTeiFyXR3i10Qi1UMA9Mr0YlV7APYK9mJXfCLdeyLffCLTejzpItFCOtTO891NffZ"
+    "g8EQiU3ki3UMi30Ii03k86SLTQgDTeSLVQwDVeSLRRArReRQUlHoTP///"
+    "4PEDItFCOsai3UMi30Ii00Qi9HB6QLzpYvKg+"
+    "ED86SLRQiLXfyLdfiLffSL5V3DagxoQJVAAOhcxv//"
+    "g2X8AGYPKMHHReQBAAAA6yOLReyLAIsAPQUAAMB0Cj0dAADAdAMzwMMzwEDDi2Xog2XkAMdF/"
+    "P7///+LReToXsb//8OL/1WL7IPsGDPAU4lF/"
+    "IlF9IlF+"
+    "FOcWIvINQAAIABQnZxaK9F0H1GdM8APoolF9Ild6IlV7IlN8LgBAAAAD6KJVfyJRfhb90X8AAA"
+    "ABHQO6Fz///+FwHQFM8BA6wIzwFvJw+iZ////o6i2QAAzwMOL/"
+    "1WL7FaLdQiF9g+EgQEAAP92BOge1f///3YI6BbV////dgzoDtX///92EOgG1f///3YU6P7U///"
+    "/dhjo9tT///826O/U////diDo59T///92JOjf1P///3Yo6NfU////dizoz9T///92MOjH1P///"
+    "3Y06L/U////dhzot9T///92OOiv1P///3Y86KfU//+DxED/dkDonNT///92ROiU1P///"
+    "3ZI6IzU////dkzohNT///92UOh81P///3ZU6HTU////dljobNT///92XOhk1P///3Zg6FzU///"
+    "/dmToVNT///92aOhM1P///3Zs6ETU////dnDoPNT///92dOg01P///3Z46CzU////dnzoJNT//"
+    "4PEQP+2gAAAAOgW1P///7aEAAAA6AvU////togAAADoANT///+2jAAAAOj10////"
+    "7aQAAAA6OrT////tpQAAADo39P///+2mAAAAOjU0////7acAAAA6MnT////tqAAAADovtP///"
+    "+2pAAAAOiz0////7aoAAAA6KjT//+DxCxeXcOL/1WL7FaLdQiF9nQ1iwY7BeCqQAB0B1DohdP/"
+    "/1mLRgQ7BeSqQAB0B1Doc9P//1mLdgg7NeiqQAB0B1boYdP//1leXcOL/"
+    "1WL7FaLdQiF9nR+i0YMOwXsqkAAdAdQ6D/T//9Zi0YQOwXwqkAAdAdQ6C3T//"
+    "9Zi0YUOwX0qkAAdAdQ6BvT//9Zi0YYOwX4qkAAdAdQ6AnT//9Zi0YcOwX8qkAAdAdQ6PfS//"
+    "9Zi0YgOwUAq0AAdAdQ6OXS//9Zi3YkOzUEq0AAdAdW6NPS//"
+    "9ZXl3DzFWL7FYzwFBQUFBQUFBQi1UMjUkAigIKwHQJg8IBD6sEJOvxi3UIg8n/"
+    "jUkAg8EBigYKwHQJg8YBD6MEJHPui8GDxCBeycPMzMzMzMzMzMzMi1QkBItMJAj3wgMAAAB1PI"
+    "sCOgF1LgrAdCY6YQF1JQrkdB3B6BA6QQJ1GQrAdBE6YQN1EIPBBIPCBArkddKL/"
+    "zPAw5AbwNHgg8ABw/"
+    "fCAQAAAHQYigKDwgE6AXXng8EBCsB03PfCAgAAAHSkZosCg8ICOgF1zgrAdMY6YQF1xQrkdL2D"
+    "wQLriMzMzMzMzMzMVYvsVjPAUFBQUFBQUFCLVQyNSQCKAgrAdAmDwgEPqwQk6/GLdQiL/"
+    "4oGCsB0DIPGAQ+jBCRz8Y1G/4PEIF7Jw1WL7FdWi3UMi00Qi30Ii8GL0QPGO/"
+    "52CDv4D4KkAQAAgfkAAQAAch+DPai2QAAAdBZXVoPnD4PmDzv+Xl91CF5fXemO+v//"
+    "98cDAAAAdRXB6QKD4gOD+QhyKvOl/ySVhGRAAJCLx7oDAAAAg+kEcgyD4AMDyP8khZhjQAD/"
+    "JI2UZEAAkP8kjRhkQACQqGNAANRjQAD4Y0AAI9GKBogHikYBiEcBikYCwekCiEcCg8YDg8cDg/"
+    "kIcszzpf8klYRkQACNSQAj0YoGiAeKRgHB6QKIRwGDxgKDxwKD+QhypvOl/"
+    "ySVhGRAAJAj0YoGiAeDxgHB6QKDxwGD+QhyiPOl/"
+    "ySVhGRAAI1JAHtkQABoZEAAYGRAAFhkQABQZEAASGRAAEBkQAA4ZEAAi0SO5IlEj+"
+    "SLRI7oiUSP6ItEjuyJRI/si0SO8IlEj/CLRI70iUSP9ItEjviJRI/4i0SO/IlEj/"
+    "yNBI0AAAAAA/AD+P8klYRkQACL/"
+    "5RkQACcZEAAqGRAALxkQACLRQheX8nDkIoGiAeLRQheX8nDkIoGiAeKRgGIRwGLRQheX8nDjUk"
+    "AigaIB4pGAYhHAYpGAohHAotFCF5fycOQjXQx/I18Ofz3xwMAAAB1JMHpAoPiA4P5CHIN/fOl/"
+    "P8klSBmQACL//fZ/ySN0GVAAI1JAIvHugMAAACD+QRyDIPgAyvI/"
+    "ySFJGVAAP8kjSBmQACQNGVAAFhlQACAZUAAikYDI9GIRwOD7gHB6QKD7wGD+Qhysv3zpfz/"
+    "JJUgZkAAjUkAikYDI9GIRwOKRgLB6QKIRwKD7gKD7wKD+QhyiP3zpfz/"
+    "JJUgZkAAkIpGAyPRiEcDikYCiEcCikYBwekCiEcBg+4Dg+8Dg/kID4JW/////fOl/"
+    "P8klSBmQACNSQDUZUAA3GVAAORlQADsZUAA9GVAAPxlQAAEZkAAF2ZAAItEjhyJRI8ci0SOGIl"
+    "EjxiLRI4UiUSPFItEjhCJRI8Qi0SODIlEjwyLRI4IiUSPCItEjgSJRI8EjQSNAAAAAAPwA/j/"
+    "JJUgZkAAi/8wZkAAOGZAAEhmQABcZkAAi0UIXl/"
+    "Jw5CKRgOIRwOLRQheX8nDjUkAikYDiEcDikYCiEcCi0UIXl/"
+    "Jw5CKRgOIRwOKRgKIRwKKRgGIRwGLRQheX8nDi/"
+    "9Vi+"
+    "yB7CgDAACj0LNAAIkNzLNAAIkVyLNAAIkdxLNAAIk1wLNAAIk9vLNAAGaMFeizQABmjA3cs0AA"
+    "ZowduLNAAGaMBbSzQABmjCWws0AAZowtrLNAAJyPBeCzQACLRQCj1LNAAItFBKPYs0AAjUUIo+"
+    "SzQACLheD8///"
+    "HBSCzQAABAAEAodizQACj1LJAAMcFyLJAAAkEAMDHBcyyQAABAAAAofipQACJhdj8//+h/"
+    "KlAAImF3Pz///8VnIBAAKMYs0AAagHoiOr//1lqAP8VBIBAAGgUkkAA/"
+    "xWYgEAAgz0Ys0AAAHUIagHoZOr//1loCQQAwP8VlIBAAFD/"
+    "FZCAQADJw8xVi+xTVldVagBqAGiUZ0AA/"
+    "3UI6PoJAABdX15bi+Vdw4tMJAT3QQQGAAAAuAEAAAB0MotEJBSLSPwzyOiS5///"
+    "VYtoEItQKFKLUCRS6BQAAACDxAhdi0QkCItUJBCJArgDAAAAw1NWV4tEJBBVUGr+aJxnQABk/"
+    "zUAAAAAofipQAAzxFCNRCQEZKMAAAAAi0QkKItYCItwDIP+/"
+    "3Q6g3wkLP90Bjt0JCx2LY00dosMs4lMJAyJSAyDfLMEAHUXaAEBAACLRLMI6EkAAACLRLMI6F8"
+    "AAADrt4tMJARkiQ0AAAAAg8QYX15bwzPAZIsNAAAAAIF5BJxnQAB1EItRDItSDDlRCHUFuAEAA"
+    "ADDU1G7IKtAAOsLU1G7IKtAAItMJAyJSwiJQwSJawxVUVBYWV1ZW8IEAP/Qw1WL7IPsBIl9/"
+    "It9CItNDMHpB2YP78DrCI2kJAAAAACQZg9/B2YPf0cQZg9/RyBmD39HMGYPf0dAZg9/"
+    "R1BmD39HYGYPf0dwjb+AAAAASXXQi338i+Vdw1WL7IPsEIl9/ItFCJmL+DP6K/"
+    "qD5w8z+iv6hf91PItNEIvRg+J/iVX0O8p0EivKUVDoc////"
+    "4PECItFCItV9IXSdEUDRRArwolF+"
+    "DPAi334i03086qLRQjrLvffg8cQiX3wM8CLfQiLTfDzqotF8ItNCItVEAPIK9BSagBR6H7///"
+    "+DxAyLRQiLffyL5V3Di/9Vi+yD7BhT/3UQjU3o6EjP//"
+    "+LXQiNQwE9AAEAAHcPi0Xoi4DIAAAAD7cEWOt1iV0IwX0ICI1F6FCLRQgl/"
+    "wAAAFDopwIAAFlZhcB0EopFCGoCiEX4iF35xkX6AFnrCjPJiF34xkX5AEGLRehqAf9wFP9wBI1"
+    "F/FBRjUX4UI1F6GoBUOj58v//g8QghcB1EDhF9HQHi0Xwg2Bw/"
+    "TPA6xQPt0X8I0UMgH30AHQHi03wg2Fw/"
+    "VvJw8zMzMzMzMzMzMzMzMzMzFGNTCQIK8iD4Q8DwRvJC8FZ6WoCAABRjUwkCCvIg+"
+    "EHA8EbyQvBWelUAgAAi/9Vi+yD7Ayh+KlAADPFiUX8agaNRfRQaAQQAAD/dQjGRfoA/"
+    "xXMgEAAhcB1BYPI/+sKjUX0UOj5AQAAWYtN/DPN6Hvk///Jw4v/VYvsg+w0ofipQAAzxYlF/"
+    "ItFEItNGIlF2ItFFFOJRdCLAFaJRdyLRQhXM/"
+    "+JTcyJfeCJfdQ7RQwPhF8BAACLNaiAQACNTehRUP/Wix3UgEAAhcB0XoN96AF1WI1F6FD/dQz/"
+    "1oXAdEuDfegBdUWLddzHRdQBAAAAg/7/dQz/ddjoJMj//4vwWUY7935bgf7w//9/"
+    "d1ONRDYIPQAEAAB3L+jk/v//i8Q7x3Q4xwDMzAAA6y1XV/913P912GoB/3UI/"
+    "9OL8Dv3dcMzwOnRAAAAUOjJ5///WTvHdAnHAN3dAACDwAiJReTrA4l95Dl95HTYjQQ2UFf/"
+    "deToDOb//4PEDFb/deT/ddz/ddhqAf91CP/ThcB0f4tdzDvfdB1XV/91HFNW/3XkV/"
+    "91DP8VMIBAAIXAdGCJXeDrW4sdMIBAADl91HUUV1dXV1b/deRX/3UM/9OL8Dv3dDxWagHoWsn/"
+    "/1lZiUXgO8d0K1dXVlBW/3XkV/91DP/TO8d1Dv914OhkyP//WYl94OsLg33c/3QFi03QiQH/"
+    "deTok+b//1mLReCNZcBfXluLTfwzzejH4v//ycOL/1WL7IPsEP91DI1N8OhZzP//"
+    "D7ZFCItN8IuJyAAAAA+3BEElAIAAAIB9/AB0B4tN+INhcP3Jw4v/"
+    "VYvsagpqAP91COhoAgAAg8QMXcPMzMzMzMzMzMxRjUwkBCvIG8D30CPIi8QlAPD//"
+    "zvIcgqLwVmUiwCJBCTDLQAQAACFAOvpi/9Vi+yD7BRWV/91CI1N7OjVy///i0UQi3UMM/"
+    "87x3QCiTA793Us6BO+//9XV1dXV8cAFgAAAOibvf//g8QUgH34AHQHi0X0g2Bw/"
+    "TPA6dgBAAA5fRR0DIN9FAJ8yYN9FCR/w4tN7FOKHol9/"
+    "I1+AYO5rAAAAAF+F41F7FAPtsNqCFDoBvz//"
+    "4tN7IPEDOsQi5HIAAAAD7bDD7cEQoPgCIXAdAWKH0frx4D7LXUGg00YAusFgPsrdQOKH0eLRRS"
+    "FwA+MSwEAAIP4AQ+EQgEAAIP4JA+POQEAAIXAdSqA+"
+    "zB0CcdFFAoAAADrNIoHPHh0DTxYdAnHRRQIAAAA6yHHRRQQAAAA6wqD+"
+    "BB1E4D7MHUOigc8eHQEPFh1BEeKH0eLscgAAAC4/////"
+    "zPS93UUD7bLD7cMTvbBBHQID77Lg+"
+    "kw6xv3wQMBAAB0MYrLgOlhgPkZD77LdwOD6SCDwck7TRRzGYNNGAg5RfxyJ3UEO8p2IYNNGASD"
+    "fRAAdSOLRRhPqAh1IIN9EAB0A4t9DINl/ADrW4td/A+vXRQD2Yld/IofR+uLvv///"
+    "3+oBHUbqAF1PYPgAnQJgX38AAAAgHcJhcB1Kzl1/HYm6HK8///2RRgBxwAiAAAAdAaDTfz/6w/"
+    "2RRgCagBYD5XAA8aJRfyLRRCFwHQCiTj2RRgCdAP3XfyAffgAdAeLRfSDYHD9i0X86xiLRRCFw"
+    "HQCiTCAffgAdAeLRfSDYHD9M8BbX17Jw4v/VYvsM8BQ/3UQ/3UM/"
+    "3UIOQWUskAAdQdo8KlAAOsBUOir/f//"
+    "g8QUXcPMzMzMzMzMzMzMzFWL7FdWU4tNEAvJdE2LdQiLfQy3QbNatiCNSQCKJgrkigd0JwrAdC"
+    "ODxgGDxwE653IGOuN3AgLmOsdyBjrDdwICxjrgdQuD6QF10TPJOuB0Cbn/////"
+    "cgL32YvBW15fycPMzMzMzMzMzMzMzMzMzMxWi0QkFAvAdSiLTCQQi0QkDDPS9/"
+    "GL2ItEJAj38Yvwi8P3ZCQQi8iLxvdkJBAD0etHi8iLXCQQi1QkDItEJAjR6dHb0erR2AvJdfT3"
+    "84vw92QkFIvIi0QkEPfmA9FyDjtUJAx3CHIPO0QkCHYJTitEJBAbVCQUM9srRCQIG1QkDPfa99"
+    "iD2gCLyovTi9mLyIvGXsIQAMzMzMzMzMzMzMzMi0QkCItMJBALyItMJAx1CYtEJAT34cIQAFP3"
+    "4YvYi0QkCPdkJBQD2ItEJAj34QPTW8IQAMzMzMzMzMzMzMzMzI1C/"
+    "1vDjaQkAAAAAI1kJAAzwIpEJAhTi9jB4AiLVCQI98IDAAAAdBWKCoPCATrLdM+"
+    "EyXRR98IDAAAAdesL2FeLw8HjEFYL2IsKv//+/n6LwYv3M8sD8AP5g/H/g/D/"
+    "M88zxoPCBIHhAAEBgXUcJQABAYF00yUAAQEBdQiB5gAAAIB1xF5fWzPAw4tC/"
+    "DrDdDaEwHTvOuN0J4TkdOfB6BA6w3QVhMB03DrjdAaE5HTU65ZeX41C/1vDjUL+Xl9bw41C/"
+    "V5fW8ONQvxeX1vD/"
+    "yXEgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAbJYAAH6WAACclgAAsJYAALiWAADKlgAA2JYAAOSWAAD0lgAACpcAACSXAAA8lwAAVpcAAGy"
+    "XAAB8lwAAlpcAAKiXAAC2lwAAyJcAAOCXAADulwAA+"
+    "pcAAAiYAAASmAAAKpgAADqYAABQmAAAaJgAAHaYAACEmAAAkJgAAKqYAAC6mAAA0JgAAOqYAAA"
+    "CmQAAGpkAAC6ZAABCmQAAXpkAAHKZAACCmQAAqpkAALaZAADAmQAAzJkAAN6ZAADqmQAA+"
+    "pkAAAiaAAAUmgAAIJoAADKaAABCmgAAWJoAAGiaAAB6mgAAAAAAAAAAAAAAAAAAAAAAABcsQAB"
+    "3PUAAel9AAM4RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAENvckV4aXRQcm9jZXNzAABtAHMAYwBvA"
+    "HIAZQBlAC4AZABsAGwAAABydW50aW1lIGVycm9yIAAADQoAAFRMT1NTIGVycm9yDQoAAABTSU5"
+    "HIGVycm9yDQoAAAAARE9NQUlOIGVycm9yDQoAAAAAAABSNjAzNA0KQW4gYXBwbGljYXRpb24ga"
+    "GFzIG1hZGUgYW4gYXR0ZW1wdCB0byBsb2FkIHRoZSBDIHJ1bnRpbWUgbGlicmFyeSBpbmNvcnJ"
+    "lY3RseS4KUGxlYXNlIGNvbnRhY3QgdGhlIGFwcGxpY2F0aW9uJ3Mgc3VwcG9ydCB0ZWFtIGZvc"
+    "iBtb3JlIGluZm9ybWF0aW9uLg0KAAAAAAAAUjYwMzMNCi0gQXR0ZW1wdCB0byB1c2UgTVNJTCB"
+    "jb2RlIGZyb20gdGhpcyBhc3NlbWJseSBkdXJpbmcgbmF0aXZlIGNvZGUgaW5pdGlhbGl6YXRpb"
+    "24KVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gSXQgaXMgbW9zdCB"
+    "saWtlbHkgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGFuIE1TSUwtY29tcGlsZWQgKC9jbHIpIGZ1b"
+    "mN0aW9uIGZyb20gYSBuYXRpdmUgY29uc3RydWN0b3Igb3IgZnJvbSBEbGxNYWluLg0KAABSNjA"
+    "zMg0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciBsb2NhbGUgaW5mb3JtYXRpb24NCgAAAAAAAFI2M"
+    "DMxDQotIEF0dGVtcHQgdG8gaW5pdGlhbGl6ZSB0aGUgQ1JUIG1vcmUgdGhhbiBvbmNlLgpUaGl"
+    "zIGluZGljYXRlcyBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLg0KAABSNjAzMA0KLSBDUlQgb"
+    "m90IGluaXRpYWxpemVkDQoAAFI2MDI4DQotIHVuYWJsZSB0byBpbml0aWFsaXplIGhlYXANCgA"
+    "AAABSNjAyNw0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciBsb3dpbyBpbml0aWFsaXphdGlvbg0KA"
+    "AAAAFI2MDI2DQotIG5vdCBlbm91Z2ggc3BhY2UgZm9yIHN0ZGlvIGluaXRpYWxpemF0aW9uDQo"
+    "AAAAAUjYwMjUNCi0gcHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGwNCgAAAFI2MDI0DQotIG5vd"
+    "CBlbm91Z2ggc3BhY2UgZm9yIF9vbmV4aXQvYXRleGl0IHRhYmxlDQoAAAAAUjYwMTkNCi0gdW5"
+    "hYmxlIHRvIG9wZW4gY29uc29sZSBkZXZpY2UNCgAAAABSNjAxOA0KLSB1bmV4cGVjdGVkIGhlY"
+    "XAgZXJyb3INCgAAAABSNjAxNw0KLSB1bmV4cGVjdGVkIG11bHRpdGhyZWFkIGxvY2sgZXJyb3I"
+    "NCgAAAABSNjAxNg0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciB0aHJlYWQgZGF0YQ0KAA0KVGhpc"
+    "yBhcHBsaWNhdGlvbiBoYXMgcmVxdWVzdGVkIHRoZSBSdW50aW1lIHRvIHRlcm1pbmF0ZSBpdCB"
+    "pbiBhbiB1bnVzdWFsIHdheS4KUGxlYXNlIGNvbnRhY3QgdGhlIGFwcGxpY2F0aW9uJ3Mgc3Vwc"
+    "G9ydCB0ZWFtIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KAAAAUjYwMDkNCi0gbm90IGVub3VnaCB"
+    "zcGFjZSBmb3IgZW52aXJvbm1lbnQNCgBSNjAwOA0KLSBub3QgZW5vdWdoIHNwYWNlIGZvciBhc"
+    "md1bWVudHMNCgAAAFI2MDAyDQotIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgbm90IGxvYWRlZA0"
+    "KAAAAAE1pY3Jvc29mdCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeQAAAAAKCgAALi4uADxwc"
+    "m9ncmFtIG5hbWUgdW5rbm93bj4AAFJ1bnRpbWUgRXJyb3IhCgpQcm9ncmFtOiAAAAAAAAAABQA"
+    "AwAsAAAAAAAAAHQAAwAQAAAAAAAAAlgAAwAQAAAAAAAAAjQAAwAgAAAAAAAAAjgAAwAgAAAAAA"
+    "AAAjwAAwAgAAAAAAAAAkAAAwAgAAAAAAAAAkQAAwAgAAAAAAAAAkgAAwAgAAAAAAAAAkwAAwAg"
+    "AAAAAAAAARW5jb2RlUG9pbnRlcgAAAEsARQBSAE4ARQBMADMAMgAuAEQATABMAAAAAABEZWNvZ"
+    "GVQb2ludGVyAAAARmxzRnJlZQBGbHNTZXRWYWx1ZQBGbHNHZXRWYWx1ZQBGbHNBbGxvYwAAAAB"
+    "HZXRQcm9jZXNzV2luZG93U3RhdGlvbgBHZXRVc2VyT2JqZWN0SW5mb3JtYXRpb25BAAAAR2V0T"
+    "GFzdEFjdGl2ZVBvcHVwAABHZXRBY3RpdmVXaW5kb3cATWVzc2FnZUJveEEAVVNFUjMyLkRMTAA"
+    "AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2N"
+    "zg5Ojs8PT4/"
+    "QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dn"
+    "d4eXp7fH1+"
+    "fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAIAAgACAAIA"
+    "AgACAAIAAoACgAKAAoACgAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAASAAQ"
+    "ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACEAIQAhACEAIQAhACEAIQAhACEABAAEAAQAB"
+    "AAEAAQABAAgQCBAIEAgQCBAIEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA"
+    "AQABABAAEAAQABAAEAAQAIIAggCCAIIAggCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg"
+    "ACAAIAAgACAAIAAgAQABAAEAAQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAIAAgACAAIAAgACAAIAAgACAAaAAoACgAKAAoACAAIAAgACAAIAAgACAAIAAgACAAIAAgAC"
+    "AAIAAgACAAIAAgAEgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAhACEAIQAhACEAIQA"
+    "hACEAIQAhAAQABAAEAAQABAAEAAQAIEBgQGBAYEBgQGBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ"
+    "EBAQEBAQEBAQEBAQEBAQEBAQEQABAAEAAQABAAEACCAYIBggGCAYIBggECAQIBAgECAQIBAgEC"
+    "AQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBEAAQABAAEAAgACAAIAAgACAAIAAgACAAIAAgAC"
+    "AAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABIABAAEAAQABAA"
+    "EAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAUABQAEAAQABAAEAAQABQAEAAQABAAEAAQABAAAQ"
+    "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAAAQEBAQEBAQEB"
+    "AQEBAQECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgEQAA"
+    "IBAgECAQIBAgECAQIBAgEBAQAAAACAgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6Ch"
+    "oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/"
+    "wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/"
+    "T19vf4+fr7/P3+/"
+    "wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY"
+    "3ODk6Ozw9Pj9AYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpbXF1eX2BhYmNkZWZnaGlqa2xtb"
+    "m9wcXJzdHV2d3h5ent8fX5/"
+    "gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+"
+    "goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/"
+    "Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/"
+    "v+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+"
+    "wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/"
+    "g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/"
+    "wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY"
+    "3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BBQkNERUZHSElKS0xNT"
+    "k9QUVJTVFVWV1hZWnt8fX5/"
+    "gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+"
+    "goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/"
+    "Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/"
+    "v9ISDptbTpzcwAAAABkZGRkLCBNTU1NIGRkLCB5eXl5AE1NL2RkL3l5AAAAAFBNAABBTQAARGV"
+    "jZW1iZXIAAAAATm92ZW1iZXIAAAAAT2N0b2JlcgBTZXB0ZW1iZXIAAABBdWd1c3QAAEp1bHkAA"
+    "AAASnVuZQAAAABBcHJpbAAAAE1hcmNoAAAARmVicnVhcnkAAAAASmFudWFyeQBEZWMATm92AE9"
+    "jdABTZXAAQXVnAEp1bABKdW4ATWF5AEFwcgBNYXIARmViAEphbgBTYXR1cmRheQAAAABGcmlkY"
+    "XkAAFRodXJzZGF5AAAAAFdlZG5lc2RheQAAAFR1ZXNkYXkATW9uZGF5AABTdW5kYXkAAFNhdAB"
+    "GcmkAVGh1AFdlZABUdWUATW9uAFN1bgDIskAAILNAAFN1bk1vblR1ZVdlZFRodUZyaVNhdAAAA"
+    "EphbkZlYk1hckFwck1heUp1bkp1bEF1Z1NlcE9jdE5vdkRlYwAAAAAAAAAASAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+"
+    "KlAALCSQAADAAAAAAAAAAAAAACQJQAA8E8AAJxnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///"
+    "8AAAAAzP///wAAAAD+////RBFAAFgRQAAAAAAA/v///wAAAADI////AAAAAP7///"
+    "8AAAAAZBRAAAAAAAD+////AAAAAIz///8AAAAA/v///wAfQAAEH0AAAAAAAP7///8AAAAA1P//"
+    "/wAAAAD+////AAAAAJkhQAD+////AAAAAKghQAD+////AAAAANj///8AAAAA/v///"
+    "wAAAABbI0AA/v///wAAAABnI0AA/v///wAAAADY////AAAAAP7////SJ0AA1idAAAAAAAD+///"
+    "/AAAAANT///8AAAAA/v///wAAAABvKUAAAAAAAP7///8AAAAA1P///wAAAAD+////"
+    "AAAAAH4sQAAAAAAA/v///wAAAADY////AAAAAP7////bLUAA7y1AAAAAAAD+////AAAAAMD///"
+    "8AAAAA/v///wAAAADdL0AAAAAAAP7///8AAAAA0P///wAAAAD+////bTBAAIQwQAAAAAAA/v//"
+    "/wAAAADU////AAAAAP7///8AAAAAFDVAAAAAAAD+////AAAAANT///8AAAAA/v///"
+    "wAAAADpOEAAAAAAAP7///8AAAAAzP///wAAAAD+////AAAAAD49QAAAAAAA/v///wAAAADU///"
+    "/AAAAAP7///8AAAAAfkRAAAAAAAD+////AAAAAND///8AAAAA/v///wAAAADsUkAAAAAAAP7//"
+    "/8AAAAA1P///wAAAAD+////AAAAAGxTQAAAAAAA/v///wAAAADU////AAAAAP7///"
+    "8AAAAANlVAAAAAAAD+////AAAAAND///8AAAAA/v///wAAAACbVkAAAAAAAP7///8AAAAA1P//"
+    "/wAAAAD+////"
+    "5V5AAAFfQACElQAAAAAAAAAAAACMmgAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbJYAAH6WAA"
+    "CclgAAsJYAALiWAADKlgAA2JYAAOSWAAD0lgAACpcAACSXAAA8lwAAVpcAAGyXAAB8lwAAlpcA"
+    "AKiXAAC2lwAAyJcAAOCXAADulwAA+"
+    "pcAAAiYAAASmAAAKpgAADqYAABQmAAAaJgAAHaYAACEmAAAkJgAAKqYAAC6mAAA0JgAAOqYAAA"
+    "CmQAAGpkAAC6ZAABCmQAAXpkAAHKZAACCmQAAqpkAALaZAADAmQAAzJkAAN6ZAADqmQAA+"
+    "pkAAAiaAAAUmgAAIJoAADKaAABCmgAAWJoAAGiaAAB6mgAAAAAAAIYBR2V0Q29tbWFuZExpbmV"
+    "BAKUEU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyABgCR2V0TW9kdWxlSGFuZGxlVwAAsgRTb"
+    "GVlcABFAkdldFByb2NBZGRyZXNzAAAZAUV4aXRQcm9jZXNzACUFV3JpdGVGaWxlAGQCR2V0U3R"
+    "kSGFuZGxlAAATAkdldE1vZHVsZUZpbGVOYW1lQQAAYAFGcmVlRW52aXJvbm1lbnRTdHJpbmdzQ"
+    "QDYAUdldEVudmlyb25tZW50U3RyaW5ncwBhAUZyZWVFbnZpcm9ubWVudFN0cmluZ3NXABEFV2l"
+    "kZUNoYXJUb011bHRpQnl0ZQACAkdldExhc3RFcnJvcgAA2gFHZXRFbnZpcm9ubWVudFN0cmluZ"
+    "3NXAABvBFNldEhhbmRsZUNvdW50AADzAUdldEZpbGVUeXBlAGICR2V0U3RhcnR1cEluZm9BANE"
+    "ARGVsZXRlQ3JpdGljYWxTZWN0aW9uAMcEVGxzR2V0VmFsdWUAxQRUbHNBbGxvYwAAyARUbHNTZ"
+    "XRWYWx1ZQDGBFRsc0ZyZWUA7wJJbnRlcmxvY2tlZEluY3JlbWVudAAAcwRTZXRMYXN0RXJyb3I"
+    "AAMUBR2V0Q3VycmVudFRocmVhZElkAADrAkludGVybG9ja2VkRGVjcmVtZW50AADNAkhlYXBDc"
+    "mVhdGUAAOwEVmlydHVhbEZyZWUAzwJIZWFwRnJlZQAApwNRdWVyeVBlcmZvcm1hbmNlQ291bnR"
+    "lcgCTAkdldFRpY2tDb3VudAAAwQFHZXRDdXJyZW50UHJvY2Vzc0lkAHkCR2V0U3lzdGVtVGltZ"
+    "UFzRmlsZVRpbWUAOQNMZWF2ZUNyaXRpY2FsU2VjdGlvbgAA7gBFbnRlckNyaXRpY2FsU2VjdGl"
+    "vbgAAwARUZXJtaW5hdGVQcm9jZXNzAADAAUdldEN1cnJlbnRQcm9jZXNzANMEVW5oYW5kbGVkR"
+    "XhjZXB0aW9uRmlsdGVyAAAAA0lzRGVidWdnZXJQcmVzZW50ADwDTG9hZExpYnJhcnlBAADjAkl"
+    "uaXRpYWxpemVDcml0aWNhbFNlY3Rpb25BbmRTcGluQ291bnQAcgFHZXRDUEluZm8AaAFHZXRBQ"
+    "1AAADcCR2V0T0VNQ1AAAAoDSXNWYWxpZENvZGVQYWdlAMsCSGVhcEFsbG9jAOkEVmlydHVhbEF"
+    "sbG9jAADSAkhlYXBSZUFsbG9jABgEUnRsVW53aW5kANQCSGVhcFNpemUAAAQCR2V0TG9jYWxlS"
+    "W5mb0EAACsDTENNYXBTdHJpbmdBAABnA011bHRpQnl0ZVRvV2lkZUNoYXIALQNMQ01hcFN0cml"
+    "uZ1cAAGYCR2V0U3RyaW5nVHlwZUEAAGkCR2V0U3RyaW5nVHlwZVcAAEtFUk5FTDMyLmRsbAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACSFEAAAgAAAHCGQAAIAAAARIZAAAkAAAAYhkA"
+    "ACgAAAICFQAAQAAAAVIVAABEAAAAkhUAAEgAAAACFQAATAAAA1IRAABgAAACchEAAGQAAAHSEQ"
+    "AAaAAAAPIRAABsAAAAEhEAAHAAAANyDQAAeAAAAvINAAB8AAABYg0AAIAAAACCDQAAhAAAAKIJ"
+    "AACIAAACIgUAAeAAAAHSBQAB5AAAAZIFAAHoAAABUgUAA/AAAAFCBQAD/"
+    "AAAAQIFAAAMAAAAHAAAAeAAAAAoAAAD/////"
+    "gAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAA//////////"
+    "8QAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAA"
+    "AAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAA"
+    "AAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAWAAAAAgAAAAIAAAADAAAAAgAAAAQAAAAYAAAABQAAAA"
+    "0AAAAGAAAACQAAAAcAAAAMAAAACAAAAAwAAAAJAAAADAAAAAoAAAAHAAAACwAAAAgAAAAMAAAA"
+    "FgAAAA0AAAAWAAAADwAAAAIAAAAQAAAADQAAABEAAAASAAAAEgAAAAIAAAAhAAAADQAAADUAAA"
+    "ACAAAAQQAAAA0AAABDAAAAAgAAAFAAAAARAAAAUgAAAA0AAABTAAAADQAAAFcAAAAWAAAAWQAA"
+    "AAsAAABsAAAADQAAAG0AAAAgAAAAcAAAABwAAAByAAAACQAAAAYAAAAWAAAAgAAAAAoAAACBAA"
+    "AACgAAAIIAAAAJAAAAgwAAABYAAACEAAAADQAAAJEAAAApAAAAngAAAA0AAAChAAAAAgAAAKQA"
+    "AAALAAAApwAAAA0AAAC3AAAAEQAAAM4AAAACAAAA1wAAAAsAAAAYBwAADAAAAAwAAAAIAAAA/"
+    "VJAAP1SQAD9UkAA/VJAAP1SQAD9UkAA/VJAAP1SQAD9UkAA/"
+    "VJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQE"
+    "BAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egA"
+    "AAAAAAEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAICAgICAgICAgICAgI"
+    "CAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWJjZ"
+    "GVmZ2hpamtsbW5vcHFyc3R1dnd4eXoAAAAAAABBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAADgo0AAAQIECKQDAABggnmCIQAAAAAAAACm3wAAAAAAAKGlA"
+    "AAAAAAAgZ/g/"
+    "AAAAABAfoD8AAAAAKgDAADBo9qjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgf4AAAAAAABA/"
+    "gAAAAAAALUDAADBo9qjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgf4AAAAAAABB/"
+    "gAAAAAAALYDAADPouSiGgDlouiiWwAAAAAAAAAAAAAAAAAAAAAAgf4AAAAAAABAfqH+"
+    "AAAAAFEFAABR2l7aIABf2mraMgAAAAAAAAAAAAAAAAAAAAAAgdPY3uD5AAAxfoH+"
+    "AAAAAOSLQAAAAAAAQwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKlA"
+    "AAAAAAAAAAAAAAAAAAipQAAAAAAAAAAAAAAAAAAIqUAAAAAAAAAAAAAAAAAACKlAAAAAAAAAAA"
+    "AAAAAAAAipQAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAOCqQAAAAAAAAAAAAOCJ"
+    "QABojkAA6I9AACCqQAAQqUAAAQAAABCpQADgo0AATuZAu7EZv0QDAAAAAAAAAAAAAAAAAAAA/"
+    "v///+CJQADii0AAAAAAABCSQAAMkkAACJJAAASSQAAAkkAA/"
+    "JFAAPiRQADwkUAA6JFAAOCRQADUkUAAyJFAAMCRQAC0kUAAsJFAAKyRQACokUAApJFAAKCRQAC"
+    "ckUAAmJFAAJSRQACQkUAAjJFAAIiRQACEkUAAfJFAAHCRQABokUAAYJFAAKCRQABYkUAAUJFAA"
+    "EiRQAA8kUAANJFAACiRQAAckUAAGJFAABSRQAAIkUAA9JBAAOiQQAAJBAAAAQAAAAAAAAAgqkA"
+    "ALgAAANyqQADEskAAxLJAAMSyQADEskAAxLJAAMSyQADEskAAxLJAAMSyQAB/f39/f39/"
+    "f+CqQAABAAAALgAAAAEAAAAgBZMZAAAAAAAAAAAAAAAAgHAAAAEAAADw8f//"
+    "AAAAAFBTVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAABQRFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAQKtAAICrQAD/////AAAAAAAAAAD/////AAAAAAAAAAD///"
+    "//HgAAADsAAABaAAAAeAAAAJcAAAC1AAAA1AAAAPMAAAARAQAAMAEAAE4BAABtAQAA/////"
+    "x4AAAA6AAAAWQAAAHcAAACWAAAAtAAAANMAAADyAAAAEAEAAC8BAABNAQAAbAEAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAsAAAACAgAwggs"
+    "IBgkqhkiG9w0BBwKgggr5MIIK9QIBATELMAkGBSsOAwIaBQAwTAYKKwYBBAGCNwIBBKA+"
+    "MDwwFwYKKwYBBAGCNwIBDzAJAwEAoASiAoAAMCEwCQYFKw4DAhoFAAQUyvERuGxe1WYJrb0qUj"
+    "Jq+hUUFR+"
+    "gggMaMIIDFjCCAf6gAwIBAgIQMrfXfre2ZLtLa8j4D2INSDANBgkqhkiG9w0BAQsFADAjMSEwH"
+    "wYDVQQDDBhTZWJMJ3MtU29mdHdhcmUtRW1wb3JpdW0wHhcNMjIwOTA4MjAxMDI2WhcNMjMwOTA"
+    "4MjAzMDI2WjAjMSEwHwYDVQQDDBhTZWJMJ3MtU29mdHdhcmUtRW1wb3JpdW0wggEiMA0GCSqGS"
+    "Ib3DQEBAQUAA4IBDwAwggEKAoIBAQCc/kV+rkViZfAUpKl/"
+    "Qglzl0G1wdZodU33ukUCIxfl8GxX+uP1kOAvXON3tlwUr4R8YbOYnzq2FtwrXMWhaeyNi56Y1/"
+    "LbrHn3vKlpbMSLUwyau3u+WDU0Cbi93e0p2b8F9xQq4f0jKEz3r3fC1tHp+"
+    "928omtCBwyIoUAvpak5LrE8NeGfcv2EN4tIWscW/d/2ePMeYyBRGaFmZlyH8QKY/"
+    "i1z0mtbCSEdf3T0nkquGKVy9l/gbHoGnug19gPr76rmznkn2sA0YGy/"
+    "52aVBezwn+dPWt4a6A7DAPclBiyfpquVhTq9H/VfSvpxzb+Ya1ni3C+FN/"
+    "v8F5w0lkxS1EulAgMBAAGjRjBEMA4GA1UdDwEB/"
+    "wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUtU1HCBYqYP96iQI3aKRK4Pv"
+    "A83swDQYJKoZIhvcNAQELBQADggEBAGWdFHatNRbUWaY/"
+    "PvTlvxuaJjAGbF9yJxopBvjhSeng6PvWFvPWSj0uKRzZOhRtWObz5KqMdc9fK3FK0N+"
+    "efGxgAmAs1hIbpnt9JvyFRB5eBLLUoi42i22iajpwhRx9O8FyMtYvW19cJ2uRX8NsZASeTPEdQ"
+    "E8jhbV7dBBybxp6zPbxe4BQUYKcZSzX9ZfX9UB4tQYxTNgAjs8uQKz73/"
+    "L1kiNKbJNh75gqkvcE7yh3GmZl2xq4smR0dKJ1VvN7cf5Tq1bhblOXCVDRYbZADTtIg6yqUiaG"
+    "cWhc/kf5ExtNmDhW+iYUWcKD67eV+dwi1l5nNdckW7u4Dz/"
+    "1PgYj5rIxggd1MIIHcQIBATA3MCMxITAfBgNVBAMMGFNlYkwncy1Tb2Z0d2FyZS1FbXBvcml1b"
+    "QIQMrfXfre2ZLtLa8j4D2INSDAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZ"
+    "IhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJK"
+    "oZIhvcNAQkEMRYEFPkNQP7IaaPxo0mYw3/"
+    "jEI7LWcU4MA0GCSqGSIb3DQEBAQUABIIBAAjVpBdtNaG9+"
+    "lRqj17ItIYPXTkzx05CRECCgVnulGWQ8uBHu8a2HUpAoDpJofH6Sw4tojOcluw366eGIpRfw5K"
+    "GbrWQ0e/9JPJyVLZsXAoS2xwYAGqAAXJUV8GNaCVo2hoPSTeRB7pbyeipJXozLuxVIHItxe/"
+    "GMvi6sLY76eq6ELNLSCO7MFFM75I9hpZIsJaI9AIvlrhJaP/"
+    "v8oDkT+3xE7IvqV0TTQNsUveuNU8ygH+kOrQq+aVknSjzBkHnKhRyTjJPC1bkLZlIKO1hFN9/"
+    "Q6zyn3nUMuNdq1DDJoC7YuX7pcV/"
+    "xx1sAAlX8unyEiFTqYKgwDF8Umcmq72aIQOhggWhMIIFnQYKKwYBBAGCNwIEATGCBY0wggWJBg"
+    "kqhkiG9w0BBwKgggV6MIIFdgIBATELMAkGBSsOAwIaBQAwTAYKKwYBBAGCNwIBBKA+"
+    "MDwwFwYKKwYBBAGCNwIBDzAJAwEAoASiAoAAMCEwCQYFKw4DAhoFAAQUyvERuGxe1WYJrb0qUj"
+    "Jq+hUUFR+"
+    "gggMmMIIDIjCCAgqgAwIBAgIQP031toKrQ6hF0FnNww9yQjANBgkqhkiG9w0BAQsFADApMScwJ"
+    "QYDVQQDDB5TZWJMJ3MtT3RoZXItU29mdHdhcmUtRW1wb3JpdW0wHhcNMjIwOTA4MjAzNDU4Whc"
+    "NMjMwOTA4MjA1NDU4WjApMScwJQYDVQQDDB5TZWJMJ3MtT3RoZXItU29mdHdhcmUtRW1wb3Jpd"
+    "W0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzHi2bSh16HjoZjzqFgAG/7TE/"
+    "GNZoXuaU0kx8m2Oo7hafPLlS3RNWqQ+Szqqj8zZ+"
+    "XBjBQWvb3s0rVaEz7k8rDwCarioeE57WYJPchGIBBiu1qK5JV6zgGbul+"
+    "6a9fRs2QttGfmjFBj5Wwe9e6+j3zUUXk/"
+    "wR0iJt5pDtRmTJvQyP+8I7mAT6EvRwR3hN1rW1xkUJSX16MoyZV0Jp/"
+    "QYmcKOQWrA07QkNL9qoIUOqolRt4kiSI/88+bKa2byZxzfnkQeQWKxcMfwyWn84SbvoQm/"
+    "slmmXbvt/VPyXuUcVb4PPM/698i+r0k2UXsu/"
+    "uL5mD+mlLyTXsfvInG9zzT6NAgMBAAGjRjBEMA4GA1UdDwEB/"
+    "wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUoLELjxm2dHOOmE5CjCUJYH1"
+    "EHdwwDQYJKoZIhvcNAQELBQADggEBAGtXamVrm7Y5yjlq1+"
+    "28ZWPSLaIr2imF8lNNpjv9KUl7XzWa29PuvY0i/qoeAKHj25OIs8nMv6KR1I62QK/"
+    "ycejR+8Jyoj+"
+    "wB7HB4NxRtFbftoH2FZ7xhqbHEKptzWOM4NBnPeGcJ3SSW82RwWK1wPd1hI2U74IcH6fMhl+"
+    "NoVXynzrxLZEv6Rskw0cNVoyIbzvV/"
+    "untpehPOX7K1aCxrOsg0ZZd6XOhA8OOIHSb9iEx1WMNFx1DC5bMGJ+"
+    "lDKZuXGOc6mO5uwQ1TNJFWA7Lhuh1irFmS7/0IG7GXPiVMukLM33bT/N/"
+    "l+kXiKW9iChXv4IjsyS3J/"
+    "aUVb7jYvGe2i4xggHqMIIB5gIBATA9MCkxJzAlBgNVBAMMHlNlYkwncy1PdGhlci1Tb2Z0d2Fy"
+    "ZS1FbXBvcml1bQIQP031toKrQ6hF0FnNww9yQjAJBgUrDgMCGgUAoIGDMBAGCisGAQQBgjcCAQ"
+    "wxAjAAMBEGCiqGSIb3DQEJGQQxAwIBATAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor"
+    "BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQU+Q1A/shpo/"
+    "GjSZjDf+MQjstZxTgwDQYJKoZIhvcNAQEBBQAEggEA4bisA5oy+iWDr7W+"
+    "Jxkd3WdlA7Gei3PdRCBcLnlc0pQhqvut/2G2qygwslHmHgGcVLv2KLu/Qm0A/AxXi/"
+    "rnDPHU0FPVC+opV0FFaQR+V2KNeHCR3D+cN1NNmTzJOxPiZBeLBdnc2nWwBB/"
+    "t71CP7RuCL2Hhxbth/o1Z/2wY+yE9k8qzq/"
+    "Wyq9+4YC0c2kHofZtR5IE6490G6niwtPLBKUsUYvhiHvP5tvDcr0N7QNa13s27a2z9SOh2WkT+"
+    "KxWHyb02/"
+    "DEx0XyycVdi+ZzBhFXGbNyzU6H0dpTf7BX00Ijgftkn2JFrBbTbcs12p8NO6YFx5zKL+"
+    "1ZT8iG2aC5VggAAAAA=";
+
+const char kMetadataExeBase64[] =
+    "TVqQAAMAAAAEAAAA//"
+    "8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEAAA4fug4A"
+    "tAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAA"
+    "AAAAAU5R+uUIRx/VCEcf1QhHH9Wfzi/VqEcf0C8XD8U4Rx/QLxdPxDhHH9AvF1/"
+    "FyEcf0C8XL8UYRx/UTvcPxShHH9UIRw/X2Ecf3t8Xj8UYRx/e3xjv1RhHH9UITm/"
+    "VGEcf3t8XP8UYRx/"
+    "VJpY2hQhHH9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEUAAEwBBQA89wxjAAAAAAAAAADgAAI"
+    "BCwEOHQAOAAAAGAAAAAAAAFgSAAAAEAAAACAAAAAAQAAAEAAAAAIAAAYAAAAAAAAABgAAAAAAA"
+    "AAAYAAAAAQAAAAAAAADAECBAAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAACMJQAAoAA"
+    "AAABAAAAgBQAAAAAAAAAAAAAAAAAAAAAAAABQAABUAQAA+"
+    "CAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoIQAAQAAAAAAAAAAAAAAAACAAALwAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAIEMAAAAEAAAAA4AAAAEAAAAAAAAAAAAA"
+    "AAAAAAgAABgLnJkYXRhAADiCgAAACAAAAAMAAAAEgAAAAAAAAAAAAAAAAAAQAAAQC5kYXRhAAA"
+    "AiAMAAAAwAAAAAgAAAB4AAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAACAFAAAAQAAAAAYAAAAgA"
+    "AAAAAAAAAAAAAAAAABAAABALnJlbG9jAABUAQAAAFAAAAACAAAAJgAAAAAAAAAAAAAAAAAAQAA"
+    "AQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPAwzsNBDBAAHUBw+"
+    "l5AgAAVmoB6GYLAADoUwYAAFDokQsAAOjX////i/"
+    "DotQsAAGoBiTDo+gMAAIPEDF6EwHRz2+"
+    "LocAgAAGjkGEAA6G4FAADoFgYAAFDoLgsAAFlZhcB1UegPBgAA6GYGAACFwHQLaAAQQADoCgsA"
+    "AFnoJgYAAOghBgAA6PsFAADocP///1DoQwsAAFno5wUAAITAdAXo7AoAAOhW////"
+    "6FcHAACFwHUBw2oH6DAGAADM6PUFAAAzwMPohQcAAOgy////"
+    "UOgLCwAAWcNqFGhQJUAA6C4IAABqAegRAwAAWYTAD4RQAQAAMtuIXeeDZfwA6MgCAACIRdyhND"
+    "NAADPJQTvBD4QvAQAAhcB1SYkNNDNAAGjYIEAAaMwgQADodwoAAFlZhcB0EcdF/P7///+4/"
+    "wAAAOnvAAAAaMggQABowCBAAOhLCgAAWVnHBTQzQAACAAAA6wWK2Yhd5/"
+    "913OjhAwAAWehsBQAAi/Az/zk+dBtW6DkDAABZhMB0EIs2V2oCV4vO/xW8IEAA/"
+    "9boSgUAAIvwOT50E1boEwMAAFmEwHQI/zboIAoAAFno3gkAAIv46AEKAACLMOj0CQAAV1b/"
+    "MOgw/v//g8QMi/DoMQYAAITAdGuE23UF6OAJAABqAGoB6HsDAABZWcdF/P7///"
+    "+Lxus1i03siwGLAIlF4FFQ6GsJAABZWcOLZejo8gUAAITAdDKAfecAdQXopQkAAMdF/P7///"
+    "+LReCLTfBkiQ0AAAAAWV9eW8nDagfoogQAAFboWgkAAP914OhYCQAAzOjFAwAA6XT+//"
+    "9Vi+xqAP8VBCBAAP91CP8VICBAAGgJBADA/xUIIEAAUP8VDCBAAF3DVYvsgewkAwAAahf/"
+    "FRAgQACFwHQFagJZzSmjGDFAAIkNFDFAAIkVEDFAAIkdDDFAAIk1CDFAAIk9BDFAAGaMFTAxQA"
+    "BmjA0kMUAAZowdADFAAGaMBfwwQABmjCX4MEAAZowt9DBAAJyPBSgxQACLRQCjHDFAAItFBKMg"
+    "MUAAjUUIoywxQACLhdz8///"
+    "HBWgwQAABAAEAoSAxQACjJDBAAMcFGDBAAAkEAMDHBRwwQAABAAAAxwUoMEAAAQAAAGoEWGvAA"
+    "MeALDBAAAIAAABqBFhrwACLDQQwQACJTAX4agRYweAAiw0AMEAAiUwF+GjwIEAA6OD+///"
+    "Jw1WL7ItFCFaLSDwDyA+3QRSNURgD0A+"
+    "3QQZr8CgD8jvWdBmLTQw7SgxyCotCCANCDDvIcgyDwig71nXqM8BeXcOLwuv5VuiHBwAAhcB0I"
+    "GShGAAAAL44M0AAi1AE6wQ70HQQM8CLyvAPsQ6FwHXwMsBew7ABXsNVi+"
+    "yDfQgAdQfGBTwzQAAB6HUFAADobwIAAITAdQQywF3D6GICAACEwHUKagDoVwIAAFnr6bABXcNV"
+    "i+yAPT0zQAAAdASwAV3DVot1CIX2dAWD/"
+    "gF1YugABwAAhcB0JoX2dSJoQDNAAOiEBwAAWYXAdQ9oTDNAAOh1BwAAWYXAdCsywOswg8n/"
+    "iQ1AM0AAiQ1EM0AAiQ1IM0AAiQ1MM0AAiQ1QM0AAiQ1UM0AAxgU9M0AAAbABXl3DagXoMgIAAM"
+    "xqCGhwJUAA6EoEAACDZfwAuE1aAABmOQUAAEAAdV2hPABAAIG4AABAAFBFAAB1TLkLAQAAZjmI"
+    "GABAAHU+i0UIuQAAQAArwVBR6Hz+//9ZWYXAdCeDeCQAfCHHRfz+////"
+    "sAHrH4tF7IsAM8mBOAUAAMAPlMGLwcOLZejHRfz+////"
+    "MsCLTfBkiQ0AAAAAWV9eW8nDVYvs6P8FAACFwHQPgH0IAHUJM8C5ODNAAIcBXcNVi+"
+    "yAPTwzQAAAdAaAfQwAdRL/dQjo/gAAAP91COj2AAAAWVmwAV3DVYvsgz1AM0AA//"
+    "91CHUH6FAGAADrC2hAM0AA6D4GAABZ99hZG8D30CNFCF3DVYvs/3UI6Mj////"
+    "32FkbwPfYSF3DVYvsg+wUg2X0AI1F9INl+ABQ/xUAIEAAi0X4M0X0iUX8/xUkIEAAMUX8/"
+    "xUoIEAAMUX8jUXsUP8VLCBAAItF8I1N/DNF7DNF/DPBycOLDQQwQABWV79O5kC7vgAA//"
+    "87z3QEhc51JuiU////i8g7z3UHuU/"
+    "mQLvrDoXOdQoNEUcAAMHgEAvIiQ0EMEAA99FfiQ0AMEAAXsMzwEDDuABAAADDaFgzQAD/"
+    "FRwgQADDsAHDaAAAAwBoAAABAGoA6GYFAACDxAyFwHUBw2oH6EUAAADMwgAAuGAzQADDuGgzQA"
+    "DD6O////+LSASDCCSJSATo5////"
+    "4tIBIMIAolIBMMzwDkFDDBAAA+UwMO4hDNAAMO4gDNAAMNVi+yB7CQDAABTahf/"
+    "FRAgQACFwHQFi00IzSlqA+ijAQAAxwQkzAIAAI2F3Pz//2oAUOhLBAAAg8QMiYWM/f//iY2I/"
+    "f//iZWE/f//iZ2A/f//ibV8/f//ib14/f//ZoyVpP3//2aMjZj9//9mjJ10/f//ZoyFcP3//"
+    "2aMpWz9//9mjK1o/f//nI+FnP3//4tFBImFlP3//41FBImFoP3//8eF3Pz//"
+    "wEAAQCLQPxqUImFkP3//41FqGoAUOjBAwAAi0UEg8QMx0WoFQAAQMdFrAEAAACJRbT/"
+    "FRggQABqAI1Y//fbjUWoiUX4jYXc/P//GtuJRfz+w/8VBCBAAI1F+FD/"
+    "FSAgQACFwHUMhNt1CGoD6K4AAABZW8nD6fX3//"
+    "9qAP8VFCBAAIXAdDS5TVoAAGY5CHUqi0g8A8iBOVBFAAB1HbgLAQAAZjlBGHUSg3l0DnYMg7no"
+    "AAAAAHQDsAHDMsDDaFoYQAD/"
+    "FQQgQADDVYvsVleLfQiLN4E+"
+    "Y3Nt4HUlg34QA3Ufi0YUPSAFkxl0HT0hBZMZdBY9IgWTGXQPPQBAmQF0CF8zwF5dwgQA6MMCAA"
+    "CJMIt3BOi/AgAAiTDoVAMAAMyDJXAzQAAAw1NWvkQlQAC7RCVAADvzcxlXiz6F/3QKi8//"
+    "FbwgQAD/14PGBDvzculfXlvDU1a+TCVAALtMJUAAO/NzGVeLPoX/dAqLz/8VvCBAAP/Xg8YEO/"
+    "Ny6V9eW8NoVRlAAGT/NQAAAACLRCQQiWwkEI1sJBAr4FNWV6EEMEAAMUX8M8VQiWXo/"
+    "3X4i0X8x0X8/v///4lF+I1F8GSjAAAAAMNVi+xWi3UI/zbopgIAAP91FIkG/3UQ/"
+    "3UMVmgDEEAAaAQwQADo9QEAAIPEHF5dw1WL7IMleDNAAACD7CSDDRAwQAABagr/"
+    "FRAgQACFwA+EqQEAAINl8AAzwFNWVzPJjX3cUw+ii/"
+    "NbiQeJdwSJTwgzyYlXDItF3It95IlF9IH3bnRlbItF6DVpbmVJiUX4i0XgNUdlbnWJRfwzwEBT"
+    "D6KL81uNXdyJA4tF/IlzBAvHC0X4iUsIiVMMdUOLRdwl8D//"
+    "Dz3ABgEAdCM9YAYCAHQcPXAGAgB0FT1QBgMAdA49YAYDAHQHPXAGAwB1EYs9fDNAAIPPAYk9fD"
+    "NAAOsGiz18M0AAi03kagdYiU38OUX0fC8zyVMPoovzW41d3IkDiXMEiUsIi038iVMMi13g98MA"
+    "AgAAdA6DzwKJPXwzQADrA4td8KEQMEAAg8gCxwV4M0AAAQAAAKMQMEAA98EAABAAD4STAAAAg8"
+    "gExwV4M0AAAgAAAKMQMEAA98EAAAAIdHn3wQAAABB0cTPJDwHQiUXsiVXwi0Xsi03wagZeI8Y7"
+    "xnVXoRAwQACDyAjHBXgzQAADAAAAoxAwQAD2wyB0O4PIIMcFeDNAAAUAAACjEDBAALgAAAPQI9"
+    "g72HUei0XsuuAAAACLTfAjwjvCdQ2DDRAwQABAiTV4M0AAX15bM8DJwzPAOQUUMEAAD5XAw/"
+    "8lOCBAAP8lNCBAAP8lPCBAAP8lQCBAAP8leCBAAP8liCBAAP8lWCBAAP8lpCBAAP8loCBAAP8l"
+    "nCBAAP8lmCBAAP8llCBAAP8lkCBAAP8ljCBAAP8ltCBAAP8lhCBAAP8lYCBAAP8lqCBAAP8lgC"
+    "BAAP8laCBAAP8lUCBAAP8lSCBAAP8lsCBAAP8lfCBAAP8lZCBAAP8lbCBAAP8lcCBAAP8ldCBA"
+    "AFWL7FGDPXgzQAABfGaBfQi0AgDAdAmBfQi1AgDAdVQPrl38i0X8g/A/"
+    "qIF0P6kEAgAAdQe4jgAAwMnDqQIBAAB0KqkIBAAAdQe4kQAAwMnDqRAIAAB1B7iTAADAycOpIB"
+    "AAAHUOuI8AAMDJw7iQAADAycOLRQjJwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAfCoAANQpAADyKQAABioAABoqAADAKgAArCoAAJYqAAC4KQAAZi"
+    "oAAFAqAAA2KgAAAAAAAP4mAADoJgAAHCcAACYnAAAAAAAAkigAAAAAAAB8KAAAAAAAAHQnAAAA"
+    "AAAALCgAAM4oAABOKAAA6igAAPgoAAAIKQAAUicAALIoAABEKAAAHigAAGQnAAAIKAAAACgAAP"
+    "InAADmJwAAxCcAAKInAACIJwAAOigAAAAAAACiKAAAECgAAAAAAACnFkAAAAAAAMQQQAAAAAAA"
+    "AAAAABEQQAC8EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDBAAGgwQAAAAAAAPPcMYwAAAA"
+    "ACAAAAYgAAAFwiAABcFAAAAAAAADz3DGMAAAAADAAAABQAAADAIgAAwBQAAAAAAAA89wxjAAAA"
+    "AA0AAABsAgAA1CIAANQUAAAAAAAAPPcMYwAAAAAOAAAAAAAAAAAAAAAAAAAAvAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDBAAEAi"
+    "QAABAAAAvCBAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQiQAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAHQzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVRkAABgAAAAAgACAAAAAAA"
+    "AAAAAAAAAAAAAAAFJTRFPxZzrGWwJ4T6qPP1vAVXZIBQAAAEM6XFVzZXJzXHNlYmxhbGFuY2V0"
+    "dGVcc291cmNlXHJlcG9zXEV4ZUdlbmVyYXRvclxSZWxlYXNlXEV4ZUdlbmVyYXRvci5wZGIAAA"
+    "AAAAAAIAAAACAAAAABAAAAHwAAAEdDVEwAEAAAgQwAAC50ZXh0JG1uAAAAAAAgAAC8AAAALmlk"
+    "YXRhJDUAAAAAvCAAAAQAAAAuMDBjZmcAAMAgAAAEAAAALkNSVCRYQ0EAAAAAxCAAAAQAAAAuQ1"
+    "JUJFhDQUEAAADIIAAABAAAAC5DUlQkWENaAAAAAMwgAAAEAAAALkNSVCRYSUEAAAAA0CAAAAQA"
+    "AAAuQ1JUJFhJQUEAAADUIAAABAAAAC5DUlQkWElBQwAAANggAAAEAAAALkNSVCRYSVoAAAAA3C"
+    "AAAAQAAAAuQ1JUJFhQQQAAAADgIAAABAAAAC5DUlQkWFBaAAAAAOQgAAAEAAAALkNSVCRYVEEA"
+    "AAAA6CAAAAgAAAAuQ1JUJFhUWgAAAADwIAAAUAEAAC5yZGF0YQAAQCIAAAQAAAAucmRhdGEkc3"
+    "hkYXRhAAAARCIAABgAAAAucmRhdGEkdm9sdG1kAAAAXCIAAOQCAAAucmRhdGEkenp6ZGJnAAAA"
+    "QCUAAAQAAAAucnRjJElBQQAAAABEJQAABAAAAC5ydGMkSVpaAAAAAEglAAAEAAAALnJ0YyRUQU"
+    "EAAAAATCUAAAQAAAAucnRjJFRaWgAAAABQJQAAPAAAAC54ZGF0YSR4AAAAAIwlAACMAAAALmlk"
+    "YXRhJDIAAAAAGCYAABQAAAAuaWRhdGEkMwAAAAAsJgAAvAAAAC5pZGF0YSQ0AAAAAOgmAAD6Aw"
+    "AALmlkYXRhJDYAAAAAADAAABgAAAAuZGF0YQAAABgwAABwAwAALmJzcwAAAAAAQAAAoAAAAC5y"
+    "c3JjJDAxAAAAAKBAAACABAAALnJzcmMkMDIAAAAAAAAAAAAAAAAAAAAAAAAAAP7///"
+    "8AAAAAzP///wAAAAD+/////RFAABESQAAAAAAA/v///wAAAADY////AAAAAP7///"
+    "8fFUAAMhVAAGAmAAAAAAAAAAAAAEAnAAA0IAAAjCYAAAAAAAAAAAAAFCkAAGAgAACEJgAAAAAA"
+    "AAAAAAA2KQAAWCAAANwmAAAAAAAAAAAAAFYpAACwIAAAfCYAAAAAAAAAAAAAdikAAFAgAAB0Jg"
+    "AAAAAAAAAAAACYKQAASCAAACwmAAAAAAAAAAAAANQqAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAB8KgAA1CkAAPIpAAAGKgAAGioAAMAqAACsKgAAlioAALgpAABmKgAAUCoAADYqAAAAAAAA/"
+    "iYAAOgmAAAcJwAAJicAAAAAAACSKAAAAAAAAHwoAAAAAAAAdCcAAAAAAAAsKAAAzigAAE4oAAD"
+    "qKAAA+"
+    "CgAAAgpAABSJwAAsigAAEQoAAAeKAAAZCcAAAgoAAAAKAAA8icAAOYnAADEJwAAoicAAIgnAAA"
+    "6KAAAAAAAAKIoAAAQKAAAAAAAABwAX19jdXJyZW50X2V4Y2VwdGlvbgAdAF9fY3VycmVudF9le"
+    "GNlcHRpb25fY29udGV4dABIAG1lbXNldAAANQBfZXhjZXB0X2hhbmRsZXI0X2NvbW1vbgBWQ1J"
+    "VTlRJTUUxNDAuZGxsAABCAF9zZWhfZmlsdGVyX2V4ZQBEAF9zZXRfYXBwX3R5cGUALgBfX3Nld"
+    "HVzZXJtYXRoZXJyAAAZAF9jb25maWd1cmVfbmFycm93X2FyZ3YAADUAX2luaXRpYWxpemVfbmF"
+    "ycm93X2Vudmlyb25tZW50AAAqAF9nZXRfaW5pdGlhbF9uYXJyb3dfZW52aXJvbm1lbnQAOABfa"
+    "W5pdHRlcm0AOQBfaW5pdHRlcm1fZQBYAGV4aXQAACUAX2V4aXQAVABfc2V0X2Ztb2RlAAAFAF9"
+    "fcF9fX2FyZ2MAAAYAX19wX19fYXJndgAAFwBfY2V4aXQAABYAX2NfZXhpdAA/"
+    "AF9yZWdpc3Rlcl90aHJlYWRfbG9jYWxfZXhlX2F0ZXhpdF9jYWxsYmFjawAACABfY29uZmlndG"
+    "hyZWFkbG9jYWxlABYAX3NldF9uZXdfbW9kZQABAF9fcF9fY29tbW9kZQAANgBfaW5pdGlhbGl6"
+    "ZV9vbmV4aXRfdGFibGUAAD4AX3JlZ2lzdGVyX29uZXhpdF9mdW5jdGlvbgAfAF9jcnRfYXRleG"
+    "l0AB0AX2NvbnRyb2xmcF9zAABqAHRlcm1pbmF0ZQBhcGktbXMtd2luLWNydC1ydW50aW1lLWwx"
+    "LTEtMC5kbGwAYXBpLW1zLXdpbi1jcnQtbWF0aC1sMS0xLTAuZGxsAABhcGktbXMtd2luLWNydC"
+    "1zdGRpby1sMS0xLTAuZGxsAGFwaS1tcy13aW4tY3J0LWxvY2FsZS1sMS0xLTAuZGxsAABhcGkt"
+    "bXMtd2luLWNydC1oZWFwLWwxLTEtMC5kbGwAALEFVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyAA"
+    "BxBVNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAaAkdldEN1cnJlbnRQcm9jZXNzAJAFVGVy"
+    "bWluYXRlUHJvY2VzcwAAiQNJc1Byb2Nlc3NvckZlYXR1cmVQcmVzZW50AE8EUXVlcnlQZXJmb3"
+    "JtYW5jZUNvdW50ZXIAGwJHZXRDdXJyZW50UHJvY2Vzc0lkAB8CR2V0Q3VycmVudFRocmVhZElk"
+    "AADsAkdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lAGYDSW5pdGlhbGl6ZVNMaXN0SGVhZACCA0lzRG"
+    "VidWdnZXJQcmVzZW50AHsCR2V0TW9kdWxlSGFuZGxlVwAAS0VSTkVMMzIuZGxsAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAsRm/RE7mQLv/////"
+    "AQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAIAEAAAACAAAIAYAAAAOAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAUAAA"
+    "gAAAAAAAAAAAAAAAAAAAAQABAAAAaAAAgAAAAAAAAAAAAAAAAAAAAQAJBAAAgAAAAAAAAAAAAA"
+    "AAAAAAAAAAAQAJBAAAkAAAAKBAAAAAAwAAAAAAAAAAAACgQwAAfQEAAAAAAAAAAAAAAAM0AAAA"
+    "VgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/"
+    "4AAAEAAAABAAEAAAAAAAEAAQAAAD8AAAAAAAAABAAEAAEAAAAAAAAAAAAAAAAAAABgAgAAAQBT"
+    "AHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAAA8AgAAAQAwADQAMAA5ADAANABiADAAAABEAB"
+    "IAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAFQAZQBzAHQAIABDAG8AbQBwAGEAbgB5ACAA"
+    "TgBhAG0AZQAAAEoAEQABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAABUAGUAcw"
+    "B0ACAARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAwAAgAAQBGAGkAbABlAFYAZQByAHMAaQBv"
+    "AG4AAAAAADEALgAwAC4AMAAuADEAAABGABMAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAF"
+    "QAZQBzAHQAIABJAG4AdABlAHIAbgBhAGwAIABOAGEAbQBlAAAAAABKABMAAQBMAGUAZwBhAGwA"
+    "QwBvAHAAeQByAGkAZwBoAHQAAABDAG8AcAB5AHIAaQBnAGgAdAAgACgAQwApACAAMgAwADIAMg"
+    "AAAAAAWAAYAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAFQAZQBzAHQAIABP"
+    "AHIAaQBnAGkAbgBhAGwAIABGAGkAbABlACAATgBhAG0AZQAAAEQAEgABAFAAcgBvAGQAdQBjAH"
+    "QATgBhAG0AZQAAAAAAVABlAHMAdAAgAFAAcgBvAGQAdQBjAHQAIABOAGEAbQBlAAAANAAIAAEA"
+    "UAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMgAAAEQAAAABAFYAYQ"
+    "ByAEYAaQBsAGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAAJ"
+    "BLAEPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J3llcy"
+    "c/"
+    "Pg0KPGFzc2VtYmx5IHhtbG5zPSd1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MScgbW"
+    "FuaWZlc3RWZXJzaW9uPScxLjAnPg0KICA8dHJ1c3RJbmZvIHhtbG5zPSJ1cm46c2NoZW1hcy1t"
+    "aWNyb3NvZnQtY29tOmFzbS52MyI+"
+    "DQogICAgPHNlY3VyaXR5Pg0KICAgICAgPHJlcXVlc3RlZFByaXZpbGVnZXM+"
+    "DQogICAgICAgIDxyZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbCBsZXZlbD0nYXNJbnZva2VyJyB1aU"
+    "FjY2Vzcz0nZmFsc2UnIC8+DQogICAgICA8L3JlcXVlc3RlZFByaXZpbGVnZXM+"
+    "DQogICAgPC9zZWN1cml0eT4NCiAgPC90cnVzdEluZm8+"
+    "DQo8L2Fzc2VtYmx5Pg0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAALAEAAAUwSTByMNkwBDEZMR4xIzFEMUkxVjGQMWkycj"
+    "J9MoQylzKlMqsysTK3Mr0ywzLKMtEy2DLfMuYy7TL0MvwyBDMMMxgzITMmMywzNjNAM1AzYDNw"
+    "M3kz2TMFNDg0XjRtNIQ0ijSQNJY0nDSiNKg0vTTSNNk03zTxNPs0YzVwNZg1qjXpNfg1ATYONi"
+    "Q2XjZnNng2fjarNrE21zbgNuY2+TbFN+U37zcPOE84VTiyOLs4wDjTOOc47Dj/"
+    "OBE5LjlwOXU5iTmTOZw5QzpMOlQ6jzqZOqI6qzrAOsk6+"
+    "DoBOwo7GDshO0M7SjtZO2M7aTtvO3U7ezuBO4c7jTuTO5k7nzulO6s7sTu3O707wzvJO8871Tv"
+    "bO+E75zvtO/M7+Tv/"
+    "OwU8DzwAIAAAKAAAALwwxDDQMNQw8DD0MKQxqDGwMQgyIDJkNWg1hDWINQAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
+
+const char kEmptyExeBase64[] =
+    "TVqQAAMAAAAEAAAA//"
+    "8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+"
+    "AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGU"
+    "uDQ0KJAAAAAAAAAAU5S2vUIRD/FCEQ/xQhEP8WfzQ/FqEQ/wC8UL9U4RD/ALxRv1DhEP8AvFH/"
+    "VyEQ/wC8UD9UYRD/ETvQv1ShEP8UIRC/H2EQ/zt8Ur9UYRD/O3xvPxRhEP87fFB/VGEQ/"
+    "xSaWNoUIRD/"
+    "AAAAAAAAAAAAAAAAAAAAABQRQAATAEFAG32DGMAAAAAAAAAAOAAAgELAQ4dAA4AAAAUAAAAAAA"
+    "AWBIAAAAQAAAAIAAAAABAAAAQAAAAAgAABgAAAAAAAAAGAAAAAAAAAABgAAAABAAAAAAAAAMAQ"
+    "IEAABAAABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAIwlAACgAAAAAEAAAOABAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAFAAAFQBAAD4IAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGghAABAA"
+    "AAAAAAAAAAAAAAAIAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAAgQwAAAA"
+    "QAAAADgAAAAQAAAAAAAAAAAAAAAAAACAAAGAucmRhdGEAAOIKAAAAIAAAAAwAAAASAAAAAAAAA"
+    "AAAAAAAAABAAABALmRhdGEAAACIAwAAADAAAAACAAAAHgAAAAAAAAAAAAAAAAAAQAAAwC5yc3J"
+    "jAAAA4AEAAABAAAAAAgAAACAAAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAAFQBAAAAUAAAAAIAA"
+    "AAiAAAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAADPAwzsNBDBAAHUBw+l5AgAAVmoB6GYLAADoUwYAAFDokQsAAOjX///"
+    "/i/"
+    "DotQsAAGoBiTDo+gMAAIPEDF6EwHRz2+"
+    "LocAgAAGjkGEAA6G4FAADoFgYAAFDoLgsAAFlZhcB1UegPBgAA6GYGAACFwHQLaAAQQADoCgsA"
+    "AFnoJgYAAOghBgAA6PsFAADocP///1DoQwsAAFno5wUAAITAdAXo7AoAAOhW////"
+    "6FcHAACFwHUBw2oH6DAGAADM6PUFAAAzwMPohQcAAOgy////"
+    "UOgLCwAAWcNqFGhQJUAA6C4IAABqAegRAwAAWYTAD4RQAQAAMtuIXeeDZfwA6MgCAACIRdyhND"
+    "NAADPJQTvBD4QvAQAAhcB1SYkNNDNAAGjYIEAAaMwgQADodwoAAFlZhcB0EcdF/P7///+4/"
+    "wAAAOnvAAAAaMggQABowCBAAOhLCgAAWVnHBTQzQAACAAAA6wWK2Yhd5/"
+    "913OjhAwAAWehsBQAAi/Az/zk+dBtW6DkDAABZhMB0EIs2V2oCV4vO/xW8IEAA/"
+    "9boSgUAAIvwOT50E1boEwMAAFmEwHQI/zboIAoAAFno3gkAAIv46AEKAACLMOj0CQAAV1b/"
+    "MOgw/v//g8QMi/DoMQYAAITAdGuE23UF6OAJAABqAGoB6HsDAABZWcdF/P7///"
+    "+Lxus1i03siwGLAIlF4FFQ6GsJAABZWcOLZejo8gUAAITAdDKAfecAdQXopQkAAMdF/P7///"
+    "+LReCLTfBkiQ0AAAAAWV9eW8nDagfoogQAAFboWgkAAP914OhYCQAAzOjFAwAA6XT+//"
+    "9Vi+xqAP8VBCBAAP91CP8VICBAAGgJBADA/xUIIEAAUP8VDCBAAF3DVYvsgewkAwAAahf/"
+    "FRAgQACFwHQFagJZzSmjGDFAAIkNFDFAAIkVEDFAAIkdDDFAAIk1CDFAAIk9BDFAAGaMFTAxQA"
+    "BmjA0kMUAAZowdADFAAGaMBfwwQABmjCX4MEAAZowt9DBAAJyPBSgxQACLRQCjHDFAAItFBKMg"
+    "MUAAjUUIoywxQACLhdz8///"
+    "HBWgwQAABAAEAoSAxQACjJDBAAMcFGDBAAAkEAMDHBRwwQAABAAAAxwUoMEAAAQAAAGoEWGvAA"
+    "MeALDBAAAIAAABqBFhrwACLDQQwQACJTAX4agRYweAAiw0AMEAAiUwF+GjwIEAA6OD+///"
+    "Jw1WL7ItFCFaLSDwDyA+3QRSNURgD0A+"
+    "3QQZr8CgD8jvWdBmLTQw7SgxyCotCCANCDDvIcgyDwig71nXqM8BeXcOLwuv5VuiHBwAAhcB0I"
+    "GShGAAAAL44M0AAi1AE6wQ70HQQM8CLyvAPsQ6FwHXwMsBew7ABXsNVi+"
+    "yDfQgAdQfGBTwzQAAB6HUFAADobwIAAITAdQQywF3D6GICAACEwHUKagDoVwIAAFnr6bABXcNV"
+    "i+yAPT0zQAAAdASwAV3DVot1CIX2dAWD/"
+    "gF1YugABwAAhcB0JoX2dSJoQDNAAOiEBwAAWYXAdQ9oTDNAAOh1BwAAWYXAdCsywOswg8n/"
+    "iQ1AM0AAiQ1EM0AAiQ1IM0AAiQ1MM0AAiQ1QM0AAiQ1UM0AAxgU9M0AAAbABXl3DagXoMgIAAM"
+    "xqCGhwJUAA6EoEAACDZfwAuE1aAABmOQUAAEAAdV2hPABAAIG4AABAAFBFAAB1TLkLAQAAZjmI"
+    "GABAAHU+i0UIuQAAQAArwVBR6Hz+//9ZWYXAdCeDeCQAfCHHRfz+////"
+    "sAHrH4tF7IsAM8mBOAUAAMAPlMGLwcOLZejHRfz+////"
+    "MsCLTfBkiQ0AAAAAWV9eW8nDVYvs6P8FAACFwHQPgH0IAHUJM8C5ODNAAIcBXcNVi+"
+    "yAPTwzQAAAdAaAfQwAdRL/dQjo/gAAAP91COj2AAAAWVmwAV3DVYvsgz1AM0AA//"
+    "91CHUH6FAGAADrC2hAM0AA6D4GAABZ99hZG8D30CNFCF3DVYvs/3UI6Mj////"
+    "32FkbwPfYSF3DVYvsg+wUg2X0AI1F9INl+ABQ/xUAIEAAi0X4M0X0iUX8/xUkIEAAMUX8/"
+    "xUoIEAAMUX8jUXsUP8VLCBAAItF8I1N/DNF7DNF/DPBycOLDQQwQABWV79O5kC7vgAA//"
+    "87z3QEhc51JuiU////i8g7z3UHuU/"
+    "mQLvrDoXOdQoNEUcAAMHgEAvIiQ0EMEAA99FfiQ0AMEAAXsMzwEDDuABAAADDaFgzQAD/"
+    "FRwgQADDsAHDaAAAAwBoAAABAGoA6GYFAACDxAyFwHUBw2oH6EUAAADMwgAAuGAzQADDuGgzQA"
+    "DD6O////+LSASDCCSJSATo5////"
+    "4tIBIMIAolIBMMzwDkFDDBAAA+UwMO4hDNAAMO4gDNAAMNVi+yB7CQDAABTahf/"
+    "FRAgQACFwHQFi00IzSlqA+ijAQAAxwQkzAIAAI2F3Pz//2oAUOhLBAAAg8QMiYWM/f//iY2I/"
+    "f//iZWE/f//iZ2A/f//ibV8/f//ib14/f//ZoyVpP3//2aMjZj9//9mjJ10/f//ZoyFcP3//"
+    "2aMpWz9//9mjK1o/f//nI+FnP3//4tFBImFlP3//41FBImFoP3//8eF3Pz//"
+    "wEAAQCLQPxqUImFkP3//41FqGoAUOjBAwAAi0UEg8QMx0WoFQAAQMdFrAEAAACJRbT/"
+    "FRggQABqAI1Y//fbjUWoiUX4jYXc/P//GtuJRfz+w/8VBCBAAI1F+FD/"
+    "FSAgQACFwHUMhNt1CGoD6K4AAABZW8nD6fX3//"
+    "9qAP8VFCBAAIXAdDS5TVoAAGY5CHUqi0g8A8iBOVBFAAB1HbgLAQAAZjlBGHUSg3l0DnYMg7no"
+    "AAAAAHQDsAHDMsDDaFoYQAD/"
+    "FQQgQADDVYvsVleLfQiLN4E+"
+    "Y3Nt4HUlg34QA3Ufi0YUPSAFkxl0HT0hBZMZdBY9IgWTGXQPPQBAmQF0CF8zwF5dwgQA6MMCAA"
+    "CJMIt3BOi/AgAAiTDoVAMAAMyDJXAzQAAAw1NWvkQlQAC7RCVAADvzcxlXiz6F/3QKi8//"
+    "FbwgQAD/14PGBDvzculfXlvDU1a+TCVAALtMJUAAO/NzGVeLPoX/dAqLz/8VvCBAAP/Xg8YEO/"
+    "Ny6V9eW8NoVRlAAGT/NQAAAACLRCQQiWwkEI1sJBAr4FNWV6EEMEAAMUX8M8VQiWXo/"
+    "3X4i0X8x0X8/v///4lF+I1F8GSjAAAAAMNVi+xWi3UI/zbopgIAAP91FIkG/3UQ/"
+    "3UMVmgDEEAAaAQwQADo9QEAAIPEHF5dw1WL7IMleDNAAACD7CSDDRAwQAABagr/"
+    "FRAgQACFwA+EqQEAAINl8AAzwFNWVzPJjX3cUw+ii/"
+    "NbiQeJdwSJTwgzyYlXDItF3It95IlF9IH3bnRlbItF6DVpbmVJiUX4i0XgNUdlbnWJRfwzwEBT"
+    "D6KL81uNXdyJA4tF/IlzBAvHC0X4iUsIiVMMdUOLRdwl8D//"
+    "Dz3ABgEAdCM9YAYCAHQcPXAGAgB0FT1QBgMAdA49YAYDAHQHPXAGAwB1EYs9fDNAAIPPAYk9fD"
+    "NAAOsGiz18M0AAi03kagdYiU38OUX0fC8zyVMPoovzW41d3IkDiXMEiUsIi038iVMMi13g98MA"
+    "AgAAdA6DzwKJPXwzQADrA4td8KEQMEAAg8gCxwV4M0AAAQAAAKMQMEAA98EAABAAD4STAAAAg8"
+    "gExwV4M0AAAgAAAKMQMEAA98EAAAAIdHn3wQAAABB0cTPJDwHQiUXsiVXwi0Xsi03wagZeI8Y7"
+    "xnVXoRAwQACDyAjHBXgzQAADAAAAoxAwQAD2wyB0O4PIIMcFeDNAAAUAAACjEDBAALgAAAPQI9"
+    "g72HUei0XsuuAAAACLTfAjwjvCdQ2DDRAwQABAiTV4M0AAX15bM8DJwzPAOQUUMEAAD5XAw/"
+    "8lOCBAAP8lNCBAAP8lPCBAAP8lQCBAAP8leCBAAP8liCBAAP8lWCBAAP8lpCBAAP8loCBAAP8l"
+    "nCBAAP8lmCBAAP8llCBAAP8lkCBAAP8ljCBAAP8ltCBAAP8lhCBAAP8lYCBAAP8lqCBAAP8lgC"
+    "BAAP8laCBAAP8lUCBAAP8lSCBAAP8lsCBAAP8lfCBAAP8lZCBAAP8lbCBAAP8lcCBAAP8ldCBA"
+    "AFWL7FGDPXgzQAABfGaBfQi0AgDAdAmBfQi1AgDAdVQPrl38i0X8g/A/"
+    "qIF0P6kEAgAAdQe4jgAAwMnDqQIBAAB0KqkIBAAAdQe4kQAAwMnDqRAIAAB1B7iTAADAycOpIB"
+    "AAAHUOuI8AAMDJw7iQAADAycOLRQjJwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAfCoAANQpAADyKQAABioAABoqAADAKgAArCoAAJYqAAC4KQAAZi"
+    "oAAFAqAAA2KgAAAAAAAP4mAADoJgAAHCcAACYnAAAAAAAAkigAAAAAAAB8KAAAAAAAAHQnAAAA"
+    "AAAALCgAAM4oAABOKAAA6igAAPgoAAAIKQAAUicAALIoAABEKAAAHigAAGQnAAAIKAAAACgAAP"
+    "InAADmJwAAxCcAAKInAACIJwAAOigAAAAAAACiKAAAECgAAAAAAACnFkAAAAAAAMQQQAAAAAAA"
+    "AAAAABEQQAC8EEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDBAAGgwQAAAAAAAbfYMYwAAAA"
+    "ACAAAAYgAAAFwiAABcFAAAAAAAAG32DGMAAAAADAAAABQAAADAIgAAwBQAAAAAAABt9gxjAAAA"
+    "AA0AAABsAgAA1CIAANQUAAAAAAAAbfYMYwAAAAAOAAAAAAAAAAAAAAAAAAAAvAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDBAAEAi"
+    "QAABAAAAvCBAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQiQAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAHQzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVRkAABgAAAAAgACAAAAAAA"
+    "AAAAAAAAAAAAAAAFJTRFPxZzrGWwJ4T6qPP1vAVXZIBAAAAEM6XFVzZXJzXHNlYmxhbGFuY2V0"
+    "dGVcc291cmNlXHJlcG9zXEV4ZUdlbmVyYXRvclxSZWxlYXNlXEV4ZUdlbmVyYXRvci5wZGIAAA"
+    "AAAAAAIAAAACAAAAABAAAAHwAAAEdDVEwAEAAAgQwAAC50ZXh0JG1uAAAAAAAgAAC8AAAALmlk"
+    "YXRhJDUAAAAAvCAAAAQAAAAuMDBjZmcAAMAgAAAEAAAALkNSVCRYQ0EAAAAAxCAAAAQAAAAuQ1"
+    "JUJFhDQUEAAADIIAAABAAAAC5DUlQkWENaAAAAAMwgAAAEAAAALkNSVCRYSUEAAAAA0CAAAAQA"
+    "AAAuQ1JUJFhJQUEAAADUIAAABAAAAC5DUlQkWElBQwAAANggAAAEAAAALkNSVCRYSVoAAAAA3C"
+    "AAAAQAAAAuQ1JUJFhQQQAAAADgIAAABAAAAC5DUlQkWFBaAAAAAOQgAAAEAAAALkNSVCRYVEEA"
+    "AAAA6CAAAAgAAAAuQ1JUJFhUWgAAAADwIAAAUAEAAC5yZGF0YQAAQCIAAAQAAAAucmRhdGEkc3"
+    "hkYXRhAAAARCIAABgAAAAucmRhdGEkdm9sdG1kAAAAXCIAAOQCAAAucmRhdGEkenp6ZGJnAAAA"
+    "QCUAAAQAAAAucnRjJElBQQAAAABEJQAABAAAAC5ydGMkSVpaAAAAAEglAAAEAAAALnJ0YyRUQU"
+    "EAAAAATCUAAAQAAAAucnRjJFRaWgAAAABQJQAAPAAAAC54ZGF0YSR4AAAAAIwlAACMAAAALmlk"
+    "YXRhJDIAAAAAGCYAABQAAAAuaWRhdGEkMwAAAAAsJgAAvAAAAC5pZGF0YSQ0AAAAAOgmAAD6Aw"
+    "AALmlkYXRhJDYAAAAAADAAABgAAAAuZGF0YQAAABgwAABwAwAALmJzcwAAAAAAQAAAYAAAAC5y"
+    "c3JjJDAxAAAAAGBAAACAAQAALnJzcmMkMDIAAAAAAAAAAAAAAAAAAAAAAAAAAP7///"
+    "8AAAAAzP///wAAAAD+/////RFAABESQAAAAAAA/v///wAAAADY////AAAAAP7///"
+    "8fFUAAMhVAAGAmAAAAAAAAAAAAAEAnAAA0IAAAjCYAAAAAAAAAAAAAFCkAAGAgAACEJgAAAAAA"
+    "AAAAAAA2KQAAWCAAANwmAAAAAAAAAAAAAFYpAACwIAAAfCYAAAAAAAAAAAAAdikAAFAgAAB0Jg"
+    "AAAAAAAAAAAACYKQAASCAAACwmAAAAAAAAAAAAANQqAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAB8KgAA1CkAAPIpAAAGKgAAGioAAMAqAACsKgAAlioAALgpAABmKgAAUCoAADYqAAAAAAAA/"
+    "iYAAOgmAAAcJwAAJicAAAAAAACSKAAAAAAAAHwoAAAAAAAAdCcAAAAAAAAsKAAAzigAAE4oAAD"
+    "qKAAA+"
+    "CgAAAgpAABSJwAAsigAAEQoAAAeKAAAZCcAAAgoAAAAKAAA8icAAOYnAADEJwAAoicAAIgnAAA"
+    "6KAAAAAAAAKIoAAAQKAAAAAAAABwAX19jdXJyZW50X2V4Y2VwdGlvbgAdAF9fY3VycmVudF9le"
+    "GNlcHRpb25fY29udGV4dABIAG1lbXNldAAANQBfZXhjZXB0X2hhbmRsZXI0X2NvbW1vbgBWQ1J"
+    "VTlRJTUUxNDAuZGxsAABCAF9zZWhfZmlsdGVyX2V4ZQBEAF9zZXRfYXBwX3R5cGUALgBfX3Nld"
+    "HVzZXJtYXRoZXJyAAAZAF9jb25maWd1cmVfbmFycm93X2FyZ3YAADUAX2luaXRpYWxpemVfbmF"
+    "ycm93X2Vudmlyb25tZW50AAAqAF9nZXRfaW5pdGlhbF9uYXJyb3dfZW52aXJvbm1lbnQAOABfa"
+    "W5pdHRlcm0AOQBfaW5pdHRlcm1fZQBYAGV4aXQAACUAX2V4aXQAVABfc2V0X2Ztb2RlAAAFAF9"
+    "fcF9fX2FyZ2MAAAYAX19wX19fYXJndgAAFwBfY2V4aXQAABYAX2NfZXhpdAA/"
+    "AF9yZWdpc3Rlcl90aHJlYWRfbG9jYWxfZXhlX2F0ZXhpdF9jYWxsYmFjawAACABfY29uZmlndG"
+    "hyZWFkbG9jYWxlABYAX3NldF9uZXdfbW9kZQABAF9fcF9fY29tbW9kZQAANgBfaW5pdGlhbGl6"
+    "ZV9vbmV4aXRfdGFibGUAAD4AX3JlZ2lzdGVyX29uZXhpdF9mdW5jdGlvbgAfAF9jcnRfYXRleG"
+    "l0AB0AX2NvbnRyb2xmcF9zAABqAHRlcm1pbmF0ZQBhcGktbXMtd2luLWNydC1ydW50aW1lLWwx"
+    "LTEtMC5kbGwAYXBpLW1zLXdpbi1jcnQtbWF0aC1sMS0xLTAuZGxsAABhcGktbXMtd2luLWNydC"
+    "1zdGRpby1sMS0xLTAuZGxsAGFwaS1tcy13aW4tY3J0LWxvY2FsZS1sMS0xLTAuZGxsAABhcGkt"
+    "bXMtd2luLWNydC1oZWFwLWwxLTEtMC5kbGwAALEFVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyAA"
+    "BxBVNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAaAkdldEN1cnJlbnRQcm9jZXNzAJAFVGVy"
+    "bWluYXRlUHJvY2VzcwAAiQNJc1Byb2Nlc3NvckZlYXR1cmVQcmVzZW50AE8EUXVlcnlQZXJmb3"
+    "JtYW5jZUNvdW50ZXIAGwJHZXRDdXJyZW50UHJvY2Vzc0lkAB8CR2V0Q3VycmVudFRocmVhZElk"
+    "AADsAkdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lAGYDSW5pdGlhbGl6ZVNMaXN0SGVhZACCA0lzRG"
+    "VidWdnZXJQcmVzZW50AHsCR2V0TW9kdWxlSGFuZGxlVwAAS0VSTkVMMzIuZGxsAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAsRm/RE7mQLv/////"
+    "AQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAEAGAAAABgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAADAAAIAAAAAAAAAA"
+    "AAAAAAAAAAEACQQAAEgAAABgQAAAfQEAAAAAAAAAAAAAAAAAAAAAAAA8P3htbCB2ZXJzaW9uPS"
+    "cxLjAnIGVuY29kaW5nPSdVVEYtOCcgc3RhbmRhbG9uZT0neWVzJz8+"
+    "DQo8YXNzZW1ibHkgeG1sbnM9J3VybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxJyBtYW"
+    "5pZmVzdFZlcnNpb249JzEuMCc+"
+    "DQogIDx0cnVzdEluZm8geG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYzIj"
+    "4NCiAgICA8c2VjdXJpdHk+"
+    "DQogICAgICA8cmVxdWVzdGVkUHJpdmlsZWdlcz4NCiAgICAgICAgPHJlcXVlc3RlZEV4ZWN1dG"
+    "lvbkxldmVsIGxldmVsPSdhc0ludm9rZXInIHVpQWNjZXNzPSdmYWxzZScgLz4NCiAgICAgIDwv"
+    "cmVxdWVzdGVkUHJpdmlsZWdlcz4NCiAgICA8L3NlY3VyaXR5Pg0KICA8L3RydXN0SW5mbz4NCj"
+    "wvYXNzZW1ibHk+"
+    "DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAsAQAABTBJMHIw2TAEMR"
+    "kxHjEjMUQxSTFWMZAxaTJyMn0yhDKXMqUyqzKxMrcyvTLDMsoy0TLYMt8y5jLtMvQy/"
+    "DIEMwwzGDMhMyYzLDM2M0AzUDNgM3AzeTPZMwU0ODReNG00hDSKNJA0ljScNKI0qDS9NNI02TT"
+    "fNPE0+zRjNXA1mDWqNek1+DUBNg42JDZeNmc2eDZ+"
+    "Nqs2sTbXNuA25jb5NsU35TfvNw84TzhVOLI4uzjAONM45zjsOP84ETkuOXA5dTmJOZM5nDlDOk"
+    "w6VDqPOpk6ojqrOsA6yTr4OgE7CjsYOyE7QztKO1k7YztpO287dTt7O4E7hzuNO5M7mTufO6U7"
+    "qzuxO7c7vTvDO8k7zzvVO9s74TvnO+078zv5O/"
+    "87BTwPPAAgAAAoAAAAvDDEMNAw1DDwMPQwpDGoMbAxCDIgMmQ1aDWENYg1AAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
+
+}  // namespace device_signals::test
diff --git a/components/device_signals/test/win/files_data.h b/components/device_signals/test/win/files_data.h
new file mode 100644
index 0000000..06d08288
--- /dev/null
+++ b/components/device_signals/test/win/files_data.h
@@ -0,0 +1,25 @@
+// Copyright 2022 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_DEVICE_SIGNALS_TEST_WIN_FILES_DATA_H_
+#define COMPONENTS_DEVICE_SIGNALS_TEST_WIN_FILES_DATA_H_
+
+namespace device_signals::test {
+
+// Base64-encoded bytes of a signed test executable.
+extern const char kSignedExeBase64[];
+
+// Base64-encoded bytes of a test executable signed with two certificates.
+extern const char kMultiSignedExeBase64[];
+
+// Base64-encoded bytes of a test executable that has metadata information baked
+// into it (e.g. product name, version).
+extern const char kMetadataExeBase64[];
+
+// Base64-encoded bytes of an empty test executable (no metadata, no signature).
+extern const char kEmptyExeBase64[];
+
+}  // namespace device_signals::test
+
+#endif  // COMPONENTS_DEVICE_SIGNALS_TEST_WIN_FILES_DATA_H_
diff --git a/components/device_signals/test/win/scoped_executable_files.cc b/components/device_signals/test/win/scoped_executable_files.cc
new file mode 100644
index 0000000..33db62ba
--- /dev/null
+++ b/components/device_signals/test/win/scoped_executable_files.cc
@@ -0,0 +1,78 @@
+// Copyright 2022 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/device_signals/test/win/scoped_executable_files.h"
+
+#include "base/base64.h"
+#include "base/check.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/strings/string_piece.h"
+#include "components/device_signals/test/win/files_data.h"
+
+namespace device_signals::test {
+namespace {
+
+constexpr char kSignedExeFilename[] = "signed.exe";
+constexpr char kMultiSignedExeFilename[] = "multi-signed.exe";
+constexpr char kMetadataExeFilename[] = "metadata.exe";
+constexpr char kEmptyExeFilename[] = "empty.exe";
+
+constexpr char kProductName[] = "Test Product Name";
+constexpr char kProductVersion[] = "1.0.0.2";
+
+}  // namespace
+
+ScopedExecutableFiles::ScopedExecutableFiles() {
+  CHECK(scoped_dir_.CreateUniqueTempDir());
+}
+
+ScopedExecutableFiles::~ScopedExecutableFiles() = default;
+
+base::FilePath ScopedExecutableFiles::GetSignedExePath() {
+  return LazilyCreateFile(kSignedExeFilename, kSignedExeBase64);
+}
+
+base::FilePath ScopedExecutableFiles::GetMultiSignedExePath() {
+  return LazilyCreateFile(kMultiSignedExeFilename, kMultiSignedExeBase64);
+}
+
+base::FilePath ScopedExecutableFiles::GetMetadataExePath() {
+  return LazilyCreateFile(kMetadataExeFilename, kMetadataExeBase64);
+}
+
+base::FilePath ScopedExecutableFiles::GetEmptyExePath() {
+  return LazilyCreateFile(kEmptyExeFilename, kEmptyExeBase64);
+}
+
+std::string ScopedExecutableFiles::GetMetadataProductName() {
+  return kProductName;
+}
+
+std::string ScopedExecutableFiles::GetMetadataProductVersion() {
+  return kProductVersion;
+}
+
+base::FilePath ScopedExecutableFiles::LazilyCreateFile(
+    const base::StringPiece& file_name,
+    const base::StringPiece& file_data) {
+  auto file_path = scoped_dir_.GetPath().AppendASCII(file_name);
+  if (!base::PathExists(file_path)) {
+    CHECK(CreateTempFile(file_path, file_data));
+  }
+  return file_path;
+}
+
+bool ScopedExecutableFiles::CreateTempFile(const base::FilePath& file_path,
+                                           const base::StringPiece& file_data) {
+  absl::optional<std::vector<uint8_t>> decoded_file_data =
+      base::Base64Decode(file_data);
+  if (!decoded_file_data) {
+    return false;
+  }
+
+  return base::WriteFile(file_path, decoded_file_data.value());
+}
+
+}  // namespace device_signals::test
diff --git a/components/device_signals/test/win/scoped_executable_files.h b/components/device_signals/test/win/scoped_executable_files.h
new file mode 100644
index 0000000..6a27b76
--- /dev/null
+++ b/components/device_signals/test/win/scoped_executable_files.h
@@ -0,0 +1,58 @@
+// Copyright 2022 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_DEVICE_SIGNALS_TEST_WIN_SCOPED_EXECUTABLE_FILES_H_
+#define COMPONENTS_DEVICE_SIGNALS_TEST_WIN_SCOPED_EXECUTABLE_FILES_H_
+
+#include "base/files/scoped_temp_dir.h"
+#include "base/strings/string_piece_forward.h"
+#include "base/threading/thread_restrictions.h"
+
+namespace base {
+class FilePath;
+}  // namespace base
+
+namespace device_signals::test {
+
+class ScopedExecutableFiles {
+ public:
+  ScopedExecutableFiles();
+  ~ScopedExecutableFiles();
+
+  // Returns an absolute path to the signed.exe file in the test data directory.
+  // Lazily creates the file.
+  base::FilePath GetSignedExePath();
+
+  // Returns an absolute path to the multi-signed.exe file in the test data
+  // directory. Lazily creates the file.
+  base::FilePath GetMultiSignedExePath();
+
+  // Returns an absolute path to the metadata.exe file in the test data
+  // directory. Lazily creates the file.
+  base::FilePath GetMetadataExePath();
+
+  // Returns an absolute path to the empty.exe file in the test data directory.
+  // Lazily creates the file.
+  base::FilePath GetEmptyExePath();
+
+  // Returns the expected product name of the metadata.exe test file.
+  std::string GetMetadataProductName();
+
+  // Returns the expected product version of the metadata.exe test file.
+  std::string GetMetadataProductVersion();
+
+ private:
+  base::FilePath LazilyCreateFile(const base::StringPiece& file_name,
+                                  const base::StringPiece& file_data);
+
+  bool CreateTempFile(const base::FilePath& file_path,
+                      const base::StringPiece& file_data);
+
+  base::ScopedAllowBlockingForTesting allow_blocking_;
+  base::ScopedTempDir scoped_dir_;
+};
+
+}  // namespace device_signals::test
+
+#endif  // COMPONENTS_DEVICE_SIGNALS_TEST_WIN_SCOPED_EXECUTABLE_FILES_H_
diff --git a/components/digital_asset_links/digital_asset_links_handler_unittest.cc b/components/digital_asset_links/digital_asset_links_handler_unittest.cc
index 4248b50..c355338 100644
--- a/components/digital_asset_links/digital_asset_links_handler_unittest.cc
+++ b/components/digital_asset_links/digital_asset_links_handler_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "content/public/test/browser_task_environment.h"
 #include "net/base/net_errors.h"
diff --git a/components/discardable_memory/client/client_discardable_shared_memory_manager_unittest.cc b/components/discardable_memory/client/client_discardable_shared_memory_manager_unittest.cc
index 756b7f915..d0af534 100644
--- a/components/discardable_memory/client/client_discardable_shared_memory_manager_unittest.cc
+++ b/components/discardable_memory/client/client_discardable_shared_memory_manager_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/memory/discardable_shared_memory.h"
 #include "base/memory/page_size.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/components/discardable_memory/service/discardable_shared_memory_manager.h b/components/discardable_memory/service/discardable_shared_memory_manager.h
index 09ea873..6441ce6 100644
--- a/components/discardable_memory/service/discardable_shared_memory_manager.h
+++ b/components/discardable_memory/service/discardable_shared_memory_manager.h
@@ -25,7 +25,6 @@
 #include "base/task/current_thread.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "components/discardable_memory/common/discardable_memory_export.h"
 #include "components/discardable_memory/public/mojom/discardable_shared_memory_manager.mojom.h"
diff --git a/components/dom_distiller/content/browser/distillable_page_utils_android.cc b/components/dom_distiller/content/browser/distillable_page_utils_android.cc
index 6032bf19..3bf29f76 100644
--- a/components/dom_distiller/content/browser/distillable_page_utils_android.cc
+++ b/components/dom_distiller/content/browser/distillable_page_utils_android.cc
@@ -5,7 +5,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/dom_distiller/content/browser/android/jni_headers/DistillablePageUtils_jni.h"
 #include "components/dom_distiller/content/browser/distillable_page_utils.h"
 #include "content/public/browser/web_contents.h"
diff --git a/components/domain_reliability/uploader_unittest.cc b/components/domain_reliability/uploader_unittest.cc
index d6c080e3..5b93d8a5 100644
--- a/components/domain_reliability/uploader_unittest.cc
+++ b/components/domain_reliability/uploader_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/domain_reliability/test_util.h"
 #include "net/base/isolation_info.h"
 #include "net/base/load_flags.h"
diff --git a/components/download/content/factory/download_service_factory_helper.cc b/components/download/content/factory/download_service_factory_helper.cc
index 660295c..f856fff 100644
--- a/components/download/content/factory/download_service_factory_helper.cc
+++ b/components/download/content/factory/download_service_factory_helper.cc
@@ -7,6 +7,8 @@
 #include <utility>
 
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/download/content/factory/navigation_monitor_factory.h"
 #include "components/download/content/internal/download_driver_impl.h"
diff --git a/components/download/internal/background_service/file_monitor_impl.cc b/components/download/internal/background_service/file_monitor_impl.cc
index 3b2aa3d6..ec9cf600b 100644
--- a/components/download/internal/background_service/file_monitor_impl.cc
+++ b/components/download/internal/background_service/file_monitor_impl.cc
@@ -9,6 +9,7 @@
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "base/stl_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
 
 namespace download {
diff --git a/components/download/internal/background_service/in_memory_download.cc b/components/download/internal/background_service/in_memory_download.cc
index 7896cca..a65dd02 100644
--- a/components/download/internal/background_service/in_memory_download.cc
+++ b/components/download/internal/background_service/in_memory_download.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/download/internal/background_service/blob_task_proxy.h"
 #include "net/base/load_flags.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
diff --git a/components/download/internal/background_service/in_memory_download_driver.cc b/components/download/internal/background_service/in_memory_download_driver.cc
index b948c8e..3c854b8 100644
--- a/components/download/internal/background_service/in_memory_download_driver.cc
+++ b/components/download/internal/background_service/in_memory_download_driver.cc
@@ -4,6 +4,7 @@
 
 #include "components/download/internal/background_service/in_memory_download_driver.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "components/download/internal/background_service/in_memory_download.h"
 #include "services/network/public/cpp/resource_request_body.h"
 
diff --git a/components/download/internal/background_service/ios/background_download_task_helper.mm b/components/download/internal/background_service/ios/background_download_task_helper.mm
index 30eaa98..b1a3da24 100644
--- a/components/download/internal/background_service/ios/background_download_task_helper.mm
+++ b/components/download/internal/background_service/ios/background_download_task_helper.mm
@@ -19,6 +19,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/download/public/background_service/background_download_service.h"
diff --git a/components/download/internal/background_service/test/test_device_status_listener.cc b/components/download/internal/background_service/test/test_device_status_listener.cc
index 400518a8..a86839d 100644
--- a/components/download/internal/background_service/test/test_device_status_listener.cc
+++ b/components/download/internal/background_service/test/test_device_status_listener.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/download/internal/background_service/scheduler/battery_status_listener_impl.h"
 #include "components/download/network/network_status_listener_impl.h"
 #include "services/network/test/test_network_connection_tracker.h"
diff --git a/components/download/internal/common/download_db_cache.cc b/components/download/internal/common/download_db_cache.cc
index f7471685..6c040ba 100644
--- a/components/download/internal/common/download_db_cache.cc
+++ b/components/download/internal/common/download_db_cache.cc
@@ -5,6 +5,7 @@
 #include "components/download/internal/common/download_db_cache.h"
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/download/database/download_db.h"
 #include "components/download/database/download_db_conversions.h"
 #include "components/download/database/download_db_entry.h"
diff --git a/components/download/internal/common/download_db_cache.h b/components/download/internal/common/download_db_cache.h
index 8b83cc96..5fbf778 100644
--- a/components/download/internal/common/download_db_cache.h
+++ b/components/download/internal/common/download_db_cache.h
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "components/download/public/common/download_export.h"
 #include "components/download/public/common/download_item.h"
diff --git a/components/download/internal/common/download_item_impl_unittest.cc b/components/download/internal/common/download_item_impl_unittest.cc
index 533f9df..d1c3058 100644
--- a/components/download/internal/common/download_item_impl_unittest.cc
+++ b/components/download/internal/common/download_item_impl_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/files/file_util.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_move_support.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/components/download/internal/common/download_task_runner.cc b/components/download/internal/common/download_task_runner.cc
index 9b4e821b..20a43c9 100644
--- a/components/download/internal/common/download_task_runner.cc
+++ b/components/download/internal/common/download_task_runner.cc
@@ -8,6 +8,7 @@
 #include "base/no_destructor.h"
 #include "base/synchronization/lock.h"
 #include "base/task/lazy_thread_pool_task_runner.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
diff --git a/components/download/internal/common/resource_downloader.h b/components/download/internal/common/resource_downloader.h
index 951ddc3..a7ef6e2a 100644
--- a/components/download/internal/common/resource_downloader.h
+++ b/components/download/internal/common/resource_downloader.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_DOWNLOAD_INTERNAL_COMMON_RESOURCE_DOWNLOADER_H_
 
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/download/public/common/download_export.h"
 #include "components/download/public/common/download_response_handler.h"
 #include "components/download/public/common/download_utils.h"
diff --git a/components/download/internal/common/url_download_request_handle.cc b/components/download/internal/common/url_download_request_handle.cc
index 899ee6b..1e43b6f 100644
--- a/components/download/internal/common/url_download_request_handle.cc
+++ b/components/download/internal/common/url_download_request_handle.cc
@@ -4,6 +4,7 @@
 
 #include "components/download/public/common/url_download_request_handle.h"
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace download {
 
diff --git a/components/download/public/common/download_file_impl.h b/components/download/public/common/download_file_impl.h
index 05c8ef2..f7222158 100644
--- a/components/download/public/common/download_file_impl.h
+++ b/components/download/public/common/download_file_impl.h
@@ -20,6 +20,8 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/components/download/public/common/url_download_handler_factory.h b/components/download/public/common/url_download_handler_factory.h
index 9ef260a..c94b1ca 100644
--- a/components/download/public/common/url_download_handler_factory.h
+++ b/components/download/public/common/url_download_handler_factory.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_URL_DOWNLOAD_HANDLER_FACTORY_H_
 
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/download/public/common/download_utils.h"
 #include "components/download/public/common/url_download_handler.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/components/download/public/common/url_download_request_handle.h b/components/download/public/common/url_download_request_handle.h
index 9c37007..708a7d9 100644
--- a/components/download/public/common/url_download_request_handle.h
+++ b/components/download/public/common/url_download_request_handle.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_URL_DOWNLOAD_REQUEST_HANDLE_H_
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/download/public/common/download_export.h"
 #include "components/download/public/common/url_download_handler.h"
 
diff --git a/components/drive/service/drive_api_service.cc b/components/drive/service/drive_api_service.cc
index 7738e44..6b91cc5 100644
--- a/components/drive/service/drive_api_service.cc
+++ b/components/drive/service/drive_api_service.cc
@@ -14,6 +14,7 @@
 #include "base/bind.h"
 #include "base/observer_list.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/drive/drive_api_util.h"
 #include "google_apis/common/auth_service.h"
 #include "google_apis/common/request_sender.h"
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client.cc b/components/embedder_support/android/metrics/android_metrics_service_client.cc
index e389ce9a0..8d5bb3e 100644
--- a/components/embedder_support/android/metrics/android_metrics_service_client.cc
+++ b/components/embedder_support/android/metrics/android_metrics_service_client.cc
@@ -19,6 +19,7 @@
 #include "base/metrics/statistics_recorder.h"
 #include "base/path_service.h"
 #include "base/process/process_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/components/enterprise/browser/controller/browser_dm_token_storage.cc b/components/enterprise/browser/controller/browser_dm_token_storage.cc
index e070493..e62a5ba 100644
--- a/components/enterprise/browser/controller/browser_dm_token_storage.cc
+++ b/components/enterprise/browser/controller/browser_dm_token_storage.cc
@@ -20,8 +20,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/syslog_logging.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h"
 
diff --git a/components/enterprise/browser/controller/browser_dm_token_storage_unittest.cc b/components/enterprise/browser/controller/browser_dm_token_storage_unittest.cc
index 06c8b689..55a3ac83 100644
--- a/components/enterprise/browser/controller/browser_dm_token_storage_unittest.cc
+++ b/components/enterprise/browser/controller/browser_dm_token_storage_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/enterprise/browser/controller/fake_browser_dm_token_storage.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h b/components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h
index 251b0ffb..d3f5b32 100644
--- a/components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h
+++ b/components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h
@@ -13,6 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/enterprise/browser/device_trust/device_trust_key_manager.h"
diff --git a/components/exo/data_device.cc b/components/exo/data_device.cc
index 6e62bdd9..a2248cb 100644
--- a/components/exo/data_device.cc
+++ b/components/exo/data_device.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ui/base/window_properties.h"
 #include "components/exo/data_device_delegate.h"
 #include "components/exo/data_exchange_delegate.h"
diff --git a/components/exo/data_device_unittest.cc b/components/exo/data_device_unittest.cc
index 842e7b0c..d07bb8c 100644
--- a/components/exo/data_device_unittest.cc
+++ b/components/exo/data_device_unittest.cc
@@ -11,6 +11,7 @@
 
 #include "ash/shell.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "chromeos/ui/base/window_properties.h"
 #include "components/exo/data_device_delegate.h"
diff --git a/components/exo/extended_drag_source_unittest.cc b/components/exo/extended_drag_source_unittest.cc
index 362a4e3..986196a 100644
--- a/components/exo/extended_drag_source_unittest.cc
+++ b/components/exo/extended_drag_source_unittest.cc
@@ -16,6 +16,7 @@
 #include "ash/wm/toplevel_window_event_handler.h"
 #include "ash/wm/window_state.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "chromeos/ui/base/window_properties.h"
diff --git a/components/exo/seat.cc b/components/exo/seat.cc
index 5e2175b..e16934ecd5 100644
--- a/components/exo/seat.cc
+++ b/components/exo/seat.cc
@@ -15,6 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/pickle.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/exo/data_exchange_delegate.h"
 #include "components/exo/data_source.h"
 #include "components/exo/drag_drop_operation.h"
diff --git a/components/exo/wayland/clients/test/run_all_client_tests.cc b/components/exo/wayland/clients/test/run_all_client_tests.cc
index f0fc25c..3b526144 100644
--- a/components/exo/wayland/clients/test/run_all_client_tests.cc
+++ b/components/exo/wayland/clients/test/run_all_client_tests.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/exo/wayland/clients/test/wayland_client_test.h"
 #include "components/exo/wayland/clients/test/wayland_client_test_server.h"
 
diff --git a/components/exo/wayland/clients/test/wayland_client_test.cc b/components/exo/wayland/clients/test/wayland_client_test.cc
index 5c60853..3aec2ab 100644
--- a/components/exo/wayland/clients/test/wayland_client_test.cc
+++ b/components/exo/wayland/clients/test/wayland_client_test.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/exo/wayland/clients/test/wayland_client_test.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace exo {
 
diff --git a/components/exo/wayland/clients/test/wayland_client_test.h b/components/exo/wayland/clients/test/wayland_client_test.h
index 8d6c70c..266237e9 100644
--- a/components/exo/wayland/clients/test/wayland_client_test.h
+++ b/components/exo/wayland/clients/test/wayland_client_test.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_EXO_WAYLAND_CLIENTS_TEST_WAYLAND_CLIENT_TEST_H_
 #define COMPONENTS_EXO_WAYLAND_CLIENTS_TEST_WAYLAND_CLIENT_TEST_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "components/exo/wayland/clients/test/wayland_client_test_helper.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/exo/wayland/clients/test/wayland_client_test_helper.cc b/components/exo/wayland/clients/test/wayland_client_test_helper.cc
index 171a30e..4d7be0c 100644
--- a/components/exo/wayland/clients/test/wayland_client_test_helper.cc
+++ b/components/exo/wayland/clients/test/wayland_client_test_helper.cc
@@ -16,6 +16,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/exo/data_exchange_delegate.h"
 #include "components/exo/display.h"
 #include "components/exo/input_method_surface_manager.h"
diff --git a/components/exo/wayland/clients/test/wayland_client_test_server.h b/components/exo/wayland/clients/test/wayland_client_test_server.h
index d8a729b6..c46ec07 100644
--- a/components/exo/wayland/clients/test/wayland_client_test_server.h
+++ b/components/exo/wayland/clients/test/wayland_client_test_server.h
@@ -6,9 +6,9 @@
 #define COMPONENTS_EXO_WAYLAND_CLIENTS_TEST_WAYLAND_CLIENT_TEST_SERVER_H_
 
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/ash/components/test/ash_test_suite.h"
 
 namespace exo {
diff --git a/components/exo/wayland/compatibility_test/client_compatibility_test_server.cc b/components/exo/wayland/compatibility_test/client_compatibility_test_server.cc
index ecc5bba8..cfd055a5 100644
--- a/components/exo/wayland/compatibility_test/client_compatibility_test_server.cc
+++ b/components/exo/wayland/compatibility_test/client_compatibility_test_server.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/exo/wayland/clients/test/wayland_client_test_server.h"
 #include "components/exo/wayland/compatibility_test/client_compatibility_test.h"
 
diff --git a/components/exo/wayland/wayland_display_output.cc b/components/exo/wayland/wayland_display_output.cc
index 5300ac7..7a16386 100644
--- a/components/exo/wayland/wayland_display_output.cc
+++ b/components/exo/wayland/wayland_display_output.cc
@@ -11,6 +11,7 @@
 
 #include "base/containers/cxx20_erase.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/exo/surface.h"
 #include "components/exo/wayland/server_util.h"
diff --git a/components/exo/wayland/zcr_remote_shell_impl.cc b/components/exo/wayland/zcr_remote_shell_impl.cc
index a745919..db1693e 100644
--- a/components/exo/wayland/zcr_remote_shell_impl.cc
+++ b/components/exo/wayland/zcr_remote_shell_impl.cc
@@ -9,6 +9,7 @@
 #include "ash/shell.h"
 #include "ash/wm/window_resizer.h"
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/ui/base/window_pin_type.h"
 #include "components/exo/display.h"
 #include "components/exo/wayland/server_util.h"
diff --git a/components/exo/wayland/zwp_idle_inhibit_manager.cc b/components/exo/wayland/zwp_idle_inhibit_manager.cc
index 2152ee6..045bcf57 100644
--- a/components/exo/wayland/zwp_idle_inhibit_manager.cc
+++ b/components/exo/wayland/zwp_idle_inhibit_manager.cc
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/exo/wayland/server_util.h"
diff --git a/components/favicon/content/content_favicon_driver_unittest.cc b/components/favicon/content/content_favicon_driver_unittest.cc
index 1809c72d..4eab6b3 100644
--- a/components/favicon/content/content_favicon_driver_unittest.cc
+++ b/components/favicon/content/content_favicon_driver_unittest.cc
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "components/favicon/core/favicon_client.h"
diff --git a/components/favicon/core/favicon_handler_unittest.cc b/components/favicon/core/favicon_handler_unittest.cc
index 8a5619ee..7a9b5a19 100644
--- a/components/favicon/core/favicon_handler_unittest.cc
+++ b/components/favicon/core/favicon_handler_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
 #include "components/favicon/core/favicon_driver.h"
diff --git a/components/favicon/core/favicon_service_impl.cc b/components/favicon/core/favicon_service_impl.cc
index 9d1ed10..e02db86 100644
--- a/components/favicon/core/favicon_service_impl.cc
+++ b/components/favicon/core/favicon_service_impl.cc
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/hash/hash.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "components/favicon/core/favicon_client.h"
 #include "components/favicon_base/favicon_util.h"
diff --git a/components/favicon/core/large_icon_worker.cc b/components/favicon/core/large_icon_worker.cc
index 2e43c65..47d5e1c 100644
--- a/components/favicon/core/large_icon_worker.cc
+++ b/components/favicon/core/large_icon_worker.cc
@@ -12,7 +12,6 @@
 #include "base/no_destructor.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/favicon/core/large_favicon_provider.h"
 #include "components/favicon_base/fallback_icon_style.h"
 #include "skia/ext/image_operations.h"
diff --git a/components/favicon/core/test/mock_favicon_service.h b/components/favicon/core/test/mock_favicon_service.h
index bd45c94a..4d324ab9 100644
--- a/components/favicon/core/test/mock_favicon_service.h
+++ b/components/favicon/core/test/mock_favicon_service.h
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/containers/flat_set.h"
 #include "base/task/cancelable_task_tracker.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/favicon/core/favicon_service.h"
 #include "components/favicon_base/favicon_callback.h"
 #include "components/favicon_base/favicon_usage_data.h"
diff --git a/components/feature_engagement/internal/event_model_impl.cc b/components/feature_engagement/internal/event_model_impl.cc
index 4619563..57c7794 100644
--- a/components/feature_engagement/internal/event_model_impl.cc
+++ b/components/feature_engagement/internal/event_model_impl.cc
@@ -14,7 +14,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/feature_engagement/internal/event_model.h"
 #include "components/feature_engagement/internal/event_storage_validator.h"
 #include "components/feature_engagement/internal/event_store.h"
diff --git a/components/feature_engagement/internal/tracker_impl.cc b/components/feature_engagement/internal/tracker_impl.cc
index 774caf1..4b6a68732 100644
--- a/components/feature_engagement/internal/tracker_impl.cc
+++ b/components/feature_engagement/internal/tracker_impl.cc
@@ -16,6 +16,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/user_metrics.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/feature_engagement/internal/availability_model_impl.h"
diff --git a/components/feature_engagement/test/test_tracker.cc b/components/feature_engagement/test/test_tracker.cc
index de1c885..8874373 100644
--- a/components/feature_engagement/test/test_tracker.cc
+++ b/components/feature_engagement/test/test_tracker.cc
@@ -6,7 +6,6 @@
 
 #include <utility>
 
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/feature_engagement/internal/chrome_variations_configuration.h"
 #include "components/feature_engagement/internal/event_model_impl.h"
 #include "components/feature_engagement/internal/feature_config_condition_validator.h"
diff --git a/components/feed/core/v2/public/feed_service.cc b/components/feed/core/v2/public/feed_service.cc
index 10857e0a..f0fee37c 100644
--- a/components/feed/core/v2/public/feed_service.cc
+++ b/components/feed/core/v2/public/feed_service.cc
@@ -13,6 +13,7 @@
 #include "base/rand_util.h"
 #include "base/scoped_observation.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/feed/core/common/pref_names.h"
 #include "components/feed/core/shared_prefs/pref_names.h"
diff --git a/components/feed/core/v2/user_actions_collector.cc b/components/feed/core/v2/user_actions_collector.cc
index 10d0acf..3da837f 100644
--- a/components/feed/core/v2/user_actions_collector.cc
+++ b/components/feed/core/v2/user_actions_collector.cc
@@ -12,7 +12,6 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_clock.h"
 #include "base/time/time.h"
 #include "components/feed/core/common/pref_names.h"
diff --git a/components/feedback/feedback_uploader.cc b/components/feedback/feedback_uploader.cc
index a8d8291..4663d5b 100644
--- a/components/feedback/feedback_uploader.cc
+++ b/components/feedback/feedback_uploader.cc
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/command_line.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "components/feedback/features.h"
diff --git a/components/feedback/redaction_tool.cc b/components/feedback/redaction_tool.cc
index 19a10a6c..f2c9eaf 100644
--- a/components/feedback/redaction_tool.cc
+++ b/components/feedback/redaction_tool.cc
@@ -13,6 +13,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/chromeos_buildflags.h"
 #include "components/feedback/pii_types.h"
diff --git a/components/fuchsia_component_support/dynamic_component_host.cc b/components/fuchsia_component_support/dynamic_component_host.cc
index 307c27f..e8c29823 100644
--- a/components/fuchsia_component_support/dynamic_component_host.cc
+++ b/components/fuchsia_component_support/dynamic_component_host.cc
@@ -129,6 +129,14 @@
 DynamicComponentHost::~DynamicComponentHost() {
   Destroy();
 
+  // If a capabilities directory was created for this component then it must
+  // be torn-down to ensure that it cannot continue to be used after the
+  // component is supposed to have been destroyed.
+  zx_status_t status =
+      DynamicComponentCapabilitiesDir()->RemoveEntry(child_id_);
+  ZX_CHECK(status == ZX_OK || status == ZX_ERR_NOT_FOUND, status)
+      << "RemoveEntry()";
+
   DVLOG(1) << "Deleted DynamicComponentHost " << child_id_;
 
   // Don't invoke |on_teardown| here, since we're already being deleted.
diff --git a/components/fuchsia_component_support/dynamic_component_host_unittest.cc b/components/fuchsia_component_support/dynamic_component_host_unittest.cc
index 99d5560..2edf80f 100644
--- a/components/fuchsia_component_support/dynamic_component_host_unittest.cc
+++ b/components/fuchsia_component_support/dynamic_component_host_unittest.cc
@@ -5,6 +5,7 @@
 #include "components/fuchsia_component_support/dynamic_component_host.h"
 
 #include <fuchsia/component/cpp/fidl_test_base.h>
+#include <lib/sys/cpp/component_context.h>
 #include <lib/sys/cpp/service_directory.h>
 #include <lib/vfs/cpp/pseudo_dir.h>
 #include <lib/vfs/cpp/service.h>
@@ -12,6 +13,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/fuchsia/process_context.h"
 #include "base/fuchsia/scoped_service_binding.h"
 #include "base/fuchsia/test_component_context_for_process.h"
 #include "base/test/bind.h"
@@ -39,6 +41,64 @@
   return arg.name == name && arg.collection == collection;
 }
 
+// Verifies that `create_child_args` includes a dynamic offer for "/svc", and
+// returns a channel connected to it, if so.
+fidl::InterfaceHandle<fuchsia::io::Directory> GetSvcFromChildArgs(
+    fuchsia::component::CreateChildArgs& create_child_args) {
+  if (!create_child_args.has_dynamic_offers()) {
+    return nullptr;
+  }
+
+  for (auto& offer : create_child_args.dynamic_offers()) {
+    if (!offer.is_directory()) {
+      continue;
+    }
+
+    const auto& directory_offer = offer.directory();
+    if (!directory_offer.has_source_name() ||
+        !directory_offer.has_target_name()) {
+      return nullptr;
+    }
+    if (directory_offer.target_name() != "svc") {
+      continue;
+    }
+
+    // Connect to the outgoing directory root, to use to look up the service
+    // capability.
+    fidl::InterfacePtr<fuchsia::io::Directory> root_dir;
+    base::ComponentContextForProcess()->outgoing()->root_dir()->Serve(
+        fuchsia::io::OpenFlags::RIGHT_READABLE |
+            fuchsia::io::OpenFlags::RIGHT_WRITABLE |
+            fuchsia::io::OpenFlags::DIRECTORY,
+        root_dir.NewRequest().TakeChannel());
+
+    // Determine the capability path, relative to the outgoing directory of
+    // the calling process, and request to open it.
+    // The channel will be closed as soon as the Open() call is processed,
+    // if the path cannot be resolved.
+    base::FilePath path(directory_offer.source_name());
+    if (directory_offer.has_subdir()) {
+      path = path.Append(directory_offer.subdir());
+    }
+    fidl::InterfaceHandle<fuchsia::io::Node> services_handle;
+    root_dir->Open(fuchsia::io::OpenFlags::RIGHT_READABLE |
+                       fuchsia::io::OpenFlags::RIGHT_WRITABLE |
+                       fuchsia::io::OpenFlags::DIRECTORY,
+                   fuchsia::io::MODE_TYPE_DIRECTORY, path.value(),
+                   services_handle.NewRequest());
+    return fidl::InterfaceHandle<fuchsia::io::Directory>(
+        services_handle.TakeChannel());
+  }
+
+  return nullptr;
+}
+
+bool HasPeerClosedHandle(
+    const fidl::InterfaceHandle<fuchsia::io::Directory>& handle) {
+  return handle.channel().wait_one(ZX_CHANNEL_PEER_CLOSED, zx::time(),
+                                   nullptr) != ZX_ERR_TIMED_OUT;
+}
+
 constexpr char kTestCollection[] = "test_collection";
 constexpr char kTestChildId[] = "test-child-id";
 constexpr char kTestComponentUrl[] = "dummy:url";
@@ -208,6 +268,101 @@
   base::RunLoop().RunUntilIdle();
 }
 
+TEST_F(DynamicComponentHostTest, WithoutServiceDirectory) {
+  // Capture the `CreateChildArgs` from the `Realm.CreateChild()` call.
+  fuchsia::component::CreateChildArgs create_child_args;
+  {
+    testing::InSequence s;
+    EXPECT_CALL(realm_, CreateChild(_, _, _, _))
+        .WillOnce([&create_child_args](
+                      fuchsia::component::decl::CollectionRef,
+                      fuchsia::component::decl::Child,
+                      fuchsia::component::CreateChildArgs args,
+                      fuchsia::component::Realm::CreateChildCallback callback) {
+          create_child_args = std::move(args);
+          callback({});
+        });
+    EXPECT_CALL(realm_, OpenExposedDir(_, _, _));
+    EXPECT_CALL(realm_, DestroyChild(_, _));
+  }
+
+  {
+    DynamicComponentHost component(kTestCollection, kTestChildId,
+                                   kTestComponentUrl, base::DoNothing(),
+                                   nullptr);
+
+    // Spin the event loop to process the `CreateChild()` call.
+    base::RunLoop().RunUntilIdle();
+
+    // Verify that no "svc" directory is offered in the `CreateChildArgs`.
+    fidl::InterfaceHandle<fuchsia::io::Directory> svc_handle =
+        GetSvcFromChildArgs(create_child_args);
+    EXPECT_FALSE(svc_handle);
+  }
+
+  // Spin the loop to allow the teardown calls to reach `realm_`.
+  base::RunLoop().RunUntilIdle();
+}
+
+TEST_F(DynamicComponentHostTest, WithServiceDirectory) {
+  // Capture the `CreateChildArgs` from the `Realm.CreateChild()` call.
+  fuchsia::component::CreateChildArgs create_child_args;
+  {
+    testing::InSequence s;
+    EXPECT_CALL(realm_, CreateChild(_, _, _, _))
+        .WillOnce([&create_child_args](
+                      fuchsia::component::decl::CollectionRef,
+                      fuchsia::component::decl::Child,
+                      fuchsia::component::CreateChildArgs args,
+                      fuchsia::component::Realm::CreateChildCallback callback) {
+          create_child_args = std::move(args);
+          callback({});
+        });
+    EXPECT_CALL(realm_, OpenExposedDir(_, _, _));
+    EXPECT_CALL(realm_, DestroyChild(_, _));
+  }
+
+  {
+    // Create a directory handle for the service directory.
+    fidl::InterfaceHandle<fuchsia::io::Directory> handle;
+    vfs::PseudoDir service_directory;
+    service_directory.Serve(fuchsia::io::OpenFlags::RIGHT_READABLE |
+                                fuchsia::io::OpenFlags::RIGHT_WRITABLE,
+                            handle.NewRequest().TakeChannel());
+
+    DynamicComponentHost component(kTestCollection, kTestChildId,
+                                   kTestComponentUrl, base::DoNothing(),
+                                   std::move(handle));
+
+    // Spin the event loop to process the `CreateChild()` call.
+    base::RunLoop().RunUntilIdle();
+
+    // Verify that a "svc" directory was offered in the `CreateChildArgs`.
+    fidl::InterfaceHandle<fuchsia::io::Directory> svc_handle =
+        GetSvcFromChildArgs(create_child_args);
+    EXPECT_TRUE(svc_handle);
+
+    // Spin the event loop to allow the Open() of the directory attempted by
+    // GetSvcFromChildArgs() to be processed, then verify that the `svc_handle`
+    // was not closed by the peer.
+    base::RunLoop().RunUntilIdle();
+    EXPECT_FALSE(HasPeerClosedHandle(svc_handle));
+  }
+
+  // Spin the loop to allow teardown calls to reach `realm_`.
+  base::RunLoop().RunUntilIdle();
+
+  // Verify that the "svc" directory offered in the `CreateChildArgs` is no
+  // longer available after the `DynamicComponentHost` has been destroyed.
+  fidl::InterfaceHandle<fuchsia::io::Directory> svc_handle =
+      GetSvcFromChildArgs(create_child_args);
+  EXPECT_TRUE(svc_handle);
+
+  // Spin the loop to allow the Open() of the "svc" directory to be processed.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(HasPeerClosedHandle(svc_handle));
+}
+
 }  // namespace
 
 }  // namespace fuchsia_component_support
diff --git a/components/fuchsia_legacymetrics/legacymetrics_client.cc b/components/fuchsia_legacymetrics/legacymetrics_client.cc
index bca5e88..99aacd50 100644
--- a/components/fuchsia_legacymetrics/legacymetrics_client.cc
+++ b/components/fuchsia_legacymetrics/legacymetrics_client.cc
@@ -17,7 +17,6 @@
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/fuchsia/process_context.h"
 #include "base/logging.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/fuchsia_legacymetrics/legacymetrics_histogram_flattener.h"
 
diff --git a/components/fullscreen_control/fullscreen_control_popup_unittest.cc b/components/fullscreen_control/fullscreen_control_popup_unittest.cc
index 2d02212..6352acc 100644
--- a/components/fullscreen_control/fullscreen_control_popup_unittest.cc
+++ b/components/fullscreen_control/fullscreen_control_popup_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/fullscreen_control/fullscreen_control_popup.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/gcm_driver/crypto/gcm_encryption_provider.cc b/components/gcm_driver/crypto/gcm_encryption_provider.cc
index 3427447..2d361d50 100644
--- a/components/gcm_driver/crypto/gcm_encryption_provider.cc
+++ b/components/gcm_driver/crypto/gcm_encryption_provider.cc
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/gcm_driver/common/gcm_message.h"
 #include "components/gcm_driver/crypto/encryption_header_parsers.h"
 #include "components/gcm_driver/crypto/gcm_decryption_result.h"
diff --git a/components/gcm_driver/crypto/gcm_key_store_unittest.cc b/components/gcm_driver/crypto/gcm_key_store_unittest.cc
index 4bc5ec8..d66fa2c3 100644
--- a/components/gcm_driver/crypto/gcm_key_store_unittest.cc
+++ b/components/gcm_driver/crypto/gcm_key_store_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/test/gtest_util.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/gcm_driver/crypto/p256_key_util.h"
 #include "components/leveldb_proto/public/proto_database.h"
 #include "crypto/random.h"
diff --git a/components/gcm_driver/gcm_client_impl.h b/components/gcm_driver/gcm_client_impl.h
index cdba746..94f3a12f 100644
--- a/components/gcm_driver/gcm_client_impl.h
+++ b/components/gcm_driver/gcm_client_impl.h
@@ -18,6 +18,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "components/gcm_driver/gcm_client.h"
diff --git a/components/gcm_driver/gcm_client_impl_unittest.cc b/components/gcm_driver/gcm_client_impl_unittest.cc
index 8162a0d..d53a534 100644
--- a/components/gcm_driver/gcm_client_impl_unittest.cc
+++ b/components/gcm_driver/gcm_client_impl_unittest.cc
@@ -16,6 +16,8 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/components/gcm_driver/gcm_driver.cc b/components/gcm_driver/gcm_driver.cc
index 35777b26..59ca958 100644
--- a/components/gcm_driver/gcm_driver.cc
+++ b/components/gcm_driver/gcm_driver.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/gcm_driver/crypto/gcm_decryption_result.h"
 #include "components/gcm_driver/crypto/gcm_encryption_result.h"
 #include "components/gcm_driver/gcm_app_handler.h"
diff --git a/components/gcm_driver/gcm_driver_android.cc b/components/gcm_driver/gcm_driver_android.cc
index 6a8bc10..cbeba5e8 100644
--- a/components/gcm_driver/gcm_driver_android.cc
+++ b/components/gcm_driver/gcm_driver_android.cc
@@ -12,6 +12,7 @@
 #include "base/android/jni_string.h"
 #include "base/compiler_specific.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/gcm_driver/android/jni_headers/GCMDriver_jni.h"
 
diff --git a/components/gcm_driver/gcm_profile_service.cc b/components/gcm_driver/gcm_profile_service.cc
index e78ea7b..082771f 100644
--- a/components/gcm_driver/gcm_profile_service.cc
+++ b/components/gcm_driver/gcm_profile_service.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/gcm_driver/gcm_driver.h"
 #include "components/gcm_driver/gcm_driver_constants.h"
diff --git a/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.cc b/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.cc
index f77f20f0..3d33312 100644
--- a/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.cc
+++ b/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.cc
@@ -10,6 +10,7 @@
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/gcm_driver/gcm_client.h"
 
diff --git a/components/guest_view/browser/test_guest_view_manager.cc b/components/guest_view/browser/test_guest_view_manager.cc
index b1835691..a0fb588 100644
--- a/components/guest_view/browser/test_guest_view_manager.cc
+++ b/components/guest_view/browser/test_guest_view_manager.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "components/guest_view/browser/guest_view_base.h"
 #include "components/guest_view/browser/guest_view_manager_delegate.h"
diff --git a/components/heap_profiling/in_process/heap_profiler_controller.cc b/components/heap_profiling/in_process/heap_profiler_controller.cc
index 6b84f02..6747f98 100644
--- a/components/heap_profiling/in_process/heap_profiler_controller.cc
+++ b/components/heap_profiling/in_process/heap_profiler_controller.cc
@@ -22,7 +22,6 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/heap_profiling/in_process/heap_profiler_parameters.h"
diff --git a/components/heap_profiling/multi_process/test_driver.cc b/components/heap_profiling/multi_process/test_driver.cc
index 80fcbfe..140ee32 100644
--- a/components/heap_profiling/multi_process/test_driver.cc
+++ b/components/heap_profiling/multi_process/test_driver.cc
@@ -16,6 +16,7 @@
 #include "base/process/process_handle.h"
 #include "base/run_loop.h"
 #include "base/sampling_heap_profiler/poisson_allocation_sampler.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/threading/platform_thread.h"
 #include "base/trace_event/heap_profiler.h"
diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h
index dbdb05b..3efc411 100644
--- a/components/history/core/browser/history_backend.h
+++ b/components/history/core/browser/history_backend.h
@@ -24,6 +24,7 @@
 #include "base/memory/memory_pressure_listener.h"
 #include "base/observer_list.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/components/history/core/browser/history_service.cc b/components/history/core/browser/history_service.cc
index 13bbab40..8fd999f 100644
--- a/components/history/core/browser/history_service.cc
+++ b/components/history/core/browser/history_service.cc
@@ -29,6 +29,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/observer_list.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/components/history/core/browser/top_sites_impl.cc b/components/history/core/browser/top_sites_impl.cc
index ed90858..abdd5fe 100644
--- a/components/history/core/browser/top_sites_impl.cc
+++ b/components/history/core/browser/top_sites_impl.cc
@@ -22,6 +22,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/values.h"
diff --git a/components/history/metrics/domain_diversity_reporter.cc b/components/history/metrics/domain_diversity_reporter.cc
index 06e58e7..84c555e 100644
--- a/components/history/metrics/domain_diversity_reporter.cc
+++ b/components/history/metrics/domain_diversity_reporter.cc
@@ -7,7 +7,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
 
diff --git a/components/history_clusters/core/file_clustering_backend.cc b/components/history_clusters/core/file_clustering_backend.cc
index 7ebc0ae..8d4d475a 100644
--- a/components/history_clusters/core/file_clustering_backend.cc
+++ b/components/history_clusters/core/file_clustering_backend.cc
@@ -15,7 +15,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/history_clusters/core/history_clusters_util.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -251,4 +250,4 @@
   std::move(callback).Run(std::move(clusters));
 }
 
-}  // namespace history_clusters
\ No newline at end of file
+}  // namespace history_clusters
diff --git a/components/history_clusters/core/on_device_clustering_backend.cc b/components/history_clusters/core/on_device_clustering_backend.cc
index f0d0b42..b4e1aa4b 100644
--- a/components/history_clusters/core/on_device_clustering_backend.cc
+++ b/components/history_clusters/core/on_device_clustering_backend.cc
@@ -14,7 +14,6 @@
 #include "base/strings/string_util.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/elapsed_timer.h"
 #include "components/history/core/browser/history_types.h"
 #include "components/history_clusters/core/category_cluster_finalizer.h"
diff --git a/components/history_clusters/core/on_device_clustering_backend_unittest.cc b/components/history_clusters/core/on_device_clustering_backend_unittest.cc
index fa4ee6ee..02dcbe1 100644
--- a/components/history_clusters/core/on_device_clustering_backend_unittest.cc
+++ b/components/history_clusters/core/on_device_clustering_backend_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/containers/flat_set.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
@@ -81,6 +82,39 @@
             },
             entity_id, std::move(callback)));
   }
+  void GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids,
+      optimization_guide::BatchEntityMetadataRetrievedCallback callback)
+      override {
+    main_thread_task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](const base::flat_set<std::string>& entity_ids,
+               optimization_guide::BatchEntityMetadataRetrievedCallback
+                   callback) {
+              base::flat_map<std::string, optimization_guide::EntityMetadata>
+                  entity_metadata_map;
+              for (const auto& entity_id : entity_ids) {
+                if (entity_id == "nometadata") {
+                  continue;
+                }
+                optimization_guide::EntityMetadata metadata;
+                metadata.human_readable_name = "rewritten-" + entity_id;
+                // Add it in twice to verify that a category only gets added
+                // once and it takes the max.
+                metadata.human_readable_categories.insert(
+                    {"category-" + entity_id, 0.6});
+                metadata.human_readable_categories.insert(
+                    {"category-" + entity_id, 0.5});
+                metadata.human_readable_categories.insert(
+                    {"toolow-" + entity_id, 0.01});
+                metadata.human_readable_aliases.push_back("alias-" + entity_id);
+                entity_metadata_map[entity_id] = metadata;
+              }
+              std::move(callback).Run(entity_metadata_map);
+            },
+            entity_ids, std::move(callback)));
+  }
 
  private:
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
diff --git a/components/history_clusters/ui/query_clusters_state.cc b/components/history_clusters/ui/query_clusters_state.cc
index a1a86d6b..2c6c3f0 100644
--- a/components/history_clusters/ui/query_clusters_state.cc
+++ b/components/history_clusters/ui/query_clusters_state.cc
@@ -11,6 +11,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/history_clusters/core/config.h"
 #include "components/history_clusters/core/history_clusters_service.h"
diff --git a/components/image_fetcher/core/cache/image_cache.cc b/components/image_fetcher/core/cache/image_cache.cc
index 9a3acfd4..19e817c 100644
--- a/components/image_fetcher/core/cache/image_cache.cc
+++ b/components/image_fetcher/core/cache/image_cache.cc
@@ -10,9 +10,9 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/hash/sha1.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
 #include "components/base32/base32.h"
diff --git a/components/image_fetcher/core/cache/image_data_store_disk.cc b/components/image_fetcher/core/cache/image_data_store_disk.cc
index 1d3c4b9..3c9e5172 100644
--- a/components/image_fetcher/core/cache/image_data_store_disk.cc
+++ b/components/image_fetcher/core/cache/image_data_store_disk.cc
@@ -13,8 +13,7 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 
 using base::File;
diff --git a/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm b/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm
index d07d61e..cd726f09 100644
--- a/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm
+++ b/components/image_fetcher/ios/ios_image_data_fetcher_wrapper_unittest.mm
@@ -12,7 +12,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "net/http/http_response_headers.h"
 #include "net/http/http_status_code.h"
diff --git a/components/invalidation/impl/per_user_topic_subscription_request_unittest.cc b/components/invalidation/impl/per_user_topic_subscription_request_unittest.cc
index 6de69d9..ffe5c1e 100644
--- a/components/invalidation/impl/per_user_topic_subscription_request_unittest.cc
+++ b/components/invalidation/impl/per_user_topic_subscription_request_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
diff --git a/components/invalidation/impl/unacked_invalidation_set.cc b/components/invalidation/impl/unacked_invalidation_set.cc
index ef4a3557..f63a8170 100644
--- a/components/invalidation/impl/unacked_invalidation_set.cc
+++ b/components/invalidation/impl/unacked_invalidation_set.cc
@@ -5,6 +5,7 @@
 #include "components/invalidation/impl/unacked_invalidation_set.h"
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/invalidation/public/ack_handle.h"
 #include "components/invalidation/public/topic_invalidation_map.h"
 
diff --git a/components/invalidation/public/invalidation.cc b/components/invalidation/public/invalidation.cc
index d50ca7ae..9f1346e 100644
--- a/components/invalidation/public/invalidation.cc
+++ b/components/invalidation/public/invalidation.cc
@@ -12,6 +12,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "components/invalidation/public/ack_handler.h"
 #include "components/invalidation/public/invalidation_util.h"
diff --git a/components/keyed_service/core/refcounted_keyed_service.cc b/components/keyed_service/core/refcounted_keyed_service.cc
index 6e34845..cd739dc1 100644
--- a/components/keyed_service/core/refcounted_keyed_service.cc
+++ b/components/keyed_service/core/refcounted_keyed_service.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/keyed_service/core/refcounted_keyed_service.h"
+#include "base/task/sequenced_task_runner.h"
 
 #include <utility>
 
diff --git a/components/leveldb_proto/internal/proto_database_impl.cc b/components/leveldb_proto/internal/proto_database_impl.cc
index 79714c9..78834b3 100644
--- a/components/leveldb_proto/internal/proto_database_impl.cc
+++ b/components/leveldb_proto/internal/proto_database_impl.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/leveldb_proto/public/proto_database_provider.h"
 
 namespace leveldb_proto {
@@ -35,4 +36,4 @@
   callback_task_runner->PostTask(FROM_HERE,
                                  base::BindOnce(std::move(callback), success));
 }
-}  // namespace leveldb_proto
\ No newline at end of file
+}  // namespace leveldb_proto
diff --git a/components/leveldb_proto/internal/proto_database_selector.cc b/components/leveldb_proto/internal/proto_database_selector.cc
index 5c3c1ed..3f3e6b3 100644
--- a/components/leveldb_proto/internal/proto_database_selector.cc
+++ b/components/leveldb_proto/internal/proto_database_selector.cc
@@ -10,6 +10,7 @@
 #include "base/check_op.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/leveldb_proto/internal/migration_delegate.h"
 #include "components/leveldb_proto/internal/shared_proto_database.h"
 #include "components/leveldb_proto/internal/shared_proto_database_provider.h"
diff --git a/components/leveldb_proto/internal/proto_leveldb_wrapper.h b/components/leveldb_proto/internal/proto_leveldb_wrapper.h
index 5dbbd832..03af4e5 100644
--- a/components/leveldb_proto/internal/proto_leveldb_wrapper.h
+++ b/components/leveldb_proto/internal/proto_leveldb_wrapper.h
@@ -17,7 +17,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_checker.h"
 #include "components/leveldb_proto/internal/proto_leveldb_wrapper_metrics.h"
 #include "components/leveldb_proto/public/proto_database.h"
diff --git a/components/leveldb_proto/internal/shared_proto_database.h b/components/leveldb_proto/internal/shared_proto_database.h
index bd34d97..b240556 100644
--- a/components/leveldb_proto/internal/shared_proto_database.h
+++ b/components/leveldb_proto/internal/shared_proto_database.h
@@ -17,6 +17,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/leveldb_proto/internal/proto/shared_db_metadata.pb.h"
 #include "components/leveldb_proto/internal/shared_proto_database_client.h"
diff --git a/components/leveldb_proto/internal/shared_proto_database_provider.h b/components/leveldb_proto/internal/shared_proto_database_provider.h
index a174a11a..bfbbafdc 100644
--- a/components/leveldb_proto/internal/shared_proto_database_provider.h
+++ b/components/leveldb_proto/internal/shared_proto_database_provider.h
@@ -43,4 +43,4 @@
 
 }  // namespace leveldb_proto
 
-#endif  // COMPONENTS_LEVELDB_PROTO_INTERNAL_SHARED_PROTO_DATABASE_PROVIDER_H_
\ No newline at end of file
+#endif  // COMPONENTS_LEVELDB_PROTO_INTERNAL_SHARED_PROTO_DATABASE_PROVIDER_H_
diff --git a/components/leveldb_proto/internal/shared_proto_database_unittest.cc b/components/leveldb_proto/internal/shared_proto_database_unittest.cc
index 37b4ce90..5e1ed0a 100644
--- a/components/leveldb_proto/internal/shared_proto_database_unittest.cc
+++ b/components/leveldb_proto/internal/shared_proto_database_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
diff --git a/components/leveldb_proto/internal/unique_proto_database.h b/components/leveldb_proto/internal/unique_proto_database.h
index 71dec41..58475bd 100644
--- a/components/leveldb_proto/internal/unique_proto_database.h
+++ b/components/leveldb_proto/internal/unique_proto_database.h
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/component_export.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/leveldb_proto/internal/proto_leveldb_wrapper.h"
 #include "components/leveldb_proto/public/proto_database.h"
 
diff --git a/components/media_router/browser/issue_manager_unittest.cc b/components/media_router/browser/issue_manager_unittest.cc
index 88fa00e..03d198d0 100644
--- a/components/media_router/browser/issue_manager_unittest.cc
+++ b/components/media_router/browser/issue_manager_unittest.cc
@@ -5,7 +5,6 @@
 #include <string>
 
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/media_router/browser/issue_manager.h"
 #include "components/media_router/browser/test/test_helper.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/components/media_router/common/providers/cast/channel/cast_socket_unittest.cc b/components/media_router/common/providers/cast/channel/cast_socket_unittest.cc
index caaa82a8..1e72f24 100644
--- a/components/media_router/common/providers/cast/channel/cast_socket_unittest.cc
+++ b/components/media_router/common/providers/cast/channel/cast_socket_unittest.cc
@@ -23,7 +23,6 @@
 #include "base/sys_byteorder.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/mock_timer.h"
 #include "build/build_config.h"
 #include "components/media_router/common/providers/cast/channel/cast_auth_util.h"
diff --git a/components/media_router/common/providers/cast/channel/cast_test_util.cc b/components/media_router/common/providers/cast/channel/cast_test_util.cc
index 802237a8d..d11d450 100644
--- a/components/media_router/common/providers/cast/channel/cast_test_util.cc
+++ b/components/media_router/common/providers/cast/channel/cast_test_util.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/token.h"
 #include "net/base/ip_address.h"
 
diff --git a/components/media_router/common/providers/cast/channel/libcast_socket_service.cc b/components/media_router/common/providers/cast/channel/libcast_socket_service.cc
index 4ad82e75..be7e68d 100644
--- a/components/media_router/common/providers/cast/channel/libcast_socket_service.cc
+++ b/components/media_router/common/providers/cast/channel/libcast_socket_service.cc
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/observer_list.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/media_router/common/providers/cast/channel/cast_message_util.h"
 #include "components/media_router/common/providers/cast/channel/cast_socket.h"
 #include "components/media_router/common/providers/cast/channel/cast_transport.h"
diff --git a/components/memory_pressure/system_memory_pressure_evaluator_linux.cc b/components/memory_pressure/system_memory_pressure_evaluator_linux.cc
index f696559..6aa0bdb5 100644
--- a/components/memory_pressure/system_memory_pressure_evaluator_linux.cc
+++ b/components/memory_pressure/system_memory_pressure_evaluator_linux.cc
@@ -9,7 +9,6 @@
 #include "base/process/process_metrics.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/memory_pressure/multi_source_memory_pressure_monitor.h"
 
diff --git a/components/metrics/net/network_metrics_provider.cc b/components/metrics/net/network_metrics_provider.cc
index 78c3840..d8d8c286 100644
--- a/components/metrics/net/network_metrics_provider.cc
+++ b/components/metrics/net/network_metrics_provider.cc
@@ -19,7 +19,6 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "net/base/net_errors.h"
 #include "net/nqe/effective_connection_type_observer.h"
diff --git a/components/metrics/net/network_metrics_provider_unittest.cc b/components/metrics/net/network_metrics_provider_unittest.cc
index 8d9c92c..1ccd876 100644
--- a/components/metrics/net/network_metrics_provider_unittest.cc
+++ b/components/metrics/net/network_metrics_provider_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/callback.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "services/network/test/test_network_connection_tracker.h"
diff --git a/components/metrics/structured/external_metrics.h b/components/metrics/structured/external_metrics.h
index 65c9ff9..e50e7147 100644
--- a/components/metrics/structured/external_metrics.h
+++ b/components/metrics/structured/external_metrics.h
@@ -9,6 +9,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 
 namespace metrics {
diff --git a/components/metrics/structured/recorder.cc b/components/metrics/structured/recorder.cc
index 665a6c7..24473ef 100644
--- a/components/metrics/structured/recorder.cc
+++ b/components/metrics/structured/recorder.cc
@@ -8,6 +8,7 @@
 
 #include "base/no_destructor.h"
 #include "base/task/current_thread.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/metrics/structured/histogram_util.h"
 #include "components/metrics/structured/structured_metrics_features.h"
 #include "components/metrics/structured/structured_metrics_validator.h"
diff --git a/components/mirroring/service/mirroring_service.cc b/components/mirroring/service/mirroring_service.cc
index c73bc4bf..2928cc18 100644
--- a/components/mirroring/service/mirroring_service.cc
+++ b/components/mirroring/service/mirroring_service.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/debug/stack_trace.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/mirroring/service/mirroring_features.h"
 #include "components/mirroring/service/openscreen_session_host.h"
 #include "components/mirroring/service/session.h"
diff --git a/components/mirroring/service/mirroring_service.h b/components/mirroring/service/mirroring_service.h
index cc509e36..c784ac37 100644
--- a/components/mirroring/service/mirroring_service.h
+++ b/components/mirroring/service/mirroring_service.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_MIRRORING_SERVICE_MIRRORING_SERVICE_H_
 
 #include "base/component_export.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/mirroring/mojom/mirroring_service.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/components/nacl/browser/nacl_browser.h b/components/nacl/browser/nacl_browser.h
index 806a679e..634638b4 100644
--- a/components/nacl/browser/nacl_browser.h
+++ b/components/nacl/browser/nacl_browser.h
@@ -13,6 +13,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/containers/lru_cache.h"
 #include "base/files/file.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/components/nacl/common/nacl_debug_exception_handler_win.cc b/components/nacl/common/nacl_debug_exception_handler_win.cc
index bbf4c6b..331289e 100644
--- a/components/nacl/common/nacl_debug_exception_handler_win.cc
+++ b/components/nacl/common/nacl_debug_exception_handler_win.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/platform_thread.h"
 #include "base/win/scoped_handle.h"
 #include "native_client/src/public/win/debug_exception_handler.h"
diff --git a/components/nacl/common/nacl_service.cc b/components/nacl/common/nacl_service.cc
index 9b9bb939..fd5b736ec 100644
--- a/components/nacl/common/nacl_service.cc
+++ b/components/nacl/common/nacl_service.cc
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/core/embedder/scoped_ipc_support.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
diff --git a/components/nacl/loader/nacl_ipc_adapter.cc b/components/nacl/loader/nacl_ipc_adapter.cc
index 85ee1a6..2863a10d 100644
--- a/components/nacl/loader/nacl_ipc_adapter.cc
+++ b/components/nacl/loader/nacl_ipc_adapter.cc
@@ -16,6 +16,7 @@
 #include "base/location.h"
 #include "base/memory/platform_shared_memory_region.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/tuple.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel.h"
diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc
index a9c23c7..314079d 100644
--- a/components/nacl/loader/nacl_listener.cc
+++ b/components/nacl/loader/nacl_listener.cc
@@ -14,6 +14,7 @@
 
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_POSIX)
diff --git a/components/named_mojo_ipc_server/named_mojo_ipc_server.cc b/components/named_mojo_ipc_server/named_mojo_ipc_server.cc
index c33ceb2..1158a038 100644
--- a/components/named_mojo_ipc_server/named_mojo_ipc_server.cc
+++ b/components/named_mojo_ipc_server/named_mojo_ipc_server.cc
@@ -18,6 +18,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/notreached.h"
 #include "base/process/process.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/sequence_bound.h"
 #include "base/time/time.h"
diff --git a/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector.cc b/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector.cc
index 2806355a..d6776b7 100644
--- a/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector.cc
+++ b/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector.cc
@@ -4,6 +4,7 @@
 
 #include "components/named_mojo_ipc_server/named_mojo_server_endpoint_connector.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/named_mojo_ipc_server/endpoint_options.h"
 
 namespace named_mojo_ipc_server {
diff --git a/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_linux.cc b/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_linux.cc
index 58edf4f..26d26df3 100644
--- a/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_linux.cc
+++ b/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_linux.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/threading/sequence_bound.h"
 #include "components/named_mojo_ipc_server/connection_info.h"
diff --git a/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_mac.cc b/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_mac.cc
index 58903b8..95a9102 100644
--- a/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_mac.cc
+++ b/components/named_mojo_ipc_server/named_mojo_server_endpoint_connector_mac.cc
@@ -18,7 +18,6 @@
 #include "base/sequence_checker.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/named_mojo_ipc_server/connection_info.h"
 #include "components/named_mojo_ipc_server/endpoint_options.h"
 #include "components/named_mojo_ipc_server/named_mojo_server_endpoint_connector.h"
diff --git a/components/ntp_snippets/remote/json_request_unittest.cc b/components/ntp_snippets/remote/json_request_unittest.cc
index 9482a30..fa36174 100644
--- a/components/ntp_snippets/remote/json_request_unittest.cc
+++ b/components/ntp_snippets/remote/json_request_unittest.cc
@@ -9,9 +9,9 @@
 
 #include "base/json/json_reader.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/components/ntp_snippets/remote/remote_suggestions_database.cc b/components/ntp_snippets/remote/remote_suggestions_database.cc
index 73e7b0cb..24de45bc 100644
--- a/components/ntp_snippets/remote/remote_suggestions_database.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_database.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/leveldb_proto/public/proto_database_provider.h"
 #include "components/ntp_snippets/remote/proto/ntp_snippets.pb.h"
diff --git a/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
index da555b49..24e493e 100644
--- a/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_clock.h"
diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
index 6645e10..5ec7af5 100644
--- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_clock.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "base/time/default_clock.h"
 #include "base/time/time.h"
diff --git a/components/ntp_tiles/most_visited_sites_unittest.cc b/components/ntp_tiles/most_visited_sites_unittest.cc
index 03622ae..2adbd349 100644
--- a/components/ntp_tiles/most_visited_sites_unittest.cc
+++ b/components/ntp_tiles/most_visited_sites_unittest.cc
@@ -25,7 +25,6 @@
 #include "base/test/gmock_callback_support.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/history/core/browser/top_sites.h"
 #include "components/history/core/browser/top_sites_observer.h"
diff --git a/components/ntp_tiles/popular_sites_impl_unittest.cc b/components/ntp_tiles/popular_sites_impl_unittest.cc
index e6570332..c4416c4 100644
--- a/components/ntp_tiles/popular_sites_impl_unittest.cc
+++ b/components/ntp_tiles/popular_sites_impl_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
diff --git a/components/offline_pages/core/background/change_requests_state_task_unittest.cc b/components/offline_pages/core/background/change_requests_state_task_unittest.cc
index abef547..1c99125 100644
--- a/components/offline_pages/core/background/change_requests_state_task_unittest.cc
+++ b/components/offline_pages/core/background/change_requests_state_task_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/request_queue_store.h"
 #include "components/offline_pages/core/background/request_queue_task_test_base.h"
 #include "components/offline_pages/core/background/test_request_queue_store.h"
diff --git a/components/offline_pages/core/background/cleanup_task_unittest.cc b/components/offline_pages/core/background/cleanup_task_unittest.cc
index 0f078b2..82488a7 100644
--- a/components/offline_pages/core/background/cleanup_task_unittest.cc
+++ b/components/offline_pages/core/background/cleanup_task_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/offliner_policy.h"
 #include "components/offline_pages/core/background/request_coordinator.h"
 #include "components/offline_pages/core/background/request_coordinator_event_logger.h"
diff --git a/components/offline_pages/core/background/get_requests_task_unittest.cc b/components/offline_pages/core/background/get_requests_task_unittest.cc
index fcfa167..ca190e2 100644
--- a/components/offline_pages/core/background/get_requests_task_unittest.cc
+++ b/components/offline_pages/core/background/get_requests_task_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/request_queue_store.h"
 #include "components/offline_pages/core/background/request_queue_task_test_base.h"
 #include "components/offline_pages/core/background/test_request_queue_store.h"
diff --git a/components/offline_pages/core/background/initialize_store_task_unittest.cc b/components/offline_pages/core/background/initialize_store_task_unittest.cc
index 7c9f1d7..7540e6a 100644
--- a/components/offline_pages/core/background/initialize_store_task_unittest.cc
+++ b/components/offline_pages/core/background/initialize_store_task_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/request_queue_store.h"
 #include "components/offline_pages/core/background/request_queue_task_test_base.h"
 #include "components/offline_pages/core/background/test_request_queue_store.h"
diff --git a/components/offline_pages/core/background/mark_attempt_aborted_task_unittest.cc b/components/offline_pages/core/background/mark_attempt_aborted_task_unittest.cc
index 4ca7ed7..d7eee4f 100644
--- a/components/offline_pages/core/background/mark_attempt_aborted_task_unittest.cc
+++ b/components/offline_pages/core/background/mark_attempt_aborted_task_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/change_requests_state_task.h"
 #include "components/offline_pages/core/background/mark_attempt_started_task.h"
 #include "components/offline_pages/core/background/request_queue_store.h"
diff --git a/components/offline_pages/core/background/mark_attempt_started_task_unittest.cc b/components/offline_pages/core/background/mark_attempt_started_task_unittest.cc
index ea3f60b9e..01bd017 100644
--- a/components/offline_pages/core/background/mark_attempt_started_task_unittest.cc
+++ b/components/offline_pages/core/background/mark_attempt_started_task_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/request_queue_store.h"
 #include "components/offline_pages/core/background/request_queue_task_test_base.h"
 #include "components/offline_pages/core/background/test_request_queue_store.h"
diff --git a/components/offline_pages/core/background/reconcile_task_unittest.cc b/components/offline_pages/core/background/reconcile_task_unittest.cc
index a1ee082e..d6d50c4 100644
--- a/components/offline_pages/core/background/reconcile_task_unittest.cc
+++ b/components/offline_pages/core/background/reconcile_task_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/request_coordinator.h"
 #include "components/offline_pages/core/background/request_queue_store.h"
 #include "components/offline_pages/core/background/request_queue_task_test_base.h"
diff --git a/components/offline_pages/core/background/remove_requests_task_unittest.cc b/components/offline_pages/core/background/remove_requests_task_unittest.cc
index fd3efffb..ea7aad5 100644
--- a/components/offline_pages/core/background/remove_requests_task_unittest.cc
+++ b/components/offline_pages/core/background/remove_requests_task_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/request_queue_store.h"
 #include "components/offline_pages/core/background/request_queue_task_test_base.h"
 #include "components/offline_pages/core/background/test_request_queue_store.h"
diff --git a/components/offline_pages/core/background/request_queue.cc b/components/offline_pages/core/background/request_queue.cc
index 970d1ae9..58fd91f6 100644
--- a/components/offline_pages/core/background/request_queue.cc
+++ b/components/offline_pages/core/background/request_queue.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/background/change_requests_state_task.h"
 #include "components/offline_pages/core/background/get_requests_task.h"
 #include "components/offline_pages/core/background/initialize_store_task.h"
diff --git a/components/offline_pages/core/background_snapshot_controller.cc b/components/offline_pages/core/background_snapshot_controller.cc
index 3d48aa65..8e949eb 100644
--- a/components/offline_pages/core/background_snapshot_controller.cc
+++ b/components/offline_pages/core/background_snapshot_controller.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/offline_pages/core/offline_page_feature.h"
 
diff --git a/components/offline_pages/core/background_snapshot_controller_unittest.cc b/components/offline_pages/core/background_snapshot_controller_unittest.cc
index b96a5352..9f490ae 100644
--- a/components/offline_pages/core/background_snapshot_controller_unittest.cc
+++ b/components/offline_pages/core/background_snapshot_controller_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/offline_pages/core/model/add_page_task_unittest.cc b/components/offline_pages/core/model/add_page_task_unittest.cc
index 68564ae..6bbf84f 100644
--- a/components/offline_pages/core/model/add_page_task_unittest.cc
+++ b/components/offline_pages/core/model/add_page_task_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/model/model_task_test_base.h"
 #include "components/offline_pages/core/model/offline_page_item_generator.h"
 #include "components/offline_pages/core/offline_page_types.h"
diff --git a/components/offline_pages/core/model/model_task_test_base.h b/components/offline_pages/core/model/model_task_test_base.h
index caaf0f7..62e816e 100644
--- a/components/offline_pages/core/model/model_task_test_base.h
+++ b/components/offline_pages/core/model/model_task_test_base.h
@@ -10,7 +10,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/weak_ptr.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/archive_manager.h"
 #include "components/offline_pages/core/model/offline_page_item_generator.h"
 #include "components/offline_pages/core/offline_page_item.h"
diff --git a/components/offline_pages/core/model/offline_page_model_taskified.cc b/components/offline_pages/core/model/offline_page_model_taskified.cc
index 6175fd6..a24b1d9 100644
--- a/components/offline_pages/core/model/offline_page_model_taskified.cc
+++ b/components/offline_pages/core/model/offline_page_model_taskified.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/offline_pages/core/archive_manager.h"
diff --git a/components/offline_pages/core/model/offline_page_model_taskified_unittest.cc b/components/offline_pages/core/model/offline_page_model_taskified_unittest.cc
index 78e50f4b..d8fadc2 100644
--- a/components/offline_pages/core/model/offline_page_model_taskified_unittest.cc
+++ b/components/offline_pages/core/model/offline_page_model_taskified_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
diff --git a/components/offline_pages/core/offline_page_metadata_store.h b/components/offline_pages/core/offline_page_metadata_store.h
index 35c950c..83b5f80 100644
--- a/components/offline_pages/core/offline_page_metadata_store.h
+++ b/components/offline_pages/core/offline_page_metadata_store.h
@@ -9,7 +9,6 @@
 
 #include "base/bind.h"
 #include "base/files/file_path.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/offline_page_item.h"
 #include "components/offline_pages/core/offline_store_types.h"
 #include "components/offline_pages/task/sql_store_base.h"
diff --git a/components/offline_pages/core/offline_page_test_archive_publisher.cc b/components/offline_pages/core/offline_page_test_archive_publisher.cc
index 6428f2e..af39794 100644
--- a/components/offline_pages/core/offline_page_test_archive_publisher.cc
+++ b/components/offline_pages/core/offline_page_test_archive_publisher.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/offline_pages/core/archive_manager.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/offline_pages/core/offline_page_test_archiver.cc b/components/offline_pages/core/offline_page_test_archiver.cc
index 45ed5f53..4e81378 100644
--- a/components/offline_pages/core/offline_page_test_archiver.cc
+++ b/components/offline_pages/core/offline_page_test_archiver.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/files/file_util.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
diff --git a/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc b/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc
index d2f7c4f..83a68976 100644
--- a/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc
+++ b/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/prefetch/generate_page_bundle_request.h"
 #include "components/offline_pages/core/prefetch/get_operation_request.h"
 #include "components/offline_pages/core/prefetch/prefetch_prefs.h"
diff --git a/components/offline_pages/core/prefetch/prefetch_service_test_taco.h b/components/offline_pages/core/prefetch/prefetch_service_test_taco.h
index 963b111..298cadd 100644
--- a/components/offline_pages/core/prefetch/prefetch_service_test_taco.h
+++ b/components/offline_pages/core/prefetch/prefetch_service_test_taco.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "base/check.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/testing_pref_service.h"
 
diff --git a/components/offline_pages/core/prefetch/store/prefetch_downloader_quota_unittest.cc b/components/offline_pages/core/prefetch/store/prefetch_downloader_quota_unittest.cc
index 656ebe25..a764a27 100644
--- a/components/offline_pages/core/prefetch/store/prefetch_downloader_quota_unittest.cc
+++ b/components/offline_pages/core/prefetch/store/prefetch_downloader_quota_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/offline_page_feature.h"
 #include "components/offline_pages/core/prefetch/store/prefetch_store_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/offline_pages/core/prefetch/store/prefetch_store.cc b/components/offline_pages/core/prefetch/store/prefetch_store.cc
index f81c3def..8d46257 100644
--- a/components/offline_pages/core/prefetch/store/prefetch_store.cc
+++ b/components/offline_pages/core/prefetch/store/prefetch_store.cc
@@ -13,7 +13,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "components/offline_pages/core/offline_store_types.h"
 #include "components/offline_pages/core/prefetch/store/prefetch_store_schema.h"
diff --git a/components/offline_pages/core/prefetch/store/prefetch_store.h b/components/offline_pages/core/prefetch/store/prefetch_store.h
index 2d744af..3772c4a 100644
--- a/components/offline_pages/core/prefetch/store/prefetch_store.h
+++ b/components/offline_pages/core/prefetch/store/prefetch_store.h
@@ -9,7 +9,6 @@
 #include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/task/sql_store_base.h"
 
 namespace sql {
diff --git a/components/offline_pages/core/prefetch/store/prefetch_store_unittest.cc b/components/offline_pages/core/prefetch/store/prefetch_store_unittest.cc
index be6f873..c35f3b2 100644
--- a/components/offline_pages/core/prefetch/store/prefetch_store_unittest.cc
+++ b/components/offline_pages/core/prefetch/store/prefetch_store_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/test/task_environment.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/offline_store_utils.h"
 #include "components/offline_pages/core/prefetch/mock_prefetch_item_generator.h"
 #include "components/offline_pages/core/prefetch/prefetch_item.h"
diff --git a/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc b/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc
index 0a2e6e2..88e3393 100644
--- a/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc
+++ b/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc
@@ -12,7 +12,6 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/offline_store_utils.h"
 #include "components/offline_pages/core/prefetch/prefetch_item.h"
 #include "components/offline_pages/core/prefetch/prefetch_types.h"
diff --git a/components/offline_pages/core/prefetch/tasks/download_completed_task_unittest.cc b/components/offline_pages/core/prefetch/tasks/download_completed_task_unittest.cc
index e31797b..5fe00a01 100644
--- a/components/offline_pages/core/prefetch/tasks/download_completed_task_unittest.cc
+++ b/components/offline_pages/core/prefetch/tasks/download_completed_task_unittest.cc
@@ -10,7 +10,6 @@
 
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/offline_pages/core/client_namespace_constants.h"
 #include "components/offline_pages/core/prefetch/prefetch_item.h"
diff --git a/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc b/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc
index 683afc7..a9b36372 100644
--- a/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc
+++ b/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc
@@ -9,7 +9,6 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/offline_pages/core/prefetch/prefetch_importer.h"
 #include "components/offline_pages/core/prefetch/prefetch_item.h"
diff --git a/components/offline_pages/core/prefetch/tasks/stale_entry_finalizer_task_unittest.cc b/components/offline_pages/core/prefetch/tasks/stale_entry_finalizer_task_unittest.cc
index 574fbfe..ec441cf 100644
--- a/components/offline_pages/core/prefetch/tasks/stale_entry_finalizer_task_unittest.cc
+++ b/components/offline_pages/core/prefetch/tasks/stale_entry_finalizer_task_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/offline_pages/core/prefetch/mock_prefetch_item_generator.h"
 #include "components/offline_pages/core/prefetch/prefetch_item.h"
 #include "components/offline_pages/core/prefetch/prefetch_types.h"
diff --git a/components/offline_pages/core/snapshot_controller.cc b/components/offline_pages/core/snapshot_controller.cc
index 20ae1352..95f7e94 100644
--- a/components/offline_pages/core/snapshot_controller.cc
+++ b/components/offline_pages/core/snapshot_controller.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/check_op.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/offline_pages/core/offline_page_feature.h"
 
diff --git a/components/offline_pages/core/snapshot_controller_unittest.cc b/components/offline_pages/core/snapshot_controller_unittest.cc
index 2250490..f99b814 100644
--- a/components/offline_pages/core/snapshot_controller_unittest.cc
+++ b/components/offline_pages/core/snapshot_controller_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/offline_pages/core/offline_page_feature.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/offline_pages/task/sql_store_base.h b/components/offline_pages/task/sql_store_base.h
index a8ffc71..d3502d3 100644
--- a/components/offline_pages/task/sql_store_base.h
+++ b/components/offline_pages/task/sql_store_base.h
@@ -14,6 +14,7 @@
 #include "base/files/file_path.h"
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "sql/database.h"
diff --git a/components/offline_pages/task/task_queue_unittest.cc b/components/offline_pages/task/task_queue_unittest.cc
index 4b8d723..79db84e8 100644
--- a/components/offline_pages/task/task_queue_unittest.cc
+++ b/components/offline_pages/task/task_queue_unittest.cc
@@ -8,6 +8,7 @@
 #include <utility>
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 
 #include "base/bind.h"
 #include "base/callback_forward.h"
diff --git a/components/offline_pages/task/task_test_base.h b/components/offline_pages/task/task_test_base.h
index 41581c7..e6db3f35 100644
--- a/components/offline_pages/task/task_test_base.h
+++ b/components/offline_pages/task/task_test_base.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_OFFLINE_PAGES_TASK_TASK_TEST_BASE_H_
 #define COMPONENTS_OFFLINE_PAGES_TASK_TASK_TEST_BASE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "components/offline_pages/task/task.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/omnibox/browser/BUILD.gn b/components/omnibox/browser/BUILD.gn
index 3b2bf88e..cf47625 100644
--- a/components/omnibox/browser/BUILD.gn
+++ b/components/omnibox/browser/BUILD.gn
@@ -130,12 +130,6 @@
     "autocomplete_provider_listener.h",
     "autocomplete_result.cc",
     "autocomplete_result.h",
-    "autocomplete_scoring_model_executor.cc",
-    "autocomplete_scoring_model_executor.h",
-    "autocomplete_scoring_model_handler.cc",
-    "autocomplete_scoring_model_handler.h",
-    "autocomplete_scoring_model_service.cc",
-    "autocomplete_scoring_model_service.h",
     "autocomplete_scoring_signals_annotator.h",
     "base_search_provider.cc",
     "base_search_provider.h",
@@ -262,6 +256,12 @@
   ]
   if (build_with_tflite_lib) {
     sources += [
+      "autocomplete_scoring_model_executor.cc",
+      "autocomplete_scoring_model_executor.h",
+      "autocomplete_scoring_model_handler.cc",
+      "autocomplete_scoring_model_handler.h",
+      "autocomplete_scoring_model_service.cc",
+      "autocomplete_scoring_model_service.h",
       "on_device_tail_model_executor.cc",
       "on_device_tail_model_executor.h",
     ]
@@ -645,7 +645,6 @@
     "autocomplete_match_unittest.cc",
     "autocomplete_provider_unittest.cc",
     "autocomplete_result_unittest.cc",
-    "autocomplete_scoring_model_executor_unittest.cc",
     "base_search_provider_unittest.cc",
     "bookmark_provider_unittest.cc",
     "builtin_provider_unittest.cc",
@@ -698,7 +697,10 @@
     sources += [ "location_bar_model_util_unittest.cc" ]
   }
   if (build_with_tflite_lib) {
-    sources += [ "on_device_tail_model_executor_unittest.cc" ]
+    sources += [
+      "autocomplete_scoring_model_executor_unittest.cc",
+      "on_device_tail_model_executor_unittest.cc",
+    ]
   }
 
   deps = [
diff --git a/components/omnibox/browser/autocomplete_provider_unittest.cc b/components/omnibox/browser/autocomplete_provider_unittest.cc
index 9d281a1..78ad106d 100644
--- a/components/omnibox/browser/autocomplete_provider_unittest.cc
+++ b/components/omnibox/browser/autocomplete_provider_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 
 #include "base/base64url.h"
diff --git a/components/omnibox/browser/autocomplete_scoring_model_service.h b/components/omnibox/browser/autocomplete_scoring_model_service.h
index c9e93b5b..380d219 100644
--- a/components/omnibox/browser/autocomplete_scoring_model_service.h
+++ b/components/omnibox/browser/autocomplete_scoring_model_service.h
@@ -9,6 +9,7 @@
 
 #include "base/functional/callback.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/omnibox/browser/autocomplete_scoring_model_executor.h"
 #include "components/omnibox/browser/autocomplete_scoring_model_handler.h"
diff --git a/components/omnibox/browser/on_device_head_provider.h b/components/omnibox/browser/on_device_head_provider.h
index a4a0036..ff24821 100644
--- a/components/omnibox/browser/on_device_head_provider.h
+++ b/components/omnibox/browser/on_device_head_provider.h
@@ -10,6 +10,7 @@
 #include "base/callback_list.h"
 #include "base/memory/raw_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/omnibox/browser/autocomplete_provider.h"
 #include "components/omnibox/browser/autocomplete_provider_client.h"
 #include "components/omnibox/browser/on_device_head_model.h"
diff --git a/components/open_from_clipboard/clipboard_recent_content_ios.mm b/components/open_from_clipboard/clipboard_recent_content_ios.mm
index 165afb8..d917b52 100644
--- a/components/open_from_clipboard/clipboard_recent_content_ios.mm
+++ b/components/open_from_clipboard/clipboard_recent_content_ios.mm
@@ -13,6 +13,7 @@
 #include "base/notreached.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/system/sys_info.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #import "components/open_from_clipboard/clipboard_recent_content_impl_ios.h"
 #import "net/base/mac/url_conversions.h"
diff --git a/components/openscreen_platform/task_runner.cc b/components/openscreen_platform/task_runner.cc
index e3968c3..d350eb7 100644
--- a/components/openscreen_platform/task_runner.cc
+++ b/components/openscreen_platform/task_runner.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/time/time.h"
 
diff --git a/components/openscreen_platform/task_runner.h b/components/openscreen_platform/task_runner.h
index 089990f..de12506a 100644
--- a/components/openscreen_platform/task_runner.h
+++ b/components/openscreen_platform/task_runner.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_OPENSCREEN_PLATFORM_TASK_RUNNER_H_
 #define COMPONENTS_OPENSCREEN_PLATFORM_TASK_RUNNER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/openscreen/src/platform/api/task_runner.h"
 #include "third_party/openscreen/src/platform/api/time.h"
diff --git a/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc b/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc
index 0d7fc56..9fa1683 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc
+++ b/components/optimization_guide/content/browser/page_content_annotations_model_manager.cc
@@ -130,6 +130,18 @@
   std::move(callback).Run(absl::nullopt);
 }
 
+void PageContentAnnotationsModelManager::GetMetadataForEntityIds(
+    const base::flat_set<std::string>& entity_ids,
+    BatchEntityMetadataRetrievedCallback callback) {
+  if (page_entities_model_handler_) {
+    page_entities_model_handler_->GetMetadataForEntityIds(entity_ids,
+                                                          std::move(callback));
+    return;
+  }
+
+  std::move(callback).Run({});
+}
+
 void PageContentAnnotationsModelManager::RequestAndNotifyWhenModelAvailable(
     AnnotationType type,
     base::OnceCallback<void(bool)> callback) {
diff --git a/components/optimization_guide/content/browser/page_content_annotations_model_manager.h b/components/optimization_guide/content/browser/page_content_annotations_model_manager.h
index 1c3780d..05e70c0a 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_model_manager.h
+++ b/components/optimization_guide/content/browser/page_content_annotations_model_manager.h
@@ -26,6 +26,11 @@
 using EntityMetadataRetrievedCallback =
     base::OnceCallback<void(const absl::optional<EntityMetadata>&)>;
 
+// Callback to inform the caller that the metadata for a set of entity IDs has
+// been retrieved.
+using BatchEntityMetadataRetrievedCallback = base::OnceCallback<void(
+    const base::flat_map<std::string, EntityMetadata>&)>;
+
 // Manages the loading and execution of models used to annotate page content.
 class PageContentAnnotationsModelManager : public PageContentAnnotator {
  public:
@@ -57,6 +62,11 @@
   void GetMetadataForEntityId(const std::string& entity_id,
                               EntityMetadataRetrievedCallback callback);
 
+  // Retrieves the metadata associated for each entry in |entity_ids|. Invokes
+  // |callback| when done.
+  void GetMetadataForEntityIds(const base::flat_set<std::string>& entity_ids,
+                               BatchEntityMetadataRetrievedCallback callback);
+
  private:
   friend class PageContentAnnotationsModelManagerTest;
 
diff --git a/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc b/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
index 88a7a922..b7cbf5ad 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
+++ b/components/optimization_guide/content/browser/page_content_annotations_model_manager_unittest.cc
@@ -78,6 +78,19 @@
                                 : absl::nullopt);
   }
 
+  void GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids,
+      PageEntitiesModelBatchEntityMetadataRetrievedCallback callback) override {
+    base::flat_map<std::string, EntityMetadata> entity_metadata_map;
+    for (const auto& entity_id : entity_ids) {
+      auto it = entity_metadata_.find(entity_id);
+      if (it != entity_metadata_.end()) {
+        entity_metadata_map[entity_id] = it->second;
+      }
+    }
+    std::move(callback).Run(entity_metadata_map);
+  }
+
   void AddOnModelUpdatedCallback(base::OnceClosure callback) override {
     std::move(callback).Run();
   }
diff --git a/components/optimization_guide/content/browser/page_content_annotations_service.cc b/components/optimization_guide/content/browser/page_content_annotations_service.cc
index 985cc85..4120d91 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_service.cc
+++ b/components/optimization_guide/content/browser/page_content_annotations_service.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/histogram_macros_local.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/google/core/common/google_util.h"
 #include "components/history/core/browser/history_service.h"
 #include "components/history/core/browser/history_types.h"
@@ -21,7 +22,6 @@
 #include "components/omnibox/browser/search_suggestion_parser.h"
 #include "components/optimization_guide/content/browser/page_content_annotations_validator.h"
 #include "components/optimization_guide/core/entity_metadata.h"
-#include "components/optimization_guide/core/local_page_entities_metadata_provider.h"
 #include "components/optimization_guide/core/noisy_metrics_recorder.h"
 #include "components/optimization_guide/core/optimization_guide_enums.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
@@ -170,13 +170,6 @@
   }
 #endif
 
-  if (features::UseLocalPageEntitiesMetadataProvider()) {
-    local_page_entities_metadata_provider_ =
-        std::make_unique<LocalPageEntitiesMetadataProvider>();
-    local_page_entities_metadata_provider_->Initialize(
-        database_provider, database_dir, background_task_runner);
-  }
-
   validator_ =
       PageContentAnnotationsValidator::MaybeCreateAndStartTimer(annotator_);
 }
@@ -622,13 +615,6 @@
 void PageContentAnnotationsService::GetMetadataForEntityId(
     const std::string& entity_id,
     EntityMetadataRetrievedCallback callback) {
-  if (features::UseLocalPageEntitiesMetadataProvider()) {
-    DCHECK(local_page_entities_metadata_provider_);
-    local_page_entities_metadata_provider_->GetMetadataForEntityId(
-        entity_id, std::move(callback));
-    return;
-  }
-
 #if BUILDFLAG(BUILD_WITH_TFLITE_LIB)
   model_manager_->GetMetadataForEntityId(entity_id, std::move(callback));
 #else
@@ -636,6 +622,16 @@
 #endif
 }
 
+void PageContentAnnotationsService::GetMetadataForEntityIds(
+    const base::flat_set<std::string>& entity_ids,
+    BatchEntityMetadataRetrievedCallback callback) {
+#if BUILDFLAG(BUILD_WITH_TFLITE_LIB)
+  model_manager_->GetMetadataForEntityIds(entity_ids, std::move(callback));
+#else
+  std::move(callback).Run({});
+#endif
+}
+
 void PageContentAnnotationsService::OnURLVisited(
     history::HistoryService* history_service,
     const history::URLRow& url_row,
diff --git a/components/optimization_guide/content/browser/page_content_annotations_service.h b/components/optimization_guide/content/browser/page_content_annotations_service.h
index b25fb62e..cca6a4b 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_service.h
+++ b/components/optimization_guide/content/browser/page_content_annotations_service.h
@@ -54,7 +54,6 @@
 
 namespace optimization_guide {
 
-class LocalPageEntitiesMetadataProvider;
 class OptimizationGuideModelProvider;
 class PageContentAnnotationsModelManager;
 class PageContentAnnotationsServiceBrowserTest;
@@ -142,6 +141,9 @@
   void GetMetadataForEntityId(
       const std::string& entity_id,
       EntityMetadataRetrievedCallback callback) override;
+  void GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids,
+      BatchEntityMetadataRetrievedCallback callback) override;
 
   // history::HistoryServiceObserver:
   void OnURLVisited(history::HistoryService* history_service,
@@ -285,13 +287,6 @@
   // persisted.
   const int min_page_category_score_to_persist_;
 
-  // A metadata-only provider for page entities (as opposed to |model_manager_|
-  // which does both entity model execution and metadata providing) that uses a
-  // local database to provide the metadata for a given entity id. This is only
-  // non-null and initialized when its feature flag is enabled.
-  std::unique_ptr<LocalPageEntitiesMetadataProvider>
-      local_page_entities_metadata_provider_;
-
   // The history service to write content annotations to. Not owned. Guaranteed
   // to outlive |this|.
   const raw_ptr<history::HistoryService> history_service_;
diff --git a/components/optimization_guide/content/browser/page_text_observer.cc b/components/optimization_guide/content/browser/page_text_observer.cc
index 795510b7..2121f1c 100644
--- a/components/optimization_guide/content/browser/page_text_observer.cc
+++ b/components/optimization_guide/content/browser/page_text_observer.cc
@@ -14,7 +14,6 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/strcat.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/components/optimization_guide/content/browser/test_page_content_annotations_service.cc b/components/optimization_guide/content/browser/test_page_content_annotations_service.cc
index a0ff70f..e58b674a 100644
--- a/components/optimization_guide/content/browser/test_page_content_annotations_service.cc
+++ b/components/optimization_guide/content/browser/test_page_content_annotations_service.cc
@@ -4,7 +4,7 @@
 
 #include "components/optimization_guide/content/browser/test_page_content_annotations_service.h"
 
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/history/core/browser/history_database_params.h"
 #include "components/history/core/browser/history_service.h"
 #include "components/history/core/test/test_history_database.h"
@@ -52,7 +52,7 @@
   if (test_history_service_) {
     // Delete the history service on the next message pump so that PCAService's
     // |ScopedObservation| has a chance to be deleted first.
-    base::SequencedTaskRunnerHandle::Get()->DeleteSoon(
+    base::SequencedTaskRunner::GetCurrentDefault()->DeleteSoon(
         FROM_HERE, std::move(test_history_service_));
   }
 }
@@ -71,4 +71,4 @@
                                     /*optimization_guide_logger=*/nullptr,
                                     /*background_task_runner=*/nullptr) {}
 
-}  // namespace optimization_guide
\ No newline at end of file
+}  // namespace optimization_guide
diff --git a/components/optimization_guide/core/BUILD.gn b/components/optimization_guide/core/BUILD.gn
index 64603840..34622ef 100644
--- a/components/optimization_guide/core/BUILD.gn
+++ b/components/optimization_guide/core/BUILD.gn
@@ -35,6 +35,7 @@
     "//base",
     "//third_party/abseil-cpp:absl",
   ]
+  deps = [ ":features" ]
 }
 
 static_library("model_executor") {
@@ -153,8 +154,6 @@
     "hints_manager.h",
     "hints_processing_util.cc",
     "hints_processing_util.h",
-    "local_page_entities_metadata_provider.cc",
-    "local_page_entities_metadata_provider.h",
     "memory_hint.cc",
     "memory_hint.h",
     "model_handler.h",
@@ -375,7 +374,6 @@
     "hints_manager_unittest.cc",
     "hints_processing_util_unittest.cc",
     "insertion_ordered_set_unittest.cc",
-    "local_page_entities_metadata_provider_unittest.cc",
     "model_handler_unittest.cc",
     "model_util_unittest.cc",
     "noisy_metrics_recorder_unittest.cc",
diff --git a/components/optimization_guide/core/base_model_executor.h b/components/optimization_guide/core/base_model_executor.h
index e550182..48f9416 100644
--- a/components/optimization_guide/core/base_model_executor.h
+++ b/components/optimization_guide/core/base_model_executor.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_BASE_MODEL_EXECUTOR_H_
 #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_BASE_MODEL_EXECUTOR_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/base_model_executor_helpers.h"
 #include "components/optimization_guide/core/execution_status.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
diff --git a/components/optimization_guide/core/batch_entity_metadata_task.cc b/components/optimization_guide/core/batch_entity_metadata_task.cc
index 1d9c845..d647226 100644
--- a/components/optimization_guide/core/batch_entity_metadata_task.cc
+++ b/components/optimization_guide/core/batch_entity_metadata_task.cc
@@ -5,6 +5,7 @@
 #include "components/optimization_guide/core/batch_entity_metadata_task.h"
 
 #include "components/optimization_guide/core/entity_metadata_provider.h"
+#include "components/optimization_guide/core/optimization_guide_features.h"
 
 namespace optimization_guide {
 
@@ -27,11 +28,18 @@
 
   callback_ = std::move(callback);
 
-  for (const auto& entity_id : entity_ids_) {
-    entity_metadata_provider_->GetMetadataForEntityId(
-        entity_id,
-        base::BindOnce(&BatchEntityMetadataTask::OnEntityMetadataRetrieved,
-                       weak_ptr_factory_.GetWeakPtr(), entity_id));
+  if (features::ShouldUseBatchEntityMetadataSimplication()) {
+    entity_metadata_provider_->GetMetadataForEntityIds(
+        entity_ids_,
+        base::BindOnce(&BatchEntityMetadataTask::OnBatchEntityMetadataRetrieved,
+                       weak_ptr_factory_.GetWeakPtr()));
+  } else {
+    for (const auto& entity_id : entity_ids_) {
+      entity_metadata_provider_->GetMetadataForEntityId(
+          entity_id,
+          base::BindOnce(&BatchEntityMetadataTask::OnEntityMetadataRetrieved,
+                         weak_ptr_factory_.GetWeakPtr(), entity_id));
+    }
   }
 }
 
@@ -54,4 +62,13 @@
   }
 }
 
+void BatchEntityMetadataTask::OnBatchEntityMetadataRetrieved(
+    const base::flat_map<std::string, EntityMetadata>& entity_metadata_map) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK_EQ(task_state_, TaskState::kStarted);
+
+  task_state_ = TaskState::kCompleted;
+  std::move(callback_).Run(entity_metadata_map);
+}
+
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/core/batch_entity_metadata_task.h b/components/optimization_guide/core/batch_entity_metadata_task.h
index 349d4ae3..b69949d 100644
--- a/components/optimization_guide/core/batch_entity_metadata_task.h
+++ b/components/optimization_guide/core/batch_entity_metadata_task.h
@@ -48,6 +48,11 @@
       const std::string& entity_id,
       const absl::optional<EntityMetadata>& entity_metadata);
 
+  // Callback invoked when metadata for all entries in |entity_ids_| have been
+  // retrieved.
+  void OnBatchEntityMetadataRetrieved(
+      const base::flat_map<std::string, EntityMetadata>& entity_metadata_map);
+
   // The provider used to retrieve entity metadata from.
   raw_ptr<optimization_guide::EntityMetadataProvider> entity_metadata_provider_;
   // The entity IDs that metadata will be retrieved for.
diff --git a/components/optimization_guide/core/batch_entity_metadata_task_unittest.cc b/components/optimization_guide/core/batch_entity_metadata_task_unittest.cc
index 7fed49f..d7f763c 100644
--- a/components/optimization_guide/core/batch_entity_metadata_task_unittest.cc
+++ b/components/optimization_guide/core/batch_entity_metadata_task_unittest.cc
@@ -4,9 +4,11 @@
 
 #include "components/optimization_guide/core/batch_entity_metadata_task.h"
 
+#include "base/test/scoped_feature_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/optimization_guide/core/entity_metadata_provider.h"
+#include "components/optimization_guide/core/optimization_guide_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace optimization_guide {
@@ -36,13 +38,44 @@
             },
             entity_id, std::move(callback)));
   }
+  void GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids,
+      BatchEntityMetadataRetrievedCallback callback) override {
+    main_thread_task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(
+            [](const base::flat_set<std::string>& entity_ids,
+               BatchEntityMetadataRetrievedCallback callback) {
+              base::flat_map<std::string, EntityMetadata> entity_metadata_map;
+              for (const auto& entity_id : entity_ids) {
+                if (entity_id == "nometadata") {
+                  continue;
+                }
+                EntityMetadata metadata;
+                metadata.human_readable_name = entity_id;
+                entity_metadata_map[entity_id] = metadata;
+              }
+              std::move(callback).Run(entity_metadata_map);
+            },
+            entity_ids, std::move(callback)));
+  }
 
  private:
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
 };
 
-class BatchEntityMetadataTaskTest : public testing::Test {
+class BatchEntityMetadataTaskTest : public testing::Test,
+                                    public testing::WithParamInterface<bool> {
  public:
+  BatchEntityMetadataTaskTest() {
+    if (GetParam()) {
+      scoped_feature_list_.InitAndEnableFeature(
+          features::kPageEntitiesModelBatchEntityMetadataSimplification);
+    } else {
+      scoped_feature_list_.InitAndDisableFeature(
+          features::kPageEntitiesModelBatchEntityMetadataSimplification);
+    }
+  }
   void SetUp() override {
     entity_metadata_provider_ = std::make_unique<TestEntityMetadataProvider>(
         task_environment_.GetMainThreadTaskRunner());
@@ -73,12 +106,19 @@
   }
 
  private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+
   base::test::TaskEnvironment task_environment_;
 
   std::unique_ptr<TestEntityMetadataProvider> entity_metadata_provider_;
 };
 
-TEST_F(BatchEntityMetadataTaskTest, Execute) {
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    BatchEntityMetadataTaskTest,
+    /*ShouldUseBatchEntityMetadataSimplification=*/testing::Bool());
+
+TEST_P(BatchEntityMetadataTaskTest, Execute) {
   base::flat_map<std::string, EntityMetadata> entity_metadata_map =
       ExecuteBatchEntityMetadataTask({
           "nometadata",
diff --git a/components/optimization_guide/core/bert_model_handler.cc b/components/optimization_guide/core/bert_model_handler.cc
index b7cfd1c6..cea1003b 100644
--- a/components/optimization_guide/core/bert_model_handler.cc
+++ b/components/optimization_guide/core/bert_model_handler.cc
@@ -4,6 +4,7 @@
 
 #include "components/optimization_guide/core/bert_model_handler.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/bert_model_executor.h"
 
 namespace optimization_guide {
diff --git a/components/optimization_guide/core/bert_model_handler.h b/components/optimization_guide/core/bert_model_handler.h
index 6f2ad63..f177038 100644
--- a/components/optimization_guide/core/bert_model_handler.h
+++ b/components/optimization_guide/core/bert_model_handler.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_BERT_MODEL_HANDLER_H_
 #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_BERT_MODEL_HANDLER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_handler.h"
 #include "third_party/tflite_support/src/tensorflow_lite_support/cc/task/core/category.h"
 
diff --git a/components/optimization_guide/core/entity_metadata_provider.h b/components/optimization_guide/core/entity_metadata_provider.h
index d3b26805..61ab21cb 100644
--- a/components/optimization_guide/core/entity_metadata_provider.h
+++ b/components/optimization_guide/core/entity_metadata_provider.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_ENTITY_METADATA_PROVIDER_H_
 #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_ENTITY_METADATA_PROVIDER_H_
 
+#include "base/containers/flat_map.h"
+#include "base/containers/flat_set.h"
 #include "components/optimization_guide/core/entity_metadata.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -15,6 +17,11 @@
 using EntityMetadataRetrievedCallback =
     base::OnceCallback<void(const absl::optional<EntityMetadata>&)>;
 
+// Callback to inform the caller that the metadata for a batch of entity IDs has
+// been retrieved.
+using BatchEntityMetadataRetrievedCallback = base::OnceCallback<void(
+    const base::flat_map<std::string, EntityMetadata>&)>;
+
 // A class that provides metadata about entities.
 class EntityMetadataProvider {
  public:
@@ -24,6 +31,12 @@
       const std::string& entity_id,
       EntityMetadataRetrievedCallback callback) = 0;
 
+  // Retrieves the metadata associated for each entry in |entity_ids|. Invokes
+  // |callback| when done.
+  virtual void GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids,
+      BatchEntityMetadataRetrievedCallback callback) = 0;
+
  protected:
   EntityMetadataProvider() = default;
   virtual ~EntityMetadataProvider() = default;
diff --git a/components/optimization_guide/core/hints_manager_unittest.cc b/components/optimization_guide/core/hints_manager_unittest.cc
index 9abf56e..73bf7ee 100644
--- a/components/optimization_guide/core/hints_manager_unittest.cc
+++ b/components/optimization_guide/core/hints_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/files/file_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gtest_util.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/components/optimization_guide/core/local_page_entities_metadata_provider.cc b/components/optimization_guide/core/local_page_entities_metadata_provider.cc
deleted file mode 100644
index 5691777..0000000
--- a/components/optimization_guide/core/local_page_entities_metadata_provider.cc
+++ /dev/null
@@ -1,93 +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/optimization_guide/core/local_page_entities_metadata_provider.h"
-
-#include "components/optimization_guide/core/entity_metadata.h"
-
-namespace optimization_guide {
-
-namespace {
-
-// The amount of data to build up in memory before converting to a sorted on-
-// disk file.
-constexpr size_t kDatabaseWriteBufferSizeBytes = 128 * 1024;
-
-}  // namespace
-
-LocalPageEntitiesMetadataProvider::LocalPageEntitiesMetadataProvider() =
-    default;
-LocalPageEntitiesMetadataProvider::~LocalPageEntitiesMetadataProvider() =
-    default;
-
-void LocalPageEntitiesMetadataProvider::Initialize(
-    leveldb_proto::ProtoDatabaseProvider* database_provider,
-    const base::FilePath& database_dir,
-    scoped_refptr<base::SequencedTaskRunner> background_task_runner) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
-  background_task_runner_ = std::move(background_task_runner);
-  database_ = database_provider->GetDB<proto::EntityMetadataStorage>(
-      leveldb_proto::ProtoDbType::PAGE_ENTITY_METADATA_STORE, database_dir,
-      background_task_runner_);
-
-  leveldb_env::Options options = leveldb_proto::CreateSimpleOptions();
-  options.write_buffer_size = kDatabaseWriteBufferSizeBytes;
-  database_->Init(
-      options,
-      base::BindOnce(&LocalPageEntitiesMetadataProvider::OnDatabaseInitialized,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void LocalPageEntitiesMetadataProvider::InitializeForTesting(
-    std::unique_ptr<leveldb_proto::ProtoDatabase<proto::EntityMetadataStorage>>
-        database,
-    scoped_refptr<base::SequencedTaskRunner> background_task_runner) {
-  database_ = std::move(database);
-  background_task_runner_ = std::move(background_task_runner);
-}
-
-void LocalPageEntitiesMetadataProvider::OnDatabaseInitialized(
-    leveldb_proto::Enums::InitStatus status) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (status != leveldb_proto::Enums::InitStatus::kOK) {
-    database_.reset();
-    return;
-  }
-}
-
-void LocalPageEntitiesMetadataProvider::GetMetadataForEntityId(
-    const std::string& entity_id,
-    EntityMetadataRetrievedCallback callback) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
-  if (!database_) {
-    std::move(callback).Run(absl::nullopt);
-    return;
-  }
-
-  database_->GetEntry(
-      entity_id, base::BindOnce(&LocalPageEntitiesMetadataProvider::OnGotEntry,
-                                weak_ptr_factory_.GetWeakPtr(), entity_id,
-                                std::move(callback)));
-}
-
-void LocalPageEntitiesMetadataProvider::OnGotEntry(
-    const std::string& entity_id,
-    EntityMetadataRetrievedCallback callback,
-    bool success,
-    std::unique_ptr<proto::EntityMetadataStorage> entry) {
-  if (!success || !entry) {
-    std::move(callback).Run(absl::nullopt);
-    return;
-  }
-
-  EntityMetadata md;
-  md.entity_id = entity_id;
-  md.human_readable_name = entry->entity_name();
-
-  std::move(callback).Run(md);
-}
-
-}  // namespace optimization_guide
\ No newline at end of file
diff --git a/components/optimization_guide/core/local_page_entities_metadata_provider.h b/components/optimization_guide/core/local_page_entities_metadata_provider.h
deleted file mode 100644
index 90f4ffc..0000000
--- a/components/optimization_guide/core/local_page_entities_metadata_provider.h
+++ /dev/null
@@ -1,67 +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_OPTIMIZATION_GUIDE_CORE_LOCAL_PAGE_ENTITIES_METADATA_PROVIDER_H_
-#define COMPONENTS_OPTIMIZATION_GUIDE_CORE_LOCAL_PAGE_ENTITIES_METADATA_PROVIDER_H_
-
-#include "base/callback.h"
-#include "base/memory/weak_ptr.h"
-#include "base/sequence_checker.h"
-#include "components/leveldb_proto/public/proto_database.h"
-#include "components/leveldb_proto/public/proto_database_provider.h"
-#include "components/optimization_guide/core/entity_metadata_provider.h"
-#include "components/optimization_guide/proto/page_entities_metadata.pb.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-
-namespace optimization_guide {
-
-// Provides EntityMetadata given an entity id by looking up entries in a local
-// database on-disk.
-class LocalPageEntitiesMetadataProvider : public EntityMetadataProvider {
- public:
-  LocalPageEntitiesMetadataProvider();
-  ~LocalPageEntitiesMetadataProvider() override;
-  LocalPageEntitiesMetadataProvider(const LocalPageEntitiesMetadataProvider&) =
-      delete;
-  LocalPageEntitiesMetadataProvider& operator=(
-      const LocalPageEntitiesMetadataProvider&) = delete;
-
-  // Initializes this class, setting |database_| and |background_task_runner_|.
-  void Initialize(
-      leveldb_proto::ProtoDatabaseProvider* database_provider,
-      const base::FilePath& database_dir,
-      scoped_refptr<base::SequencedTaskRunner> background_task_runner);
-
-  // Directly sets |database_| and |background_task_runner_| for tests.
-  void InitializeForTesting(
-      std::unique_ptr<
-          leveldb_proto::ProtoDatabase<proto::EntityMetadataStorage>> database,
-      scoped_refptr<base::SequencedTaskRunner> background_task_runner);
-
-  // EntityMetadataProvider:
-  void GetMetadataForEntityId(
-      const std::string& entity_id,
-      EntityMetadataRetrievedCallback callback) override;
-
- private:
-  void OnDatabaseInitialized(leveldb_proto::Enums::InitStatus status);
-  void OnGotEntry(const std::string& entity_id,
-                  EntityMetadataRetrievedCallback callback,
-                  bool success,
-                  std::unique_ptr<proto::EntityMetadataStorage> entry);
-
-  std::unique_ptr<leveldb_proto::ProtoDatabase<proto::EntityMetadataStorage>>
-      database_;
-
-  scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
-
-  SEQUENCE_CHECKER(sequence_checker_);
-
-  base::WeakPtrFactory<LocalPageEntitiesMetadataProvider> weak_ptr_factory_{
-      this};
-};
-
-}  // namespace optimization_guide
-
-#endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_LOCAL_PAGE_ENTITIES_METADATA_PROVIDER_H_
\ No newline at end of file
diff --git a/components/optimization_guide/core/local_page_entities_metadata_provider_unittest.cc b/components/optimization_guide/core/local_page_entities_metadata_provider_unittest.cc
deleted file mode 100644
index b468c8ba..0000000
--- a/components/optimization_guide/core/local_page_entities_metadata_provider_unittest.cc
+++ /dev/null
@@ -1,135 +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/optimization_guide/core/local_page_entities_metadata_provider.h"
-
-#include "base/memory/raw_ptr.h"
-#include "base/test/task_environment.h"
-#include "components/leveldb_proto/testing/fake_db.h"
-#include "components/optimization_guide/core/optimization_guide_features.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace optimization_guide {
-
-class LocalPageEntitiesMetadataProviderTest : public testing::Test {
- public:
-  LocalPageEntitiesMetadataProviderTest() = default;
-  ~LocalPageEntitiesMetadataProviderTest() override = default;
-
-  void SetUp() override {
-    auto db = std::make_unique<
-        leveldb_proto::test::FakeDB<proto::EntityMetadataStorage>>(&db_store_);
-    db_ = db.get();
-
-    provider_ = std::make_unique<LocalPageEntitiesMetadataProvider>();
-    provider_->InitializeForTesting(
-        std::move(db), task_environment_.GetMainThreadTaskRunner());
-  }
-
-  LocalPageEntitiesMetadataProvider* provider() { return provider_.get(); }
-
-  leveldb_proto::test::FakeDB<proto::EntityMetadataStorage>* db() {
-    return db_;
-  }
-
-  std::map<std::string, proto::EntityMetadataStorage>* store() {
-    return &db_store_;
-  }
-
- private:
-  base::test::TaskEnvironment task_environment_;
-  std::unique_ptr<LocalPageEntitiesMetadataProvider> provider_;
-  raw_ptr<leveldb_proto::test::FakeDB<proto::EntityMetadataStorage>> db_;
-  std::map<std::string, proto::EntityMetadataStorage> db_store_;
-};
-
-TEST_F(LocalPageEntitiesMetadataProviderTest, NonInitReturnsNullOpt) {
-  LocalPageEntitiesMetadataProvider provider;
-
-  absl::optional<EntityMetadata> md;
-  bool callback_ran = false;
-  provider.GetMetadataForEntityId(
-      "entity_id",
-      base::BindOnce(
-          [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
-             const absl::optional<EntityMetadata>& md_in) {
-            *callback_ran_flag = true;
-            *md_out = md_in;
-          },
-          &callback_ran, &md));
-
-  ASSERT_TRUE(callback_ran);
-  EXPECT_EQ(absl::nullopt, md);
-}
-
-TEST_F(LocalPageEntitiesMetadataProviderTest, EmptyStoreReturnsNullOpt) {
-  absl::optional<EntityMetadata> md;
-  bool callback_ran = false;
-  provider()->GetMetadataForEntityId(
-      "entity_id",
-      base::BindOnce(
-          [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
-             const absl::optional<EntityMetadata>& md_in) {
-            *callback_ran_flag = true;
-            *md_out = md_in;
-          },
-          &callback_ran, &md));
-
-  db()->GetCallback(/*success=*/true);
-
-  ASSERT_TRUE(callback_ran);
-  EXPECT_EQ(absl::nullopt, md);
-}
-
-TEST_F(LocalPageEntitiesMetadataProviderTest, PopulatedSuccess) {
-  proto::EntityMetadataStorage stored_proto;
-  stored_proto.set_entity_name("chip");
-  store()->emplace("chocolate", stored_proto);
-
-  EntityMetadata want_md;
-  want_md.entity_id = "chocolate";
-  want_md.human_readable_name = "chip";
-
-  absl::optional<EntityMetadata> md;
-  bool callback_ran = false;
-  provider()->GetMetadataForEntityId(
-      "chocolate",
-      base::BindOnce(
-          [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
-             const absl::optional<EntityMetadata>& md_in) {
-            *callback_ran_flag = true;
-            *md_out = md_in;
-          },
-          &callback_ran, &md));
-
-  db()->GetCallback(/*success=*/true);
-
-  ASSERT_TRUE(callback_ran);
-  EXPECT_EQ(absl::make_optional(want_md), md);
-}
-
-TEST_F(LocalPageEntitiesMetadataProviderTest, PopulatedFailure) {
-  proto::EntityMetadataStorage stored_proto;
-  stored_proto.set_entity_name("chip");
-  store()->emplace("chocolate", stored_proto);
-
-  absl::optional<EntityMetadata> md;
-  bool callback_ran = false;
-  provider()->GetMetadataForEntityId(
-      "chocolate",
-      base::BindOnce(
-          [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
-             const absl::optional<EntityMetadata>& md_in) {
-            *callback_ran_flag = true;
-            *md_out = md_in;
-          },
-          &callback_ran, &md));
-
-  db()->GetCallback(/*success=*/false);
-
-  ASSERT_TRUE(callback_ran);
-  EXPECT_EQ(absl::nullopt, md);
-}
-
-}  // namespace optimization_guide
\ No newline at end of file
diff --git a/components/optimization_guide/core/model_execution_timeout_watchdog.h b/components/optimization_guide/core/model_execution_timeout_watchdog.h
index 70d952b2..8e1669a0 100644
--- a/components/optimization_guide/core/model_execution_timeout_watchdog.h
+++ b/components/optimization_guide/core/model_execution_timeout_watchdog.h
@@ -158,4 +158,4 @@
 
 }  // namespace optimization_guide
 
-#endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_MODEL_EXECUTION_TIMEOUT_WATCHDOG_H_
\ No newline at end of file
+#endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_MODEL_EXECUTION_TIMEOUT_WATCHDOG_H_
diff --git a/components/optimization_guide/core/model_executor.h b/components/optimization_guide/core/model_executor.h
index a7efc62..ae01eded 100644
--- a/components/optimization_guide/core/model_executor.h
+++ b/components/optimization_guide/core/model_executor.h
@@ -9,7 +9,7 @@
 #include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/optimization_guide/proto/models.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/components/optimization_guide/core/model_validator.cc b/components/optimization_guide/core/model_validator.cc
index 1ecb9ce1..81c07175 100644
--- a/components/optimization_guide/core/model_validator.cc
+++ b/components/optimization_guide/core/model_validator.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/tflite/src/tensorflow/lite/c/common.h"
 #include "third_party/tflite_support/src/tensorflow_lite_support/cc/task/core/task_utils.h"
 
diff --git a/components/optimization_guide/core/model_validator_unittest.cc b/components/optimization_guide/core/model_validator_unittest.cc
index e08d6b3..7cace4e 100644
--- a/components/optimization_guide/core/model_validator_unittest.cc
+++ b/components/optimization_guide/core/model_validator_unittest.cc
@@ -168,4 +168,4 @@
       1);
 }
 
-}  // namespace optimization_guide
\ No newline at end of file
+}  // namespace optimization_guide
diff --git a/components/optimization_guide/core/optimization_guide_features.cc b/components/optimization_guide/core/optimization_guide_features.cc
index b1d55992..23c3c0b 100644
--- a/components/optimization_guide/core/optimization_guide_features.cc
+++ b/components/optimization_guide/core/optimization_guide_features.cc
@@ -141,6 +141,12 @@
              "PageEntitiesModelResetOnShutdown",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// This feature flag enables batch entities to only be fetched via one thread
+// hop.
+BASE_FEATURE(kPageEntitiesModelBatchEntityMetadataSimplification,
+             "PageEntitiesModelBatchEntityMetadataSimplification",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // Enables push notification of hints.
 BASE_FEATURE(kPushNotifications,
              "OptimizationGuidePushNotifications",
@@ -164,10 +170,6 @@
              "PageVisibilityBatchAnnotations",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
-BASE_FEATURE(kUseLocalPageEntitiesMetadataProvider,
-             "UseLocalPageEntitiesMetadataProvider",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 BASE_FEATURE(kPageContentAnnotationsValidation,
              "PageContentAnnotationsValidation",
              base::FEATURE_DISABLED_BY_DEFAULT);
@@ -514,6 +516,11 @@
                                      kPageEntitiesPageContentAnnotations);
 }
 
+bool ShouldUseBatchEntityMetadataSimplication() {
+  return base::FeatureList::IsEnabled(
+      kPageEntitiesModelBatchEntityMetadataSimplification);
+}
+
 bool ShouldExecutePageVisibilityModelOnPageContent(const std::string& locale) {
   return base::FeatureList::IsEnabled(kPageVisibilityPageContentAnnotations) &&
          IsSupportedLocaleForFeature(locale,
@@ -574,10 +581,6 @@
   return base::FeatureList::IsEnabled(kPageVisibilityBatchAnnotations);
 }
 
-bool UseLocalPageEntitiesMetadataProvider() {
-  return base::FeatureList::IsEnabled(kUseLocalPageEntitiesMetadataProvider);
-}
-
 size_t AnnotateVisitBatchSize() {
   return std::max(
       1, GetFieldTrialParamByFeatureAsInt(kPageContentAnnotations,
diff --git a/components/optimization_guide/core/optimization_guide_features.h b/components/optimization_guide/core/optimization_guide_features.h
index 63485f9a..4c8bebc2 100644
--- a/components/optimization_guide/core/optimization_guide_features.h
+++ b/components/optimization_guide/core/optimization_guide_features.h
@@ -30,16 +30,15 @@
 BASE_DECLARE_FEATURE(kOptimizationGuideModelDownloading);
 BASE_DECLARE_FEATURE(kPageContentAnnotations);
 BASE_DECLARE_FEATURE(kPageEntitiesPageContentAnnotations);
-BASE_DECLARE_FEATURE(kPageVisibilityPageContentAnnotations);
 BASE_DECLARE_FEATURE(kPageEntitiesModelBypassFilters);
+BASE_DECLARE_FEATURE(kPageEntitiesModelResetOnShutdown);
+BASE_DECLARE_FEATURE(kPageEntitiesModelBatchEntityMetadataSimplification);
+BASE_DECLARE_FEATURE(kPageVisibilityPageContentAnnotations);
 BASE_DECLARE_FEATURE(kPageTextExtraction);
 BASE_DECLARE_FEATURE(kPushNotifications);
 BASE_DECLARE_FEATURE(kOptimizationGuideMetadataValidation);
 BASE_DECLARE_FEATURE(kPageTopicsBatchAnnotations);
 BASE_DECLARE_FEATURE(kPageVisibilityBatchAnnotations);
-BASE_DECLARE_FEATURE(kPageEntitiesModelResetOnShutdown);
-BASE_DECLARE_FEATURE(kPageEntitiesModelBypassFilters);
-BASE_DECLARE_FEATURE(kUseLocalPageEntitiesMetadataProvider);
 BASE_DECLARE_FEATURE(kPageContentAnnotationsValidation);
 BASE_DECLARE_FEATURE(kPreventLongRunningPredictionModels);
 BASE_DECLARE_FEATURE(kOverrideNumThreadsForModelExecution);
@@ -242,6 +241,10 @@
 // for a user using |locale| as their browser language.
 bool ShouldExecutePageEntitiesModelOnPageContent(const std::string& locale);
 
+// Returns whether to use the simplified path for fetching entity metadata for a
+// batch of entity IDs.
+bool ShouldUseBatchEntityMetadataSimplication();
+
 // Returns whether the page visibility model should be executed on page content
 // for a user using |locale| as their browser language.
 bool ShouldExecutePageVisibilityModelOnPageContent(const std::string& locale);
@@ -275,9 +278,6 @@
 // Returns if Page Visibility Batch Annotations are enabled.
 bool PageVisibilityBatchAnnotationsEnabled();
 
-// Whether to use the leveldb-based page entities metadata provider.
-bool UseLocalPageEntitiesMetadataProvider();
-
 // The number of visits batch before running the page content annotation
 // models. A size of 1 is equivalent to annotating one page load at time
 // immediately after requested.
diff --git a/components/optimization_guide/core/optimization_guide_store.cc b/components/optimization_guide/core/optimization_guide_store.cc
index 83aba8c9..20709f5 100644
--- a/components/optimization_guide/core/optimization_guide_store.cc
+++ b/components/optimization_guide/core/optimization_guide_store.cc
@@ -16,6 +16,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/leveldb_proto/public/proto_database.h"
 #include "components/leveldb_proto/public/proto_database_provider.h"
diff --git a/components/optimization_guide/core/page_entities_model_handler.h b/components/optimization_guide/core/page_entities_model_handler.h
index 6c435f3..a889e730 100644
--- a/components/optimization_guide/core/page_entities_model_handler.h
+++ b/components/optimization_guide/core/page_entities_model_handler.h
@@ -42,6 +42,19 @@
       const std::string& entity_id,
       PageEntitiesModelEntityMetadataRetrievedCallback callback) = 0;
 
+  // Callback to inform the caller that all requested entity metadata has been
+  // retrieved.
+  using PageEntitiesModelBatchEntityMetadataRetrievedCallback =
+      base::OnceCallback<void(
+          const base::flat_map<std::string,
+                               optimization_guide::EntityMetadata>&)>;
+
+  // Retrieves the metadata associated with each entry in |entity_ids|. Invokes
+  // |callback| when done.
+  virtual void GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids,
+      PageEntitiesModelBatchEntityMetadataRetrievedCallback callback) = 0;
+
   // Runs |callback| now if a model is loaded or the next time |OnModelUpdated|
   // is called.
   virtual void AddOnModelUpdatedCallback(base::OnceClosure callback) = 0;
diff --git a/components/optimization_guide/core/page_entities_model_handler_impl.cc b/components/optimization_guide/core/page_entities_model_handler_impl.cc
index 059d9da..7fdc3391 100644
--- a/components/optimization_guide/core/page_entities_model_handler_impl.cc
+++ b/components/optimization_guide/core/page_entities_model_handler_impl.cc
@@ -194,6 +194,29 @@
       base::BindOnce(std::move(callback), std::move(entity_metadata)));
 }
 
+void EntityAnnotatorHolder::GetMetadataForEntityIdsOnBackgroundThread(
+    const base::flat_set<std::string>& entity_ids,
+    PageEntitiesModelHandler::
+        PageEntitiesModelBatchEntityMetadataRetrievedCallback callback) {
+  DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
+
+  base::flat_map<std::string, EntityMetadata> entity_metadata_map;
+  if (entity_annotator_) {
+    DCHECK(entity_annotator_native_library_);
+    for (const auto& entity_id : entity_ids) {
+      absl::optional<EntityMetadata> entity_metadata =
+          entity_annotator_native_library_->GetEntityMetadataForEntityId(
+              entity_annotator_, entity_id);
+      if (entity_metadata) {
+        entity_metadata_map[entity_id] = *entity_metadata;
+      }
+    }
+  }
+  reply_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback), std::move(entity_metadata_map)));
+}
+
 base::WeakPtr<EntityAnnotatorHolder>
 EntityAnnotatorHolder::GetBackgroundWeakPtr() {
   return background_weak_ptr_factory_.GetWeakPtr();
@@ -308,4 +331,15 @@
           std::move(callback)));
 }
 
+void PageEntitiesModelHandlerImpl::GetMetadataForEntityIds(
+    const base::flat_set<std::string>& entity_ids,
+    PageEntitiesModelBatchEntityMetadataRetrievedCallback callback) {
+  background_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          &EntityAnnotatorHolder::GetMetadataForEntityIdsOnBackgroundThread,
+          entity_annotator_holder_->GetBackgroundWeakPtr(), entity_ids,
+          std::move(callback)));
+}
+
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/core/page_entities_model_handler_impl.h b/components/optimization_guide/core/page_entities_model_handler_impl.h
index 351e569..131176cf0 100644
--- a/components/optimization_guide/core/page_entities_model_handler_impl.h
+++ b/components/optimization_guide/core/page_entities_model_handler_impl.h
@@ -78,6 +78,13 @@
       PageEntitiesModelHandler::PageEntitiesModelEntityMetadataRetrievedCallback
           callback);
 
+  // Returns entity metadata from |entity_annotator_| for each entry in
+  // |entity_ids|. Should be invoked on |background_task_runner_|.
+  void GetMetadataForEntityIdsOnBackgroundThread(
+      const base::flat_set<std::string>& entity_ids,
+      PageEntitiesModelHandler::
+          PageEntitiesModelBatchEntityMetadataRetrievedCallback callback);
+
   // Gets the weak ptr to |this| on the background thread.
   base::WeakPtr<EntityAnnotatorHolder> GetBackgroundWeakPtr();
 
@@ -114,6 +121,9 @@
   void GetMetadataForEntityId(
       const std::string& entity_id,
       PageEntitiesModelEntityMetadataRetrievedCallback callback) override;
+  void GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids,
+      PageEntitiesModelBatchEntityMetadataRetrievedCallback callback) override;
   void ExecuteModelWithInput(
       const std::string& text,
       PageEntitiesMetadataModelExecutedCallback callback) override;
diff --git a/components/optimization_guide/core/page_entities_model_handler_impl_unittest.cc b/components/optimization_guide/core/page_entities_model_handler_impl_unittest.cc
index 914b1c43..e69cf9c 100644
--- a/components/optimization_guide/core/page_entities_model_handler_impl_unittest.cc
+++ b/components/optimization_guide/core/page_entities_model_handler_impl_unittest.cc
@@ -132,6 +132,27 @@
     return entity_metadata;
   }
 
+  base::flat_map<std::string, EntityMetadata> GetMetadataForEntityIds(
+      const base::flat_set<std::string>& entity_ids) {
+    base::flat_map<std::string, EntityMetadata> entity_metadata_map;
+
+    base::RunLoop run_loop;
+    model_executor_->GetMetadataForEntityIds(
+        entity_ids, base::BindOnce(
+                        [](base::RunLoop* run_loop,
+                           base::flat_map<std::string, EntityMetadata>*
+                               out_entity_metadata_map,
+                           const base::flat_map<std::string, EntityMetadata>&
+                               entity_metadata_map) {
+                          *out_entity_metadata_map = entity_metadata_map;
+                          run_loop->Quit();
+                        },
+                        &run_loop, &entity_metadata_map));
+    run_loop.Run();
+
+    return entity_metadata_map;
+  }
+
   PageEntitiesModelHandler* model_executor() { return model_executor_.get(); }
 
   ModelObserverTracker* model_observer_tracker() const {
@@ -332,6 +353,10 @@
   EXPECT_EQ(GetMetadataForEntityId("/m/0dl567"), absl::nullopt);
 }
 
+TEST_F(PageEntitiesModelHandlerImplTest, GetMetadataForEntityIdsNoModel) {
+  EXPECT_TRUE(GetMetadataForEntityIds({"/m/0dl567"}).empty());
+}
+
 TEST_F(PageEntitiesModelHandlerImplTest, ExecuteModelNoModel) {
   EXPECT_EQ(ExecuteModel("Taylor Swift singer"), absl::nullopt);
 }
diff --git a/components/optimization_guide/core/page_topics_model_handler.cc b/components/optimization_guide/core/page_topics_model_handler.cc
index 237547b..19f88f06 100644
--- a/components/optimization_guide/core/page_topics_model_handler.cc
+++ b/components/optimization_guide/core/page_topics_model_handler.cc
@@ -12,6 +12,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/optimization_guide_model_provider.h"
 #include "components/optimization_guide/proto/models.pb.h"
 #include "components/optimization_guide/proto/page_topics_model_metadata.pb.h"
diff --git a/components/optimization_guide/core/page_topics_model_handler.h b/components/optimization_guide/core/page_topics_model_handler.h
index 5bdb5c4..4a32ac6 100644
--- a/components/optimization_guide/core/page_topics_model_handler.h
+++ b/components/optimization_guide/core/page_topics_model_handler.h
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/bert_model_handler.h"
 #include "components/optimization_guide/core/page_content_annotation_job.h"
 #include "components/optimization_guide/core/page_content_annotation_job_executor.h"
diff --git a/components/optimization_guide/core/page_topics_model_handler_unittest.cc b/components/optimization_guide/core/page_topics_model_handler_unittest.cc
index 710977d..7680856 100644
--- a/components/optimization_guide/core/page_topics_model_handler_unittest.cc
+++ b/components/optimization_guide/core/page_topics_model_handler_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/path_service.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/components/optimization_guide/core/page_visibility_model_handler.cc b/components/optimization_guide/core/page_visibility_model_handler.cc
index 1148624..2cc557c 100644
--- a/components/optimization_guide/core/page_visibility_model_handler.cc
+++ b/components/optimization_guide/core/page_visibility_model_handler.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 
 #include "base/containers/contains.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
 #include "components/optimization_guide/core/optimization_guide_model_provider.h"
 #include "components/optimization_guide/core/page_content_annotations_common.h"
diff --git a/components/optimization_guide/core/page_visibility_model_handler.h b/components/optimization_guide/core/page_visibility_model_handler.h
index 87b596af..cb1815a3 100644
--- a/components/optimization_guide/core/page_visibility_model_handler.h
+++ b/components/optimization_guide/core/page_visibility_model_handler.h
@@ -7,6 +7,7 @@
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_handler.h"
 #include "components/optimization_guide/core/page_content_annotation_job.h"
 #include "components/optimization_guide/core/page_content_annotation_job_executor.h"
diff --git a/components/optimization_guide/core/prediction_manager_unittest.cc b/components/optimization_guide/core/prediction_manager_unittest.cc
index a3a503c..b5223ec8 100644
--- a/components/optimization_guide/core/prediction_manager_unittest.cc
+++ b/components/optimization_guide/core/prediction_manager_unittest.cc
@@ -14,6 +14,8 @@
 #include "base/files/file_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gtest_util.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/components/optimization_guide/core/prediction_model_download_manager.h b/components/optimization_guide/core/prediction_model_download_manager.h
index db39a511..6efaefcf 100644
--- a/components/optimization_guide/core/prediction_model_download_manager.h
+++ b/components/optimization_guide/core/prediction_model_download_manager.h
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/download/public/background_service/download_params.h"
 #include "components/optimization_guide/core/prediction_model_store.h"
 #include "components/optimization_guide/proto/models.pb.h"
diff --git a/components/optimization_guide/core/prediction_model_override.cc b/components/optimization_guide/core/prediction_model_override.cc
index 2dcda253..7d81073 100644
--- a/components/optimization_guide/core/prediction_model_override.cc
+++ b/components/optimization_guide/core/prediction_model_override.cc
@@ -8,7 +8,6 @@
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/optimization_guide/core/model_util.h"
 #include "components/optimization_guide/core/prediction_model_download_manager.h"
 #include "components/services/unzip/public/cpp/unzip.h"
@@ -158,4 +157,4 @@
   std::move(callback).Run(std::move(prediction_model));
 }
 
-}  // namespace optimization_guide
\ No newline at end of file
+}  // namespace optimization_guide
diff --git a/components/optimization_guide/core/prediction_model_store.h b/components/optimization_guide/core/prediction_model_store.h
index 2b70723..72ed1cc 100644
--- a/components/optimization_guide/core/prediction_model_store.h
+++ b/components/optimization_guide/core/prediction_model_store.h
@@ -166,4 +166,4 @@
 
 }  // namespace optimization_guide
 
-#endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_PREDICTION_MODEL_STORE_H_
\ No newline at end of file
+#endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_PREDICTION_MODEL_STORE_H_
diff --git a/components/optimization_guide/core/test_model_executor.h b/components/optimization_guide/core/test_model_executor.h
index f9ea12c..ced168c 100644
--- a/components/optimization_guide/core/test_model_executor.h
+++ b/components/optimization_guide/core/test_model_executor.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_TEST_MODEL_EXECUTOR_H_
 #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_TEST_MODEL_EXECUTOR_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_executor.h"
 
 namespace optimization_guide {
diff --git a/components/optimization_guide/core/test_model_handler.h b/components/optimization_guide/core/test_model_handler.h
index 2809168..c6f3a756 100644
--- a/components/optimization_guide/core/test_model_handler.h
+++ b/components/optimization_guide/core/test_model_handler.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_TEST_MODEL_HANDLER_H_
 #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_TEST_MODEL_HANDLER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_handler.h"
 #include "components/optimization_guide/core/test_model_executor.h"
 
diff --git a/components/optimization_guide/core/test_tflite_model_handler.h b/components/optimization_guide/core/test_tflite_model_handler.h
index 5cf02d8a..a3faf656 100644
--- a/components/optimization_guide/core/test_tflite_model_handler.h
+++ b/components/optimization_guide/core/test_tflite_model_handler.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_OPTIMIZATION_GUIDE_CORE_TEST_TFLITE_MODEL_HANDLER_H_
 #define COMPONENTS_OPTIMIZATION_GUIDE_CORE_TEST_TFLITE_MODEL_HANDLER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_handler.h"
 #include "components/optimization_guide/core/test_tflite_model_executor.h"
 
diff --git a/components/optimization_guide/core/tflite_model_executor.h b/components/optimization_guide/core/tflite_model_executor.h
index 78ea4d0..29699fd9 100644
--- a/components/optimization_guide/core/tflite_model_executor.h
+++ b/components/optimization_guide/core/tflite_model_executor.h
@@ -12,8 +12,8 @@
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
diff --git a/components/optimization_guide/core/tflite_model_executor_unittest.cc b/components/optimization_guide/core/tflite_model_executor_unittest.cc
index 1138071..76877f2 100644
--- a/components/optimization_guide/core/tflite_model_executor_unittest.cc
+++ b/components/optimization_guide/core/tflite_model_executor_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/path_service.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc
index 262fe2f9..e262be3 100644
--- a/components/page_info/page_info.cc
+++ b/components/page_info/page_info.cc
@@ -866,6 +866,14 @@
 }
 
 void PageInfo::ComputeUIInputs(const GURL& url) {
+  // TODO(https://crbug.com/1404024): Check |isolated-app| scheme once we have a
+  // definition available for components
+  if (IsIsolatedWebApp()) {
+    site_identity_status_ = SITE_IDENTITY_STATUS_ISOLATED_WEB_APP;
+    site_connection_status_ = SITE_CONNECTION_STATUS_ISOLATED_WEB_APP;
+    return;
+  }
+
   auto security_level = delegate_->GetSecurityLevel();
   auto visible_security_state = delegate_->GetVisibleSecurityState();
 #if !BUILDFLAG(IS_ANDROID)
diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h
index fae5d80..afa5729f 100644
--- a/components/page_info/page_info.h
+++ b/components/page_info/page_info.h
@@ -58,9 +58,14 @@
                                                           // target.
     SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,   // Non-secure active
                                                           // content.
-    SITE_CONNECTION_STATUS_UNENCRYPTED,      // Connection is not encrypted.
-    SITE_CONNECTION_STATUS_ENCRYPTED_ERROR,  // Connection error occurred.
-    SITE_CONNECTION_STATUS_INTERNAL_PAGE,    // Internal site.
+    SITE_CONNECTION_STATUS_UNENCRYPTED,       // Connection is not encrypted.
+    SITE_CONNECTION_STATUS_ENCRYPTED_ERROR,   // Connection error occurred.
+    SITE_CONNECTION_STATUS_INTERNAL_PAGE,     // Internal site.
+    SITE_CONNECTION_STATUS_ISOLATED_WEB_APP,  // Isolated Web Apps are either
+                                              // from a Signed Web Bundle on
+                                              // local filesystem or from a
+                                              // trusted developer
+                                              // server(dev-proxy mode).
   };
 
   // Validation status of a website's identity.
@@ -84,6 +89,10 @@
     // The website provided a valid certificate, but the certificate or chain
     // is using a deprecated signature algorithm.
     SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM,
+    // Isolated Web Apps are loaded from local resource (Signed Web Bundle),
+    // except when installed in dev-mode-proxy. The identities of Isolated Web
+    // Apps are associated with the bundle signature.
+    SITE_IDENTITY_STATUS_ISOLATED_WEB_APP,
   };
 
   // Safe Browsing status of a website.
diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc
index 7decb1d..23ee1910 100644
--- a/components/page_info/page_info_ui.cc
+++ b/components/page_info/page_info_ui.cc
@@ -14,6 +14,7 @@
 #include "build/chromeos_buildflags.h"
 #include "components/omnibox/common/omnibox_features.h"
 #include "components/page_info/core/features.h"
+#include "components/page_info/page_info.h"
 #include "components/page_info/page_info_ui_delegate.h"
 #include "components/permissions/features.h"
 #include "components/permissions/permission_decision_auto_blocker.h"
@@ -526,6 +527,7 @@
     case PageInfo::SITE_IDENTITY_STATUS_EV_CERT:
     case PageInfo::SITE_IDENTITY_STATUS_CERT:
     case PageInfo::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT:
+    case PageInfo::SITE_IDENTITY_STATUS_ISOLATED_WEB_APP:
       switch (identity_info.connection_status) {
         case PageInfo::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE:
           return CreateSecurityDescription(SecuritySummaryColor::RED,
@@ -905,6 +907,7 @@
     case PageInfo::SITE_IDENTITY_STATUS_INTERNAL_PAGE:
     case PageInfo::SITE_IDENTITY_STATUS_CERT:
     case PageInfo::SITE_IDENTITY_STATUS_EV_CERT:
+    case PageInfo::SITE_IDENTITY_STATUS_ISOLATED_WEB_APP:
       return IDR_PAGEINFO_GOOD;
     case PageInfo::SITE_IDENTITY_STATUS_NO_CERT:
     case PageInfo::SITE_IDENTITY_STATUS_ERROR:
@@ -922,6 +925,7 @@
     case PageInfo::SITE_CONNECTION_STATUS_UNKNOWN:
     case PageInfo::SITE_CONNECTION_STATUS_INTERNAL_PAGE:
     case PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED:
+    case PageInfo::SITE_CONNECTION_STATUS_ISOLATED_WEB_APP:
       return IDR_PAGEINFO_GOOD;
     case PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE:
     case PageInfo::SITE_CONNECTION_STATUS_INSECURE_FORM_ACTION:
@@ -940,6 +944,7 @@
     case PageInfo::SITE_IDENTITY_STATUS_INTERNAL_PAGE:
     case PageInfo::SITE_IDENTITY_STATUS_CERT:
     case PageInfo::SITE_IDENTITY_STATUS_EV_CERT:
+    case PageInfo::SITE_IDENTITY_STATUS_ISOLATED_WEB_APP:
       return IDR_PAGEINFO_GOOD_COLOR;
     case PageInfo::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT:
     case PageInfo::SITE_IDENTITY_STATUS_NO_CERT:
@@ -957,6 +962,7 @@
     case PageInfo::SITE_CONNECTION_STATUS_UNKNOWN:
     case PageInfo::SITE_CONNECTION_STATUS_INTERNAL_PAGE:
     case PageInfo::SITE_CONNECTION_STATUS_ENCRYPTED:
+    case PageInfo::SITE_CONNECTION_STATUS_ISOLATED_WEB_APP:
       return IDR_PAGEINFO_GOOD_COLOR;
     case PageInfo::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE:
     case PageInfo::SITE_CONNECTION_STATUS_INSECURE_FORM_ACTION:
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 27f5f9e3..426ba70 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
@@ -18,7 +18,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/default_clock.h"
 #include "base/time/time.h"
 #include "components/blocklist/opt_out_blocklist/opt_out_blocklist_data.h"
diff --git a/components/paint_preview/browser/file_manager.cc b/components/paint_preview/browser/file_manager.cc
index 90bd438..3cca147 100644
--- a/components/paint_preview/browser/file_manager.cc
+++ b/components/paint_preview/browser/file_manager.cc
@@ -13,6 +13,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/paint_preview/common/file_utils.h"
 #include "components/paint_preview/common/proto_validator.h"
 #include "third_party/zlib/google/zip.h"
diff --git a/components/paint_preview/browser/paint_preview_file_mixin.h b/components/paint_preview/browser/paint_preview_file_mixin.h
index c8dcb823..1d9023b 100644
--- a/components/paint_preview/browser/paint_preview_file_mixin.h
+++ b/components/paint_preview/browser/paint_preview_file_mixin.h
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/paint_preview/browser/file_manager.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/components/paint_preview/player/player_compositor_delegate_unittest.cc b/components/paint_preview/player/player_compositor_delegate_unittest.cc
index 275cfef..90aceda 100644
--- a/components/paint_preview/player/player_compositor_delegate_unittest.cc
+++ b/components/paint_preview/player/player_compositor_delegate_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/unguessable_token.h"
 #include "components/memory_pressure/fake_memory_pressure_monitor.h"
diff --git a/components/password_manager/core/browser/affiliation/affiliation_backend.cc b/components/password_manager/core/browser/affiliation/affiliation_backend.cc
index c4a58b6..9dcb21b8 100644
--- a/components/password_manager/core/browser/affiliation/affiliation_backend.cc
+++ b/components/password_manager/core/browser/affiliation/affiliation_backend.cc
@@ -19,9 +19,9 @@
 #include "base/trace_event/trace_event.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_database.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetch_throttler.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_factory_impl.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
 #include "components/password_manager/core/browser/affiliation/facet_manager.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_factory_impl.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
diff --git a/components/password_manager/core/browser/affiliation/affiliation_backend.h b/components/password_manager/core/browser/affiliation/affiliation_backend.h
index 9b1d427..67db21d4 100644
--- a/components/password_manager/core/browser/affiliation/affiliation_backend.h
+++ b/components/password_manager/core/browser/affiliation/affiliation_backend.h
@@ -19,9 +19,9 @@
 #include "base/time/time.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetch_throttler_delegate.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_delegate.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_service.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
 #include "components/password_manager/core/browser/affiliation/facet_manager_host.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_service.h"
 
 namespace base {
 class Clock;
diff --git a/components/password_manager/core/browser/affiliation/affiliation_fetch_throttler.cc b/components/password_manager/core/browser/affiliation/affiliation_fetch_throttler.cc
index 20be4da..1d0f9da 100644
--- a/components/password_manager/core/browser/affiliation/affiliation_fetch_throttler.cc
+++ b/components/password_manager/core/browser/affiliation/affiliation_fetch_throttler.cc
@@ -10,7 +10,6 @@
 #include "base/check_op.h"
 #include "base/rand_util.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetch_throttler_delegate.h"
diff --git a/components/password_manager/core/browser/affiliation/affiliation_fetcher_base.h b/components/password_manager/core/browser/affiliation/affiliation_fetcher_base.h
index c93dfe2..fe6e322 100644
--- a/components/password_manager/core/browser/affiliation/affiliation_fetcher_base.h
+++ b/components/password_manager/core/browser/affiliation/affiliation_fetcher_base.h
@@ -8,11 +8,10 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
-
 #include "base/memory/ref_counted.h"
 #include "base/timer/elapsed_timer.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_api.pb.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
 
 namespace net {
 struct NetworkTrafficAnnotationTag;
diff --git a/components/password_manager/core/browser/affiliation/affiliation_service_impl.h b/components/password_manager/core/browser/affiliation/affiliation_service_impl.h
index cce7264..6de1661 100644
--- a/components/password_manager/core/browser/affiliation/affiliation_service_impl.h
+++ b/components/password_manager/core/browser/affiliation/affiliation_service_impl.h
@@ -10,15 +10,14 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_service.h"
-
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_delegate.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_factory_impl.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_service.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_factory_impl.h"
 
 namespace base {
 class FilePath;
@@ -28,7 +27,7 @@
 namespace network {
 class NetworkConnectionTracker;
 class SharedURLLoaderFactory;
-}
+}  // namespace network
 
 namespace url {
 class SchemeHostPort;
diff --git a/components/password_manager/core/browser/affiliation/affiliation_service_impl_unittest.cc b/components/password_manager/core/browser/affiliation/affiliation_service_impl_unittest.cc
index 88e90fb..0447ccc 100644
--- a/components/password_manager/core/browser/affiliation/affiliation_service_impl_unittest.cc
+++ b/components/password_manager/core/browser/affiliation/affiliation_service_impl_unittest.cc
@@ -16,15 +16,14 @@
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_backend.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_base.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_service_impl.h"
 #include "components/password_manager/core/browser/affiliation/fake_affiliation_api.h"
 #include "components/password_manager/core/browser/affiliation/mock_affiliation_consumer.h"
 #include "components/password_manager/core/browser/affiliation/mock_affiliation_fetcher.h"
-#include "components/password_manager/core/browser/password_form_digest.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_base.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_service_impl.h"
 #include "components/password_manager/core/browser/affiliation/mock_affiliation_fetcher_factory.h"
+#include "components/password_manager/core/browser/password_form_digest.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
 #include "services/network/test/test_network_connection_tracker.h"
diff --git a/components/password_manager/core/browser/affiliation/affiliations_prefetcher.cc b/components/password_manager/core/browser/affiliation/affiliations_prefetcher.cc
index 8a066ed9..434de1e 100644
--- a/components/password_manager/core/browser/affiliation/affiliations_prefetcher.cc
+++ b/components/password_manager/core/browser/affiliation/affiliations_prefetcher.cc
@@ -10,7 +10,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/check_op.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_service.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
diff --git a/components/password_manager/core/browser/affiliation/facet_manager.h b/components/password_manager/core/browser/affiliation/facet_manager.h
index 6b985e87..5e73e132 100644
--- a/components/password_manager/core/browser/affiliation/facet_manager.h
+++ b/components/password_manager/core/browser/affiliation/facet_manager.h
@@ -11,8 +11,8 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/time/time.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_service.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
 
 namespace base {
 class Clock;
diff --git a/components/password_manager/core/browser/affiliation/fake_affiliation_fetcher.h b/components/password_manager/core/browser/affiliation/fake_affiliation_fetcher.h
index cb0e237..cb46a4c9 100644
--- a/components/password_manager/core/browser/affiliation/fake_affiliation_fetcher.h
+++ b/components/password_manager/core/browser/affiliation/fake_affiliation_fetcher.h
@@ -10,8 +10,8 @@
 #include "base/containers/queue.h"
 #include "base/memory/raw_ptr.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_delegate.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_factory.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
 
 namespace password_manager {
 
diff --git a/components/password_manager/core/browser/affiliation/fake_affiliation_service.h b/components/password_manager/core/browser/affiliation/fake_affiliation_service.h
index 66ddbc12..b15a8ef 100644
--- a/components/password_manager/core/browser/affiliation/fake_affiliation_service.h
+++ b/components/password_manager/core/browser/affiliation/fake_affiliation_service.h
@@ -5,8 +5,8 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_FAKE_AFFILIATION_SERVICE_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_FAKE_AFFILIATION_SERVICE_H_
 
-#include "components/password_manager/core/browser/password_form.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_service.h"
+#include "components/password_manager/core/browser/password_form.h"
 
 namespace password_manager {
 
diff --git a/components/password_manager/core/browser/affiliation/mock_affiliation_consumer.h b/components/password_manager/core/browser/affiliation/mock_affiliation_consumer.h
index 4eb15537..0f28685 100644
--- a/components/password_manager/core/browser/affiliation/mock_affiliation_consumer.h
+++ b/components/password_manager/core/browser/affiliation/mock_affiliation_consumer.h
@@ -5,8 +5,8 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_MOCK_AFFILIATION_CONSUMER_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_MOCK_AFFILIATION_CONSUMER_H_
 
-#include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_service.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 namespace password_manager {
diff --git a/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher.h b/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher.h
index 7e781c7..80f0bd8 100644
--- a/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher.h
+++ b/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_MOCK_AFFILIATION_FETCHER_H_
 
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
-
 #include "testing/gmock/include/gmock/gmock.h"
 
 namespace password_manager {
diff --git a/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher_factory.h b/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher_factory.h
index 15aa923..e68a5ab 100644
--- a/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher_factory.h
+++ b/components/password_manager/core/browser/affiliation/mock_affiliation_fetcher_factory.h
@@ -5,10 +5,9 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_MOCK_AFFILIATION_FETCHER_FACTORY_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_AFFILIATION_MOCK_AFFILIATION_FETCHER_FACTORY_H_
 
-#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_fetcher_factory.h"
+#include "components/password_manager/core/browser/affiliation/affiliation_fetcher_interface.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
-
 #include "testing/gmock/include/gmock/gmock.h"
 
 namespace password_manager {
diff --git a/components/password_manager/core/browser/affiliation/mock_affiliation_service.h b/components/password_manager/core/browser/affiliation/mock_affiliation_service.h
index 3ce1867..43acce4c 100644
--- a/components/password_manager/core/browser/affiliation/mock_affiliation_service.h
+++ b/components/password_manager/core/browser/affiliation/mock_affiliation_service.h
@@ -5,9 +5,9 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_MOCK_AFFILIATION_SERVICE_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_MOCK_AFFILIATION_SERVICE_H_
 
+#include "components/password_manager/core/browser/affiliation/affiliation_service.h"
 #include "components/password_manager/core/browser/affiliation/affiliation_utils.h"
 #include "components/password_manager/core/browser/password_form.h"
-#include "components/password_manager/core/browser/affiliation/affiliation_service.h"
 #include "services/network/test/test_network_connection_tracker.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
diff --git a/components/password_manager/core/browser/credential_manager_password_form_manager.cc b/components/password_manager/core/browser/credential_manager_password_form_manager.cc
index 05328bbc..71ffd612 100644
--- a/components/password_manager/core/browser/credential_manager_password_form_manager.cc
+++ b/components/password_manager/core/browser/credential_manager_password_form_manager.cc
@@ -9,7 +9,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/password_manager/core/browser/form_saver_impl.h"
 #include "components/password_manager/core/browser/password_form.h"
 #include "components/password_manager/core/browser/password_manager_client.h"
diff --git a/components/password_manager/core/browser/form_fetcher_impl_unittest.cc b/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
index 4a51b1b..b6d76298 100644
--- a/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
diff --git a/components/password_manager/core/browser/hsts_query_unittest.cc b/components/password_manager/core/browser/hsts_query_unittest.cc
index b77ebf4..613430b 100644
--- a/components/password_manager/core/browser/hsts_query_unittest.cc
+++ b/components/password_manager/core/browser/hsts_query_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/http/transport_security_state.h"
diff --git a/components/password_manager/core/browser/leak_detection_delegate_unittest.cc b/components/password_manager/core/browser/leak_detection_delegate_unittest.cc
index b6c17a25..8a4b860 100644
--- a/components/password_manager/core/browser/leak_detection_delegate_unittest.cc
+++ b/components/password_manager/core/browser/leak_detection_delegate_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/components/password_manager/core/browser/login_database_async_helper.h b/components/password_manager/core/browser/login_database_async_helper.h
index 2188f77..b2c698d 100644
--- a/components/password_manager/core/browser/login_database_async_helper.h
+++ b/components/password_manager/core/browser/login_database_async_helper.h
@@ -8,6 +8,7 @@
 #include "base/cancelable_callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/password_manager/core/browser/password_store_backend.h"
 #include "components/password_manager/core/browser/password_store_sync.h"
 
diff --git a/components/password_manager/core/browser/login_database_unittest.cc b/components/password_manager/core/browser/login_database_unittest.cc
index 21bcd4a..68fa2066 100644
--- a/components/password_manager/core/browser/login_database_unittest.cc
+++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -21,7 +21,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/components/password_manager/core/browser/password_manager_features_util.cc b/components/password_manager/core/browser/password_manager_features_util.cc
index 1a58d83..86ba5b60 100644
--- a/components/password_manager/core/browser/password_manager_features_util.cc
+++ b/components/password_manager/core/browser/password_manager_features_util.cc
@@ -410,12 +410,6 @@
 
 void ClearAccountStorageSettingsForAllUsers(PrefService* pref_service) {
   DCHECK(pref_service);
-
-  // Record the total number of opted-in accounts before clearing them.
-  base::UmaHistogramExactLinear(
-      "PasswordManager.AccountStorage.ClearedOptInForAllAccounts",
-      GetNumberOfOptedInAccounts(pref_service), 10);
-
   pref_service->ClearPref(prefs::kAccountStoragePerAccountSettings);
 }
 
diff --git a/components/password_manager/core/browser/password_manager_features_util_unittest.cc b/components/password_manager/core/browser/password_manager_features_util_unittest.cc
index a7bf4f7..9d8d0758 100644
--- a/components/password_manager/core/browser/password_manager_features_util_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_features_util_unittest.cc
@@ -492,9 +492,6 @@
       "PasswordManager.AccountStorage.NumOptedInAccountsAfterOptIn", 2);
   histogram_tester.ExpectTotalCount(
       "PasswordManager.AccountStorage.NumOptedInAccountsAfterOptOut", 1);
-  // There was 1 remaining opt-in that was cleared.
-  histogram_tester.ExpectUniqueSample(
-      "PasswordManager.AccountStorage.ClearedOptInForAllAccounts", 1, 1);
 }
 
 TEST_F(PasswordManagerFeaturesUtilTest,
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index dfcd2bd..c4652ff0 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/metrics/user_action_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/components/password_manager/core/browser/password_manager_util_unittest.cc b/components/password_manager/core/browser/password_manager_util_unittest.cc
index 6d81837..d663639 100644
--- a/components/password_manager/core/browser/password_manager_util_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_util_unittest.cc
@@ -228,14 +228,13 @@
   MOCK_METHOD(void, ScanCreditCard, (CreditCardScanCallback), (override));
   MOCK_METHOD(bool, IsFastCheckoutSupported, (), (override));
   MOCK_METHOD(bool,
-              IsFastCheckoutTriggerForm,
-              (const autofill::FormData&, const autofill::FormFieldData&),
+              TryToShowFastCheckout,
+              (const autofill::FormData&,
+               const autofill::FormFieldData&,
+               autofill::AutofillDriver*),
               (override));
-  MOCK_METHOD(bool,
-              ShowFastCheckout,
-              (base::WeakPtr<autofill::FastCheckoutDelegate>),
-              (override));
-  MOCK_METHOD(void, HideFastCheckout, (), (override));
+  MOCK_METHOD(void, HideFastCheckout, (bool), (override));
+  MOCK_METHOD(bool, IsShowingFastCheckoutUI, (), (override));
   MOCK_METHOD(bool, IsTouchToFillCreditCardSupported, (), (override));
   MOCK_METHOD(bool,
               ShowTouchToFillCreditCard,
diff --git a/components/payments/content/payment_manifest_web_data_service.cc b/components/payments/content/payment_manifest_web_data_service.cc
index 46e440c..60cd25b 100644
--- a/components/payments/content/payment_manifest_web_data_service.cc
+++ b/components/payments/content/payment_manifest_web_data_service.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/payments/content/payment_method_manifest_table.h"
 #include "components/payments/content/web_app_manifest_section_table.h"
 #include "components/payments/core/secure_payment_confirmation_credential.h"
diff --git a/components/payments/core/payment_manifest_downloader_unittest.cc b/components/payments/core/payment_manifest_downloader_unittest.cc
index 4b232bf4..9b50ce3c 100644
--- a/components/payments/core/payment_manifest_downloader_unittest.cc
+++ b/components/payments/core/payment_manifest_downloader_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/payments/core/const_csp_checker.h"
 #include "components/payments/core/error_logger.h"
 #include "net/base/net_errors.h"
diff --git a/components/performance_manager/decorators/page_live_state_decorator_unittest.cc b/components/performance_manager/decorators/page_live_state_decorator_unittest.cc
index de2199a3..21da6a25 100644
--- a/components/performance_manager/decorators/page_live_state_decorator_unittest.cc
+++ b/components/performance_manager/decorators/page_live_state_decorator_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/performance_manager/test_support/decorators_utils.h"
 #include "components/performance_manager/test_support/graph_test_harness.h"
diff --git a/components/performance_manager/decorators/process_metrics_decorator.cc b/components/performance_manager/decorators/process_metrics_decorator.cc
index be43bfc..e3e03099c 100644
--- a/components/performance_manager/decorators/process_metrics_decorator.cc
+++ b/components/performance_manager/decorators/process_metrics_decorator.cc
@@ -155,8 +155,8 @@
     if (!process_node)
       continue;
 
-    process_node->set_private_footprint_kb(
-        process_dump_iter.os_dump().private_footprint_kb);
+    uint64_t process_pmf = process_dump_iter.os_dump().private_footprint_kb;
+    process_node->set_private_footprint_kb(process_pmf);
 
     uint64_t process_rss = process_dump_iter.os_dump().resident_set_kb;
     process_node->set_resident_set_kb(process_rss);
@@ -165,18 +165,21 @@
                                          process_node->worker_nodes().size();
 
     if (frame_and_worker_node_count > 0) {
-      // For now, equally split the process' RSS among all of its frames and
-      // workers.
+      // For now, equally split the process' RSS and PMF among all of its frames
+      // and workers.
       // TODO(anthonyvd): This should be more sophisticated, like attributing
-      // the RSS to each node proportionally to its V8 heap size.
+      // the RSS and PMF to each node proportionally to its V8 heap size.
       uint64_t rss_estimate_part = process_rss / frame_and_worker_node_count;
+      uint64_t pmf_estimate_part = process_pmf / frame_and_worker_node_count;
 
       for (FrameNodeImpl* frame : process_node->frame_nodes()) {
         frame->SetResidentSetKbEstimate(rss_estimate_part);
+        frame->SetPrivateFootprintKbEstimate(pmf_estimate_part);
       }
 
       for (WorkerNodeImpl* worker : process_node->worker_nodes()) {
         worker->SetResidentSetKbEstimate(rss_estimate_part);
+        worker->SetPrivateFootprintKbEstimate(pmf_estimate_part);
       }
     }
   }
diff --git a/components/performance_manager/graph/frame_node_impl.cc b/components/performance_manager/graph/frame_node_impl.cc
index 68a39447..379f1e65 100644
--- a/components/performance_manager/graph/frame_node_impl.cc
+++ b/components/performance_manager/graph/frame_node_impl.cc
@@ -250,6 +250,11 @@
   return resident_set_kb_estimate_;
 }
 
+uint64_t FrameNodeImpl::private_footprint_kb_estimate() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return private_footprint_kb_estimate_;
+}
+
 void FrameNodeImpl::SetIsCurrent(bool is_current) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   is_current_.SetAndMaybeNotify(this, is_current);
@@ -305,6 +310,12 @@
   resident_set_kb_estimate_ = rss_estimate;
 }
 
+void FrameNodeImpl::SetPrivateFootprintKbEstimate(
+    uint64_t private_footprint_estimate) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  private_footprint_kb_estimate_ = private_footprint_estimate;
+}
+
 void FrameNodeImpl::OnNavigationCommitted(const GURL& url, bool same_document) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
@@ -583,6 +594,11 @@
   return resident_set_kb_estimate();
 }
 
+uint64_t FrameNodeImpl::GetPrivateFootprintKbEstimate() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return private_footprint_kb_estimate();
+}
+
 void FrameNodeImpl::AddChildFrame(FrameNodeImpl* child_frame_node) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(child_frame_node);
diff --git a/components/performance_manager/graph/frame_node_impl.h b/components/performance_manager/graph/frame_node_impl.h
index eaf5378..20ecbc0 100644
--- a/components/performance_manager/graph/frame_node_impl.h
+++ b/components/performance_manager/graph/frame_node_impl.h
@@ -107,6 +107,7 @@
   const absl::optional<gfx::Rect>& viewport_intersection() const;
   Visibility visibility() const;
   uint64_t resident_set_kb_estimate() const;
+  uint64_t private_footprint_kb_estimate() const;
 
   // Setters are not thread safe.
   void SetIsCurrent(bool is_current);
@@ -116,6 +117,7 @@
   void SetViewportIntersection(const gfx::Rect& viewport_intersection);
   void SetVisibility(Visibility visibility);
   void SetResidentSetKbEstimate(uint64_t rss_estimate);
+  void SetPrivateFootprintKbEstimate(uint64_t private_footprint_estimate);
 
   // Invoked when a navigation is committed in the frame.
   void OnNavigationCommitted(const GURL& url, bool same_document);
@@ -191,6 +193,7 @@
   const absl::optional<gfx::Rect>& GetViewportIntersection() const override;
   Visibility GetVisibility() const override;
   uint64_t GetResidentSetKbEstimate() const override;
+  uint64_t GetPrivateFootprintKbEstimate() const override;
 
   // Properties associated with a Document, which are reset when a
   // different-document navigation is committed in the frame.
@@ -285,6 +288,8 @@
 
   uint64_t resident_set_kb_estimate_ = 0;
 
+  uint64_t private_footprint_kb_estimate_ = 0;
+
   // Does *not* change when a navigation is committed.
   ObservedProperty::NotifiesOnlyOnChanges<
       LifecycleState,
diff --git a/components/performance_manager/graph/page_node_impl.cc b/components/performance_manager/graph/page_node_impl.cc
index 6f93960..054e974 100644
--- a/components/performance_manager/graph/page_node_impl.cc
+++ b/components/performance_manager/graph/page_node_impl.cc
@@ -582,6 +582,18 @@
   return total;
 }
 
+uint64_t PageNodeImpl::EstimatePrivateFootprintSize() const {
+  uint64_t total = 0;
+  performance_manager::GraphOperations::VisitFrameTreePreOrder(
+      this, base::BindRepeating(
+                [](uint64_t* total, const FrameNode* frame_node) {
+                  *total += frame_node->GetPrivateFootprintKbEstimate();
+                  return true;
+                },
+                &total));
+  return total;
+}
+
 void PageNodeImpl::SetLifecycleState(LifecycleState lifecycle_state) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   lifecycle_state_.SetAndMaybeNotify(this, lifecycle_state);
diff --git a/components/performance_manager/graph/page_node_impl.h b/components/performance_manager/graph/page_node_impl.h
index 9710c40..9fac4423 100644
--- a/components/performance_manager/graph/page_node_impl.h
+++ b/components/performance_manager/graph/page_node_impl.h
@@ -223,6 +223,7 @@
   const absl::optional<freezing::FreezingVote>& GetFreezingVote()
       const override;
   uint64_t EstimateResidentSetSize() const override;
+  uint64_t EstimatePrivateFootprintSize() const override;
 
   // NodeBase:
   void OnJoiningGraph() override;
diff --git a/components/performance_manager/graph/policies/process_priority_policy_unittest.cc b/components/performance_manager/graph/policies/process_priority_policy_unittest.cc
index 5c58ba25..b4ebf9e7 100644
--- a/components/performance_manager/graph/policies/process_priority_policy_unittest.cc
+++ b/components/performance_manager/graph/policies/process_priority_policy_unittest.cc
@@ -8,7 +8,6 @@
 #include <utility>
 
 #include "base/test/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/performance_manager/graph/process_node_impl.h"
 #include "components/performance_manager/public/performance_manager.h"
 #include "components/performance_manager/render_process_user_data.h"
diff --git a/components/performance_manager/graph/worker_node_impl.cc b/components/performance_manager/graph/worker_node_impl.cc
index 02a7130..755060e 100644
--- a/components/performance_manager/graph/worker_node_impl.cc
+++ b/components/performance_manager/graph/worker_node_impl.cc
@@ -109,6 +109,11 @@
   resident_set_kb_estimate_ = rss_estimate;
 }
 
+void WorkerNodeImpl::SetPrivateFootprintKbEstimate(uint64_t pmf_estimate) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  private_footprint_kb_estimate_ = pmf_estimate;
+}
+
 void WorkerNodeImpl::OnFinalResponseURLDetermined(const GURL& url) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(url_.is_empty());
@@ -168,6 +173,11 @@
   return resident_set_kb_estimate_;
 }
 
+uint64_t WorkerNodeImpl::private_footprint_kb_estimate() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return private_footprint_kb_estimate_;
+}
+
 void WorkerNodeImpl::OnJoiningGraph() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
@@ -258,6 +268,10 @@
   return resident_set_kb_estimate();
 }
 
+uint64_t WorkerNodeImpl::GetPrivateFootprintKbEstimate() const {
+  return private_footprint_kb_estimate();
+}
+
 void WorkerNodeImpl::AddChildWorker(WorkerNodeImpl* worker_node) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   bool inserted = child_workers_.insert(worker_node).second;
diff --git a/components/performance_manager/graph/worker_node_impl.h b/components/performance_manager/graph/worker_node_impl.h
index 4b18fb2..178fcf3b 100644
--- a/components/performance_manager/graph/worker_node_impl.h
+++ b/components/performance_manager/graph/worker_node_impl.h
@@ -57,6 +57,9 @@
   // Sets the Resident Set Size estimate.
   void SetResidentSetKbEstimate(uint64_t rss_estimate);
 
+  // Sets the Private Footprint Size estimate.
+  void SetPrivateFootprintKbEstimate(uint64_t pmf_estimate);
+
   // Invoked when the worker script was fetched and the final response URL is
   // available.
   void OnFinalResponseURLDetermined(const GURL& url);
@@ -74,6 +77,7 @@
   const base::flat_set<WorkerNodeImpl*>& child_workers() const;
   const PriorityAndReason& priority_and_reason() const;
   uint64_t resident_set_kb_estimate() const;
+  uint64_t private_footprint_kb_estimate() const;
 
   base::WeakPtr<WorkerNodeImpl> GetWeakPtr() {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -109,6 +113,7 @@
   bool VisitChildDedicatedWorkers(const WorkerNodeVisitor&) const override;
   const PriorityAndReason& GetPriorityAndReason() const override;
   uint64_t GetResidentSetKbEstimate() const override;
+  uint64_t GetPrivateFootprintKbEstimate() const override;
 
   // Invoked when |worker_node| becomes a child of this worker.
   void AddChildWorker(WorkerNodeImpl* worker_node);
@@ -151,6 +156,8 @@
 
   uint64_t resident_set_kb_estimate_ = 0;
 
+  uint64_t private_footprint_kb_estimate_ = 0;
+
   // Worker priority information. Set via ExecutionContextPriorityDecorator.
   ObservedProperty::NotifiesOnlyOnChangesWithPreviousValue<
       PriorityAndReason,
diff --git a/components/performance_manager/performance_manager.cc b/components/performance_manager/performance_manager.cc
index bb4e15b..0434506 100644
--- a/components/performance_manager/performance_manager.cc
+++ b/components/performance_manager/performance_manager.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/performance_manager/graph/frame_node_impl.h"
 #include "components/performance_manager/graph/page_node_impl.h"
 #include "components/performance_manager/graph/process_node_impl.h"
diff --git a/components/performance_manager/public/graph/frame_node.h b/components/performance_manager/public/graph/frame_node.h
index 59630cb..74edd107 100644
--- a/components/performance_manager/public/graph/frame_node.h
+++ b/components/performance_manager/public/graph/frame_node.h
@@ -222,6 +222,11 @@
   // kilobytes. This is an estimate because RSS is computed by process, and a
   // process can host multiple frames.
   virtual uint64_t GetResidentSetKbEstimate() const = 0;
+
+  // Returns the most recently estimated private footprint of the frame, in
+  // kilobytes. This is an estimate because it is computed by process, and a
+  // process can host multiple frames.
+  virtual uint64_t GetPrivateFootprintKbEstimate() const = 0;
 };
 
 // Pure virtual observer interface. Derive from this if you want to be forced to
diff --git a/components/performance_manager/public/graph/page_node.h b/components/performance_manager/public/graph/page_node.h
index 84f9124..4fb1485 100644
--- a/components/performance_manager/public/graph/page_node.h
+++ b/components/performance_manager/public/graph/page_node.h
@@ -218,6 +218,8 @@
   virtual PageState GetPageState() const = 0;
 
   virtual uint64_t EstimateResidentSetSize() const = 0;
+
+  virtual uint64_t EstimatePrivateFootprintSize() const = 0;
 };
 
 // Pure virtual observer interface. Derive from this if you want to be forced to
diff --git a/components/performance_manager/public/graph/worker_node.h b/components/performance_manager/public/graph/worker_node.h
index 52a7f0bc..051dc96a 100644
--- a/components/performance_manager/public/graph/worker_node.h
+++ b/components/performance_manager/public/graph/worker_node.h
@@ -121,6 +121,11 @@
   // kilobytes. This is an estimate because RSS is computed by process, and a
   // process can host multiple workers.
   virtual uint64_t GetResidentSetKbEstimate() const = 0;
+
+  // Returns the most recently estimated private footprint of the worker, in
+  // kilobytes. This is an estimate because PMF is computed by process, and a
+  // process can host multiple workers.
+  virtual uint64_t GetPrivateFootprintKbEstimate() const = 0;
 };
 
 // Pure virtual observer interface. Derive from this if you want to be forced to
diff --git a/components/performance_manager/service_worker_context_adapter.cc b/components/performance_manager/service_worker_context_adapter.cc
index 1ea0db6b..a9ef075 100644
--- a/components/performance_manager/service_worker_context_adapter.cc
+++ b/components/performance_manager/service_worker_context_adapter.cc
@@ -9,6 +9,7 @@
 #include "base/notreached.h"
 #include "base/observer_list.h"
 #include "base/scoped_observation.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_process_host_observer.h"
 
diff --git a/components/performance_manager/v8_memory/v8_memory_test_helpers.cc b/components/performance_manager/v8_memory/v8_memory_test_helpers.cc
index 78166af..2739db4 100644
--- a/components/performance_manager/v8_memory/v8_memory_test_helpers.cc
+++ b/components/performance_manager/v8_memory/v8_memory_test_helpers.cc
@@ -12,6 +12,7 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "components/performance_manager/embedder/graph_features.h"
diff --git a/components/permissions/permission_auditing_service.cc b/components/permissions/permission_auditing_service.cc
index 9ab1269..ee15fb4 100644
--- a/components/permissions/permission_auditing_service.cc
+++ b/components/permissions/permission_auditing_service.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/files/file_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/permissions/permission_auditing_database.h"
 
 namespace {
diff --git a/components/permissions/permission_auditing_service_unittest.cc b/components/permissions/permission_auditing_service_unittest.cc
index 14db6edd..d0d545ac 100644
--- a/components/permissions/permission_auditing_service_unittest.cc
+++ b/components/permissions/permission_auditing_service_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
diff --git a/components/plugins/renderer/loadable_plugin_placeholder.cc b/components/plugins/renderer/loadable_plugin_placeholder.cc
index b247fe9..420b260 100644
--- a/components/plugins/renderer/loadable_plugin_placeholder.cc
+++ b/components/plugins/renderer/loadable_plugin_placeholder.cc
@@ -12,7 +12,6 @@
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "content/public/renderer/render_frame.h"
 #include "content/public/renderer/render_thread.h"
diff --git a/components/plugins/renderer/webview_plugin.h b/components/plugins/renderer/webview_plugin.h
index 7079ffe6..1935b842 100644
--- a/components/plugins/renderer/webview_plugin.h
+++ b/components/plugins/renderer/webview_plugin.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/task/sequenced_task_runner_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "third_party/blink/public/mojom/input/focus_type.mojom-forward.h"
diff --git a/components/policy/core/browser/signin/user_cloud_signin_restriction_policy_fetcher_unittest.cc b/components/policy/core/browser/signin/user_cloud_signin_restriction_policy_fetcher_unittest.cc
index d8cafa1..5e6a386 100644
--- a/components/policy/core/browser/signin/user_cloud_signin_restriction_policy_fetcher_unittest.cc
+++ b/components/policy/core/browser/signin/user_cloud_signin_restriction_policy_fetcher_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/features.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
diff --git a/components/policy/core/browser/url_blocklist_manager_unittest.cc b/components/policy/core/browser/url_blocklist_manager_unittest.cc
index 502b922b..36d573c 100644
--- a/components/policy/core/browser/url_blocklist_manager_unittest.cc
+++ b/components/policy/core/browser/url_blocklist_manager_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/callback.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "components/policy/core/common/policy_pref_names.h"
diff --git a/components/policy/core/common/cloud/cloud_policy_core.cc b/components/policy/core/common/cloud/cloud_policy_core.cc
index 4641978..3dd12b3d 100644
--- a/components/policy/core/common/cloud/cloud_policy_core.cc
+++ b/components/policy/core/common/cloud/cloud_policy_core.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/check.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/policy/core/common/cloud/cloud_policy_client.h"
 #include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
 #include "components/policy/core/common/cloud/cloud_policy_service.h"
diff --git a/components/policy/core/common/cloud/cloud_policy_manager.cc b/components/policy/core/common/cloud/cloud_policy_manager.cc
index cb43807..67da198 100644
--- a/components/policy/core/common/cloud/cloud_policy_manager.cc
+++ b/components/policy/core/common/cloud/cloud_policy_manager.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
diff --git a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc
index a2ef6a9..aa1d638 100644
--- a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc
+++ b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc
@@ -7,7 +7,7 @@
 #include <string>
 #include <utility>
 
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/policy/core/common/cloud/cloud_external_data_manager.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
diff --git a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h
index 7880789..744d939be 100644
--- a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h
+++ b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/policy/core/common/cloud/cloud_policy_manager.h"
 #include "services/network/public/cpp/network_connection_tracker.h"
 
diff --git a/components/policy/core/common/cloud/machine_level_user_cloud_policy_store.cc b/components/policy/core/common/cloud/machine_level_user_cloud_policy_store.cc
index cc6de3d..7b9ba273 100644
--- a/components/policy/core/common/cloud/machine_level_user_cloud_policy_store.cc
+++ b/components/policy/core/common/cloud/machine_level_user_cloud_policy_store.cc
@@ -8,6 +8,7 @@
 
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
diff --git a/components/policy/core/common/config_dir_policy_loader.cc b/components/policy/core/common/config_dir_policy_loader.cc
index c5ac2e9..f84624c 100644
--- a/components/policy/core/common/config_dir_policy_loader.cc
+++ b/components/policy/core/common/config_dir_policy_loader.cc
@@ -20,6 +20,7 @@
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/syslog_logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/policy/core/common/policy_bundle.h"
 #include "components/policy/core/common/policy_load_status.h"
 #include "components/policy/core/common/policy_types.h"
diff --git a/components/policy/core/common/management/platform_management_service.cc b/components/policy/core/common/management/platform_management_service.cc
index 24efb394..343f050b 100644
--- a/components/policy/core/common/management/platform_management_service.cc
+++ b/components/policy/core/common/management/platform_management_service.cc
@@ -9,7 +9,6 @@
 #include "base/no_destructor.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 #if BUILDFLAG(IS_MAC)
diff --git a/components/policy/core/common/policy_loader_ios.mm b/components/policy/core/common/policy_loader_ios.mm
index 3506eeb..2b6d88c 100644
--- a/components/policy/core/common/policy_loader_ios.mm
+++ b/components/policy/core/common/policy_loader_ios.mm
@@ -15,6 +15,7 @@
 #import "base/mac/foundation_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "components/policy/core/common/mac_util.h"
 #include "components/policy/core/common/policy_bundle.h"
diff --git a/components/policy/core/common/policy_loader_ios_unittest.mm b/components/policy/core/common/policy_loader_ios_unittest.mm
index 7cc53ec..12b00578 100644
--- a/components/policy/core/common/policy_loader_ios_unittest.mm
+++ b/components/policy/core/common/policy_loader_ios_unittest.mm
@@ -13,6 +13,7 @@
 #include "base/json/json_string_value_serializer.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/values.h"
diff --git a/components/policy/core/common/policy_loader_lacros.cc b/components/policy/core/common/policy_loader_lacros.cc
index b7b79fac9..4a67131 100644
--- a/components/policy/core/common/policy_loader_lacros.cc
+++ b/components/policy/core/common/policy_loader_lacros.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/syslog_logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/lacros/lacros_service.h"
 #include "chromeos/startup/browser_params_proxy.h"
 #include "components/policy/core/common/cloud/affiliation.h"
diff --git a/components/policy/core/common/policy_loader_mac.mm b/components/policy/core/common/policy_loader_mac.mm
index 6c85af8..132d97e 100644
--- a/components/policy/core/common/policy_loader_mac.mm
+++ b/components/policy/core/common/policy_loader_mac.mm
@@ -17,6 +17,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/components/power_bookmarks/core/power_bookmark_service.cc b/components/power_bookmarks/core/power_bookmark_service.cc
index e470407..7ffeb217 100644
--- a/components/power_bookmarks/core/power_bookmark_service.cc
+++ b/components/power_bookmarks/core/power_bookmark_service.cc
@@ -6,6 +6,7 @@
 
 #include "base/feature_list.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/power_bookmarks/common/power.h"
 #include "components/power_bookmarks/common/power_bookmark_metrics.h"
diff --git a/components/power_bookmarks/core/power_bookmark_service.h b/components/power_bookmarks/core/power_bookmark_service.h
index a74a682..c12b078b6 100644
--- a/components/power_bookmarks/core/power_bookmark_service.h
+++ b/components/power_bookmarks/core/power_bookmark_service.h
@@ -12,6 +12,7 @@
 #include "base/functional/callback.h"
 #include "base/guid.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
diff --git a/components/power_bookmarks/storage/power_bookmark_database_impl_unittest.cc b/components/power_bookmarks/storage/power_bookmark_database_impl_unittest.cc
index a5c4480..1964e9b 100644
--- a/components/power_bookmarks/storage/power_bookmark_database_impl_unittest.cc
+++ b/components/power_bookmarks/storage/power_bookmark_database_impl_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/path_service.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "build/build_config.h"
 #include "components/power_bookmarks/common/search_params.h"
diff --git a/components/power_scheduler/power_mode_arbiter.cc b/components/power_scheduler/power_mode_arbiter.cc
index 8cb4673..0b19b5a0 100644
--- a/components/power_scheduler/power_mode_arbiter.cc
+++ b/components/power_scheduler/power_mode_arbiter.cc
@@ -11,6 +11,7 @@
 #include "base/power_monitor/power_monitor.h"
 #include "base/power_monitor/power_observer.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/components/power_scheduler/power_mode_arbiter.h b/components/power_scheduler/power_mode_arbiter.h
index da68af8..44d24509 100644
--- a/components/power_scheduler/power_mode_arbiter.h
+++ b/components/power_scheduler/power_mode_arbiter.h
@@ -13,6 +13,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/time/time.h"
diff --git a/components/prefs/pref_service.cc b/components/prefs/pref_service.cc
index a11fc98..6d6f029 100644
--- a/components/prefs/pref_service.cc
+++ b/components/prefs/pref_service.cc
@@ -23,7 +23,6 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "build/chromeos_buildflags.h"
 #include "components/prefs/default_pref_store.h"
diff --git a/components/prefs/testing_pref_store.cc b/components/prefs/testing_pref_store.cc
index 04b1438..49d0d82 100644
--- a/components/prefs/testing_pref_store.cc
+++ b/components/prefs/testing_pref_store.cc
@@ -10,7 +10,6 @@
 
 #include "base/json/json_writer.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/privacy_sandbox/BUILD.gn b/components/privacy_sandbox/BUILD.gn
index 210cc0c2..dd35a03 100644
--- a/components/privacy_sandbox/BUILD.gn
+++ b/components/privacy_sandbox/BUILD.gn
@@ -90,6 +90,7 @@
   deps = [
     ":privacy_sandbox",
     ":privacy_sandbox_prefs",
+    "//base/test:test_support",
     "//components/content_settings/core/browser:browser",
     "//components/content_settings/core/common:common",
     "//components/content_settings/core/test:test_support",
diff --git a/components/privacy_sandbox/privacy_sandbox_settings.cc b/components/privacy_sandbox/privacy_sandbox_settings.cc
index b1dc5e8..882ac1c 100644
--- a/components/privacy_sandbox/privacy_sandbox_settings.cc
+++ b/components/privacy_sandbox/privacy_sandbox_settings.cc
@@ -7,6 +7,7 @@
 
 #include "base/feature_list.h"
 #include "base/json/values_util.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/observer_list.h"
 #include "base/ranges/algorithm.h"
 #include "base/time/time.h"
@@ -99,13 +100,18 @@
 
 PrivacySandboxSettings::~PrivacySandboxSettings() = default;
 
+PrivacySandboxSettings::Status PrivacySandboxSettings::GetM1TopicAllowedStatus()
+    const {
+  return GetM1PrivacySandboxApiEnabledStatus(
+      prefs::kPrivacySandboxM1TopicsEnabled);
+}
+
 bool PrivacySandboxSettings::IsTopicsAllowed() const {
   // M1 specific
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    // TODO(crbug.com/1395437): Record metrics here when privacy sandbox is not
-    // allowed.
-    return IsAllowed(GetM1PrivacySandboxApiEnabledStatus(
-        prefs::kPrivacySandboxM1TopicsEnabled));
+    Status status = GetM1TopicAllowedStatus();
+    base::UmaHistogramEnumeration("PrivacySandbox.IsTopicsAllowed", status);
+    return IsAllowed(status);
   }
 
   // Topics API calculation should be prevented if the user has blocked 3PC
@@ -128,10 +134,13 @@
     const GURL& url) const {
   // M1 specific
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    // TODO(crbug.com/1395437): Record metrics here when privacy sandbox is not
-    // allowed due to site access blocked.
-    return IsTopicsAllowed() &&
-           IsAllowed(GetSiteAccessAllowedStatus(top_frame_origin, url));
+    Status status = GetM1TopicAllowedStatus();
+    if (IsAllowed(status)) {
+      status = GetSiteAccessAllowedStatus(top_frame_origin, url);
+    }
+    base::UmaHistogramEnumeration("PrivacySandbox.IsTopicsAllowedForContext",
+                                  status);
+    return IsAllowed(status);
   }
 
   // If the Topics API is disabled completely, it is not available in any
@@ -209,17 +218,30 @@
       prefs::kPrivacySandboxTopicsDataAccessibleSince);
 }
 
+PrivacySandboxSettings::Status
+PrivacySandboxSettings::GetM1AttributionReportingAllowedStatus(
+    const url::Origin& top_frame_origin,
+    const url::Origin& reporting_origin) const {
+  Status status = GetM1PrivacySandboxApiEnabledStatus(
+      prefs::kPrivacySandboxM1AdMeasurementEnabled);
+  if (!IsAllowed(status)) {
+    return status;
+  }
+
+  return GetSiteAccessAllowedStatus(top_frame_origin,
+                                    reporting_origin.GetURL());
+}
+
 bool PrivacySandboxSettings::IsAttributionReportingAllowed(
     const url::Origin& top_frame_origin,
     const url::Origin& reporting_origin) const {
   // M1 specific
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    // TODO(crbug.com/1395437): Record metrics here when privacy sandbox is not
-    // allowed.
-    return IsAllowed(GetM1PrivacySandboxApiEnabledStatus(
-               prefs::kPrivacySandboxM1AdMeasurementEnabled)) &&
-           IsAllowed(GetSiteAccessAllowedStatus(top_frame_origin,
-                                                reporting_origin.GetURL()));
+    Status status = GetM1AttributionReportingAllowedStatus(top_frame_origin,
+                                                           reporting_origin);
+    base::UmaHistogramEnumeration(
+        "PrivacySandbox.IsAttributionReportingAllowed", status);
+    return IsAllowed(status);
   }
 
   return IsPrivacySandboxEnabledForContext(top_frame_origin,
@@ -232,12 +254,17 @@
     const url::Origin& reporting_origin) const {
   // M1 specific
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    return IsAttributionReportingAllowed(
-               /*top_frame_origin=*/source_origin,
-               /*reporting_origin=*/reporting_origin) &&
-           IsAttributionReportingAllowed(
-               /*top_frame_origin=*/destination_origin,
-               /*reporting_origin=*/reporting_origin);
+    Status status = GetM1AttributionReportingAllowedStatus(
+        /*top_frame_origin=*/source_origin,
+        /*reporting_origin=*/reporting_origin);
+    if (IsAllowed(status)) {
+      status = GetM1AttributionReportingAllowedStatus(
+          /*top_frame_origin=*/destination_origin,
+          /*reporting_origin=*/reporting_origin);
+    }
+    base::UmaHistogramEnumeration("PrivacySandbox.MaySendAttributionReport",
+                                  status);
+    return IsAllowed(status);
   }
 
   // The |reporting_origin| needs to have been accessible in both source
@@ -340,16 +367,25 @@
   return true;
 }
 
+PrivacySandboxSettings::Status PrivacySandboxSettings::GetM1FledgeAllowedStatus(
+    const url::Origin& top_frame_origin,
+    const url::Origin& auction_party) const {
+  Status status = GetM1PrivacySandboxApiEnabledStatus(
+      prefs::kPrivacySandboxM1FledgeEnabled);
+  if (!IsAllowed(status)) {
+    return status;
+  }
+
+  return GetSiteAccessAllowedStatus(top_frame_origin, auction_party.GetURL());
+}
+
 bool PrivacySandboxSettings::IsFledgeAllowed(
     const url::Origin& top_frame_origin,
     const url::Origin& auction_party) const {
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    // TODO(crbug.com/1395437): Record metrics here when privacy sandbox is not
-    // allowed.
-    return IsAllowed(GetM1PrivacySandboxApiEnabledStatus(
-               prefs::kPrivacySandboxM1FledgeEnabled)) &&
-           IsAllowed(GetSiteAccessAllowedStatus(top_frame_origin,
-                                                auction_party.GetURL()));
+    Status status = GetM1FledgeAllowedStatus(top_frame_origin, auction_party);
+    base::UmaHistogramEnumeration("PrivacySandbox.IsFledgeAllowed", status);
+    return IsAllowed(status);
   }
 
   return IsPrivacySandboxEnabledForContext(top_frame_origin,
@@ -360,11 +396,14 @@
     const url::Origin& top_frame_origin,
     const url::Origin& accessing_origin) const {
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    // TODO(crbug.com/1395437): Record metrics here when privacy sandbox is not
-    // allowed.
-    return IsAllowed(GetPrivacySandboxAllowedStatus()) &&
-           IsAllowed(GetSiteAccessAllowedStatus(top_frame_origin,
-                                                accessing_origin.GetURL()));
+    Status status = GetPrivacySandboxAllowedStatus();
+    if (IsAllowed(status)) {
+      status = GetSiteAccessAllowedStatus(top_frame_origin,
+                                          accessing_origin.GetURL());
+    }
+    base::UmaHistogramEnumeration("PrivacySandbox.IsSharedStorageAllowed",
+                                  status);
+    return IsAllowed(status);
   }
 
   // Ensures that Shared Storage is only allowed if both Privacy Sandbox is
@@ -377,9 +416,11 @@
     const url::Origin& top_frame_origin,
     const url::Origin& accessing_origin) const {
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    // TODO(crbug.com/1395437): Record metrics here when privacy sandbox is not
-    // allowed.
-    return IsFledgeAllowed(top_frame_origin, accessing_origin);
+    Status status =
+        GetM1FledgeAllowedStatus(top_frame_origin, accessing_origin);
+    base::UmaHistogramEnumeration(
+        "PrivacySandbox.IsSharedStorageSelectURLAllowed", status);
+    return IsAllowed(status);
   }
 
   return IsSharedStorageAllowed(top_frame_origin, accessing_origin);
@@ -389,9 +430,11 @@
     const url::Origin& top_frame_origin,
     const url::Origin& reporting_origin) const {
   if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) {
-    // TODO(crbug.com/1395437): Record metrics here when privacy sandbox is not
-    // allowed.
-    return IsAttributionReportingAllowed(top_frame_origin, reporting_origin);
+    Status status = GetM1AttributionReportingAllowedStatus(top_frame_origin,
+                                                           reporting_origin);
+    base::UmaHistogramEnumeration("PrivacySandbox.IsPrivateAggregationAllowed",
+                                  status);
+    return IsAllowed(status);
   }
 
   return IsPrivacySandboxEnabledForContext(top_frame_origin,
@@ -520,7 +563,7 @@
              host_content_settings_map_->GetContentSetting(
                  url, top_frame_origin.GetURL(), ContentSettingsType::COOKIES))
              ? Status::kAllowed
-             : Status::kSiteDataAccesssDisallowed;
+             : Status::kSiteDataAccessBlocked;
 }
 
 PrivacySandboxSettings::Status
diff --git a/components/privacy_sandbox/privacy_sandbox_settings.h b/components/privacy_sandbox/privacy_sandbox_settings.h
index c20836f..e80c508 100644
--- a/components/privacy_sandbox/privacy_sandbox_settings.h
+++ b/components/privacy_sandbox/privacy_sandbox_settings.h
@@ -236,13 +236,17 @@
   void SetTopicsDataAccessibleFromNow() const;
 
  private:
+  friend class PrivacySandboxSettingsM1Test;
+
+  // These values are persisted to logs. Entries should not be renumbered and
+  // numeric values should never be reused.
   enum class Status {
     kAllowed,
     kRestricted,
     kIncognitoProfile,
     kApisDisabled,
-    kSiteDataAccesssDisallowed,
-    kMaxValue = kSiteDataAccesssDisallowed,
+    kSiteDataAccessBlocked,
+    kMaxValue = kSiteDataAccessBlocked,
   };
 
   static bool IsAllowed(Status status);
@@ -262,6 +266,21 @@
   Status GetM1PrivacySandboxApiEnabledStatus(
       const std::string& pref_name) const;
 
+  // Whether the Topics API can be allowed given the current
+  // environment or the reason why it is not allowed.
+  Status GetM1TopicAllowedStatus() const;
+
+  // Whether Attribution Reporting API can be allowed given the current
+  // environment or the reason why it is not allowed.
+  Status GetM1AttributionReportingAllowedStatus(
+      const url::Origin& top_frame_origin,
+      const url::Origin& reporting_origin) const;
+
+  // Whether Fledge can be allowed given the current environment or the reason
+  // why it is not allowed.
+  Status GetM1FledgeAllowedStatus(const url::Origin& top_frame_origin,
+                                  const url::Origin& accessing_origin) const;
+
   base::ObserverList<Observer>::Unchecked observers_;
 
   std::unique_ptr<Delegate> delegate_;
diff --git a/components/privacy_sandbox/privacy_sandbox_settings_unittest.cc b/components/privacy_sandbox/privacy_sandbox_settings_unittest.cc
index 3eb49de1..5b9dddf1 100644
--- a/components/privacy_sandbox/privacy_sandbox_settings_unittest.cc
+++ b/components/privacy_sandbox/privacy_sandbox_settings_unittest.cc
@@ -77,6 +77,21 @@
 constexpr auto kIsPrivateAggregationAllowed =
     OutputKey::kIsPrivateAggregationAllowed;
 
+constexpr auto kIsTopicsAllowedMetric = OutputKey::kIsTopicsAllowedMetric;
+constexpr auto kIsTopicsAllowedForContextMetric =
+    OutputKey::kIsTopicsAllowedForContextMetric;
+constexpr auto kIsFledgeAllowedMetric = OutputKey::kIsFledgeAllowedMetric;
+constexpr auto kIsAttributionReportingAllowedMetric =
+    OutputKey::kIsAttributionReportingAllowedMetric;
+constexpr auto kMaySendAttributionReportMetric =
+    OutputKey::kMaySendAttributionReportMetric;
+constexpr auto kIsSharedStorageAllowedMetric =
+    OutputKey::kIsSharedStorageAllowedMetric;
+constexpr auto kIsSharedStorageSelectURLAllowedMetric =
+    OutputKey::kIsSharedStorageSelectURLAllowedMetric;
+constexpr auto kIsPrivateAggregationAllowedMetric =
+    OutputKey::kIsPrivateAggregationAllowedMetric;
+
 // using enum ContentSetting;
 constexpr auto CONTENT_SETTING_ALLOW = ContentSetting::CONTENT_SETTING_ALLOW;
 constexpr auto CONTENT_SETTING_BLOCK = ContentSetting::CONTENT_SETTING_BLOCK;
@@ -988,6 +1003,8 @@
   }
 
  protected:
+  using Status = PrivacySandboxSettings::Status;
+
   void RunTestCase(const TestState& test_state,
                    const TestInput& test_input,
                    const TestOutput& test_output) {
@@ -1039,7 +1056,14 @@
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
                kIsPrivateAggregationAllowed},
-           true}});
+           true},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kAllowed)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, ApiPreferenceDisabled) {
@@ -1065,7 +1089,15 @@
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageSelectURLAllowed, kIsPrivateAggregationAllowed},
            false},
-          {kIsSharedStorageAllowed, true}});
+          {kIsSharedStorageAllowed, true},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kApisDisabled)},
+          {kIsSharedStorageAllowedMetric, static_cast<int>(Status::kAllowed)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, CookieControlsModeHasNoEffect) {
@@ -1092,7 +1124,14 @@
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
                kIsPrivateAggregationAllowed},
-           true}});
+           true},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kAllowed)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, SiteDataBlockApplies) {
@@ -1116,13 +1155,22 @@
            url::Origin::Create(GURL("https://source-origin.com"))},
           {kAdMeasurementDestinationOrigin,
            url::Origin::Create(GURL("https://dest-origin.com"))}},
-      TestOutput{{kIsTopicsAllowed, true},
-                 {MultipleOutputKeys{
-                      kIsTopicsAllowedForContext, kIsFledgeAllowed,
-                      kIsAttributionReportingAllowed, kMaySendAttributionReport,
-                      kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
-                      kIsPrivateAggregationAllowed},
-                  false}});
+      TestOutput{
+          {kIsTopicsAllowed, true},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedForContext, kIsFledgeAllowed,
+               kIsAttributionReportingAllowed, kMaySendAttributionReport,
+               kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
+               kIsPrivateAggregationAllowed},
+           false},
+          {kIsTopicsAllowedMetric, static_cast<int>(Status::kAllowed)},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedForContextMetric, kIsFledgeAllowedMetric,
+               kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kSiteDataAccessBlocked)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, SiteDataAllowDoesntOverridePref) {
@@ -1154,7 +1202,15 @@
                kIsTopicsAllowed, kIsTopicsAllowedForContext, kIsFledgeAllowed,
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageSelectURLAllowed, kIsPrivateAggregationAllowed},
-           false}});
+           false},
+          {kIsSharedStorageAllowedMetric, static_cast<int>(Status::kAllowed)},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kApisDisabled)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, SiteDataAllowExceptions) {
@@ -1184,7 +1240,14 @@
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
                kIsPrivateAggregationAllowed},
-           true}});
+           true},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kAllowed)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, UnrelatedSiteDataBlock) {
@@ -1214,7 +1277,14 @@
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
                kIsPrivateAggregationAllowed},
-           true}});
+           true},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kAllowed)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, UnrelatedSiteDataAllow) {
@@ -1238,13 +1308,22 @@
            url::Origin::Create(GURL("https://source-origin.com"))},
           {kAdMeasurementDestinationOrigin,
            url::Origin::Create(GURL("https://dest-origin.com"))}},
-      TestOutput{{kIsTopicsAllowed, true},
-                 {MultipleOutputKeys{
-                      kIsTopicsAllowedForContext, kIsFledgeAllowed,
-                      kIsAttributionReportingAllowed, kMaySendAttributionReport,
-                      kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
-                      kIsPrivateAggregationAllowed},
-                  false}});
+      TestOutput{
+          {kIsTopicsAllowed, true},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedForContext, kIsFledgeAllowed,
+               kIsAttributionReportingAllowed, kMaySendAttributionReport,
+               kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
+               kIsPrivateAggregationAllowed},
+           false},
+          {kIsTopicsAllowedMetric, static_cast<int>(Status::kAllowed)},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedForContextMetric, kIsFledgeAllowedMetric,
+               kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kSiteDataAccessBlocked)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, ApisAreOffInIncognito) {
@@ -1270,7 +1349,14 @@
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
                kIsPrivateAggregationAllowed},
-           false}});
+           false},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kIncognitoProfile)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test, ApisAreOffForRestrictedAccounts) {
@@ -1296,7 +1382,14 @@
                kIsAttributionReportingAllowed, kMaySendAttributionReport,
                kIsSharedStorageAllowed, kIsSharedStorageSelectURLAllowed,
                kIsPrivateAggregationAllowed},
-           false}});
+           false},
+          {MultipleOutputKeys{
+               kIsTopicsAllowedMetric, kIsTopicsAllowedForContextMetric,
+               kIsFledgeAllowedMetric, kIsAttributionReportingAllowedMetric,
+               kMaySendAttributionReportMetric, kIsSharedStorageAllowedMetric,
+               kIsSharedStorageSelectURLAllowedMetric,
+               kIsPrivateAggregationAllowedMetric},
+           static_cast<int>(Status::kRestricted)}});
 }
 
 TEST_F(PrivacySandboxSettingsM1Test,
diff --git a/components/privacy_sandbox/privacy_sandbox_test_util.cc b/components/privacy_sandbox/privacy_sandbox_test_util.cc
index 32491a7..b1c8efa 100644
--- a/components/privacy_sandbox/privacy_sandbox_test_util.cc
+++ b/components/privacy_sandbox/privacy_sandbox_test_util.cc
@@ -4,7 +4,10 @@
 
 #include "components/privacy_sandbox/privacy_sandbox_test_util.h"
 
+#include <tuple>
+
 #include "base/feature_list.h"
+#include "base/test/metrics/histogram_tester.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/pref_names.h"
@@ -235,6 +238,117 @@
                     top_frame_origin, reporting_origin));
       return;
     }
+
+    case (OutputKey::kIsTopicsAllowedMetric): {
+      SCOPED_TRACE("Check Output: PrivacySandbox.IsTopicsAllowed");
+      base::HistogramTester histogram_tester;
+      std::ignore = privacy_sandbox_settings->IsTopicsAllowed();
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample("PrivacySandbox.IsTopicsAllowed",
+                                          histogram_value, 1);
+      return;
+    }
+    case (OutputKey::kIsTopicsAllowedForContextMetric): {
+      SCOPED_TRACE("Check Output: PrivacySandbox.IsTopicsAllowedForContext");
+      base::HistogramTester histogram_tester;
+      auto top_frame_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kTopFrameOrigin, input);
+      auto topics_url = GetItemValueForKey<GURL>(InputKey::kTopicsURL, input);
+      std::ignore = privacy_sandbox_settings->IsTopicsAllowedForContext(
+          top_frame_origin, topics_url);
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample(
+          "PrivacySandbox.IsTopicsAllowedForContext", histogram_value, 1);
+      return;
+    }
+    case (OutputKey::kIsFledgeAllowedMetric): {
+      SCOPED_TRACE("Check Output: PrivacySandbox.IsFledgeAllowed");
+      base::HistogramTester histogram_tester;
+      auto top_frame_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kTopFrameOrigin, input);
+      auto fledge_auction_party_origin = GetItemValueForKey<url::Origin>(
+          InputKey::kFledgeAuctionPartyOrigin, input);
+      std::ignore = privacy_sandbox_settings->IsFledgeAllowed(
+          top_frame_origin, fledge_auction_party_origin);
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample("PrivacySandbox.IsFledgeAllowed",
+                                          histogram_value, 1);
+      return;
+    }
+    case (OutputKey::kIsAttributionReportingAllowedMetric): {
+      SCOPED_TRACE(
+          "Check Output: PrivacySandbox.IsAttributionReportingAllowed");
+      base::HistogramTester histogram_tester;
+      auto top_frame_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kTopFrameOrigin, input);
+      auto reporting_origin = GetItemValueForKey<url::Origin>(
+          InputKey::kAdMeasurementReportingOrigin, input);
+      std::ignore = privacy_sandbox_settings->IsAttributionReportingAllowed(
+          top_frame_origin, reporting_origin);
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample(
+          "PrivacySandbox.IsAttributionReportingAllowed", histogram_value, 1);
+      return;
+    }
+    case (OutputKey::kMaySendAttributionReportMetric): {
+      SCOPED_TRACE("Check Output: PrivacySandbox.MaySendAttributionReport");
+      base::HistogramTester histogram_tester;
+      auto source_origin = GetItemValueForKey<url::Origin>(
+          InputKey::kAdMeasurementSourceOrigin, input);
+      auto destination_origin = GetItemValueForKey<url::Origin>(
+          InputKey::kAdMeasurementDestinationOrigin, input);
+      auto reporting_origin = GetItemValueForKey<url::Origin>(
+          InputKey::kAdMeasurementReportingOrigin, input);
+      std::ignore = privacy_sandbox_settings->MaySendAttributionReport(
+          source_origin, destination_origin, reporting_origin);
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample(
+          "PrivacySandbox.MaySendAttributionReport", histogram_value, 1);
+      return;
+    }
+    case (OutputKey::kIsSharedStorageAllowedMetric): {
+      SCOPED_TRACE("Check Output: PrivacySandbox.IsSharedStorageAllowed");
+      base::HistogramTester histogram_tester;
+      auto top_frame_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kTopFrameOrigin, input);
+      auto accessing_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kAccessingOrigin, input);
+      std::ignore = privacy_sandbox_settings->IsSharedStorageAllowed(
+          top_frame_origin, accessing_origin);
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample(
+          "PrivacySandbox.IsSharedStorageAllowed", histogram_value, 1);
+      return;
+    }
+    case (OutputKey::kIsSharedStorageSelectURLAllowedMetric): {
+      SCOPED_TRACE(
+          "Check Output: PrivacySandbox.IsSharedStorageSelectURLAllowed");
+      base::HistogramTester histogram_tester;
+      auto top_frame_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kTopFrameOrigin, input);
+      auto accessing_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kAccessingOrigin, input);
+      std::ignore = privacy_sandbox_settings->IsSharedStorageSelectURLAllowed(
+          top_frame_origin, accessing_origin);
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample(
+          "PrivacySandbox.IsSharedStorageSelectURLAllowed", histogram_value, 1);
+      return;
+    }
+    case (OutputKey::kIsPrivateAggregationAllowedMetric): {
+      SCOPED_TRACE("Check Output: PrivacySandbox.IsPrivateAggregationAllowed");
+      base::HistogramTester histogram_tester;
+      auto top_frame_origin =
+          GetItemValueForKey<url::Origin>(InputKey::kTopFrameOrigin, input);
+      auto reporting_origin = GetItemValueForKey<url::Origin>(
+          InputKey::kAdMeasurementReportingOrigin, input);
+      std::ignore = privacy_sandbox_settings->IsPrivateAggregationAllowed(
+          top_frame_origin, reporting_origin);
+      auto histogram_value = GetItemValue<int>(output_value);
+      histogram_tester.ExpectUniqueSample(
+          "PrivacySandbox.IsPrivateAggregationAllowed", histogram_value, 1);
+      return;
+    }
   }
 }
 
diff --git a/components/privacy_sandbox/privacy_sandbox_test_util.h b/components/privacy_sandbox/privacy_sandbox_test_util.h
index aeb6423a..bbf008f 100644
--- a/components/privacy_sandbox/privacy_sandbox_test_util.h
+++ b/components/privacy_sandbox/privacy_sandbox_test_util.h
@@ -91,6 +91,14 @@
   kIsSharedStorageAllowed = 6,
   kIsSharedStorageSelectURLAllowed = 7,
   kIsPrivateAggregationAllowed = 8,
+  kIsTopicsAllowedMetric = 9,
+  kIsTopicsAllowedForContextMetric = 10,
+  kIsFledgeAllowedMetric = 11,
+  kIsAttributionReportingAllowedMetric = 12,
+  kMaySendAttributionReportMetric = 13,
+  kIsSharedStorageAllowedMetric = 14,
+  kIsSharedStorageSelectURLAllowedMetric = 15,
+  kIsPrivateAggregationAllowedMetric = 16,
 };
 
 // To allow multiple input keys to map to the same value, without having to
@@ -120,7 +128,8 @@
                                         GURL,
                                         content_settings::CookieControlsMode,
                                         SiteDataExceptions,
-                                        ContentSetting>;
+                                        ContentSetting,
+                                        int>;
 
 using TestState = std::map<TestKey<StateKey>, TestCaseItemValue>;
 using TestInput = std::map<TestKey<InputKey>, TestCaseItemValue>;
diff --git a/components/privacy_sandbox_strings.grdp b/components/privacy_sandbox_strings.grdp
index fb5fbe3..5b300c2 100644
--- a/components/privacy_sandbox_strings.grdp
+++ b/components/privacy_sandbox_strings.grdp
@@ -177,6 +177,58 @@
     More
   </message>
 
+  <!-- Privacy Sandbox v4 - Topics settings page. -->
+  <!-- Privacy Sandbox Settings 4 - Topics Page -->
+  <message name="IDS_SETTINGS_TOPICS_PAGE_TITLE" translateable="false" desc="Title for the Topics preferences page." formatter_data="android_java">
+    Mauris interdum lectus vitae lacinia
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_TOGGLE_LABEL" translateable="false" desc="Label for the toggle in the Topics preferences page." formatter_data="android_java">
+    Nunc gravida condimentum consectetur
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_TOGGLE_SUB_LABEL" translateable="false" desc="Subabel for the toggle in the Topics preferences page." formatter_data="android_java">
+    Vivamus nibh turpis, varius quis nisi vel, porta laoreet tellus. Mauris porta imperdiet venenatis
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_HEADING" translateable="false" desc="Section title for the current Topics list underneath toggle in the Topics preferences page." formatter_data="android_java">
+    Mauris at lectus
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_CANONICAL" translateable="false" desc="Section description for the current Topics list.">
+    Nulla tincidunt iaculis nulla, sit amet viverra massa luctus nec. Integer eget pellentesque magna, et venenatis lorem. Integer a porta elit, eget bibendum neque. Learn More.
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_DISABLED_CANONICAL" translateable="false" desc="Section description for the current Topics list when Topics is disabled in the Topics preferences page.">
+    Sed porta viverra lacus ut euismod. Integer a cursus metus, ac ultricies libero. Learn More.
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_CURRENT_TOPICS_DESCRIPTION_EMPTY_CANONICAL" translateable="false" desc="Section description for the current Topics list when the Topics list is empty in the Topics preferences page.">
+    Curabitur sagittis sapien ut turpis interdum, vitae porttitor sem pretium. Vestibulum sem mauris, ultrices ac massa sit amet, sodales aliquet est. Learn more.
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCK_TOPIC" translateable="false" desc="String on the button to block a topic in the Topics preferences page.">
+    Pellent
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_HEADING" translateable="false" desc="Section title for the blocked topics list in the Topics preferences page." formatter_data="android_java">
+    Integer faucibus metus
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_DESCRIPTION" translateable="false" desc="Section description for the blocked topics list in the Topics preferences page." formatter_data="android_java">
+    Donec fringilla justo vel ligula finibus, ut rutrum lectus vestibulum. Suspendisse vestibulum lorem lacinia nulla consequat auctor.
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_BLOCKED_TOPICS_DESCRIPTION_EMPTY" translateable="false" desc="Section description for the blocked topics list when there are no blocked topics in the Topics preferences page." formatter_data="android_java">
+    Donec commodo sem non augue blandit, ullamcorper aliquam enim fermentum
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_ALLOW_TOPIC" translateable="false" desc="String on the button to re-allow a topic in the Topics preferences page.">
+    Aenean
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_HEADING" translateable="false" desc="Heading on 'Learn more' dialog in the Topics preferences page." formatter_data="android_java">
+    Suspendisse sit amet consectetur sapien
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_1" translateable="false" desc="First bullet on 'Learn more' dialog in the Topics preferences page." formatter_data="android_java">
+    Vestibulum arcu elit, pulvinar eu orci at, semper finibus metus. Donec sollicitudin, risus eu congue ullamcorper, nisl lorem consectetur risus, nec vulputate risus eros quis diam.
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_2" translateable="false" desc="Second bullet on 'Learn more' dialog in the Topics preferences page." formatter_data="android_java">
+    Aenean vel turpis id arcu viverra aliquet. Donec convallis, felis eget dictum venenatis, odio orci bibendum neque, quis egestas sem turpis et dui.
+  </message>
+  <message name="IDS_SETTINGS_TOPICS_PAGE_LEARN_MORE_BULLET_3" translateable="false" desc="Third bullet on 'Learn more' dialog in the Topics preferences page." formatter_data="android_java">
+    Integer convallis congue ex non vehicula. Nam vel vestibulum ante, ut consectetur ex. Duis semper lectus velit, id porttitor massa mattis sit amet. Integer pulvinar non nisi et tincidunt. Proin aliquam turpis massa, eget tincidunt orci vulputate vitae.
+  </message>
+
+
   <!-- Topics API Taxonomy -->
   <!-- These entries have been script generated to ensure consistent mappings. If you are editing these directly, you are likely doing something wrong -->
   <message name="IDS_PRIVACY_SANDBOX_TOPICS_INVALID_TOPIC" desc="Shown when an unknown Topic has been provided by the categorization service. This is indicative of an error state that is not expected to occur">
diff --git a/components/query_tiles/internal/tile_service_impl.cc b/components/query_tiles/internal/tile_service_impl.cc
index cf6c77a..6756dd2 100644
--- a/components/query_tiles/internal/tile_service_impl.cc
+++ b/components/query_tiles/internal/tile_service_impl.cc
@@ -11,7 +11,6 @@
 #include "base/callback_helpers.h"
 #include "base/guid.h"
 #include "base/rand_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/query_tiles/internal/proto_conversion.h"
 #include "components/query_tiles/internal/tile_config.h"
 
diff --git a/components/query_tiles/internal/tile_service_impl_unittest.cc b/components/query_tiles/internal/tile_service_impl_unittest.cc
index e947693..58cb3bdb 100644
--- a/components/query_tiles/internal/tile_service_impl_unittest.cc
+++ b/components/query_tiles/internal/tile_service_impl_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/test/bind.h"
 #include "base/test/simple_test_clock.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/query_tiles/internal/image_prefetcher.h"
 #include "components/query_tiles/test/empty_logger.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
diff --git a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
index c8ddc72e..a125a37f 100644
--- a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
+++ b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
@@ -4,6 +4,7 @@
 
 #include "base/memory/raw_ptr.h"
 
+#import "base/task/single_thread_task_runner.h"
 #import "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h"
 
 #import <objc/runtime.h>
diff --git a/components/remote_cocoa/app_shim/native_widget_ns_window_fullscreen_controller.mm b/components/remote_cocoa/app_shim/native_widget_ns_window_fullscreen_controller.mm
index cfce7f7..3437824 100644
--- a/components/remote_cocoa/app_shim/native_widget_ns_window_fullscreen_controller.mm
+++ b/components/remote_cocoa/app_shim/native_widget_ns_window_fullscreen_controller.mm
@@ -6,6 +6,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/logging.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "ui/base/cocoa/nswindow_test_util.h"
 
diff --git a/components/remote_cocoa/app_shim/views_nswindow_delegate.mm b/components/remote_cocoa/app_shim/views_nswindow_delegate.mm
index 5b1477f4..3223eef5 100644
--- a/components/remote_cocoa/app_shim/views_nswindow_delegate.mm
+++ b/components/remote_cocoa/app_shim/views_nswindow_delegate.mm
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/check.h"
 #include "base/mac/mac_util.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #import "components/remote_cocoa/app_shim/bridged_content_view.h"
 #import "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h"
diff --git a/components/reporting/client/mock_report_queue_provider.cc b/components/reporting/client/mock_report_queue_provider.cc
index 9d389064..059a026e 100644
--- a/components/reporting/client/mock_report_queue_provider.cc
+++ b/components/reporting/client/mock_report_queue_provider.cc
@@ -12,7 +12,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/gmock_callback_support.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/reporting/client/mock_report_queue.h"
 #include "components/reporting/client/report_queue.h"
 #include "components/reporting/client/report_queue_configuration.h"
diff --git a/components/reporting/client/report_queue_factory.cc b/components/reporting/client/report_queue_factory.cc
index 92b8897..ba70e458 100644
--- a/components/reporting/client/report_queue_factory.cc
+++ b/components/reporting/client/report_queue_factory.cc
@@ -12,7 +12,6 @@
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/reporting/client/report_queue_configuration.h"
 #include "components/reporting/client/report_queue_provider.h"
 #include "components/reporting/util/backoff_settings.h"
diff --git a/components/reporting/client/report_queue_impl.cc b/components/reporting/client/report_queue_impl.cc
index c81f629d..c6195126 100644
--- a/components/reporting/client/report_queue_impl.cc
+++ b/components/reporting/client/report_queue_impl.cc
@@ -17,6 +17,7 @@
 #include "base/notreached.h"
 #include "base/sequence_checker.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/components/reporting/encryption/decryption.h b/components/reporting/encryption/decryption.h
index d11c960..7cb9359 100644
--- a/components/reporting/encryption/decryption.h
+++ b/components/reporting/encryption/decryption.h
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "components/reporting/encryption/encryption.h"
 #include "components/reporting/util/status.h"
diff --git a/components/reporting/encryption/encryption.h b/components/reporting/encryption/encryption.h
index e08b09d..0cada49 100644
--- a/components/reporting/encryption/encryption.h
+++ b/components/reporting/encryption/encryption.h
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/reporting/proto/synced/record.pb.h"
 #include "components/reporting/util/status.h"
 #include "components/reporting/util/statusor.h"
diff --git a/components/reporting/health/health_module.cc b/components/reporting/health/health_module.cc
index c65f8f40..9ed01f99 100644
--- a/components/reporting/health/health_module.cc
+++ b/components/reporting/health/health_module.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/sequence_checker.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/thread_annotations.h"
 
diff --git a/components/reporting/health/health_module.h b/components/reporting/health/health_module.h
index ca6ad0e9..630cab0 100644
--- a/components/reporting/health/health_module.h
+++ b/components/reporting/health/health_module.h
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/reporting/health/health_module_delegate.h"
 #include "components/reporting/proto/synced/health.pb.h"
diff --git a/components/reporting/metrics/BUILD.gn b/components/reporting/metrics/BUILD.gn
index c7319cfe..5807c82 100644
--- a/components/reporting/metrics/BUILD.gn
+++ b/components/reporting/metrics/BUILD.gn
@@ -6,7 +6,11 @@
   sources = [
     "collector_base.cc",
     "collector_base.h",
+    "delayed_sampler.cc",
+    "delayed_sampler.h",
     "event_driven_telemetry_collector_pool.h",
+    "manual_collector.cc",
+    "manual_collector.h",
     "metric_event_observer.h",
     "metric_event_observer_manager.cc",
     "metric_event_observer_manager.h",
@@ -37,6 +41,8 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "delayed_sampler_unittest.cc",
+    "manual_collector_unittest.cc",
     "metric_event_observer_manager_unittest.cc",
     "metric_rate_controller_unittest.cc",
     "metric_report_queue_unittest.cc",
diff --git a/components/reporting/metrics/delayed_sampler.cc b/components/reporting/metrics/delayed_sampler.cc
new file mode 100644
index 0000000..288c7a6
--- /dev/null
+++ b/components/reporting/metrics/delayed_sampler.cc
@@ -0,0 +1,34 @@
+// Copyright 2023 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/reporting/metrics/delayed_sampler.h"
+
+#include <memory>
+
+#include "base/task/sequenced_task_runner.h"
+#include "base/time/time.h"
+#include "components/reporting/metrics/sampler.h"
+
+namespace reporting {
+
+DelayedSampler::DelayedSampler(std::unique_ptr<Sampler> sampler,
+                               base::TimeDelta delay)
+    : sampler_(std::move(sampler)), delay_(delay) {}
+
+DelayedSampler::~DelayedSampler() = default;
+
+void DelayedSampler::MaybeCollect(OptionalMetricCallback callback) {
+  // Delay collection by `delay_` amount of time
+  base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask(
+      FROM_HERE,
+      base::BindOnce(&DelayedSampler::CollectInternal,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)),
+      delay_);
+}
+
+void DelayedSampler::CollectInternal(OptionalMetricCallback callback) {
+  sampler_->MaybeCollect(std::move(callback));
+}
+
+}  // namespace reporting
diff --git a/components/reporting/metrics/delayed_sampler.h b/components/reporting/metrics/delayed_sampler.h
new file mode 100644
index 0000000..263fd2f4
--- /dev/null
+++ b/components/reporting/metrics/delayed_sampler.h
@@ -0,0 +1,46 @@
+// Copyright 2023 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_REPORTING_METRICS_DELAYED_SAMPLER_H_
+#define COMPONENTS_REPORTING_METRICS_DELAYED_SAMPLER_H_
+
+#include <memory>
+
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "components/reporting/metrics/sampler.h"
+
+namespace reporting {
+
+// A `Sampler` subclass that takes ownership of an existing `Sampler` and
+// delays the collection of that sampler by `delay` amount
+// of time.
+class DelayedSampler : public Sampler {
+ public:
+  DelayedSampler(std::unique_ptr<Sampler> sampler, base::TimeDelta delay);
+
+  DelayedSampler(const DelayedSampler&) = delete;
+  DelayedSampler& operator=(const DelayedSampler&) = delete;
+
+  ~DelayedSampler() override;
+
+  // Waits until `delay_` amount of time has passed before collecting.
+  void MaybeCollect(OptionalMetricCallback callback) override;
+
+ private:
+  // Used inside `MaybeCollect`. Collects data from `sampler_`
+  void CollectInternal(OptionalMetricCallback callback);
+
+  // The `Sampler` we actually collect data from
+  std::unique_ptr<Sampler> sampler_;
+
+  // Amount of time to delay collection by
+  base::TimeDelta delay_;
+
+  base::WeakPtrFactory<DelayedSampler> weak_ptr_factory_{this};
+};
+
+}  // namespace reporting
+
+#endif  // COMPONENTS_REPORTING_METRICS_DELAYED_SAMPLER_H_
diff --git a/components/reporting/metrics/delayed_sampler_unittest.cc b/components/reporting/metrics/delayed_sampler_unittest.cc
new file mode 100644
index 0000000..bc3ba74a
--- /dev/null
+++ b/components/reporting/metrics/delayed_sampler_unittest.cc
@@ -0,0 +1,58 @@
+// Copyright 2023 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/reporting/metrics/delayed_sampler.h"
+
+#include <memory>
+#include <string>
+
+#include "base/functional/callback_helpers.h"
+#include "base/test/task_environment.h"
+#include "base/time/time.h"
+#include "components/reporting/metrics/fakes/fake_sampler.h"
+#include "components/reporting/proto/synced/metric_data.pb.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+using ::testing::Eq;
+
+namespace reporting {
+
+namespace {
+
+class DelayedSamplerTest : public ::testing::Test {
+ protected:
+  void SetUp() override { sampler_ = std::make_unique<test::FakeSampler>(); }
+  base::test::SingleThreadTaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+
+  std::unique_ptr<test::FakeSampler> sampler_;
+};
+
+TEST_F(DelayedSamplerTest, CollectInternalCalledAfterDelay) {
+  base::TimeDelta delay = base::Seconds(1);
+
+  test::FakeSampler* raw_sampler_ = sampler_.get();
+
+  DelayedSampler delayed_sampler(std::move(sampler_), delay);
+
+  // Haven't called `MaybeCollect`, so we definitely should not have tried to
+  // collect data yet.
+  EXPECT_THAT(raw_sampler_->GetNumCollectCalls(), Eq(0));
+
+  delayed_sampler.MaybeCollect(
+      base::DoNothingAs<void(absl::optional<MetricData>)>());
+
+  // Sampler shouldn't collect since no time has passed
+  EXPECT_THAT(raw_sampler_->GetNumCollectCalls(), Eq(0));
+
+  task_environment_.FastForwardBy(delay);
+
+  // `delay` amount of time has passed since `MaybeCollect` was called, so the
+  // sampler should have collected now.
+  EXPECT_THAT(raw_sampler_->GetNumCollectCalls(), Eq(1));
+}
+}  // namespace
+}  // namespace reporting
diff --git a/components/reporting/metrics/manual_collector.cc b/components/reporting/metrics/manual_collector.cc
new file mode 100644
index 0000000..2069d91
--- /dev/null
+++ b/components/reporting/metrics/manual_collector.cc
@@ -0,0 +1,51 @@
+// Copyright 2023 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/reporting/metrics/manual_collector.h"
+
+#include <memory>
+#include <string>
+#include <utility>
+
+#include "components/reporting/metrics/collector_base.h"
+#include "components/reporting/metrics/metric_report_queue.h"
+#include "components/reporting/metrics/metric_reporting_controller.h"
+#include "components/reporting/metrics/reporting_settings.h"
+#include "components/reporting/metrics/sampler.h"
+
+namespace reporting {
+
+ManualCollector::ManualCollector(Sampler* sampler,
+                                 MetricReportQueue* metric_report_queue,
+                                 ReportingSettings* reporting_settings,
+                                 const std::string& setting_path,
+                                 bool setting_enabled_default_value)
+    : CollectorBase(sampler),
+      metric_report_queue_(metric_report_queue),
+      reporting_controller_(std::make_unique<MetricReportingController>(
+          reporting_settings,
+          setting_path,
+          setting_enabled_default_value)) {}
+
+ManualCollector::~ManualCollector() = default;
+
+bool ManualCollector::CanCollect() const {
+  return reporting_controller_->IsEnabled();
+}
+
+void ManualCollector::OnMetricDataCollected(
+    bool is_event_driven,
+    absl::optional<MetricData> metric_data) {
+  CheckOnSequence();
+  if (!metric_data.has_value()) {
+    return;
+  }
+  if (is_event_driven) {
+    DCHECK(metric_data->has_telemetry_data());
+    metric_data->mutable_telemetry_data()->set_is_event_driven(is_event_driven);
+  }
+  metric_data->set_timestamp_ms(base::Time::Now().ToJavaTime());
+  metric_report_queue_->Enqueue(std::move(metric_data.value()));
+}
+}  // namespace reporting
diff --git a/components/reporting/metrics/manual_collector.h b/components/reporting/metrics/manual_collector.h
new file mode 100644
index 0000000..66fff09
--- /dev/null
+++ b/components/reporting/metrics/manual_collector.h
@@ -0,0 +1,48 @@
+// Copyright 2023 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_REPORTING_METRICS_MANUAL_COLLECTOR_H_
+#define COMPONENTS_REPORTING_METRICS_MANUAL_COLLECTOR_H_
+
+#include <memory>
+#include <string>
+
+#include "components/reporting/metrics/collector_base.h"
+#include "components/reporting/proto/synced/metric_data.pb.h"
+
+namespace reporting {
+
+class MetricReportQueue;
+class MetricReportingController;
+class ReportingSettings;
+// Class to collect and report metric data when manually triggered. Does not
+// automatically collect data. Necessary reporting settings must be set or
+// `setting_enabled_default_value` must be set to True in order to trigger
+// collection.
+class ManualCollector : public CollectorBase {
+ public:
+  ManualCollector(Sampler* sampler,
+                  MetricReportQueue* metric_report_queue,
+                  ReportingSettings* reporting_settings,
+                  const std::string& setting_path,
+                  bool setting_enabled_default_value);
+
+  ManualCollector(const ManualCollector& other) = delete;
+  ManualCollector& operator=(const ManualCollector& other) = delete;
+  ~ManualCollector() override;
+
+ protected:
+  // CollectorBase:
+  bool CanCollect() const override;
+  // CollectorBase:
+  void OnMetricDataCollected(bool is_event_driven,
+                             absl::optional<MetricData> metric_data) override;
+
+ private:
+  const raw_ptr<MetricReportQueue> metric_report_queue_;
+  const std::unique_ptr<MetricReportingController> reporting_controller_;
+};
+}  // namespace reporting
+
+#endif  // COMPONENTS_REPORTING_METRICS_ONE_SHOT_COLLECTOR_H_
diff --git a/components/reporting/metrics/manual_collector_unittest.cc b/components/reporting/metrics/manual_collector_unittest.cc
new file mode 100644
index 0000000..372b1ca
--- /dev/null
+++ b/components/reporting/metrics/manual_collector_unittest.cc
@@ -0,0 +1,174 @@
+// Copyright 2023 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/reporting/metrics/manual_collector.h"
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/run_loop.h"
+#include "base/test/task_environment.h"
+#include "components/reporting/metrics/collector_base.h"
+#include "components/reporting/metrics/fakes/fake_metric_report_queue.h"
+#include "components/reporting/metrics/fakes/fake_reporting_settings.h"
+#include "components/reporting/metrics/fakes/fake_sampler.h"
+#include "components/reporting/proto/synced/metric_data.pb.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::Eq;
+
+namespace reporting {
+namespace {
+
+constexpr char kEnableSettingPath[] = "enable_path";
+
+class ManualCollectorTest : public testing::Test {
+ protected:
+  MetricData GetMetricData() {
+    MetricData metric_data;
+    metric_data.mutable_telemetry_data();
+    return metric_data;
+  }
+
+  void VerifyMetricData(MetricData metric_data, bool is_event_driven) const {
+    EXPECT_TRUE(metric_data.has_timestamp_ms());
+    EXPECT_TRUE(metric_data.has_telemetry_data());
+    EXPECT_THAT(is_event_driven,
+                Eq(metric_data.telemetry_data().is_event_driven()));
+    EXPECT_TRUE(metric_report_queue_->IsEmpty());
+  }
+
+  void SetUp() override {
+    settings_ = std::make_unique<test::FakeReportingSettings>();
+    sampler_ = std::make_unique<test::FakeSampler>();
+    metric_report_queue_ = std::make_unique<test::FakeMetricReportQueue>();
+  }
+
+  base::test::SingleThreadTaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+
+  std::unique_ptr<test::FakeReportingSettings> settings_;
+  std::unique_ptr<test::FakeSampler> sampler_;
+  std::unique_ptr<test::FakeMetricReportQueue> metric_report_queue_;
+};
+
+TEST_F(ManualCollectorTest, InitiallyEnabled) {
+  // Initially enable settings
+  settings_->SetBoolean(kEnableSettingPath, true);
+  MetricData metric_data = GetMetricData();
+  sampler_->SetMetricData(std::move(metric_data));
+
+  ManualCollector collector(sampler_.get(), metric_report_queue_.get(),
+                            settings_.get(), kEnableSettingPath,
+                            /*setting_enabled_default_value=*/false);
+
+  // We haven't manually initiated collection
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(0));
+
+  // Manually collect event driven data
+  static constexpr bool is_event_driven = true;
+  collector.Collect(is_event_driven);
+
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(1));
+
+  MetricData metric_data_reported =
+      metric_report_queue_->GetMetricDataReported();
+
+  VerifyMetricData(metric_data_reported, is_event_driven);
+}
+
+TEST_F(ManualCollectorTest, InitiallyDisabled) {
+  // Initially disable settings
+  settings_->SetBoolean(kEnableSettingPath, false);
+
+  MetricData metric_data = GetMetricData();
+
+  sampler_->SetMetricData(std::move(metric_data));
+
+  ManualCollector collector(sampler_.get(), metric_report_queue_.get(),
+                            settings_.get(), kEnableSettingPath,
+                            /*setting_enabled_default_value=*/false);
+
+  // We haven't manually initiated collection
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(0));
+
+  static constexpr bool is_event_driven = true;
+  collector.Collect(is_event_driven);
+
+  // No data should be collected since settings are disabled
+  EXPECT_TRUE(metric_report_queue_->IsEmpty());
+
+  // Enable settings
+  settings_->SetBoolean(kEnableSettingPath, true);
+
+  collector.Collect(is_event_driven);
+
+  // Setting is enabled, data is being collected.
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(1));
+
+  MetricData metric_data_reported =
+      metric_report_queue_->GetMetricDataReported();
+
+  VerifyMetricData(metric_data_reported, is_event_driven);
+}
+
+TEST_F(ManualCollectorTest, NoMetricData) {
+  settings_->SetBoolean(kEnableSettingPath, true);
+
+  sampler_->SetMetricData(absl::nullopt);
+
+  ManualCollector collector(sampler_.get(), metric_report_queue_.get(),
+                            settings_.get(), kEnableSettingPath,
+                            /*setting_enabled_default_value=*/false);
+
+  // We haven't manually initiated collection
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(0));
+
+  collector.Collect(/*is_event_driven=*/false);
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(1));
+  ASSERT_TRUE(metric_report_queue_->IsEmpty());
+}
+
+TEST_F(ManualCollectorTest, DefaultEnabled) {
+  MetricData metric_data = GetMetricData();
+  sampler_->SetMetricData(std::move(metric_data));
+
+  // Setting enabled by default via constructor
+  ManualCollector collector(sampler_.get(), metric_report_queue_.get(),
+                            settings_.get(), "invalid/path",
+                            /*setting_enabled_default_value=*/true);
+
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(0));
+
+  static constexpr bool is_event_driven = true;
+  collector.Collect(is_event_driven);
+
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(1));
+
+  MetricData metric_data_reported =
+      metric_report_queue_->GetMetricDataReported();
+
+  VerifyMetricData(metric_data_reported, is_event_driven);
+}
+
+TEST_F(ManualCollectorTest, DefaultDisabled) {
+  MetricData metric_data;
+  metric_data.mutable_info_data();
+  sampler_->SetMetricData(std::move(metric_data));
+
+  ManualCollector collector(sampler_.get(), metric_report_queue_.get(),
+                            settings_.get(), "invalid/path",
+                            /*setting_enabled_default_value=*/false);
+  collector.Collect(/*is_event_driven=*/false);
+
+  // Shouldn't be able to call the sampler since setting is disabled
+  EXPECT_THAT(sampler_->GetNumCollectCalls(), Eq(0));
+  EXPECT_TRUE(metric_report_queue_->IsEmpty());
+}
+}  // namespace
+}  // namespace reporting
diff --git a/components/reporting/metrics/periodic_collector.cc b/components/reporting/metrics/periodic_collector.cc
index 1b266c3..701a591 100644
--- a/components/reporting/metrics/periodic_collector.cc
+++ b/components/reporting/metrics/periodic_collector.cc
@@ -12,6 +12,7 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/reporting/client/report_queue.h"
 #include "components/reporting/metrics/collector_base.h"
diff --git a/components/reporting/resources/resource_manager.cc b/components/reporting/resources/resource_manager.cc
index 929bd9b..b24d149 100644
--- a/components/reporting/resources/resource_manager.cc
+++ b/components/reporting/resources/resource_manager.cc
@@ -14,6 +14,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/components/reporting/resources/resource_manager_unittest.cc b/components/reporting/resources/resource_manager_unittest.cc
index 90c0b20b..16898ddb 100644
--- a/components/reporting/resources/resource_manager_unittest.cc
+++ b/components/reporting/resources/resource_manager_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/functional/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
diff --git a/components/reporting/storage/storage.cc b/components/reporting/storage/storage.cc
index 784e5c2..01b6dd7 100644
--- a/components/reporting/storage/storage.cc
+++ b/components/reporting/storage/storage.cc
@@ -23,6 +23,7 @@
 #include "base/sequence_checker.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/components/reporting/storage/storage_queue.cc b/components/reporting/storage/storage_queue.cc
index 49e0f2c..4af7194 100644
--- a/components/reporting/storage/storage_queue.cc
+++ b/components/reporting/storage/storage_queue.cc
@@ -37,6 +37,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/reporting/compression/compression_module.h"
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 074e09f..857b5e7 100644
--- a/components/safe_browsing/content/browser/client_side_detection_host.cc
+++ b/components/safe_browsing/content/browser/client_side_detection_host.cc
@@ -543,14 +543,35 @@
     base::UmaHistogramBoolean("SBClientPhishing.LocalModelDetectsPhishing",
                               verdict->is_phishing());
 
-    // We only send phishing verdict to the server if the verdict is phishing.
-    if (!verdict->is_phishing())
+    raw_ptr<VerdictCacheManager> cache_manager = delegate_->GetCacheManager();
+
+    bool force_request_from_rt_url_lookup = false;
+
+    if (base::FeatureList::IsEnabled(kClientSideDetectionTypeForceRequest)) {
+      if (cache_manager) {
+        safe_browsing::ClientSideDetectionType cached_csd_type =
+            cache_manager->GetCachedRealTimeUrlClientSideDetectionType(
+                current_url_);
+        force_request_from_rt_url_lookup =
+            cached_csd_type ==
+                safe_browsing::ClientSideDetectionType::FORCE_REQUEST &&
+            (IsExtendedReportingEnabled(*delegate_->GetPrefs()) ||
+             IsEnhancedProtectionEnabled(*delegate_->GetPrefs()));
+      }
+
+      base::UmaHistogramBoolean("SBClientPhishing.RTLookupForceRequest",
+                                force_request_from_rt_url_lookup);
+    }
+
+    // We only send a phishing verdict if the verdict is phishing OR we get a
+    // FORCE_REQUEST from a RTLookupResponse for a SBER/ESB user.
+    if (!verdict->is_phishing() && !force_request_from_rt_url_lookup) {
       return;
+    }
 
     // Fill in metadata about which model we used.
     *verdict->mutable_population() = delegate_->GetUserPopulation();
 
-    raw_ptr<VerdictCacheManager> cache_manager = delegate_->GetCacheManager();
     if (cache_manager) {
       ChromeUserPopulation::PageLoadToken token =
           cache_manager->GetPageLoadToken(current_url_);
diff --git a/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc b/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc
index 9533c9b..93b473d 100644
--- a/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc
+++ b/components/safe_browsing/content/browser/password_protection/password_protection_service_unittest.cc
@@ -841,11 +841,12 @@
                 LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
                 reused_password_account_type, &actual_verdict));
 
-  // Return VERDICT_TYPE_UNSPECIFIED if look up for a URL whose variants match
-  // test.com/def, but the corresponding verdict is expired.
+  // Return SAFE if look up for a URL whose variants match
+  // test.com/def, but the corresponding verdict is expired, so the most
+  // matching unexpired verdict will return SAFE
   reused_password_account_type.set_account_type(
       ReusedPasswordAccountType::GSUITE);
-  EXPECT_EQ(LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED,
+  EXPECT_EQ(LoginReputationClientResponse::SAFE,
             password_protection_service_->GetCachedVerdict(
                 GURL("http://test.com/def/ghi/index.html"),
                 LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
diff --git a/components/safe_browsing/content/browser/triggers/ad_sampler_trigger.h b/components/safe_browsing/content/browser/triggers/ad_sampler_trigger.h
index 67bfd0f..b21c982 100644
--- a/components/safe_browsing/content/browser/triggers/ad_sampler_trigger.h
+++ b/components/safe_browsing/content/browser/triggers/ad_sampler_trigger.h
@@ -8,6 +8,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
diff --git a/components/safe_browsing/content/browser/triggers/suspicious_site_trigger.h b/components/safe_browsing/content/browser/triggers/suspicious_site_trigger.h
index 70d4292..b7b3883 100644
--- a/components/safe_browsing/content/browser/triggers/suspicious_site_trigger.h
+++ b/components/safe_browsing/content/browser/triggers/suspicious_site_trigger.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
diff --git a/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc b/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc
index b32fe84..e95ef35 100644
--- a/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc
+++ b/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc
@@ -16,6 +16,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
diff --git a/components/safe_browsing/content/renderer/phishing_classifier/scorer.h b/components/safe_browsing/content/renderer/phishing_classifier/scorer.h
index ace94c2..e3d1b0f 100644
--- a/components/safe_browsing/content/renderer/phishing_classifier/scorer.h
+++ b/components/safe_browsing/content/renderer/phishing_classifier/scorer.h
@@ -28,6 +28,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/observer_list.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/optimization_guide/machine_learning_tflite_buildflags.h"
 #include "components/safe_browsing/core/common/proto/client_model.pb.h"
diff --git a/components/safe_browsing/core/browser/db/database_manager.cc b/components/safe_browsing/core/browser/db/database_manager.cc
index c58f60bc..9346dbd 100644
--- a/components/safe_browsing/core/browser/db/database_manager.cc
+++ b/components/safe_browsing/core/browser/db/database_manager.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/v4_get_hash_protocol_manager.h"
 #include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/components/safe_browsing/core/browser/db/database_manager.h b/components/safe_browsing/core/browser/db/database_manager.h
index 0149458..ea94e97b 100644
--- a/components/safe_browsing/core/browser/db/database_manager.h
+++ b/components/safe_browsing/core/browser/db/database_manager.h
@@ -18,6 +18,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/hit_report.h"
 #include "components/safe_browsing/core/browser/db/util.h"
 #include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h"
diff --git a/components/safe_browsing/core/browser/db/fake_database_manager.cc b/components/safe_browsing/core/browser/db/fake_database_manager.cc
index 3a94178..3cba0eb 100644
--- a/components/safe_browsing/core/browser/db/fake_database_manager.cc
+++ b/components/safe_browsing/core/browser/db/fake_database_manager.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/safe_browsing/core/browser/db/fake_database_manager.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/util.h"
 
 namespace safe_browsing {
diff --git a/components/safe_browsing/core/browser/db/fake_database_manager.h b/components/safe_browsing/core/browser/db/fake_database_manager.h
index 8344096..807a310f 100644
--- a/components/safe_browsing/core/browser/db/fake_database_manager.h
+++ b/components/safe_browsing/core/browser/db/fake_database_manager.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_SAFE_BROWSING_CORE_BROWSER_DB_FAKE_DATABASE_MANAGER_H_
 
 #include "base/containers/flat_map.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/test_database_manager.h"
 #include "components/safe_browsing/core/browser/db/util.h"
 #include "url/gurl.h"
diff --git a/components/safe_browsing/core/browser/db/test_database_manager.cc b/components/safe_browsing/core/browser/db/test_database_manager.cc
index db3cc2dd..ee0f2a2c 100644
--- a/components/safe_browsing/core/browser/db/test_database_manager.cc
+++ b/components/safe_browsing/core/browser/db/test_database_manager.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 namespace safe_browsing {
diff --git a/components/safe_browsing/core/browser/db/test_database_manager.h b/components/safe_browsing/core/browser/db/test_database_manager.h
index 9401adb..3a6bd04 100644
--- a/components/safe_browsing/core/browser/db/test_database_manager.h
+++ b/components/safe_browsing/core/browser/db/test_database_manager.h
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/database_manager.h"
 #include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h"
 #include "services/network/public/mojom/fetch_api.mojom.h"
diff --git a/components/safe_browsing/core/browser/db/v4_database_unittest.cc b/components/safe_browsing/core/browser/db/v4_database_unittest.cc
index a900bad..5df9365d 100644
--- a/components/safe_browsing/core/browser/db/v4_database_unittest.cc
+++ b/components/safe_browsing/core/browser/db/v4_database_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/debug/leak_annotations.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
 #include "components/safe_browsing/core/browser/db/v4_database.h"
diff --git a/components/safe_browsing/core/browser/db/v4_local_database_manager.cc b/components/safe_browsing/core/browser/db/v4_local_database_manager.cc
index e19ee91..d3e6749 100644
--- a/components/safe_browsing/core/browser/db/v4_local_database_manager.cc
+++ b/components/safe_browsing/core/browser/db/v4_local_database_manager.cc
@@ -23,8 +23,8 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_tokenizer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h"
diff --git a/components/safe_browsing/core/browser/db/v4_store.cc b/components/safe_browsing/core/browser/db/v4_store.cc
index 9f2a342..395b0c38 100644
--- a/components/safe_browsing/core/browser/db/v4_store.cc
+++ b/components/safe_browsing/core/browser/db/v4_store.cc
@@ -17,6 +17,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/elapsed_timer.h"
 #include "components/safe_browsing/core/browser/db/prefix_iterator.h"
 #include "components/safe_browsing/core/browser/db/v4_rice.h"
diff --git a/components/safe_browsing/core/browser/db/v4_store_unittest.cc b/components/safe_browsing/core/browser/db/v4_store_unittest.cc
index 3f8c3b0..ddc249e1 100644
--- a/components/safe_browsing/core/browser/db/v4_store_unittest.cc
+++ b/components/safe_browsing/core/browser/db/v4_store_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
diff --git a/components/safe_browsing/core/browser/db/v4_test_util.cc b/components/safe_browsing/core/browser/db/v4_test_util.cc
index 779b4598..7d4d9d1 100644
--- a/components/safe_browsing/core/browser/db/v4_test_util.cc
+++ b/components/safe_browsing/core/browser/db/v4_test_util.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/util.h"
 #include "crypto/sha2.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/components/safe_browsing/core/browser/db/v4_test_util.h b/components/safe_browsing/core/browser/db/v4_test_util.h
index c23f61144..bda5ae0 100644
--- a/components/safe_browsing/core/browser/db/v4_test_util.h
+++ b/components/safe_browsing/core/browser/db/v4_test_util.h
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/v4_database.h"
 #include "components/safe_browsing/core/browser/db/v4_get_hash_protocol_manager.h"
 
diff --git a/components/safe_browsing/core/browser/password_protection/password_protection_request.cc b/components/safe_browsing/core/browser/password_protection/password_protection_request.cc
index 55d8e3c..9e0e4c4 100644
--- a/components/safe_browsing/core/browser/password_protection/password_protection_request.cc
+++ b/components/safe_browsing/core/browser/password_protection/password_protection_request.cc
@@ -11,6 +11,7 @@
 #include "base/strings/escape.h"
 #include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/safe_browsing/core/browser/db/allowlist_checker_client.h"
 #include "components/safe_browsing/core/browser/db/database_manager.h"
diff --git a/components/safe_browsing/core/browser/password_protection/password_protection_request.h b/components/safe_browsing/core/browser/password_protection/password_protection_request.h
index afde9c2b..1303b74 100644
--- a/components/safe_browsing/core/browser/password_protection/password_protection_request.h
+++ b/components/safe_browsing/core/browser/password_protection/password_protection_request.h
@@ -14,6 +14,7 @@
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
diff --git a/components/safe_browsing/core/browser/ping_manager.cc b/components/safe_browsing/core/browser/ping_manager.cc
index 23e0e21..115b695 100644
--- a/components/safe_browsing/core/browser/ping_manager.cc
+++ b/components/safe_browsing/core/browser/ping_manager.cc
@@ -14,6 +14,7 @@
 #include "base/strings/escape.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h"
 #include "components/safe_browsing/core/common/proto/csd.pb.h"
 #include "components/safe_browsing/core/common/utils.h"
diff --git a/components/safe_browsing/core/browser/ping_manager.h b/components/safe_browsing/core/browser/ping_manager.h
index 30d43fbc..2fc71ef0 100644
--- a/components/safe_browsing/core/browser/ping_manager.h
+++ b/components/safe_browsing/core/browser/ping_manager.h
@@ -14,6 +14,7 @@
 #include "base/containers/unique_ptr_adapters.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/safe_browsing/core/browser/db/hit_report.h"
 #include "components/safe_browsing/core/browser/db/util.h"
diff --git a/components/safe_browsing/core/browser/realtime/url_lookup_service.cc b/components/safe_browsing/core/browser/realtime/url_lookup_service.cc
index dc0bf461..136d459 100644
--- a/components/safe_browsing/core/browser/realtime/url_lookup_service.cc
+++ b/components/safe_browsing/core/browser/realtime/url_lookup_service.cc
@@ -11,6 +11,7 @@
 #include "base/rand_util.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/buildflags.h"
diff --git a/components/safe_browsing/core/browser/realtime/url_lookup_service.h b/components/safe_browsing/core/browser/realtime/url_lookup_service.h
index ba482db2..37bf6ea 100644
--- a/components/safe_browsing/core/browser/realtime/url_lookup_service.h
+++ b/components/safe_browsing/core/browser/realtime/url_lookup_service.h
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "components/prefs/pref_change_registrar.h"
diff --git a/components/safe_browsing/core/browser/realtime/url_lookup_service_base.h b/components/safe_browsing/core/browser/realtime/url_lookup_service_base.h
index 30ef3d367..fd6991f 100644
--- a/components/safe_browsing/core/browser/realtime/url_lookup_service_base.h
+++ b/components/safe_browsing/core/browser/realtime/url_lookup_service_base.h
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "components/keyed_service/core/keyed_service.h"
diff --git a/components/safe_browsing/core/browser/safe_browsing_url_checker_impl.h b/components/safe_browsing/core/browser/safe_browsing_url_checker_impl.h
index 5552f2e..cebc99c 100644
--- a/components/safe_browsing/core/browser/safe_browsing_url_checker_impl.h
+++ b/components/safe_browsing/core/browser/safe_browsing_url_checker_impl.h
@@ -11,6 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/database_manager.h"
 #include "components/safe_browsing/core/browser/safe_browsing_lookup_mechanism_runner.h"
 #include "components/safe_browsing/core/browser/url_realtime_mechanism.h"
diff --git a/components/safe_browsing/core/browser/url_realtime_mechanism.h b/components/safe_browsing/core/browser/url_realtime_mechanism.h
index 6021faa..5e1d396a 100644
--- a/components/safe_browsing/core/browser/url_realtime_mechanism.h
+++ b/components/safe_browsing/core/browser/url_realtime_mechanism.h
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/safe_browsing/core/browser/db/database_manager.h"
 #include "components/safe_browsing/core/browser/hash_database_mechanism.h"
 #include "components/safe_browsing/core/browser/realtime/url_lookup_service_base.h"
diff --git a/components/safe_browsing/core/browser/verdict_cache_manager.cc b/components/safe_browsing/core/browser/verdict_cache_manager.cc
index 764b258..b45baad 100644
--- a/components/safe_browsing/core/browser/verdict_cache_manager.cc
+++ b/components/safe_browsing/core/browser/verdict_cache_manager.cc
@@ -32,6 +32,7 @@
 const char kRealTimeThreatInfoProto[] = "rt_threat_info_proto";
 const char kPasswordOnFocusCacheKey[] = "password_on_focus_cache_key";
 const char kRealTimeUrlCacheKey[] = "real_time_url_cache_key";
+const char kCsdTypeCacheKey[] = "client_side_detection_type_cache_key";
 
 // Command-line flag for caching an artificial unsafe verdict.
 const char kUnsafeUrlFlag[] = "mark_as_real_time_phishing";
@@ -111,6 +112,18 @@
   return result;
 }
 
+template <class T>
+base::Value::Dict CreateDictionaryFromVerdict(
+    const T& verdict,
+    const base::Time& receive_time,
+    const char* proto_name,
+    const safe_browsing::ClientSideDetectionType csd_type) {
+  base::Value::Dict result =
+      CreateDictionaryFromVerdict(verdict, receive_time, proto_name);
+  result.Set(kCsdTypeCacheKey, static_cast<int>(csd_type));
+  return result;
+}
+
 // Generate path variants of the given URL.
 void GeneratePathVariantsWithoutQuery(const GURL& url,
                                       std::vector<std::string>* paths) {
@@ -264,27 +277,30 @@
 }
 
 template <class T>
-typename T::VerdictType GetMostMatchingCachedVerdictWithPathMatching(
+absl::optional<base::Value> GetMostMatchingCachedVerdictEntryWithPathMatching(
     const GURL& url,
     const std::string& type_key,
     scoped_refptr<HostContentSettingsMap> content_settings,
     const ContentSettingsType contents_setting_type,
     const char* proto_name,
-    T* out_response,
     MatchParams match_params) {
   DCHECK(proto_name == kVerdictProto || proto_name == kRealTimeThreatInfoProto);
 
+  absl::optional<base::Value> result;
+
   GURL hostname = GetHostNameWithHTTPScheme(url);
   base::Value cache_dictionary_value = content_settings->GetWebsiteSetting(
       hostname, GURL(), contents_setting_type, nullptr);
 
-  if (!cache_dictionary_value.is_dict())
-    return T::VERDICT_TYPE_UNSPECIFIED;
+  if (!cache_dictionary_value.is_dict()) {
+    return absl::nullopt;
+  }
 
   base::Value::Dict* verdict_dictionary =
       cache_dictionary_value.GetDict().FindDict(type_key);
+
   if (!verdict_dictionary) {
-    return T::VERDICT_TYPE_UNSPECIFIED;
+    return absl::nullopt;
   }
 
   std::vector<std::string> paths;
@@ -296,11 +312,6 @@
       /*canonicalized_query*/ nullptr);
 
   int max_path_depth = -1;
-  typename T::VerdictType most_matching_verdict_type =
-      T::VERDICT_TYPE_UNSPECIFIED;
-  // For all the verdicts of the same origin, we key them by |cache_expression|.
-  // Its corresponding value is a Dict containing its creation time and
-  // the serialized verdict proto.
   for (const auto [key, value] : *verdict_dictionary) {
     int verdict_received_time;
     T verdict;
@@ -320,30 +331,26 @@
     int path_depth = static_cast<int>(GetPathDepth(cache_expression_path));
     if (path_depth > max_path_depth &&
         PathVariantsMatchCacheExpression(paths, cache_expression_path) &&
-        match_params.ShouldMatch()) {
+        match_params.ShouldMatch() &&
+        !IsCacheExpired(verdict_received_time, verdict.cache_duration_sec())) {
       max_path_depth = path_depth;
-      // If the most matching verdict is expired, set the result to
-      // VERDICT_TYPE_UNSPECIFIED.
-      most_matching_verdict_type =
-          IsCacheExpired(verdict_received_time, verdict.cache_duration_sec())
-              ? T::VERDICT_TYPE_UNSPECIFIED
-              : verdict.verdict_type();
-      out_response->CopyFrom(verdict);
+      result = std::move(value);
     }
   }
-  return most_matching_verdict_type;
+
+  return result;
 }
 
 template <class T>
-typename T::VerdictType GetMostMatchingCachedVerdictWithHostAndPathMatching(
+absl::optional<base::Value>
+GetMostMatchingCachedVerdictEntryWithHostAndPathMatching(
     const GURL& url,
     const std::string& type_key,
     scoped_refptr<HostContentSettingsMap> content_settings,
     const ContentSettingsType contents_setting_type,
-    const char* proto_name,
-    T* out_response) {
+    const char* proto_name) {
   DCHECK(proto_name == kVerdictProto || proto_name == kRealTimeThreatInfoProto);
-  auto most_matching_verdict_type = T::VERDICT_TYPE_UNSPECIFIED;
+  absl::optional<base::Value> most_matching_verdict;
   MatchParams match_params;
 
   std::string root_host, root_path;
@@ -356,16 +363,44 @@
     int depth = static_cast<int>(GetHostDepth(host));
     GURL url_to_check = GetUrlWithHostAndPath(host, root_path);
     match_params.is_exact_host = (root_host == host);
-    auto verdict_type = GetMostMatchingCachedVerdictWithPathMatching<T>(
-        url_to_check, type_key, content_settings, contents_setting_type,
-        proto_name, out_response, match_params);
-    if (depth > max_path_depth && verdict_type != T::VERDICT_TYPE_UNSPECIFIED) {
+    absl::optional<base::Value> verdict =
+        GetMostMatchingCachedVerdictEntryWithPathMatching<T>(
+            url_to_check, type_key, content_settings, contents_setting_type,
+            proto_name, match_params);
+    if (depth > max_path_depth && verdict && verdict->is_dict()) {
       max_path_depth = depth;
-      most_matching_verdict_type = verdict_type;
+      most_matching_verdict = std::move(verdict);
     }
   }
 
-  return most_matching_verdict_type;
+  return most_matching_verdict;
+}
+
+template <class T>
+typename T::VerdictType GetVerdictTypeFromMostMatchedCachedVerdict(
+    const char* proto_name,
+    absl::optional<base::Value> verdict_entry,
+    T* out_response) {
+  DCHECK(proto_name == kVerdictProto || proto_name == kRealTimeThreatInfoProto);
+
+  if (!verdict_entry || !verdict_entry->is_dict()) {
+    return T::VERDICT_TYPE_UNSPECIFIED;
+  }
+
+  base::Value* verdict_proto_value = verdict_entry->FindKey(proto_name);
+
+  if (verdict_proto_value && verdict_proto_value->is_string()) {
+    std::string serialized_proto = verdict_proto_value->GetString();
+
+    if (base::Base64Decode(serialized_proto, &serialized_proto) &&
+        out_response->ParseFromString(serialized_proto)) {
+      return out_response->verdict_type();
+    } else {
+      return T::VERDICT_TYPE_UNSPECIFIED;
+    }
+  } else {
+    return T::VERDICT_TYPE_UNSPECIFIED;
+  }
 }
 
 bool HasPageLoadTokenExpired(int64_t token_time_msec) {
@@ -496,10 +531,15 @@
 
   std::string type_key =
       GetKeyOfTypeFromTriggerType(trigger_type, password_type);
-  return GetMostMatchingCachedVerdictWithHostAndPathMatching<
-      LoginReputationClientResponse>(url, type_key, content_settings_,
-                                     ContentSettingsType::PASSWORD_PROTECTION,
-                                     kVerdictProto, out_response);
+  absl::optional<base::Value> most_matching_verdict =
+      GetMostMatchingCachedVerdictEntryWithHostAndPathMatching<
+          LoginReputationClientResponse>(
+          url, type_key, content_settings_,
+          ContentSettingsType::PASSWORD_PROTECTION, kVerdictProto);
+
+  return GetVerdictTypeFromMostMatchedCachedVerdict<
+      LoginReputationClientResponse>(
+      kVerdictProto, std::move(most_matching_verdict), out_response);
 }
 
 size_t VerdictCacheManager::GetStoredPhishGuardVerdictCount(
@@ -567,6 +607,9 @@
     return;
   }
   std::vector<std::string> visited_cache_expressions;
+  safe_browsing::ClientSideDetectionType csd_type =
+      verdict.client_side_detection_type();
+
   for (const auto& threat_info : verdict.threat_info()) {
     // If |cache_expression_match_type| is unspecified, ignore this entry.
     if (threat_info.cache_expression_match_type() ==
@@ -600,7 +643,7 @@
 
     base::Value::Dict threat_info_entry =
         CreateDictionaryFromVerdict<RTLookupResponse::ThreatInfo>(
-            threat_info, receive_time, kRealTimeThreatInfoProto);
+            threat_info, receive_time, kRealTimeThreatInfoProto, csd_type);
     // Increases stored verdict count if we haven't seen this cache expression
     // before.
     if (!verdict_dictionary->contains(cache_expression)) {
@@ -627,11 +670,49 @@
   if (is_shut_down_) {
     return RTLookupResponse::ThreatInfo::VERDICT_TYPE_UNSPECIFIED;
   }
-  return GetMostMatchingCachedVerdictWithHostAndPathMatching<
-      RTLookupResponse::ThreatInfo>(
-      url, kRealTimeUrlCacheKey, content_settings_,
-      ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA,
-      kRealTimeThreatInfoProto, out_threat_info);
+
+  absl::optional<base::Value> most_matching_verdict =
+      GetMostMatchingCachedVerdictEntryWithHostAndPathMatching<
+          RTLookupResponse::ThreatInfo>(
+          url, kRealTimeUrlCacheKey, content_settings_,
+          ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA,
+          kRealTimeThreatInfoProto);
+
+  return GetVerdictTypeFromMostMatchedCachedVerdict<
+      RTLookupResponse::ThreatInfo>(kRealTimeThreatInfoProto,
+                                    std::move(most_matching_verdict),
+                                    out_threat_info);
+}
+
+safe_browsing::ClientSideDetectionType
+VerdictCacheManager::GetCachedRealTimeUrlClientSideDetectionType(
+    const GURL& url) {
+  if (is_shut_down_) {
+    return safe_browsing::ClientSideDetectionType::
+        CLIENT_SIDE_DETECTION_TYPE_UNSPECIFIED;
+  }
+  absl::optional<base::Value> most_matching_verdict =
+      GetMostMatchingCachedVerdictEntryWithHostAndPathMatching<
+          RTLookupResponse::ThreatInfo>(
+          url, kRealTimeUrlCacheKey, content_settings_,
+          ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA,
+          kRealTimeThreatInfoProto);
+
+  if (!most_matching_verdict || !most_matching_verdict->is_dict()) {
+    return safe_browsing::ClientSideDetectionType::
+        CLIENT_SIDE_DETECTION_TYPE_UNSPECIFIED;
+  }
+
+  base::Value* cache_client_side_detection_type =
+      most_matching_verdict->FindKey(kCsdTypeCacheKey);
+  if (cache_client_side_detection_type &&
+      cache_client_side_detection_type->is_int()) {
+    return static_cast<safe_browsing::ClientSideDetectionType>(
+        cache_client_side_detection_type->GetInt());
+  } else {
+    return safe_browsing::ClientSideDetectionType::
+        CLIENT_SIDE_DETECTION_TYPE_UNSPECIFIED;
+  }
 }
 
 ChromeUserPopulation::PageLoadToken VerdictCacheManager::CreatePageLoadToken(
diff --git a/components/safe_browsing/core/browser/verdict_cache_manager.h b/components/safe_browsing/core/browser/verdict_cache_manager.h
index 6e20673..00b5632 100644
--- a/components/safe_browsing/core/browser/verdict_cache_manager.h
+++ b/components/safe_browsing/core/browser/verdict_cache_manager.h
@@ -89,6 +89,9 @@
       const GURL& url,
       RTLookupResponse::ThreatInfo* out_threat_info);
 
+  safe_browsing::ClientSideDetectionType
+  GetCachedRealTimeUrlClientSideDetectionType(const GURL& url);
+
   // Creates a page load token that is tied with the hostname of the |url|.
   // The token is stored in memory.
   ChromeUserPopulation::PageLoadToken CreatePageLoadToken(const GURL& url);
diff --git a/components/safe_browsing/core/browser/verdict_cache_manager_unittest.cc b/components/safe_browsing/core/browser/verdict_cache_manager_unittest.cc
index 3e76d07..8f1ced3c 100644
--- a/components/safe_browsing/core/browser/verdict_cache_manager_unittest.cc
+++ b/components/safe_browsing/core/browser/verdict_cache_manager_unittest.cc
@@ -630,6 +630,60 @@
             cache_manager_->GetCachedRealTimeUrlVerdict(url, &out_verdict));
 }
 
+TEST_F(VerdictCacheManagerTest,
+       TestCanRetrieveCachedRealTimeClientSideDetectionTypeCheck) {
+  base::HistogramTester histograms;
+  GURL url("https://www.example.com/path");
+
+  RTLookupResponse response;
+  AddThreatInfoToResponse(response, RTLookupResponse::ThreatInfo::SAFE,
+                          RTLookupResponse::ThreatInfo::THREAT_TYPE_UNSPECIFIED,
+                          60, "www.example.com/",
+                          RTLookupResponse::ThreatInfo::EXACT_MATCH);
+  AddThreatInfoToResponse(response, RTLookupResponse::ThreatInfo::SUSPICIOUS,
+                          RTLookupResponse::ThreatInfo::SOCIAL_ENGINEERING, 60,
+                          "www.example.com/path",
+                          RTLookupResponse::ThreatInfo::EXACT_MATCH);
+
+  response.set_client_side_detection_type(
+      safe_browsing::ClientSideDetectionType::
+          CLIENT_SIDE_DETECTION_TYPE_UNSPECIFIED);
+
+  cache_manager_->CacheRealTimeUrlVerdict(url, response, base::Time::Now());
+
+  RTLookupResponse::ThreatInfo out_verdict;
+  EXPECT_EQ(RTLookupResponse::ThreatInfo::SUSPICIOUS,
+            cache_manager_->GetCachedRealTimeUrlVerdict(url, &out_verdict));
+  EXPECT_EQ("www.example.com/path",
+            out_verdict.cache_expression_using_match_type());
+  EXPECT_EQ(60, out_verdict.cache_duration_sec());
+  EXPECT_EQ(RTLookupResponse::ThreatInfo::SOCIAL_ENGINEERING,
+            out_verdict.threat_type());
+  EXPECT_EQ(static_cast<int>(safe_browsing::ClientSideDetectionType::
+                                 CLIENT_SIDE_DETECTION_TYPE_UNSPECIFIED),
+            cache_manager_->GetCachedRealTimeUrlClientSideDetectionType(url));
+
+  GURL url2("https://www.example2.com/path2");
+
+  RTLookupResponse response2;
+  AddThreatInfoToResponse(response2, RTLookupResponse::ThreatInfo::SAFE,
+                          RTLookupResponse::ThreatInfo::THREAT_TYPE_UNSPECIFIED,
+                          60, "www.example2.com/",
+                          RTLookupResponse::ThreatInfo::EXACT_MATCH);
+  AddThreatInfoToResponse(response2, RTLookupResponse::ThreatInfo::SAFE,
+                          RTLookupResponse::ThreatInfo::SOCIAL_ENGINEERING, 60,
+                          "www.example2.com/path2",
+                          RTLookupResponse::ThreatInfo::EXACT_MATCH);
+
+  response2.set_client_side_detection_type(
+      safe_browsing::ClientSideDetectionType::FORCE_REQUEST);
+  cache_manager_->CacheRealTimeUrlVerdict(url, response2, base::Time::Now());
+
+  EXPECT_EQ(
+      static_cast<int>(safe_browsing::ClientSideDetectionType::FORCE_REQUEST),
+      cache_manager_->GetCachedRealTimeUrlClientSideDetectionType(url2));
+}
+
 TEST_F(VerdictCacheManagerTest, TestHostSuffixMatching) {
   // Password protection verdict.
   GURL url("https://a.example.test/path");
diff --git a/components/safe_browsing/core/common/features.cc b/components/safe_browsing/core/common/features.cc
index 1c701e7f..3b210e94 100644
--- a/components/safe_browsing/core/common/features.cc
+++ b/components/safe_browsing/core/common/features.cc
@@ -41,6 +41,10 @@
              "ClientSideDetectionReferrerChain",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
+BASE_FEATURE(kClientSideDetectionTypeForceRequest,
+             "ClientSideDetectionTypeForceRequest",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kComponentUpdaterAndroidProtegoAllowlist,
              "SafeBrowsingComponentUpdaterAndroidProtegoAllowlist",
              base::FEATURE_DISABLED_BY_DEFAULT);
@@ -218,6 +222,7 @@
     {&kClientSideDetectionKillswitch, true},
     {&kClientSideDetectionModelIsFlatBuffer, true},
     {&kClientSideDetectionReferrerChain, true},
+    {&kClientSideDetectionTypeForceRequest, true},
     {&kComponentUpdaterAndroidProtegoAllowlist, true},
     {&kConnectorsScanningAccessToken, true},
     {&kConnectorsScanningReportOnlyUI, true},
diff --git a/components/safe_browsing/core/common/features.h b/components/safe_browsing/core/common/features.h
index 168d8df9..6f1b217 100644
--- a/components/safe_browsing/core/common/features.h
+++ b/components/safe_browsing/core/common/features.h
@@ -39,6 +39,10 @@
 // Enables client side detection referrer chain.
 BASE_DECLARE_FEATURE(kClientSideDetectionReferrerChain);
 
+// Enables force request CSD-P ping when RT Lookup Response has FORCE_REQUEST in
+// the client_side_detection_type field
+BASE_DECLARE_FEATURE(kClientSideDetectionTypeForceRequest);
+
 // Enables serving the Android Protego allowlist through the component updater.
 BASE_DECLARE_FEATURE(kComponentUpdaterAndroidProtegoAllowlist);
 
diff --git a/components/security_interstitials/content/captive_portal_helper_android.cc b/components/security_interstitials/content/captive_portal_helper_android.cc
index 6c2b0b1..39432e6 100644
--- a/components/security_interstitials/content/captive_portal_helper_android.cc
+++ b/components/security_interstitials/content/captive_portal_helper_android.cc
@@ -12,7 +12,6 @@
 
 #include "base/android/jni_string.h"
 #include "base/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/security_interstitials/content/android/jni_headers/CaptivePortalHelper_jni.h"
 #include "components/security_interstitials/content/ssl_error_assistant.h"
 #include "components/security_interstitials/content/ssl_error_handler.h"
diff --git a/components/security_interstitials/content/ssl_error_navigation_throttle.cc b/components/security_interstitials/content/ssl_error_navigation_throttle.cc
index a8554fcf..968d965b 100644
--- a/components/security_interstitials/content/ssl_error_navigation_throttle.cc
+++ b/components/security_interstitials/content/ssl_error_navigation_throttle.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/buildflag.h"
 #include "components/security_interstitials/content/security_interstitial_page.h"
 #include "components/security_interstitials/content/security_interstitial_tab_helper.h"
diff --git a/components/segmentation_platform/embedder/input_delegate/price_tracking_input_delegate.cc b/components/segmentation_platform/embedder/input_delegate/price_tracking_input_delegate.cc
index fb4a69a..8b59570 100644
--- a/components/segmentation_platform/embedder/input_delegate/price_tracking_input_delegate.cc
+++ b/components/segmentation_platform/embedder/input_delegate/price_tracking_input_delegate.cc
@@ -45,7 +45,7 @@
 
   auto url = *iter->second.url.get();
   commerce::ShoppingService* shopping_service = shopping_service_getter_.Run();
-  if (!shopping_service) {
+  if (!shopping_service || !shopping_service->IsShoppingListEligible()) {
     std::move(callback).Run(/*error=*/true, Tensor());
     return;
   }
diff --git a/components/segmentation_platform/embedder/model_provider_factory_impl.cc b/components/segmentation_platform/embedder/model_provider_factory_impl.cc
index d9c2b91..f00e358 100644
--- a/components/segmentation_platform/embedder/model_provider_factory_impl.cc
+++ b/components/segmentation_platform/embedder/model_provider_factory_impl.cc
@@ -4,6 +4,7 @@
 
 #include "components/segmentation_platform/embedder/model_provider_factory_impl.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/machine_learning_tflite_buildflags.h"
 #include "components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_provider.h"
 #include "components/segmentation_platform/public/config.h"
diff --git a/components/segmentation_platform/internal/data_collection/training_data_collector_impl.cc b/components/segmentation_platform/internal/data_collection/training_data_collector_impl.cc
index 88e9e323..d7b9695 100644
--- a/components/segmentation_platform/internal/data_collection/training_data_collector_impl.cc
+++ b/components/segmentation_platform/internal/data_collection/training_data_collector_impl.cc
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/metrics/metrics_hashes.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/clock.h"
 #include "components/segmentation_platform/internal/constants.h"
 #include "components/segmentation_platform/internal/database/signal_storage_config.h"
diff --git a/components/segmentation_platform/internal/database/ukm_database_backend.cc b/components/segmentation_platform/internal/database/ukm_database_backend.cc
index b8e70dc..25bbef0 100644
--- a/components/segmentation_platform/internal/database/ukm_database_backend.cc
+++ b/components/segmentation_platform/internal/database/ukm_database_backend.cc
@@ -7,6 +7,7 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/rand_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/segmentation_platform/internal/database/ukm_metrics_table.h"
 #include "components/segmentation_platform/internal/database/ukm_types.h"
 #include "components/segmentation_platform/internal/database/ukm_url_table.h"
diff --git a/components/segmentation_platform/internal/database/ukm_database_backend.h b/components/segmentation_platform/internal/database/ukm_database_backend.h
index 8efd16b..d5b2b66 100644
--- a/components/segmentation_platform/internal/database/ukm_database_backend.h
+++ b/components/segmentation_platform/internal/database/ukm_database_backend.h
@@ -13,6 +13,7 @@
 #include "base/containers/flat_map.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/segmentation_platform/internal/database/ukm_database.h"
 #include "components/segmentation_platform/internal/database/ukm_metrics_table.h"
 #include "components/segmentation_platform/internal/database/ukm_types.h"
diff --git a/components/segmentation_platform/internal/database/ukm_database_backend_unittest.cc b/components/segmentation_platform/internal/database/ukm_database_backend_unittest.cc
index 7018e4f..16c6b7a 100644
--- a/components/segmentation_platform/internal/database/ukm_database_backend_unittest.cc
+++ b/components/segmentation_platform/internal/database/ukm_database_backend_unittest.cc
@@ -5,6 +5,7 @@
 #include "components/segmentation_platform/internal/database/ukm_database_backend.h"
 
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
diff --git a/components/segmentation_platform/internal/database/ukm_database_impl.h b/components/segmentation_platform/internal/database/ukm_database_impl.h
index c0439cf..865892f 100644
--- a/components/segmentation_platform/internal/database/ukm_database_impl.h
+++ b/components/segmentation_platform/internal/database/ukm_database_impl.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/segmentation_platform/internal/database/ukm_database.h"
 #include "components/segmentation_platform/internal/database/ukm_types.h"
diff --git a/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.cc b/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.cc
index 8ddd49d..2661f3d 100644
--- a/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.cc
+++ b/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_executor.h"
 #include "components/optimization_guide/proto/common_types.pb.h"
 #include "components/optimization_guide/proto/models.pb.h"
diff --git a/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.h b/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.h
index 72dcfda..4c80b21 100644
--- a/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.h
+++ b/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_handler.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_handler.h"
 #include "components/optimization_guide/proto/models.pb.h"
 #include "components/segmentation_platform/public/model_provider.h"
diff --git a/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_provider.h b/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_provider.h
index 69667e98..9df8892 100644
--- a/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_provider.h
+++ b/components/segmentation_platform/internal/execution/optimization_guide/optimization_guide_segmentation_model_provider.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/model_handler.h"
 #include "components/segmentation_platform/public/model_provider.h"
 #include "components/segmentation_platform/public/proto/segmentation_platform.pb.h"
diff --git a/components/segmentation_platform/internal/execution/processing/feature_list_query_processor.cc b/components/segmentation_platform/internal/execution/processing/feature_list_query_processor.cc
index 20f9d81..1408c471 100644
--- a/components/segmentation_platform/internal/execution/processing/feature_list_query_processor.cc
+++ b/components/segmentation_platform/internal/execution/processing/feature_list_query_processor.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/segmentation_platform/internal/database/storage_service.h"
 #include "components/segmentation_platform/internal/database/ukm_types.h"
 #include "components/segmentation_platform/internal/execution/processing/custom_input_processor.h"
diff --git a/components/segmentation_platform/internal/scheduler/execution_service.cc b/components/segmentation_platform/internal/scheduler/execution_service.cc
index a7d735b..29deef61 100644
--- a/components/segmentation_platform/internal/scheduler/execution_service.cc
+++ b/components/segmentation_platform/internal/scheduler/execution_service.cc
@@ -4,6 +4,7 @@
 
 #include "components/segmentation_platform/internal/scheduler/execution_service.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/prefs/pref_service.h"
 #include "components/segmentation_platform/internal/database/storage_service.h"
 #include "components/segmentation_platform/internal/execution/default_model_manager.h"
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
index ea3afa1..5232583 100644
--- a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
+++ b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
@@ -15,7 +15,6 @@
 #include "base/system/sys_info.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/segmentation_platform/internal/constants.h"
diff --git a/components/segmentation_platform/internal/signals/history_service_observer.cc b/components/segmentation_platform/internal/signals/history_service_observer.cc
index 1d7b3a1..2b456b3c 100644
--- a/components/segmentation_platform/internal/signals/history_service_observer.cc
+++ b/components/segmentation_platform/internal/signals/history_service_observer.cc
@@ -5,6 +5,7 @@
 #include "components/segmentation_platform/internal/signals/history_service_observer.h"
 
 #include "base/metrics/user_metrics.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "components/history/core/browser/history_service.h"
 #include "components/history/core/browser/history_service_observer.h"
diff --git a/components/services/font/public/cpp/font_service_thread.h b/components/services/font/public/cpp/font_service_thread.h
index 5139acedd..45d51b6 100644
--- a/components/services/font/public/cpp/font_service_thread.h
+++ b/components/services/font/public/cpp/font_service_thread.h
@@ -11,6 +11,7 @@
 
 #include "base/files/file.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/font/public/mojom/font_service.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.cc b/components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.cc
index c3c5136..dc0282a 100644
--- a/components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.cc
+++ b/components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.cc
@@ -9,6 +9,7 @@
 #include "base/memory/discardable_memory.h"
 #include "base/memory/discardable_memory_allocator.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "components/crash/core/common/crash_key.h"
diff --git a/components/services/storage/dom_storage/dom_storage_database_unittest.cc b/components/services/storage/dom_storage/dom_storage_database_unittest.cc
index 90f3f62..8f07df57 100644
--- a/components/services/storage/dom_storage/dom_storage_database_unittest.cc
+++ b/components/services/storage/dom_storage/dom_storage_database_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/components/services/storage/dom_storage/local_storage_impl.cc b/components/services/storage/dom_storage/local_storage_impl.cc
index 86225880..d25606b 100644
--- a/components/services/storage/dom_storage/local_storage_impl.cc
+++ b/components/services/storage/dom_storage/local_storage_impl.cc
@@ -24,6 +24,7 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/trace_event/memory_dump_manager.h"
diff --git a/components/services/storage/dom_storage/local_storage_impl_unittest.cc b/components/services/storage/dom_storage/local_storage_impl_unittest.cc
index 2a9ca7d..e716831 100644
--- a/components/services/storage/dom_storage/local_storage_impl_unittest.cc
+++ b/components/services/storage/dom_storage/local_storage_impl_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
diff --git a/components/services/storage/dom_storage/session_storage_impl_unittest.cc b/components/services/storage/dom_storage/session_storage_impl_unittest.cc
index 6a56294..13c5d45 100644
--- a/components/services/storage/dom_storage/session_storage_impl_unittest.cc
+++ b/components/services/storage/dom_storage/session_storage_impl_unittest.cc
@@ -21,6 +21,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/components/services/storage/dom_storage/testing_legacy_session_storage_database.cc b/components/services/storage/dom_storage/testing_legacy_session_storage_database.cc
index 0b4aff6..f01fe6b 100644
--- a/components/services/storage/dom_storage/testing_legacy_session_storage_database.cc
+++ b/components/services/storage/dom_storage/testing_legacy_session_storage_database.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/process_memory_dump.h"
diff --git a/components/services/storage/indexed_db/scopes/leveldb_scope_unittest.cc b/components/services/storage/indexed_db/scopes/leveldb_scope_unittest.cc
index 100b1c8..cb685cb45 100644
--- a/components/services/storage/indexed_db/scopes/leveldb_scope_unittest.cc
+++ b/components/services/storage/indexed_db/scopes/leveldb_scope_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/services/storage/indexed_db/leveldb/fake_leveldb_factory.h"
 #include "components/services/storage/indexed_db/locks/partitioned_lock_manager.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scope.h"
diff --git a/components/services/storage/indexed_db/scopes/leveldb_scopes_tasks_unittest.cc b/components/services/storage/indexed_db/scopes/leveldb_scopes_tasks_unittest.cc
index e2aaa59..e41a67a 100644
--- a/components/services/storage/indexed_db/scopes/leveldb_scopes_tasks_unittest.cc
+++ b/components/services/storage/indexed_db/scopes/leveldb_scopes_tasks_unittest.cc
@@ -8,7 +8,6 @@
 
 #include "base/callback_helpers.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scopes_coding.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scopes_test_utils.h"
 #include "components/services/storage/indexed_db/scopes/scopes_metadata.pb.h"
diff --git a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.cc b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.cc
index a34bd11..7528179 100644
--- a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.cc
+++ b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.cc
@@ -22,6 +22,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/default_clock.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/process_memory_dump.h"
diff --git a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.cc b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.cc
index 510e4fd..555d8bed 100644
--- a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.cc
+++ b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.cc
@@ -5,6 +5,7 @@
 #include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h"
 
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scope.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scopes.h"
 #include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h"
diff --git a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h
index 8fb8eaf6..7b12307 100644
--- a/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h
+++ b/components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/indexed_db/leveldb/leveldb_state.h"
 
 namespace leveldb {
diff --git a/components/services/storage/public/cpp/filesystem/filesystem_proxy.cc b/components/services/storage/public/cpp/filesystem/filesystem_proxy.cc
index 1e389c2e..25384bc 100644
--- a/components/services/storage/public/cpp/filesystem/filesystem_proxy.cc
+++ b/components/services/storage/public/cpp/filesystem/filesystem_proxy.cc
@@ -11,6 +11,7 @@
 #include "base/files/file.h"
 #include "base/files/file_util.h"
 #include "base/files/important_file_writer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/types/expected.h"
 #include "build/build_config.h"
 #include "components/services/storage/public/cpp/filesystem/filesystem_impl.h"
diff --git a/components/services/storage/service_worker/service_worker_database_unittest.cc b/components/services/storage/service_worker/service_worker_database_unittest.cc
index f5a8de4c..45d8de1 100644
--- a/components/services/storage/service_worker/service_worker_database_unittest.cc
+++ b/components/services/storage/service_worker/service_worker_database_unittest.cc
@@ -2283,162 +2283,408 @@
   EXPECT_EQ(expected, ids_out);
 }
 
-TEST(ServiceWorkerDatabaseTest, DeleteAllDataForStorageKey) {
+namespace {
+class DeleteAllDataForStorageKeyTest {
+ public:
+  // Returns true if `kThirdPartyStoragePartitioning` should be enabled for the
+  // test.
+  virtual bool WithThirdPartyStoragePartitioningEnabled() { return false; }
+
+  // Runs the test.
+  //
+  // The three `registered_keys` parameters define the key to register in the SW
+  // database. This must be given in parts because the `StorageKey` constructor
+  // depends on the status of the `kThirdPartyStoragePartitioning`, so must be
+  // called only after that is configured.
+  //
+  // `deleted_origin` is the origin with which to call
+  // `DeleteAllDataForStorageKeys`.
+  //
+  // `expect_key_deleted` determines whether the test will expect the registered
+  // key to be deleted; otherwise, it will expected the registered key to
+  // remain.
+  void TestDeleteAllDataForStorageKey(
+      std::string registered_key_origin,
+      std::string registered_key_top_level_site,
+      blink::mojom::AncestorChainBit registered_key_ancestor_chain_bit,
+      std::string deleted_origin,
+      bool expect_key_deleted);
+};
+
+void DeleteAllDataForStorageKeyTest::TestDeleteAllDataForStorageKey(
+    std::string registered_key_origin,
+    std::string registered_key_top_level_site,
+    blink::mojom::AncestorChainBit registered_key_ancestor_chain_bit,
+    std::string deleted_origin,
+    bool expect_key_deleted) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  if (WithThirdPartyStoragePartitioningEnabled()) {
+    scoped_feature_list.InitAndEnableFeature(
+        net::features::kThirdPartyStoragePartitioning);
+  } else {
+    scoped_feature_list.InitAndDisableFeature(
+        net::features::kThirdPartyStoragePartitioning);
+  }
+
+  blink::StorageKey registered_key = blink::StorageKey::CreateWithOptionalNonce(
+      url::Origin::Create(GURL(registered_key_origin)),
+      net::SchemefulSite(GURL(registered_key_top_level_site)), nullptr,
+      registered_key_ancestor_chain_bit);
+
   std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
   ServiceWorkerDatabase::DeletedVersion deleted_version;
+  GURL reg_url = registered_key.origin().GetURL();
 
-  // Data associated with |key1| will be removed.
-  GURL url1("https://example.com");
-  GURL url2("https://example.org");
-  url::Origin origin1 = url::Origin::Create(url1);
-  url::Origin origin2 = url::Origin::Create(url2);
-  blink::StorageKey key1(origin1);
-  blink::StorageKey key2(origin2);
-
-  // |key1| has two registrations (registration1 and registration2).
+  // `registered_key` has two registrations (data1 and data2).
   RegistrationData data1;
   data1.registration_id = 10;
-  data1.scope = URL(url1, "/foo");
-  data1.key = key1;
-  data1.script = URL(url1, "/resource1");
+  data1.scope = URL(reg_url, "/foo");
+  data1.key = registered_key;
+  data1.script = URL(reg_url, "/resource1");
   data1.version_id = 100;
   data1.resources_total_size_bytes = 2013 + 512;
 
   std::vector<ResourceRecordPtr> resources1;
-  resources1.push_back(CreateResource(1, URL(url1, "/resource1"), 2013));
-  resources1.push_back(CreateResource(2, URL(url1, "/resource2"), 512));
+  resources1.push_back(CreateResource(1, URL(reg_url, "/resource1"), 2013));
+  resources1.push_back(CreateResource(2, URL(reg_url, "/resource2"), 512));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data1, resources1, &deleted_version));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, key1,
+                data1.registration_id, registered_key,
                 CreateUserData(data1.registration_id, {{"key1", "value1"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data1.registration_id, key1,
+                data1.registration_id, registered_key,
                 CreateUserData(data1.registration_id, {{"key2", "value2"}})));
 
   RegistrationData data2;
   data2.registration_id = 11;
-  data2.scope = URL(url1, "/bar");
-  data2.key = key1;
-  data2.script = URL(url1, "/resource3");
+  data2.scope = URL(reg_url, "/bar");
+  data2.key = registered_key;
+  data2.script = URL(reg_url, "/resource3");
   data2.version_id = 101;
   data2.resources_total_size_bytes = 4 + 5;
 
   std::vector<ResourceRecordPtr> resources2;
-  resources2.push_back(CreateResource(3, URL(url1, "/resource3"), 4));
-  resources2.push_back(CreateResource(4, URL(url1, "/resource4"), 5));
+  resources2.push_back(CreateResource(3, URL(reg_url, "/resource3"), 4));
+  resources2.push_back(CreateResource(4, URL(reg_url, "/resource4"), 5));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteRegistration(data2, resources2, &deleted_version));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, key1,
+                data2.registration_id, registered_key,
                 CreateUserData(data2.registration_id, {{"key3", "value3"}})));
   ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->WriteUserData(
-                data2.registration_id, key1,
+                data2.registration_id, registered_key,
                 CreateUserData(data2.registration_id, {{"key4", "value4"}})));
 
-  // |key2| has one registration (registration3).
-  RegistrationData data3;
-  data3.registration_id = 12;
-  data3.scope = URL(url2, "/hoge");
-  data3.key = key2;
-  data3.script = URL(url2, "/resource5");
-  data3.version_id = 102;
-  data3.resources_total_size_bytes = 6 + 7;
+  // `existing_key` is a key unrelated to `registered_key` that should never
+  // have its registrations deleted.
+  blink::StorageKey existing_key(
+      url::Origin::Create(GURL("https://unrelated.com")));
+  GURL existing_url = existing_key.origin().GetURL();
 
-  std::vector<ResourceRecordPtr> resources3;
-  resources3.push_back(CreateResource(5, URL(url2, "/resource5"), 6));
-  resources3.push_back(CreateResource(6, URL(url2, "/resource6"), 7));
-  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->WriteRegistration(data3, resources3, &deleted_version));
-  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->WriteUserData(
-                data3.registration_id, key2,
-                CreateUserData(data3.registration_id, {{"key5", "value5"}})));
-  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->WriteUserData(
-                data3.registration_id, key2,
-                CreateUserData(data3.registration_id, {{"key6", "value6"}})));
+  RegistrationData exiting_data;
+  exiting_data.registration_id = 555;
+  exiting_data.scope = URL(existing_url, "/foo");
+  exiting_data.key = existing_key;
+  exiting_data.script = URL(existing_url, "/resource5");
+  exiting_data.version_id = 55;
+  exiting_data.resources_total_size_bytes = 2013;
 
-  std::set<blink::StorageKey> keys_to_delete;
+  std::vector<ResourceRecordPtr> existing_resources;
+  existing_resources.push_back(
+      CreateResource(1, URL(existing_url, "/resource5"), 2013));
+  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+            database->WriteRegistration(exiting_data, existing_resources,
+                                        &deleted_version));
+  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+            database->WriteUserData(exiting_data.registration_id, existing_key,
+                                    CreateUserData(exiting_data.registration_id,
+                                                   {{"key1", "value1"}})));
+
+  // invoke DeleteAllDataForStorageKeys
   std::vector<int64_t> newly_purgeable_resources;
-  keys_to_delete.insert(key1);
-  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->DeleteAllDataForStorageKeys(keys_to_delete,
+  auto origin_obj = url::Origin::Create(GURL(deleted_origin));
+  blink::StorageKey deleted_key(origin_obj);
+  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+            database->DeleteAllDataForStorageKeys({deleted_key},
                                                   &newly_purgeable_resources));
 
-  // |key1| should be removed from the unique origin list.
+  if (expect_key_deleted) {
+    // `registered_key` should be removed from the unique origin list.
+    std::set<blink::StorageKey> unique_keys;
+    ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+              database->GetStorageKeysWithRegistrations(&unique_keys));
+    ASSERT_EQ(1u, unique_keys.size());  // just existing_key
+
+    // The registrations for `registered_key` should be removed.
+    std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
+    ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+              database->GetRegistrationsForStorageKey(registered_key,
+                                                      &registrations, nullptr));
+    ASSERT_TRUE(registrations.empty());
+    blink::StorageKey key_out;
+    ASSERT_EQ(
+        ServiceWorkerDatabase::Status::kErrorNotFound,
+        database->ReadRegistrationStorageKey(data1.registration_id, &key_out));
+
+    // The resources associated with `registered_key` should be purgeable.
+    std::vector<int64_t> purgeable_ids_out;
+    ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+              database->GetPurgeableResourceIds(&purgeable_ids_out));
+    ASSERT_EQ(4u, purgeable_ids_out.size());
+    ASSERT_TRUE(base::Contains(purgeable_ids_out, 1));
+    ASSERT_TRUE(base::Contains(purgeable_ids_out, 2));
+    ASSERT_TRUE(base::Contains(purgeable_ids_out, 3));
+    ASSERT_TRUE(base::Contains(purgeable_ids_out, 4));
+
+    // The user data associated with `registered_key` should be removed.
+    std::vector<std::string> user_data_out;
+    ASSERT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
+              database->ReadUserData(data1.registration_id, {"key1"},
+                                     &user_data_out));
+    ASSERT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
+              database->ReadUserData(data1.registration_id, {"key2"},
+                                     &user_data_out));
+    ASSERT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
+              database->ReadUserData(data2.registration_id, {"key3"},
+                                     &user_data_out));
+    ASSERT_EQ(ServiceWorkerDatabase::Status::kErrorNotFound,
+              database->ReadUserData(data2.registration_id, {"key4"},
+                                     &user_data_out));
+    return;
+  }
+
+  // `registered_key` should not be removed from the unique origin list.
   std::set<blink::StorageKey> unique_keys;
-  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
+  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
             database->GetStorageKeysWithRegistrations(&unique_keys));
-  EXPECT_EQ(1u, unique_keys.size());
-  EXPECT_TRUE(base::Contains(unique_keys, key2));
+  ASSERT_EQ(2u, unique_keys.size());  // registered_key + existing_key
+  ASSERT_TRUE(base::Contains(unique_keys, registered_key));
 
-  // The registrations for |key1| should be removed.
-  std::vector<mojom::ServiceWorkerRegistrationDataPtr> registrations;
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kOk,
-      database->GetRegistrationsForStorageKey(key1, &registrations, nullptr));
-  EXPECT_TRUE(registrations.empty());
-  blink::StorageKey key_out;
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kErrorNotFound,
-      database->ReadRegistrationStorageKey(data1.registration_id, &key_out));
-
-  // The registration for |key2| should not be removed.
+  // The registration for `registered_key` should not be removed.
   RegistrationDataPtr data_out;
+  blink::StorageKey key_out;
+
   std::vector<ResourceRecordPtr> resources_out;
-  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->ReadRegistration(data3.registration_id, key2, &data_out,
-                                       &resources_out));
-  VerifyRegistrationData(data3, *data_out);
-  VerifyResourceRecords(resources3, resources_out);
-  EXPECT_EQ(
+  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+            database->ReadRegistration(data1.registration_id, registered_key,
+                                       &data_out, &resources_out));
+  VerifyRegistrationData(data1, *data_out);
+  VerifyResourceRecords(resources1, resources_out);
+  ASSERT_EQ(
       ServiceWorkerDatabase::Status::kOk,
-      database->ReadRegistrationStorageKey(data3.registration_id, &key_out));
-  EXPECT_EQ(key2, key_out);
+      database->ReadRegistrationStorageKey(data1.registration_id, &key_out));
+  ASSERT_EQ(registered_key, key_out);
 
-  // The resources associated with |key1| should be purgeable.
-  std::vector<int64_t> purgeable_ids_out;
-  EXPECT_EQ(ServiceWorkerDatabase::Status::kOk,
-            database->GetPurgeableResourceIds(&purgeable_ids_out));
-  EXPECT_EQ(4u, purgeable_ids_out.size());
-  EXPECT_TRUE(base::Contains(purgeable_ids_out, 1));
-  EXPECT_TRUE(base::Contains(purgeable_ids_out, 2));
-  EXPECT_TRUE(base::Contains(purgeable_ids_out, 3));
-  EXPECT_TRUE(base::Contains(purgeable_ids_out, 4));
+  resources_out.clear();
+  ASSERT_EQ(ServiceWorkerDatabase::Status::kOk,
+            database->ReadRegistration(data2.registration_id, registered_key,
+                                       &data_out, &resources_out));
+  VerifyRegistrationData(data2, *data_out);
+  VerifyResourceRecords(resources2, resources_out);
+  ASSERT_EQ(
+      ServiceWorkerDatabase::Status::kOk,
+      database->ReadRegistrationStorageKey(data2.registration_id, &key_out));
+  ASSERT_EQ(registered_key, key_out);
 
-  // The user data associated with |key1| should be removed.
+  // The user data associated with `registered_key` should not be removed.
   std::vector<std::string> user_data_out;
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kErrorNotFound,
+  ASSERT_EQ(
+      ServiceWorkerDatabase::Status::kOk,
       database->ReadUserData(data1.registration_id, {"key1"}, &user_data_out));
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kErrorNotFound,
+  ASSERT_EQ(1u, user_data_out.size());
+  ASSERT_EQ("value1", user_data_out[0]);
+  ASSERT_EQ(
+      ServiceWorkerDatabase::Status::kOk,
       database->ReadUserData(data1.registration_id, {"key2"}, &user_data_out));
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kErrorNotFound,
+  ASSERT_EQ(1u, user_data_out.size());
+  ASSERT_EQ("value2", user_data_out[0]);
+  ASSERT_EQ(
+      ServiceWorkerDatabase::Status::kOk,
       database->ReadUserData(data2.registration_id, {"key3"}, &user_data_out));
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kErrorNotFound,
+  ASSERT_EQ(1u, user_data_out.size());
+  ASSERT_EQ("value3", user_data_out[0]);
+  ASSERT_EQ(
+      ServiceWorkerDatabase::Status::kOk,
       database->ReadUserData(data2.registration_id, {"key4"}, &user_data_out));
-
-  // The user data associated with |key2| should not be removed.
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kOk,
-      database->ReadUserData(data3.registration_id, {"key5"}, &user_data_out));
   ASSERT_EQ(1u, user_data_out.size());
-  EXPECT_EQ("value5", user_data_out[0]);
-  EXPECT_EQ(
-      ServiceWorkerDatabase::Status::kOk,
-      database->ReadUserData(data3.registration_id, {"key6"}, &user_data_out));
-  ASSERT_EQ(1u, user_data_out.size());
-  EXPECT_EQ("value6", user_data_out[0]);
+  ASSERT_EQ("value4", user_data_out[0]);
 }
 
+}  // namespace
+
+// Tests for first-party keys, which are parameterized on whether
+// `kThirdPartyStoragePartitioning` is enabled or disabled.
+class DeleteAllDataForStorageKeyFirstPartyP
+    : public DeleteAllDataForStorageKeyTest,
+      public testing::TestWithParam<bool> {
+  bool WithThirdPartyStoragePartitioningEnabled() override {
+    return GetParam();
+  }
+};
+
+// Tests for third-party keys, which only exist when
+// `kThirdPartyStoragePartitioning` is disabled.
+class ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty
+    : public DeleteAllDataForStorageKeyTest,
+      public testing::Test {
+  bool WithThirdPartyStoragePartitioningEnabled() override { return true; }
+};
+
+// A simple first-party key that matches the deleted origin should be
+// deleted.
+TEST_P(DeleteAllDataForStorageKeyFirstPartyP, Matching) {
+  TestDeleteAllDataForStorageKey("https://example.com", "https://example.com",
+                                 blink::mojom::AncestorChainBit::kSameSite,
+                                 "https://example.com", true);
+}
+
+// A simple first-party key that does not match the deleted origin should
+// not be deleted.
+TEST_P(DeleteAllDataForStorageKeyFirstPartyP, NonMatching) {
+  TestDeleteAllDataForStorageKey("https://other.com", "https://other.com",
+                                 blink::mojom::AncestorChainBit::kSameSite,
+                                 "https://example.com", false);
+}
+
+// A first party key where the key's origin is a subsite of the deleted
+// origin should not be deleted, regardless of 3PSP.
+TEST_P(DeleteAllDataForStorageKeyFirstPartyP, WithSubsiteOrigin) {
+  TestDeleteAllDataForStorageKey(
+      "https://subsite.example.com", "https://example.com",
+      blink::mojom::AncestorChainBit::kSameSite, "https://example.com", false);
+}
+
+// A first-party key, where the deleted origin is a subsite of the
+// registered key's origin, should not be deleted regardless of 3PSP.
+TEST_P(DeleteAllDataForStorageKeyFirstPartyP, WithSupersiteOfDeletedOrigin) {
+  TestDeleteAllDataForStorageKey("https://example.com", "https://example.com",
+                                 blink::mojom::AncestorChainBit::kSameSite,
+                                 "https://subsite.example.com", false);
+}
+
+// A first-party key with a subsite origin, where the deleted origin is the
+// same subsite, should be deleted regardless of 3PSP.
+TEST_P(DeleteAllDataForStorageKeyFirstPartyP,
+       WithSubsiteMatchingDeletedOrigin) {
+  TestDeleteAllDataForStorageKey("https://subsite.example.com",
+                                 "https://example.com",
+                                 blink::mojom::AncestorChainBit::kSameSite,
+                                 "https://subsite.example.com", true);
+}
+
+// A third-party key with a subsite origin not matching the top-level site,
+// where the deleted origin matches the key origin, should not be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       WithSubsiteMatchingDeletedOrigin) {
+  TestDeleteAllDataForStorageKey(
+      "https://subsite.example.com", "https://other.com",
+      blink::mojom::AncestorChainBit::kCrossSite, "https://subsite.example.com",
+      // TODO(crbug.com/1376065): should be deleted (origin match)
+      false);
+}
+
+// A third-party key with a subsite origin matching the top-level site,
+// where the deleted origin matches the key origin, should not be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       WithSubsiteMatchingDeletedOriginMatchingTopLevelSite) {
+  TestDeleteAllDataForStorageKey(
+      "https://subsite.example.com", "https://example.com",
+      blink::mojom::AncestorChainBit::kCrossSite, "https://subsite.example.com",
+      // TODO(crbug.com/1376065): should be deleted (origin match)
+      false);
+}
+
+// A third-party key with an origin equal to the top-level site,
+// where the deleted origin is a subsite, should not be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       SupersiteOfDeletedOrigin) {
+  TestDeleteAllDataForStorageKey("https://example.com", "https://other.com",
+                                 blink::mojom::AncestorChainBit::kCrossSite,
+                                 "https://subsite.example.com", false);
+}
+
+// A third-party key with an origin equal to the top-level site,
+// where the deleted origin is a subsite, should not be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       SupersiteOfDeletedOriginMatchingTopLevelSite) {
+  TestDeleteAllDataForStorageKey("https://example.com", "https://example.com",
+                                 blink::mojom::AncestorChainBit::kCrossSite,
+                                 "https://subsite.example.com",
+                                 // TODO(crbug.com/1376065): maybe? (site match)
+                                 false);
+}
+
+// A third-party key for a subsite of the deleted key should not be
+// deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       SubsiteOfDeletedOrigin) {
+  TestDeleteAllDataForStorageKey("https://sub.example.com", "https://other.com",
+                                 blink::mojom::AncestorChainBit::kCrossSite,
+                                 "https://example.com", false);
+}
+
+// A third-party key (per ancestor chain bit) for a subsite of the deleted
+// key should not be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       PerAncestorChainBitSubsiteOfDeletedOrigin) {
+  TestDeleteAllDataForStorageKey(
+      "https://sub.example.com", "https://example.com",
+      blink::mojom::AncestorChainBit::kCrossSite, "https://example.com",
+      // TODO(crbug.com/1376065): maybe? (site match)
+      false);
+}
+
+// A third-party key where the origin (but not the top-level site) matches
+// the deleted origin should be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       WithMatchingOrigin) {
+  TestDeleteAllDataForStorageKey("https://example.com", "https://other.com",
+                                 blink::mojom::AncestorChainBit::kCrossSite,
+                                 "https://example.com", false);
+}
+
+// A third-party key (per ancestor chain bit) for a the deleted origin
+// should not be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       PerAncestorChainBitWithMatchingOrigin) {
+  TestDeleteAllDataForStorageKey(
+      "https://example.com", "https://example.com",
+      blink::mojom::AncestorChainBit::kCrossSite, "https://example.com",
+      // TODO(crbug.com/1376065): should be deleted (origin match)
+      false);
+}
+
+// A third-party key for an unrelated origin should not be deleted..
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       ForOtherOrigin) {
+  TestDeleteAllDataForStorageKey("https://other.com", "https://other.com",
+                                 blink::mojom::AncestorChainBit::kCrossSite,
+                                 "https://example.com", false);
+}
+
+// A third-party key where the top-level-site (but not the origin) matches
+// the deleted origin should not be deleted.
+TEST_F(ServiceWorkerDatabaseTestDeleteAllDataForStorageKeyThirdParty,
+       WithMatchingTopLevelSite) {
+  TestDeleteAllDataForStorageKey("https://other.com", "https://example.com",
+                                 blink::mojom::AncestorChainBit::kCrossSite,
+                                 "https://example.com",
+                                 // TODO(crbug.com/1376065): maybe? (site match)
+                                 false);
+}
+
+INSTANTIATE_TEST_SUITE_P(ServiceWorkerDatabaseTest,
+                         DeleteAllDataForStorageKeyFirstPartyP,
+                         testing::ValuesIn({false, true}),
+                         [](const testing::TestParamInfo<bool>& info) {
+                           return info.param ? "3PSPEnabled" : "3PSPDisabled";
+                         });
+
 TEST(ServiceWorkerDatabaseTest, DestroyDatabase) {
   base::ScopedTempDir database_dir;
   ASSERT_TRUE(database_dir.CreateUniqueTempDir());
diff --git a/components/services/storage/service_worker/service_worker_storage_control_impl.cc b/components/services/storage/service_worker/service_worker_storage_control_impl.cc
index 40d163b..a9dc672 100644
--- a/components/services/storage/service_worker/service_worker_storage_control_impl.cc
+++ b/components/services/storage/service_worker/service_worker_storage_control_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/containers/contains.h"
 #include "base/debug/alias.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/service_worker/service_worker_resource_ops.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
diff --git a/components/services/storage/service_worker/service_worker_storage_test_utils.cc b/components/services/storage/service_worker/service_worker_storage_test_utils.cc
index 6b0646b9..fdde67f 100644
--- a/components/services/storage/service_worker/service_worker_storage_test_utils.cc
+++ b/components/services/storage/service_worker/service_worker_storage_test_utils.cc
@@ -5,6 +5,7 @@
 #include "components/services/storage/service_worker/service_worker_storage_test_utils.h"
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/services/storage/shared_storage/async_shared_storage_database_impl.cc b/components/services/storage/shared_storage/async_shared_storage_database_impl.cc
index bc8ed15d..d224209 100644
--- a/components/services/storage/shared_storage/async_shared_storage_database_impl.cc
+++ b/components/services/storage/shared_storage/async_shared_storage_database_impl.cc
@@ -13,6 +13,7 @@
 
 #include "base/files/file_util.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/services/storage/public/mojom/storage_usage_info.mojom.h"
 #include "components/services/storage/shared_storage/shared_storage_options.h"
diff --git a/components/services/storage/shared_storage/shared_storage_manager.cc b/components/services/storage/shared_storage/shared_storage_manager.cc
index d4b3c71a..edebc3e 100644
--- a/components/services/storage/shared_storage/shared_storage_manager.cc
+++ b/components/services/storage/shared_storage/shared_storage_manager.cc
@@ -9,7 +9,6 @@
 #include "base/files/file_path.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/services/storage/public/mojom/storage_usage_info.mojom.h"
 #include "components/services/storage/shared_storage/async_shared_storage_database_impl.h"
diff --git a/components/services/storage/shared_storage/shared_storage_manager.h b/components/services/storage/shared_storage/shared_storage_manager.h
index f2f1814..ec29501 100644
--- a/components/services/storage/shared_storage/shared_storage_manager.h
+++ b/components/services/storage/shared_storage/shared_storage_manager.h
@@ -14,6 +14,7 @@
 #include "base/memory/memory_pressure_listener.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "components/services/storage/public/mojom/storage_usage_info.mojom-forward.h"
 #include "components/services/storage/shared_storage/async_shared_storage_database.h"
diff --git a/components/services/storage/shared_storage/shared_storage_test_utils.cc b/components/services/storage/shared_storage/shared_storage_test_utils.cc
index 97c3f8c..bd450542 100644
--- a/components/services/storage/shared_storage/shared_storage_test_utils.cc
+++ b/components/services/storage/shared_storage/shared_storage_test_utils.cc
@@ -17,7 +17,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/public/mojom/storage_usage_info.mojom.h"
 #include "sql/database.h"
 #include "sql/test/test_helpers.h"
diff --git a/components/services/unzip/public/cpp/unzip.h b/components/services/unzip/public/cpp/unzip.h
index 4498cc8..82eae37 100644
--- a/components/services/unzip/public/cpp/unzip.h
+++ b/components/services/unzip/public/cpp/unzip.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_SERVICES_UNZIP_PUBLIC_CPP_UNZIP_H_
 
 #include "base/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/services/unzip/public/mojom/unzipper.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/components/services/unzip/unzipper_impl.h b/components/services/unzip/unzipper_impl.h
index 20b2298..b45629c 100644
--- a/components/services/unzip/unzipper_impl.h
+++ b/components/services/unzip/unzipper_impl.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/services/unzip/public/mojom/unzipper.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/components/session_proto_db/session_proto_db.h b/components/session_proto_db/session_proto_db.h
index 22f0c0b7c..9462aea 100644
--- a/components/session_proto_db/session_proto_db.h
+++ b/components/session_proto_db/session_proto_db.h
@@ -16,8 +16,8 @@
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/commerce/core/proto/persisted_state_db_content.pb.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/leveldb_proto/public/proto_database.h"
diff --git a/components/sessions/core/command_storage_backend.cc b/components/sessions/core/command_storage_backend.cc
index b81a8e2..a4d6d75 100644
--- a/components/sessions/core/command_storage_backend.cc
+++ b/components/sessions/core/command_storage_backend.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/sessions/core/session_constants.h"
diff --git a/components/sessions/core/command_storage_backend.h b/components/sessions/core/command_storage_backend.h
index 82c979b..299bb38f 100644
--- a/components/sessions/core/command_storage_backend.h
+++ b/components/sessions/core/command_storage_backend.h
@@ -14,6 +14,7 @@
 #include "base/callback_forward.h"
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/sessions/core/command_storage_manager.h"
 #include "components/sessions/core/session_command.h"
diff --git a/components/sessions/core/command_storage_manager.cc b/components/sessions/core/command_storage_manager.cc
index e08cddc..edb907b 100644
--- a/components/sessions/core/command_storage_manager.cc
+++ b/components/sessions/core/command_storage_manager.cc
@@ -10,6 +10,7 @@
 #include "base/location.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
diff --git a/components/sessions/core/command_storage_manager_test_helper.cc b/components/sessions/core/command_storage_manager_test_helper.cc
index affea0c..816aeced 100644
--- a/components/sessions/core/command_storage_manager_test_helper.cc
+++ b/components/sessions/core/command_storage_manager_test_helper.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "components/sessions/core/command_storage_backend.h"
diff --git a/components/sessions/core/command_storage_manager_test_helper.h b/components/sessions/core/command_storage_manager_test_helper.h
index 33c02fc..964f299 100644
--- a/components/sessions/core/command_storage_manager_test_helper.h
+++ b/components/sessions/core/command_storage_manager_test_helper.h
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace sessions {
 class SessionCommand;
diff --git a/components/signin/internal/identity_manager/account_tracker_service.h b/components/signin/internal/identity_manager/account_tracker_service.h
index 461a20c..d57fca3 100644
--- a/components/signin/internal/identity_manager/account_tracker_service.h
+++ b/components/signin/internal/identity_manager/account_tracker_service.h
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/components/signin/internal/identity_manager/ubertoken_fetcher_impl_unittest.cc b/components/signin/internal/identity_manager/ubertoken_fetcher_impl_unittest.cc
index 11935f5..fa73240 100644
--- a/components/signin/internal/identity_manager/ubertoken_fetcher_impl_unittest.cc
+++ b/components/signin/internal/identity_manager/ubertoken_fetcher_impl_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/memory/ref_counted.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/signin/internal/identity_manager/fake_profile_oauth2_token_service.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
diff --git a/components/signin/public/base/test_signin_client.cc b/components/signin/public/base/test_signin_client.cc
index ffbec7f..3098969e 100644
--- a/components/signin/public/base/test_signin_client.cc
+++ b/components/signin/public/base/test_signin_client.cc
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/check.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "google_apis/gaia/gaia_auth_util.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/test/test_cookie_manager.h"
diff --git a/components/site_engagement/content/site_engagement_service.cc b/components/site_engagement/content/site_engagement_service.cc
index 9d12c19..eeb2a3e 100644
--- a/components/site_engagement/content/site_engagement_service.cc
+++ b/components/site_engagement/content/site_engagement_service.cc
@@ -118,7 +118,6 @@
 }
 
 std::vector<mojom::SiteEngagementDetails> GetAllDetailsImpl(
-    browsing_data::TimePeriod time_period,
     base::Clock* clock,
     HostContentSettingsMap* map) {
   std::set<GURL> origins = GetEngagementOriginsFromContentSettings(map);
@@ -126,19 +125,10 @@
   std::vector<mojom::SiteEngagementDetails> details;
   details.reserve(origins.size());
 
-  auto begin_time = browsing_data::CalculateBeginDeleteTime(time_period);
-  auto end_time = browsing_data::CalculateEndDeleteTime(time_period);
-
   for (const GURL& origin : origins) {
     if (!origin.is_valid())
       continue;
-
-    auto score = CreateEngagementScoreImpl(clock, origin, map);
-    auto last_engagement_time = score.last_engagement_time();
-    if (begin_time > last_engagement_time || end_time < last_engagement_time)
-      continue;
-
-    details.push_back(score.GetDetails());
+    details.push_back(GetDetailsImpl(clock, origin, map));
   }
 
   return details;
@@ -224,8 +214,7 @@
     scoped_refptr<HostContentSettingsMap> map) {
   StoppedClock clock(now);
   base::AssertLongCPUWorkAllowed();
-  return GetAllDetailsImpl(browsing_data::TimePeriod::ALL_TIME, &clock,
-                           map.get());
+  return GetAllDetailsImpl(&clock, map.get());
 }
 
 // static
@@ -284,18 +273,7 @@
   if (IsLastEngagementStale())
     CleanupEngagementScores(true);
   return GetAllDetailsImpl(
-      browsing_data::TimePeriod::ALL_TIME, clock_,
-      permissions::PermissionsClient::Get()->GetSettingsMap(browser_context_));
-}
-
-std::vector<mojom::SiteEngagementDetails>
-SiteEngagementService::GetAllDetailsEngagedInTimePeriod(
-    browsing_data::TimePeriod time_period) const {
-  if (IsLastEngagementStale())
-    CleanupEngagementScores(true);
-
-  return GetAllDetailsImpl(
-      time_period, clock_,
+      clock_,
       permissions::PermissionsClient::Get()->GetSettingsMap(browser_context_));
 }
 
diff --git a/components/site_engagement/content/site_engagement_service.h b/components/site_engagement/content/site_engagement_service.h
index 89dc6f02..689ee11 100644
--- a/components/site_engagement/content/site_engagement_service.h
+++ b/components/site_engagement/content/site_engagement_service.h
@@ -155,14 +155,6 @@
   // performance-critical code.
   std::vector<mojom::SiteEngagementDetails> GetAllDetails() const;
 
-  // Return an array of engagement score details for all origins which have
-  // had engagement since the specified time.
-  //
-  // Note that this method is quite expensive, so try to avoid calling it in
-  // performance-critical code.
-  std::vector<mojom::SiteEngagementDetails> GetAllDetailsEngagedInTimePeriod(
-      browsing_data::TimePeriod time_period) const;
-
   // Update the engagement score of |url| for a notification interaction.
   void HandleNotificationInteraction(const GURL& url);
 
diff --git a/components/spellcheck/browser/spellcheck_platform_win.cc b/components/spellcheck/browser/spellcheck_platform_win.cc
index 29306711..69f7f4f 100644
--- a/components/spellcheck/browser/spellcheck_platform_win.cc
+++ b/components/spellcheck/browser/spellcheck_platform_win.cc
@@ -7,7 +7,6 @@
 #include <string>
 
 #include "base/callback.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/spellcheck/browser/windows_spell_checker.h"
 #include "components/spellcheck/common/spellcheck_common.h"
diff --git a/components/spellcheck/browser/windows_spell_checker.cc b/components/spellcheck/browser/windows_spell_checker.cc
index d0b9d8dd..d34f8a9 100644
--- a/components/spellcheck/browser/windows_spell_checker.cc
+++ b/components/spellcheck/browser/windows_spell_checker.cc
@@ -22,8 +22,8 @@
 #include "base/logging.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner_thread_mode.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/win/com_init_util.h"
 #include "base/win/core_winrt_util.h"
 #include "base/win/scoped_co_mem.h"
diff --git a/components/storage_monitor/storage_monitor_chromeos.cc b/components/storage_monitor/storage_monitor_chromeos.cc
index d4fd28fc8..593c342d 100644
--- a/components/storage_monitor/storage_monitor_chromeos.cc
+++ b/components/storage_monitor/storage_monitor_chromeos.cc
@@ -19,7 +19,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromeos/ash/components/disks/disk.h"
 #include "components/storage_monitor/media_storage_util.h"
 #include "components/storage_monitor/mtp_manager_client_chromeos.h"
diff --git a/components/storage_monitor/storage_monitor_linux_unittest.cc b/components/storage_monitor/storage_monitor_linux_unittest.cc
index c9d5abf..047c141 100644
--- a/components/storage_monitor/storage_monitor_linux_unittest.cc
+++ b/components/storage_monitor/storage_monitor_linux_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/storage_monitor/mock_removable_storage_observer.h"
 #include "components/storage_monitor/removable_device_constants.h"
 #include "components/storage_monitor/storage_info.h"
diff --git a/components/storage_monitor/volume_mount_watcher_win.cc b/components/storage_monitor/volume_mount_watcher_win.cc
index 5459b5cc..d7b1230 100644
--- a/components/storage_monitor/volume_mount_watcher_win.cc
+++ b/components/storage_monitor/volume_mount_watcher_win.cc
@@ -25,6 +25,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "base/win/scoped_handle.h"
diff --git a/components/subresource_filter/content/browser/async_document_subresource_filter.cc b/components/subresource_filter/content/browser/async_document_subresource_filter.cc
index 89f100c..9f13c88 100644
--- a/components/subresource_filter/content/browser/async_document_subresource_filter.cc
+++ b/components/subresource_filter/content/browser/async_document_subresource_filter.cc
@@ -10,7 +10,6 @@
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
 #include "base/location.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/subresource_filter/core/common/memory_mapped_ruleset.h"
 #include "components/subresource_filter/core/common/scoped_timers.h"
 #include "components/subresource_filter/core/common/time_measurements.h"
diff --git a/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc b/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc
index 9dea45ec..d88fb3a 100644
--- a/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc
+++ b/components/subresource_filter/content/browser/async_document_subresource_filter_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/subresource_filter/content/browser/async_document_subresource_filter_test_utils.h"
 #include "components/subresource_filter/core/common/load_policy.h"
 #include "components/subresource_filter/core/common/memory_mapped_ruleset.h"
diff --git a/components/subresource_filter/content/browser/ruleset_publisher_impl.cc b/components/subresource_filter/content/browser/ruleset_publisher_impl.cc
index 38448cc..ebedeb4 100644
--- a/components/subresource_filter/content/browser/ruleset_publisher_impl.cc
+++ b/components/subresource_filter/content/browser/ruleset_publisher_impl.cc
@@ -13,6 +13,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/subresource_filter/content/browser/ruleset_service.h"
 #include "components/subresource_filter/core/browser/subresource_filter_constants.h"
diff --git a/components/subresource_filter/content/browser/ruleset_publisher_impl.h b/components/subresource_filter/content/browser/ruleset_publisher_impl.h
index a5948ac..3aeecc0 100644
--- a/components/subresource_filter/content/browser/ruleset_publisher_impl.h
+++ b/components/subresource_filter/content/browser/ruleset_publisher_impl.h
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/subresource_filter/content/browser/ruleset_publisher.h"
 #include "components/subresource_filter/content/browser/ruleset_version.h"
diff --git a/components/subresource_filter/content/browser/ruleset_service_unittest.cc b/components/subresource_filter/content/browser/ruleset_service_unittest.cc
index 9a7628d..254408e 100644
--- a/components/subresource_filter/content/browser/ruleset_service_unittest.cc
+++ b/components/subresource_filter/content/browser/ruleset_service_unittest.cc
@@ -25,6 +25,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
diff --git a/components/sync/base/pref_names.h b/components/sync/base/pref_names.h
index 79a9a49e..5d42f8f 100644
--- a/components/sync/base/pref_names.h
+++ b/components/sync/base/pref_names.h
@@ -22,6 +22,7 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 // Boolean pref that records whether OS sync preferences were migrated due to
 // SyncSettingsCategorization rollout.
+// TODO(crbug.com/1249845): Remove after 2023-06 (see also crbug.com/1255724).
 inline constexpr char kOsSyncPrefsMigrated[] = "sync.os_sync_prefs_migrated";
 
 // Boolean specifying whether to automatically sync all Chrome OS specific data
diff --git a/components/sync/driver/glue/sync_engine_backend.cc b/components/sync/driver/glue/sync_engine_backend.cc
index 9e5fef2..e51b604 100644
--- a/components/sync/driver/glue/sync_engine_backend.cc
+++ b/components/sync/driver/glue/sync_engine_backend.cc
@@ -12,7 +12,6 @@
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/invalidation/impl/invalidation_switches.h"
 #include "components/invalidation/public/invalidation_util.h"
 #include "components/sync/base/features.h"
diff --git a/components/sync/driver/glue/sync_engine_impl.cc b/components/sync/driver/glue/sync_engine_impl.cc
index acae538..f25d9b98 100644
--- a/components/sync/driver/glue/sync_engine_impl.cc
+++ b/components/sync/driver/glue/sync_engine_impl.cc
@@ -16,6 +16,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/rand_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/invalidation/impl/invalidation_switches.h"
 #include "components/invalidation/public/invalidation_handler.h"
diff --git a/components/sync/driver/model_type_controller_unittest.cc b/components/sync/driver/model_type_controller_unittest.cc
index b42dedf..fc185462 100644
--- a/components/sync/driver/model_type_controller_unittest.cc
+++ b/components/sync/driver/model_type_controller_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/test/mock_callback.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/sync/base/features.h"
 #include "components/sync/driver/configure_context.h"
 #include "components/sync/engine/commit_queue.h"
diff --git a/components/sync/driver/non_ui_syncable_service_based_model_type_controller.cc b/components/sync/driver/non_ui_syncable_service_based_model_type_controller.cc
index 37338fd..4ae198d 100644
--- a/components/sync/driver/non_ui_syncable_service_based_model_type_controller.cc
+++ b/components/sync/driver/non_ui_syncable_service_based_model_type_controller.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/sync/base/model_type.h"
 #include "components/sync/model/client_tag_based_model_type_processor.h"
 #include "components/sync/model/forwarding_model_type_controller_delegate.h"
@@ -138,7 +139,7 @@
         SyncableServiceProvider syncable_service_provider,
         const base::RepeatingClosure& dump_stack,
         scoped_refptr<base::SequencedTaskRunner> task_runner,
-        bool allow_transport_mode)
+        DelegateMode delegate_mode)
     : ModelTypeController(type) {
   auto full_sync_mode_delegate =
       std::make_unique<ProxyModelTypeControllerDelegate>(
@@ -150,7 +151,7 @@
   // the same thread-proxying delegate, which shares the BridgeBuilder, which
   // shares the underlying ModelTypeSyncBridge.
   auto transport_mode_delegate =
-      allow_transport_mode
+      delegate_mode == DelegateMode::kTransportModeWithSingleModel
           ? std::make_unique<ForwardingModelTypeControllerDelegate>(
                 full_sync_mode_delegate.get())
           : nullptr;
diff --git a/components/sync/driver/non_ui_syncable_service_based_model_type_controller.h b/components/sync/driver/non_ui_syncable_service_based_model_type_controller.h
index da9d810..7f26067 100644
--- a/components/sync/driver/non_ui_syncable_service_based_model_type_controller.h
+++ b/components/sync/driver/non_ui_syncable_service_based_model_type_controller.h
@@ -30,6 +30,8 @@
   using SyncableServiceProvider =
       base::OnceCallback<base::WeakPtr<syncer::SyncableService>()>;
 
+  enum class DelegateMode { kFullSyncModeOnly, kTransportModeWithSingleModel };
+
   // |syncable_service_provider| and |store_factory| will be run on the backend
   // sequence, i.e. |task_runner|.
   // |allow_transport_mode| will sync the data in both full-sync mode and in
@@ -40,7 +42,7 @@
       SyncableServiceProvider syncable_service_provider,
       const base::RepeatingClosure& dump_stack,
       scoped_refptr<base::SequencedTaskRunner> task_runner,
-      bool allow_transport_mode = false);
+      DelegateMode delegate_mode);
 
   NonUiSyncableServiceBasedModelTypeController(
       const NonUiSyncableServiceBasedModelTypeController&) = delete;
diff --git a/components/sync/driver/startup_controller.cc b/components/sync/driver/startup_controller.cc
index 8c21420..bd2c365 100644
--- a/components/sync/driver/startup_controller.cc
+++ b/components/sync/driver/startup_controller.cc
@@ -50,46 +50,13 @@
 StartupController::StartupController(
     base::RepeatingCallback<ModelTypeSet()> get_preferred_data_types,
     base::RepeatingCallback<bool()> should_start,
-    base::RepeatingClosure start_engine)
+    base::OnceClosure start_engine)
     : get_preferred_data_types_callback_(std::move(get_preferred_data_types)),
       should_start_callback_(std::move(should_start)),
-      start_engine_callback_(std::move(start_engine)),
-      bypass_deferred_startup_(false) {}
+      start_engine_callback_(std::move(start_engine)) {}
 
 StartupController::~StartupController() = default;
 
-void StartupController::Reset() {
-  bypass_deferred_startup_ = false;
-  start_up_time_ = base::Time();
-  start_engine_time_ = base::Time();
-  // Don't let previous timers affect us post-reset.
-  weak_factory_.InvalidateWeakPtrs();
-}
-
-void StartupController::StartUp(StartUpDeferredOption deferred_option) {
-  const bool first_start = start_up_time_.is_null();
-  if (first_start) {
-    start_up_time_ = base::Time::Now();
-  }
-
-  if (deferred_option == STARTUP_DEFERRED &&
-      get_preferred_data_types_callback_.Run().Has(SESSIONS)) {
-    if (first_start) {
-      base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask(
-          FROM_HERE,
-          base::BindOnce(&StartupController::OnFallbackStartupTimerExpired,
-                         weak_factory_.GetWeakPtr()),
-          GetDeferredInitDelay());
-    }
-    return;
-  }
-
-  if (start_engine_time_.is_null()) {
-    start_engine_time_ = base::Time::Now();
-    start_engine_callback_.Run();
-  }
-}
-
 void StartupController::TryStart(bool force_immediate) {
   // Post a task instead of running the startup checks directly, to guarantee
   // that |start_engine_callback_| is never called synchronously from
@@ -104,13 +71,31 @@
     return;
   }
 
+  const bool first_start = start_up_time_.is_null();
+  if (first_start) {
+    start_up_time_ = base::Time::Now();
+  }
+
   // For performance reasons, defer the heavy lifting for sync init unless:
   //
   // - a datatype has requested an immediate start of sync, or
   // - sync needs to start up the engine immediately to provide control state
   //   and encryption information to the UI.
-  StartUp((force_immediate || bypass_deferred_startup_) ? STARTUP_IMMEDIATE
-                                                        : STARTUP_DEFERRED);
+  if (!force_immediate && !bypass_deferred_startup_ &&
+      get_preferred_data_types_callback_.Run().Has(SESSIONS)) {
+    if (first_start) {
+      base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask(
+          FROM_HERE,
+          base::BindOnce(&StartupController::OnFallbackStartupTimerExpired,
+                         weak_factory_.GetWeakPtr()),
+          GetDeferredInitDelay());
+    }
+    return;
+  }
+
+  if (start_engine_callback_) {
+    std::move(start_engine_callback_).Run();
+  }
 }
 
 void StartupController::RecordTimeDeferred(DeferredInitTrigger trigger) {
@@ -122,7 +107,7 @@
 }
 
 void StartupController::OnFallbackStartupTimerExpired() {
-  if (!start_engine_time_.is_null()) {
+  if (!start_engine_callback_) {
     return;
   }
 
@@ -135,7 +120,7 @@
 }
 
 StartupController::State StartupController::GetState() const {
-  if (!start_engine_time_.is_null()) {
+  if (!start_engine_callback_) {
     return State::STARTED;
   }
   if (!start_up_time_.is_null()) {
@@ -145,7 +130,7 @@
 }
 
 void StartupController::OnDataTypeRequestsSyncStartup(ModelType type) {
-  if (!start_engine_time_.is_null()) {
+  if (!start_engine_callback_) {
     return;
   }
 
diff --git a/components/sync/driver/startup_controller.h b/components/sync/driver/startup_controller.h
index 909b997..e4d0bf4 100644
--- a/components/sync/driver/startup_controller.h
+++ b/components/sync/driver/startup_controller.h
@@ -31,7 +31,7 @@
   StartupController(
       base::RepeatingCallback<ModelTypeSet()> get_preferred_data_types,
       base::RepeatingCallback<bool()> should_start,
-      base::RepeatingClosure start_engine);
+      base::OnceClosure start_engine);
   ~StartupController();
 
   // Starts up sync if it is requested by the user and preconditions are met.
@@ -51,17 +51,9 @@
   // It is expected that |type| is a currently active datatype.
   void OnDataTypeRequestsSyncStartup(ModelType type);
 
-  // Prepares this object for a new attempt to start sync, forgetting
-  // whether or not preconditions were previously met.
-  void Reset();
-
   State GetState() const;
 
-  base::Time start_engine_time() const { return start_engine_time_; }
-
  private:
-  enum StartUpDeferredOption { STARTUP_DEFERRED, STARTUP_IMMEDIATE };
-
   // Enum for UMA defining different events that cause us to exit the "deferred"
   // state of initialization and invoke start_engine.
   // These values are persisted to logs. Entries should not be renumbered and
@@ -78,7 +70,6 @@
   // The actual (synchronous) implementation of TryStart().
   void TryStartImpl(bool force_immediate);
 
-  void StartUp(StartUpDeferredOption deferred_option);
   void OnFallbackStartupTimerExpired();
 
   // Records time spent in deferred state with UMA histograms.
@@ -93,11 +84,11 @@
 
   // The callback we invoke when it's time to call expensive
   // startup routines for the sync engine.
-  const base::RepeatingClosure start_engine_callback_;
+  base::OnceClosure start_engine_callback_;
 
   // True if we should start sync ASAP because either a data type has requested
   // it or our deferred startup timer has expired.
-  bool bypass_deferred_startup_;
+  bool bypass_deferred_startup_ = false;
 
   // The time that StartUp() is called. This is used to calculate time spent
   // in the deferred state; that is, after StartUp and before invoking the
@@ -105,10 +96,6 @@
   // startup has been triggered.
   base::Time start_up_time_;
 
-  // The time at which we invoked the |start_engine_| callback. If this is
-  // non-null, then |start_engine_| shouldn't be called again.
-  base::Time start_engine_time_;
-
   base::WeakPtrFactory<StartupController> weak_factory_{this};
 };
 
diff --git a/components/sync/driver/startup_controller_unittest.cc b/components/sync/driver/startup_controller_unittest.cc
index 5a13e8d..a8b18f55 100644
--- a/components/sync/driver/startup_controller_unittest.cc
+++ b/components/sync/driver/startup_controller_unittest.cc
@@ -25,7 +25,6 @@
                             base::Unretained(this)),
         base::BindRepeating(&StartupControllerTest::FakeStartBackend,
                             base::Unretained(this)));
-    controller_->Reset();
   }
 
   void SetPreferredDataTypes(const ModelTypeSet& types) {
diff --git a/components/sync/driver/sync_service_impl.cc b/components/sync/driver/sync_service_impl.cc
index 26e4668..dbfce19 100644
--- a/components/sync/driver/sync_service_impl.cc
+++ b/components/sync/driver/sync_service_impl.cc
@@ -182,8 +182,8 @@
                           base::Unretained(this)),
       base::BindRepeating(&SyncServiceImpl::IsEngineAllowedToRun,
                           base::Unretained(this)),
-      base::BindRepeating(&SyncServiceImpl::StartUpSlowEngineComponents,
-                          base::Unretained(this)));
+      base::BindOnce(&SyncServiceImpl::StartUpSlowEngineComponents,
+                     base::Unretained(this)));
 
   sync_stopped_reporter_ = std::make_unique<SyncStoppedReporter>(
       sync_service_url_, MakeUserAgentForSync(channel_), url_loader_factory_);
@@ -545,7 +545,13 @@
 
   sync_enabled_weak_factory_.InvalidateWeakPtrs();
 
-  startup_controller_->Reset();
+  startup_controller_ = std::make_unique<StartupController>(
+      base::BindRepeating(&SyncServiceImpl::GetPreferredDataTypes,
+                          base::Unretained(this)),
+      base::BindRepeating(&SyncServiceImpl::IsEngineAllowedToRun,
+                          base::Unretained(this)),
+      base::BindOnce(&SyncServiceImpl::StartUpSlowEngineComponents,
+                     base::Unretained(this)));
 
   // Clear various state.
   crypto_.Reset();
diff --git a/components/sync/engine/model_type_connector_proxy.cc b/components/sync/engine/model_type_connector_proxy.cc
index 426f233..f95b1ca 100644
--- a/components/sync/engine/model_type_connector_proxy.cc
+++ b/components/sync/engine/model_type_connector_proxy.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/sync/engine/data_type_activation_response.h"
 
 namespace syncer {
diff --git a/components/sync/engine/model_type_processor_proxy.cc b/components/sync/engine/model_type_processor_proxy.cc
index 41af5d34..a58020d 100644
--- a/components/sync/engine/model_type_processor_proxy.cc
+++ b/components/sync/engine/model_type_processor_proxy.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/sync/engine/commit_queue.h"
 
 namespace syncer {
diff --git a/components/sync/engine/net/http_bridge.cc b/components/sync/engine/net/http_bridge.cc
index a58a37f6..8310968 100644
--- a/components/sync/engine/net/http_bridge.cc
+++ b/components/sync/engine/net/http_bridge.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "components/variations/net/variations_http_headers.h"
diff --git a/components/sync/engine/net/http_bridge.h b/components/sync/engine/net/http_bridge.h
index 685be8c..daa0640 100644
--- a/components/sync/engine/net/http_bridge.h
+++ b/components/sync/engine/net/http_bridge.h
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/components/sync/model/model_type_store_impl.cc b/components/sync/model/model_type_store_impl.cc
index eeb32146..e9bf80d5 100644
--- a/components/sync/model/model_type_store_impl.cc
+++ b/components/sync/model/model_type_store_impl.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/sync/model/blocking_model_type_store_impl.h"
 #include "components/sync/model/metadata_batch.h"
 #include "components/sync/model/model_error.h"
diff --git a/components/sync/model/proxy_model_type_controller_delegate.cc b/components/sync/model/proxy_model_type_controller_delegate.cc
index c4dd9ec..2a729e6 100644
--- a/components/sync/model/proxy_model_type_controller_delegate.cc
+++ b/components/sync/model/proxy_model_type_controller_delegate.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/sync/base/bind_to_task_runner.h"
 #include "components/sync/engine/data_type_activation_response.h"
 #include "components/sync/model/data_type_activation_request.h"
diff --git a/components/sync/nigori/nigori_model_type_processor.cc b/components/sync/nigori/nigori_model_type_processor.cc
index 442edb0e..d15db5cf 100644
--- a/components/sync/nigori/nigori_model_type_processor.cc
+++ b/components/sync/nigori/nigori_model_type_processor.cc
@@ -7,7 +7,6 @@
 #include <vector>
 
 #include "base/logging.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/sync/base/client_tag_hash.h"
 #include "components/sync/base/data_type_histogram.h"
 #include "components/sync/base/time.h"
diff --git a/components/sync/test/fake_server_http_post_provider.cc b/components/sync/test/fake_server_http_post_provider.cc
index 7dc4e61..1c9dc59 100644
--- a/components/sync/test/fake_server_http_post_provider.cc
+++ b/components/sync/test/fake_server_http_post_provider.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
 #include "components/sync/test/fake_server.h"
diff --git a/components/sync/test/fake_server_network_resources.cc b/components/sync/test/fake_server_network_resources.cc
index d7033b0..1b0ecf87 100644
--- a/components/sync/test/fake_server_network_resources.cc
+++ b/components/sync/test/fake_server_network_resources.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/sync/engine/net/http_post_provider_factory.h"
 #include "components/sync/test/fake_server.h"
diff --git a/components/sync/test/test_model_type_store_service.h b/components/sync/test/test_model_type_store_service.h
index 7a6ff19..af878b5a 100644
--- a/components/sync/test/test_model_type_store_service.h
+++ b/components/sync/test/test_model_type_store_service.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/sync/model/model_type_store.h"
 #include "components/sync/model/model_type_store_service.h"
 
diff --git a/components/test/data/device_signals/README b/components/test/data/device_signals/README
index 42e3f36..f1e8970 100644
--- a/components/test/data/device_signals/README
+++ b/components/test/data/device_signals/README
@@ -3,21 +3,6 @@
 
 Description of the files:
 
-signed.exe
-An executable file that was signed with a self-signed certificate.
-
-multi-signed.exe
-An executable file that has two digital signatures.
-
-metadata.exe
-An executable file which exposes metadata such as:
-- File version: 1.0.0.1
-- Product version: 1.0.0.2
-- Product name: Test Product Name
-
-empty.exe
-An executable file which has no metadata and is not signed.
-
 TestApp.app
 Simple test app bundle that is signed and has the following properties:
 - Product Name: TestApp
@@ -49,6 +34,10 @@
 the signature (instead of overwriting it).
 signtool sign /as /f C:\self-signed.pfx /p "1231233!a" C:\signed.exe
 
+Do not commit actual exe files. Instead, you can generate them at runtime from
+base64 encoded bytes. See this test utility as example:
+//components/device_signals/test/win/scoped_executable_files.h
+
 Instructions for signing the TestApp.app bundle:
 - Create a self-signed certificate in the login keychain via Keychain access
 - Sign the bundle with this command:
diff --git a/components/test/data/device_signals/empty.exe b/components/test/data/device_signals/empty.exe
deleted file mode 100755
index 1175ac9..0000000
--- a/components/test/data/device_signals/empty.exe
+++ /dev/null
Binary files differ
diff --git a/components/test/data/device_signals/metadata.exe b/components/test/data/device_signals/metadata.exe
deleted file mode 100755
index 5f77e2c85..0000000
--- a/components/test/data/device_signals/metadata.exe
+++ /dev/null
Binary files differ
diff --git a/components/test/data/device_signals/multi-signed.exe b/components/test/data/device_signals/multi-signed.exe
deleted file mode 100755
index 3d7a68195..0000000
--- a/components/test/data/device_signals/multi-signed.exe
+++ /dev/null
Binary files differ
diff --git a/components/test/data/device_signals/signed.exe b/components/test/data/device_signals/signed.exe
deleted file mode 100755
index 6b700af..0000000
--- a/components/test/data/device_signals/signed.exe
+++ /dev/null
Binary files differ
diff --git a/components/translate/content/renderer/translate_agent.h b/components/translate/content/renderer/translate_agent.h
index 9de51c1..024ae94 100644
--- a/components/translate/content/renderer/translate_agent.h
+++ b/components/translate/content/renderer/translate_agent.h
@@ -10,6 +10,7 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/translate/content/common/translate.mojom.h"
 #include "components/translate/core/common/translate_errors.h"
diff --git a/components/translate/core/browser/translate_language_list_unittest.cc b/components/translate/core/browser/translate_language_list_unittest.cc
index 48fc292..bb166a2 100644
--- a/components/translate/core/browser/translate_language_list_unittest.cc
+++ b/components/translate/core/browser/translate_language_list_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_command_line.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "components/translate/core/browser/translate_url_util.h"
 #include "components/variations/scoped_variations_ids_provider.h"
diff --git a/components/translate/core/browser/translate_model_service.cc b/components/translate/core/browser/translate_model_service.cc
index 837246d..658d52f 100644
--- a/components/translate/core/browser/translate_model_service.cc
+++ b/components/translate/core/browser/translate_model_service.cc
@@ -9,6 +9,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/optimization_guide/core/optimization_guide_model_provider.h"
 #include "components/optimization_guide/proto/models.pb.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/components/translate/core/browser/translate_model_service.h b/components/translate/core/browser/translate_model_service.h
index d2d672e6..c4ad447 100644
--- a/components/translate/core/browser/translate_model_service.h
+++ b/components/translate/core/browser/translate_model_service.h
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/optimization_guide/core/optimization_target_model_observer.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/components/translate/core/browser/translate_ranker_impl.cc b/components/translate/core/browser/translate_ranker_impl.cc
index 0993c89..9a60da1 100644
--- a/components/translate/core/browser/translate_ranker_impl.cc
+++ b/components/translate/core/browser/translate_ranker_impl.cc
@@ -18,7 +18,6 @@
 #include "base/metrics/metrics_hashes.h"
 #include "base/strings/string_util.h"
 #include "base/task/task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/assist_ranker/proto/ranker_model.pb.h"
 #include "components/assist_ranker/proto/translate_ranker_model.pb.h"
diff --git a/components/translate/core/browser/translate_script_unittest.cc b/components/translate/core/browser/translate_script_unittest.cc
index bd9c4665..28484adf 100644
--- a/components/translate/core/browser/translate_script_unittest.cc
+++ b/components/translate/core/browser/translate_script_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "components/translate/core/common/translate_switches.h"
diff --git a/components/translate/ios/browser/ios_translate_driver.mm b/components/translate/ios/browser/ios_translate_driver.mm
index 7904e553..4671918 100644
--- a/components/translate/ios/browser/ios_translate_driver.mm
+++ b/components/translate/ios/browser/ios_translate_driver.mm
@@ -9,7 +9,6 @@
 #include "base/no_destructor.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/translate/core/browser/translate_client.h"
 #include "components/translate/core/browser/translate_manager.h"
diff --git a/components/translate/ios/browser/language_detection_model_service.h b/components/translate/ios/browser/language_detection_model_service.h
index f7566a7..e09a285 100644
--- a/components/translate/ios/browser/language_detection_model_service.h
+++ b/components/translate/ios/browser/language_detection_model_service.h
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/translate/core/browser/translate_model_service.h"
 
diff --git a/components/translate/ios/browser/language_detection_model_service.mm b/components/translate/ios/browser/language_detection_model_service.mm
index b4014ce..18bceb0 100644
--- a/components/translate/ios/browser/language_detection_model_service.mm
+++ b/components/translate/ios/browser/language_detection_model_service.mm
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "components/translate/core/language_detection/language_detection_model.h"
 
diff --git a/components/ukm/test_ukm_recorder.cc b/components/ukm/test_ukm_recorder.cc
index 1190b38..17f5ef9 100644
--- a/components/ukm/test_ukm_recorder.cc
+++ b/components/ukm/test_ukm_recorder.cc
@@ -9,7 +9,6 @@
 #include "base/check_op.h"
 #include "base/metrics/metrics_hashes.h"
 #include "base/ranges/algorithm.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "services/metrics/public/cpp/delegating_ukm_recorder.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_source.h"
diff --git a/components/ukm/ukm_service.cc b/components/ukm/ukm_service.cc
index 9ed91ddc..ab7c2b5 100644
--- a/components/ukm/ukm_service.cc
+++ b/components/ukm/ukm_service.cc
@@ -16,7 +16,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/rand_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/metrics/log_decoder.h"
diff --git a/components/unified_consent/unified_consent_service.cc b/components/unified_consent/unified_consent_service.cc
index 3fa374d..ab199f04 100644
--- a/components/unified_consent/unified_consent_service.cc
+++ b/components/unified_consent/unified_consent_service.cc
@@ -7,7 +7,6 @@
 #include "base/check_op.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/scoped_observation.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/sync/base/user_selectable_type.h"
diff --git a/components/update_client/crx_downloader_unittest.cc b/components/update_client/crx_downloader_unittest.cc
index 9611bd1ec..b9c0b911 100644
--- a/components/update_client/crx_downloader_unittest.cc
+++ b/components/update_client/crx_downloader_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/update_client/crx_downloader_factory.h"
 #include "components/update_client/net/network_chromium.h"
diff --git a/components/update_client/net/url_loader_post_interceptor.cc b/components/update_client/net/url_loader_post_interceptor.cc
index 77e7ff9..90e1bd5 100644
--- a/components/update_client/net/url_loader_post_interceptor.cc
+++ b/components/update_client/net/url_loader_post_interceptor.cc
@@ -9,6 +9,7 @@
 #include "base/files/file_util.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "components/update_client/test_configurator.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
diff --git a/components/update_client/ping_manager_unittest.cc b/components/update_client/ping_manager_unittest.cc
index b43d613..6988d9f 100644
--- a/components/update_client/ping_manager_unittest.cc
+++ b/components/update_client/ping_manager_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/update_client/component.h"
diff --git a/components/update_client/request_sender_unittest.cc b/components/update_client/request_sender_unittest.cc
index 3c2cf351..f843711 100644
--- a/components/update_client/request_sender_unittest.cc
+++ b/components/update_client/request_sender_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/run_loop.h"
 #include "base/strings/string_util.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/update_client/net/url_loader_post_interceptor.h"
 #include "components/update_client/test_configurator.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/update_client/test_configurator.cc b/components/update_client/test_configurator.cc
index 6b15c57c..2eabec04 100644
--- a/components/update_client/test_configurator.cc
+++ b/components/update_client/test_configurator.cc
@@ -13,7 +13,6 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/path_service.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/version.h"
 #include "components/prefs/pref_service.h"
diff --git a/components/update_client/update_checker_unittest.cc b/components/update_client/update_checker_unittest.cc
index f457426..8a22a8c9 100644
--- a/components/update_client/update_checker_unittest.cc
+++ b/components/update_client/update_checker_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
diff --git a/components/value_store/lazy_leveldb.cc b/components/value_store/lazy_leveldb.cc
index 6597ac29..a07a8aa 100644
--- a/components/value_store/lazy_leveldb.cc
+++ b/components/value_store/lazy_leveldb.cc
@@ -9,7 +9,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "third_party/leveldatabase/env_chromium.h"
 #include "third_party/leveldatabase/src/include/leveldb/iterator.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
diff --git a/components/variations/variations_crash_keys_chromeos.cc b/components/variations/variations_crash_keys_chromeos.cc
index 886dadc0..29935b7 100644
--- a/components/variations/variations_crash_keys_chromeos.cc
+++ b/components/variations/variations_crash_keys_chromeos.cc
@@ -10,6 +10,7 @@
 #include "base/path_service.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 
 namespace variations {
diff --git a/components/visitedlink/test/visitedlink_unittest.cc b/components/visitedlink/test/visitedlink_unittest.cc
index 0781904..5c340d10 100644
--- a/components/visitedlink/test/visitedlink_unittest.cc
+++ b/components/visitedlink/test/visitedlink_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/mock_timer.h"
 #include "components/visitedlink/browser/visitedlink_delegate.h"
diff --git a/components/viz/client/client_resource_provider.cc b/components/viz/client/client_resource_provider.cc
index bedd771f6..2fa6aa0 100644
--- a/components/viz/client/client_resource_provider.cc
+++ b/components/viz/client/client_resource_provider.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/containers/cxx20_erase.h"
 #include "base/debug/stack_trace.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/viz/common/gpu/context_provider.h"
 #include "components/viz/common/gpu/raster_context_provider.h"
diff --git a/components/viz/client/frame_eviction_manager.cc b/components/viz/client/frame_eviction_manager.cc
index 54b30c0e..351598d 100644
--- a/components/viz/client/frame_eviction_manager.cc
+++ b/components/viz/client/frame_eviction_manager.cc
@@ -13,6 +13,7 @@
 #include "base/memory/memory_pressure_listener.h"
 #include "base/memory/memory_pressure_monitor.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/viz/common/features.h"
 
diff --git a/components/viz/common/gpu/context_cache_controller.cc b/components/viz/common/gpu/context_cache_controller.cc
index 754fce95..371734a35 100644
--- a/components/viz/common/gpu/context_cache_controller.cc
+++ b/components/viz/common/gpu/context_cache_controller.cc
@@ -11,6 +11,7 @@
 #include "base/check_op.h"
 #include "base/memory/ptr_util.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "gpu/command_buffer/client/context_support.h"
 #include "third_party/skia/include/gpu/GrDirectContext.h"
diff --git a/components/viz/common/gpu/metal_context_provider.mm b/components/viz/common/gpu/metal_context_provider.mm
index 97f4d633..e2ab2a0 100644
--- a/components/viz/common/gpu/metal_context_provider.mm
+++ b/components/viz/common/gpu/metal_context_provider.mm
@@ -12,7 +12,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/waitable_event.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/metal_util/device.h"
 #include "third_party/skia/include/gpu/GrDirectContext.h"
diff --git a/components/viz/common/overlay_state/win/overlay_state_service.cc b/components/viz/common/overlay_state/win/overlay_state_service.cc
index 81334451..a6aeaed 100644
--- a/components/viz/common/overlay_state/win/overlay_state_service.cc
+++ b/components/viz/common/overlay_state/win/overlay_state_service.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 
diff --git a/components/viz/common/overlay_state/win/overlay_state_service.h b/components/viz/common/overlay_state/win/overlay_state_service.h
index 186e6bbb..7eef29fe 100644
--- a/components/viz/common/overlay_state/win/overlay_state_service.h
+++ b/components/viz/common/overlay_state/win/overlay_state_service.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_VIZ_COMMON_OVERLAY_STATE_WIN_OVERLAY_STATE_SERVICE_H_
 
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/viz/common/overlay_state/win/overlay_state_aggregator.h"
 #include "components/viz/common/viz_common_export.h"
 #include "gpu/command_buffer/common/mailbox.h"
diff --git a/components/viz/common/yuv_readback_unittest.cc b/components/viz/common/yuv_readback_unittest.cc
index c89fe1a..b681dd9 100644
--- a/components/viz/common/yuv_readback_unittest.cc
+++ b/components/viz/common/yuv_readback_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/memory/ref_counted_memory.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "components/viz/test/test_gpu_service_holder.h"
diff --git a/components/viz/demo/host/demo_host.cc b/components/viz/demo/host/demo_host.cc
index c1e4270f..d25ff0e 100644
--- a/components/viz/demo/host/demo_host.cc
+++ b/components/viz/demo/host/demo_host.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/rand_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/viz/demo/client/demo_client.h"
 #include "components/viz/host/renderer_settings_creation.h"
diff --git a/components/viz/host/gpu_client.cc b/components/viz/host/gpu_client.cc
index 0b8e653..cc518c0 100644
--- a/components/viz/host/gpu_client.cc
+++ b/components/viz/host/gpu_client.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/checked_math.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "components/viz/host/gpu_host_impl.h"
 #include "components/viz/host/host_gpu_memory_buffer_manager.h"
diff --git a/components/viz/host/gpu_client.h b/components/viz/host/gpu_client.h
index 5d62d52..2289974 100644
--- a/components/viz/host/gpu_client.h
+++ b/components/viz/host/gpu_client.h
@@ -11,6 +11,7 @@
 #include "base/callback_forward.h"
 #include "base/memory/weak_ptr.h"
 #include "base/process/process_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "components/viz/host/gpu_client_delegate.h"
 #include "components/viz/host/gpu_host_impl.h"
diff --git a/components/viz/host/gpu_host_impl.cc b/components/viz/host/gpu_host_impl.cc
index aea5a2e..74b910b 100644
--- a/components/viz/host/gpu_host_impl.cc
+++ b/components/viz/host/gpu_host_impl.cc
@@ -13,6 +13,7 @@
 #include "base/no_destructor.h"
 #include "base/process/process_handle.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/trace_event.h"
 #include "base/values.h"
diff --git a/components/viz/host/gpu_host_impl.h b/components/viz/host/gpu_host_impl.h
index 0a2ca46..c8eea76 100644
--- a/components/viz/host/gpu_host_impl.h
+++ b/components/viz/host/gpu_host_impl.h
@@ -18,6 +18,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/process/process_handle.h"
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/components/viz/host/host_display_client.cc b/components/viz/host/host_display_client.cc
index 6d905b62..0c63e0d 100644
--- a/components/viz/host/host_display_client.cc
+++ b/components/viz/host/host_display_client.cc
@@ -4,6 +4,7 @@
 
 #include "components/viz/host/host_display_client.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 
diff --git a/components/viz/host/host_gpu_memory_buffer_manager.cc b/components/viz/host/host_gpu_memory_buffer_manager.cc
index 19d97efa..281c8fa8 100644
--- a/components/viz/host/host_gpu_memory_buffer_manager.cc
+++ b/components/viz/host/host_gpu_memory_buffer_manager.cc
@@ -12,6 +12,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/process_memory_dump.h"
diff --git a/components/viz/host/host_gpu_memory_buffer_manager_unittest.cc b/components/viz/host/host_gpu_memory_buffer_manager_unittest.cc
index 91bc3c8d..1b10d05b 100644
--- a/components/viz/host/host_gpu_memory_buffer_manager_unittest.cc
+++ b/components/viz/host/host_gpu_memory_buffer_manager_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
diff --git a/components/viz/service/compositor_frame_fuzzer/fuzzer_software_output_surface_provider.cc b/components/viz/service/compositor_frame_fuzzer/fuzzer_software_output_surface_provider.cc
index 30074e5..6dbb34f 100644
--- a/components/viz/service/compositor_frame_fuzzer/fuzzer_software_output_surface_provider.cc
+++ b/components/viz/service/compositor_frame_fuzzer/fuzzer_software_output_surface_provider.cc
@@ -10,7 +10,6 @@
 
 #include "base/files/file_util.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/viz/service/display/software_output_device.h"
 #include "components/viz/service/display_embedder/software_output_surface.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/components/viz/service/display/dc_layer_overlay.cc b/components/viz/service/display/dc_layer_overlay.cc
index e0e4b2a..b2e78f8c 100644
--- a/components/viz/service/display/dc_layer_overlay.cc
+++ b/components/viz/service/display/dc_layer_overlay.cc
@@ -9,7 +9,6 @@
 
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/base/math_util.h"
 #include "components/viz/common/display/renderer_settings.h"
diff --git a/components/viz/service/display/display.cc b/components/viz/service/display/display.cc
index 670416b..6d0da69 100644
--- a/components/viz/service/display/display.cc
+++ b/components/viz/service/display/display.cc
@@ -17,6 +17,7 @@
 #include "base/observer_list.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
diff --git a/components/viz/service/display/display_perftest.cc b/components/viz/service/display/display_perftest.cc
index 139efa89..da3907a6 100644
--- a/components/viz/service/display/display_perftest.cc
+++ b/components/viz/service/display/display_perftest.cc
@@ -6,6 +6,7 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/null_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/lap_timer.h"
diff --git a/components/viz/service/display/display_scheduler.cc b/components/viz/service/display/display_scheduler.cc
index 342b369..68645c9 100644
--- a/components/viz/service/display/display_scheduler.cc
+++ b/components/viz/service/display/display_scheduler.cc
@@ -12,6 +12,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/delay_policy.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "components/viz/common/features.h"
 #include "components/viz/service/performance_hint/hint_session.h"
diff --git a/components/viz/service/display/display_scheduler_unittest.cc b/components/viz/service/display/display_scheduler_unittest.cc
index d4561d2e..93e55fa5 100644
--- a/components/viz/service/display/display_scheduler_unittest.cc
+++ b/components/viz/service/display/display_scheduler_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/check.h"
 #include "base/containers/contains.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/null_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
diff --git a/components/viz/service/display/display_unittest.cc b/components/viz/service/display/display_unittest.cc
index 574a4a4..fe5870b 100644
--- a/components/viz/service/display/display_unittest.cc
+++ b/components/viz/service/display/display_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/null_task_runner.h"
diff --git a/components/viz/service/display/output_surface.cc b/components/viz/service/display/output_surface.cc
index 41496bce..674a5f1 100644
--- a/components/viz/service/display/output_surface.cc
+++ b/components/viz/service/display/output_surface.cc
@@ -10,7 +10,6 @@
 
 #include "base/bind.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "components/viz/service/display/output_surface_client.h"
 #include "components/viz/service/display/output_surface_frame.h"
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc
index c356971..36c28a5d 100644
--- a/components/viz/service/display/skia_renderer.cc
+++ b/components/viz/service/display/skia_renderer.cc
@@ -18,6 +18,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/ranges/algorithm.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/components/viz/service/display_embedder/output_surface_provider_impl.h b/components/viz/service/display_embedder/output_surface_provider_impl.h
index 5c4d03a4..e82717d5 100644
--- a/components/viz/service/display_embedder/output_surface_provider_impl.h
+++ b/components/viz/service/display_embedder/output_surface_provider_impl.h
@@ -10,6 +10,7 @@
 #include "base/compiler_specific.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "components/viz/service/display_embedder/output_surface_provider.h"
diff --git a/components/viz/service/display_embedder/skia_output_device.cc b/components/viz/service/display_embedder/skia_output_device.cc
index 497396e..dff4067 100644
--- a/components/viz/service/display_embedder/skia_output_device.cc
+++ b/components/viz/service/display_embedder/skia_output_device.cc
@@ -11,6 +11,7 @@
 #include "base/check_op.h"
 #include "base/feature_list.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_features.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/components/viz/service/display_embedder/software_output_device_mac.cc b/components/viz/service/display_embedder/software_output_device_mac.cc
index c04eb117..a8fcbf5 100644
--- a/components/viz/service/display_embedder/software_output_device_mac.cc
+++ b/components/viz/service/display_embedder/software_output_device_mac.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/mac/foundation_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "ui/gfx/ca_layer_params.h"
diff --git a/components/viz/service/display_embedder/software_output_device_mac.h b/components/viz/service/display_embedder/software_output_device_mac.h
index b09785b..fd78777 100644
--- a/components/viz/service/display_embedder/software_output_device_mac.h
+++ b/components/viz/service/display_embedder/software_output_device_mac.h
@@ -10,6 +10,7 @@
 
 #include "base/mac/scoped_cftyperef.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/viz/service/display/software_output_device.h"
 #include "components/viz/service/viz_service_export.h"
 #include "third_party/skia/include/core/SkRefCnt.h"
diff --git a/components/viz/service/display_embedder/software_output_device_mac_unittest.mm b/components/viz/service/display_embedder/software_output_device_mac_unittest.mm
index fbc2bfd..bd67c99b 100644
--- a/components/viz/service/display_embedder/software_output_device_mac_unittest.mm
+++ b/components/viz/service/display_embedder/software_output_device_mac_unittest.mm
@@ -4,6 +4,7 @@
 
 #include "components/viz/service/display_embedder/software_output_device_mac.h"
 
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/geometry/skia_conversions.h"
diff --git a/components/viz/service/display_embedder/software_output_device_ozone_unittest.cc b/components/viz/service/display_embedder/software_output_device_ozone_unittest.cc
index 75562ba..d01a51e 100644
--- a/components/viz/service/display_embedder/software_output_device_ozone_unittest.cc
+++ b/components/viz/service/display_embedder/software_output_device_ozone_unittest.cc
@@ -8,7 +8,6 @@
 #include <utility>
 
 #include "base/memory/raw_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc
index 5c379e24..91e956e 100644
--- a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc
+++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc
@@ -16,6 +16,8 @@
 #include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "components/viz/common/features.h"
diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.h b/components/viz/service/frame_sinks/frame_sink_manager_impl.h
index 666924d..af233fa 100644
--- a/components/viz/service/frame_sinks/frame_sink_manager_impl.h
+++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.h
@@ -19,6 +19,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/observer_list.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
diff --git a/components/viz/service/frame_sinks/video_detector.cc b/components/viz/service/frame_sinks/video_detector.cc
index acfcd24..d36afac 100644
--- a/components/viz/service/frame_sinks/video_detector.cc
+++ b/components/viz/service/frame_sinks/video_detector.cc
@@ -8,6 +8,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "components/viz/common/features.h"
 #include "components/viz/common/quads/compositor_frame.h"
diff --git a/components/viz/service/gl/info_collection_gpu_service_impl.cc b/components/viz/service/gl/info_collection_gpu_service_impl.cc
index c3ad352..20d56c44 100644
--- a/components/viz/service/gl/info_collection_gpu_service_impl.cc
+++ b/components/viz/service/gl/info_collection_gpu_service_impl.cc
@@ -5,6 +5,7 @@
 #include "components/viz/service/gl/info_collection_gpu_service_impl.h"
 
 #include <utility>
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "gpu/config/dx_diag_node.h"
 #include "gpu/config/gpu_info_collector.h"
diff --git a/components/viz/service/main/viz_compositor_thread_runner_impl.h b/components/viz/service/main/viz_compositor_thread_runner_impl.h
index bcc3e985..52a2fca 100644
--- a/components/viz/service/main/viz_compositor_thread_runner_impl.h
+++ b/components/viz/service/main/viz_compositor_thread_runner_impl.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/viz/service/main/viz_compositor_thread_runner.h"
 #include "services/network/public/mojom/tcp_socket.mojom.h"
diff --git a/components/viz/service/main/viz_main_impl_unittest.cc b/components/viz/service/main/viz_main_impl_unittest.cc
index 15e9f75..67db26e 100644
--- a/components/viz/service/main/viz_main_impl_unittest.cc
+++ b/components/viz/service/main/viz_main_impl_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/power_monitor/power_monitor.h"
 #include "base/power_monitor/power_monitor_source.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "components/viz/service/performance_hint/hint_session.h"
 #include "gpu/config/gpu_info.h"
diff --git a/components/viz/test/fake_delay_based_time_source.cc b/components/viz/test/fake_delay_based_time_source.cc
index 551ce2f24..8e24f48 100644
--- a/components/viz/test/fake_delay_based_time_source.cc
+++ b/components/viz/test/fake_delay_based_time_source.cc
@@ -4,6 +4,7 @@
 
 #include "components/viz/test/fake_delay_based_time_source.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/tick_clock.h"
 
 namespace viz {
diff --git a/components/viz/test/fake_delay_based_time_source.h b/components/viz/test/fake_delay_based_time_source.h
index 1c744d46d..bd4a5f1 100644
--- a/components/viz/test/fake_delay_based_time_source.h
+++ b/components/viz/test/fake_delay_based_time_source.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_VIZ_TEST_FAKE_DELAY_BASED_TIME_SOURCE_H_
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/viz/common/frame_sinks/delay_based_time_source.h"
 
diff --git a/components/viz/test/test_gpu_service_holder.cc b/components/viz/test/test_gpu_service_holder.cc
index 54c4d08c..38105d07 100644
--- a/components/viz/test/test_gpu_service_holder.cc
+++ b/components/viz/test/test_gpu_service_holder.cc
@@ -15,7 +15,6 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/viz/service/gl/gpu_service_impl.h"
 #include "gpu/command_buffer/service/scheduler_sequence.h"
diff --git a/components/viz/test/test_gpu_service_holder.h b/components/viz/test/test_gpu_service_holder.h
index c018d49..4edfa776 100644
--- a/components/viz/test/test_gpu_service_holder.h
+++ b/components/viz/test/test_gpu_service_holder.h
@@ -10,6 +10,7 @@
 
 #include "base/feature_list.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
 #include "gpu/ipc/gpu_in_process_thread_service.h"
diff --git a/components/webapps/browser/android/webapk/webapk_icon_hasher_unittest.cc b/components/webapps/browser/android/webapk/webapk_icon_hasher_unittest.cc
index 06725e1a..013fab1f 100644
--- a/components/webapps/browser/android/webapk/webapk_icon_hasher_unittest.cc
+++ b/components/webapps/browser/android/webapk/webapk_icon_hasher_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_task_environment.h"
 #include "content/public/test/test_browser_context.h"
diff --git a/components/webcrypto/webcrypto_impl.cc b/components/webcrypto/webcrypto_impl.cc
index 0bb2eae8..52e28df4 100644
--- a/components/webcrypto/webcrypto_impl.cc
+++ b/components/webcrypto/webcrypto_impl.cc
@@ -18,7 +18,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "components/webcrypto/algorithm_dispatch.h"
 #include "components/webcrypto/generate_key_result.h"
diff --git a/components/webdata/common/web_data_request_manager.cc b/components/webdata/common/web_data_request_manager.cc
index 0ee1ace04..754419b 100644
--- a/components/webdata/common/web_data_request_manager.cc
+++ b/components/webdata/common/web_data_request_manager.cc
@@ -11,7 +11,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 ////////////////////////////////////////////////////////////////////////////////
 //
diff --git a/components/webdata/common/web_database_backend.cc b/components/webdata/common/web_database_backend.cc
index aba9d02ff..57708192 100644
--- a/components/webdata/common/web_database_backend.cc
+++ b/components/webdata/common/web_database_backend.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/webdata/common/web_data_request_manager.h"
 #include "components/webdata/common/web_database.h"
 #include "components/webdata/common/web_database_table.h"
diff --git a/components/webxr/mailbox_to_surface_bridge_impl.cc b/components/webxr/mailbox_to_surface_bridge_impl.cc
index 2a4c2cf..3b907db 100644
--- a/components/webxr/mailbox_to_surface_bridge_impl.cc
+++ b/components/webxr/mailbox_to_surface_bridge_impl.cc
@@ -11,7 +11,7 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/system/sys_info.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "components/viz/common/gpu/context_provider.h"
 #include "content/public/browser/android/compositor.h"
diff --git a/components/wifi/fake_wifi_service.cc b/components/wifi/fake_wifi_service.cc
index df1225f5..e4ca9ad 100644
--- a/components/wifi/fake_wifi_service.cc
+++ b/components/wifi/fake_wifi_service.cc
@@ -8,6 +8,8 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "components/onc/onc_constants.h"
 
diff --git a/components/wifi/fake_wifi_service.h b/components/wifi/fake_wifi_service.h
index bd9af43..28c49164 100644
--- a/components/wifi/fake_wifi_service.h
+++ b/components/wifi/fake_wifi_service.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/compiler_specific.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/wifi/network_properties.h"
 #include "components/wifi/wifi_service.h"
diff --git a/components/wifi/wifi_service_fuchsia.cc b/components/wifi/wifi_service_fuchsia.cc
index ac277f1..f819bda 100644
--- a/components/wifi/wifi_service_fuchsia.cc
+++ b/components/wifi/wifi_service_fuchsia.cc
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/wifi/wifi_service.h"
 
 namespace wifi {
diff --git a/components/wifi/wifi_service_mac.mm b/components/wifi/wifi_service_mac.mm
index 4dfb3440..11480de 100644
--- a/components/wifi/wifi_service_mac.mm
+++ b/components/wifi/wifi_service_mac.mm
@@ -18,6 +18,8 @@
 #include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "components/onc/onc_constants.h"
diff --git a/components/wifi/wifi_service_win.cc b/components/wifi/wifi_service_win.cc
index 02648e7..dd2cf04e 100644
--- a/components/wifi/wifi_service_win.cc
+++ b/components/wifi/wifi_service_win.cc
@@ -26,6 +26,7 @@
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
index 3b360372..12b44a2 100644
--- a/content/app/content_main_runner_impl.cc
+++ b/content/app/content_main_runner_impl.cc
@@ -41,6 +41,7 @@
 #include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/environment_config.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/hang_watcher.h"
diff --git a/content/app/mojo_ipc_support.cc b/content/app/mojo_ipc_support.cc
index 6088b6cd..577179e 100644
--- a/content/app/mojo_ipc_support.cc
+++ b/content/app/mojo_ipc_support.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "content/browser/browser_process_io_thread.h"
 #include "content/browser/startup_data_impl.h"
diff --git a/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h b/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h
index 1c33669..4e8720f9 100644
--- a/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h
+++ b/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h
@@ -10,6 +10,7 @@
 #include <memory>
 
 #import "base/mac/scoped_nsobject.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/remote_cocoa/app_shim/ns_view_ids.h"
 #include "content/common/content_export.h"
 #include "content/common/web_contents_ns_view_bridge.mojom.h"
diff --git a/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.mm b/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.mm
index b7d3c27..2f3e5361 100644
--- a/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.mm
+++ b/content/app_shim_remote_cocoa/web_contents_ns_view_bridge.mm
@@ -4,6 +4,7 @@
 
 #include "content/app_shim_remote_cocoa/web_contents_ns_view_bridge.h"
 
+#import "base/task/sequenced_task_runner.h"
 #include "components/remote_cocoa/app_shim/ns_view_ids.h"
 #import "content/app_shim_remote_cocoa/web_contents_view_cocoa.h"
 #include "content/browser/web_contents/web_contents_view_mac.h"
diff --git a/content/app_shim_remote_cocoa/window_occlusion_browsertest_mac.mm b/content/app_shim_remote_cocoa/window_occlusion_browsertest_mac.mm
index a47362de..60c4521 100644
--- a/content/app_shim_remote_cocoa/window_occlusion_browsertest_mac.mm
+++ b/content/app_shim_remote_cocoa/window_occlusion_browsertest_mac.mm
@@ -5,6 +5,7 @@
 #import "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/mac/scoped_objc_class_swizzler.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #import "content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.h"
diff --git a/content/browser/accessibility/accessibility_action_browsertest.cc b/content/browser/accessibility/accessibility_action_browsertest.cc
index 149d49c..c071860 100644
--- a/content/browser/accessibility/accessibility_action_browsertest.cc
+++ b/content/browser/accessibility/accessibility_action_browsertest.cc
@@ -10,6 +10,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/escape.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/browser/accessibility/browser_accessibility_mac.mm b/content/browser/accessibility/browser_accessibility_mac.mm
index 5b03270e..17e743e7 100644
--- a/content/browser/accessibility/browser_accessibility_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_mac.mm
@@ -7,6 +7,7 @@
 #import "content/browser/accessibility/browser_accessibility_mac.h"
 
 #include "base/debug/stack_trace.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
diff --git a/content/browser/accessibility/dump_accessibility_browsertest_base.cc b/content/browser/accessibility/dump_accessibility_browsertest_base.cc
index f56566ed..b8c8c5e 100644
--- a/content/browser/accessibility/dump_accessibility_browsertest_base.cc
+++ b/content/browser/accessibility/dump_accessibility_browsertest_base.cc
@@ -17,7 +17,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_command_line.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/accessibility/browser_accessibility.h"
 #include "content/browser/accessibility/browser_accessibility_manager.h"
diff --git a/content/browser/aggregation_service/aggregatable_report_assembler_unittest.cc b/content/browser/aggregation_service/aggregatable_report_assembler_unittest.cc
index 80442b2..da82f0e 100644
--- a/content/browser/aggregation_service/aggregatable_report_assembler_unittest.cc
+++ b/content/browser/aggregation_service/aggregatable_report_assembler_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/test/gmock_move_support.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/browser/aggregation_service/aggregatable_report.h"
 #include "content/browser/aggregation_service/aggregation_service_key_fetcher.h"
diff --git a/content/browser/aggregation_service/aggregation_service_impl.h b/content/browser/aggregation_service/aggregation_service_impl.h
index f91cafa..0a4e0748 100644
--- a/content/browser/aggregation_service/aggregation_service_impl.h
+++ b/content/browser/aggregation_service/aggregation_service_impl.h
@@ -172,4 +172,4 @@
 
 }  // namespace content
 
-#endif  // CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATION_SERVICE_IMPL_H_
\ No newline at end of file
+#endif  // CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATION_SERVICE_IMPL_H_
diff --git a/content/browser/android/app_web_message_port.cc b/content/browser/android/app_web_message_port.cc
index 6e0f9590..ed558ffe 100644
--- a/content/browser/android/app_web_message_port.cc
+++ b/content/browser/android/app_web_message_port.cc
@@ -9,6 +9,7 @@
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/android/content_jni_headers/AppWebMessagePort_jni.h"
 #include "content/public/browser/android/message_payload.h"
 #include "content/public/browser/android/message_port_helper.h"
diff --git a/content/browser/android/content_url_loader_factory.cc b/content/browser/android/content_url_loader_factory.cc
index 89a62da..32b5f63 100644
--- a/content/browser/android/content_url_loader_factory.cc
+++ b/content/browser/android/content_url_loader_factory.cc
@@ -14,6 +14,7 @@
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/content/browser/android/java/gin_java_bridge_message_filter.cc b/content/browser/android/java/gin_java_bridge_message_filter.cc
index cf56bd2..8516cfae6 100644
--- a/content/browser/android/java/gin_java_bridge_message_filter.cc
+++ b/content/browser/android/java/gin_java_bridge_message_filter.cc
@@ -6,6 +6,7 @@
 
 #include "base/auto_reset.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/types/pass_key.h"
 #include "build/build_config.h"
 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h"
diff --git a/content/browser/android/java/gin_java_bridge_message_filter.h b/content/browser/android/java/gin_java_bridge_message_filter.h
index 2650f93..b478ac5 100644
--- a/content/browser/android/java/gin_java_bridge_message_filter.h
+++ b/content/browser/android/java/gin_java_bridge_message_filter.h
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ref.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/types/pass_key.h"
 #include "base/values.h"
diff --git a/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.cc b/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.cc
index da5eb091..1fce94e 100644
--- a/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.cc
+++ b/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.cc
@@ -6,6 +6,7 @@
 
 #include "base/auto_reset.h"
 #include "base/feature_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/types/pass_key.h"
 #include "build/build_config.h"
 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h"
diff --git a/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.h b/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.h
index 38c31008..0ed020af 100644
--- a/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.h
+++ b/content/browser/android/java/gin_java_bridge_object_deletion_message_filter.h
@@ -12,6 +12,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/types/pass_key.h"
 #include "content/browser/android/java/gin_java_bound_object.h"
diff --git a/content/browser/android/java_interfaces_impl.cc b/content/browser/android/java_interfaces_impl.cc
index 3feefbe..ef2d9461 100644
--- a/content/browser/android/java_interfaces_impl.cc
+++ b/content/browser/android/java_interfaces_impl.cc
@@ -10,6 +10,7 @@
 
 #include "base/android/jni_android.h"
 #include "base/memory/singleton.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
 #include "content/public/android/content_jni_headers/InterfaceRegistrarImpl_jni.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/android/launcher_thread.cc b/content/browser/android/launcher_thread.cc
index 662d50e..d0718e5 100644
--- a/content/browser/android/launcher_thread.cc
+++ b/content/browser/android/launcher_thread.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/android/launcher_thread.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/android/content_jni_headers/LauncherThread_jni.h"
 
 namespace content {
diff --git a/content/browser/android/launcher_thread.h b/content/browser/android/launcher_thread.h
index f6ede69..9b1c5fb 100644
--- a/content/browser/android/launcher_thread.h
+++ b/content/browser/android/launcher_thread.h
@@ -8,6 +8,7 @@
 #include "base/android/java_handler_thread.h"
 
 #include "base/lazy_instance.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace content {
 namespace android {
diff --git a/content/browser/attribution_reporting/attributions_browsertest.cc b/content/browser/attribution_reporting/attributions_browsertest.cc
index 83842df..0e99f0fd 100644
--- a/content/browser/attribution_reporting/attributions_browsertest.cc
+++ b/content/browser/attribution_reporting/attributions_browsertest.cc
@@ -122,7 +122,7 @@
                        std::string trigger_data,
                        net::EmbeddedTestServer* server)
       : ExpectedReportWaiter(std::move(report_url),
-                             base::DictionaryValue(),
+                             base::Value(base::Value::Dict()),
                              server) {
     expected_body.SetStringKey("attribution_destination",
                                std::move(attribution_destination));
diff --git a/content/browser/back_forward_cache_internal_browsertest.cc b/content/browser/back_forward_cache_internal_browsertest.cc
index 6ba1f22..2349e9a 100644
--- a/content/browser/back_forward_cache_internal_browsertest.cc
+++ b/content/browser/back_forward_cache_internal_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/command_line.h"
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/metrics_hashes.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "build/build_config.h"
diff --git a/content/browser/back_forward_cache_network_request_browsertest.cc b/content/browser/back_forward_cache_network_request_browsertest.cc
index dedc46d..fab15e9 100644
--- a/content/browser/back_forward_cache_network_request_browsertest.cc
+++ b/content/browser/back_forward_cache_network_request_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/back_forward_cache_browsertest.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/renderer_host/navigation_request.h"
 #include "content/browser/web_contents/web_contents_impl.h"
 #include "content/public/test/browser_test.h"
diff --git a/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc b/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc
index bbe6050f..bc65d308 100644
--- a/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_registration_notifier_unittest.cc
@@ -10,7 +10,6 @@
 
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/background_fetch/background_fetch_registration_service_impl.h"
 #include "content/common/background_fetch/background_fetch_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/background_fetch/background_fetch_test_data_manager.cc b/content/browser/background_fetch/background_fetch_test_data_manager.cc
index df7d3d8..7ee8e51 100644
--- a/content/browser/background_fetch/background_fetch_test_data_manager.cc
+++ b/content/browser/background_fetch/background_fetch_test_data_manager.cc
@@ -7,6 +7,8 @@
 #include <utility>
 
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/services/storage/public/mojom/quota_client.mojom.h"
 #include "content/browser/blob_storage/chrome_blob_storage_context.h"
 #include "content/browser/service_worker/service_worker_context_wrapper.h"
diff --git a/content/browser/background_fetch/mock_background_fetch_delegate.cc b/content/browser/background_fetch/mock_background_fetch_delegate.cc
index 8305fd1..d0a73b3 100644
--- a/content/browser/background_fetch/mock_background_fetch_delegate.cc
+++ b/content/browser/background_fetch/mock_background_fetch_delegate.cc
@@ -8,7 +8,6 @@
 #include "base/bind.h"
 #include "base/files/file_util.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "content/browser/background_fetch/mock_background_fetch_delegate.h"
 #include "content/public/browser/background_fetch_description.h"
 #include "content/public/browser/background_fetch_response.h"
diff --git a/content/browser/background_sync/background_sync_base_browsertest.cc b/content/browser/background_sync/background_sync_base_browsertest.cc
index 6b4138f..b6324d2 100644
--- a/content/browser/background_sync/background_sync_base_browsertest.cc
+++ b/content/browser/background_sync/background_sync_base_browsertest.cc
@@ -9,6 +9,7 @@
 #include <vector>
 #include "base/metrics/field_trial_param_associator.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/background_sync/background_sync_manager.h"
 #include "content/browser/storage_partition_impl.h"
 #include "content/public/browser/browser_context.h"
diff --git a/content/browser/background_sync/background_sync_manager_unittest.cc b/content/browser/background_sync/background_sync_manager_unittest.cc
index 37d77ad..0c38dca 100644
--- a/content/browser/background_sync/background_sync_manager_unittest.cc
+++ b/content/browser/background_sync/background_sync_manager_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_entropy_provider.h"
 #include "base/test/simple_test_clock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/background_sync/background_sync_launcher.h"
 #include "content/browser/background_sync/background_sync_network_observer.h"
diff --git a/content/browser/background_sync/background_sync_op_scheduler.h b/content/browser/background_sync/background_sync_op_scheduler.h
index 3f2b40a..2ea9c145 100644
--- a/content/browser/background_sync/background_sync_op_scheduler.h
+++ b/content/browser/background_sync/background_sync_op_scheduler.h
@@ -13,6 +13,7 @@
 #include "base/containers/queue.h"
 #include "base/feature_list.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 
 namespace content {
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl.cc b/content/browser/bluetooth/web_bluetooth_service_impl.cc
index a909da2e..4e5c308 100644
--- a/content/browser/bluetooth/web_bluetooth_service_impl.cc
+++ b/content/browser/bluetooth/web_bluetooth_service_impl.cc
@@ -966,7 +966,10 @@
   if (!base::FeatureList::IsEnabled(
           features::kWebBluetoothNewPermissionsBackend)) {
     auto device_address = allowed_devices().GetDeviceAddress(device_id);
-    allowed_devices().RemoveDevice(device_address);
+    // allowed_devices().RemoveDevice() expects a valid |device_address|.
+    if (!device_address.empty()) {
+      allowed_devices().RemoveDevice(device_address);
+    }
     std::move(callback).Run();
     return;
   }
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc b/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc
index 4ac1f0b..787dc9dba9 100644
--- a/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc
+++ b/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/mock_callback.h"
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index 7501609..962c427c 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -24,8 +24,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/notreached.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/typed_macros.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
diff --git a/content/browser/browser_thread_impl.cc b/content/browser/browser_thread_impl.cc
index 16e8cb8..6bba830 100644
--- a/content/browser/browser_thread_impl.cc
+++ b/content/browser/browser_thread_impl.cc
@@ -16,6 +16,7 @@
 #include "base/notreached.h"
 #include "base/sequence_checker.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_executor.h"
 #include "base/threading/platform_thread.h"
 #include "base/time/time.h"
diff --git a/content/browser/browser_thread_unittest.cc b/content/browser/browser_thread_unittest.cc
index 3774f02..e200bcc5 100644
--- a/content/browser/browser_thread_unittest.cc
+++ b/content/browser/browser_thread_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/run_loop.h"
 #include "base/task/current_thread.h"
 #include "base/task/sequence_manager/sequence_manager.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner_helpers.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/mock_callback.h"
diff --git a/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc b/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
index d56fa269..fca6662 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
+++ b/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
@@ -30,7 +30,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/content/browser/buckets/bucket_manager_host_unittest.cc b/content/browser/buckets/bucket_manager_host_unittest.cc
index 572c6a0..2e7a71b 100644
--- a/content/browser/buckets/bucket_manager_host_unittest.cc
+++ b/content/browser/buckets/bucket_manager_host_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/content/browser/cache_storage/cache_storage_cache.cc b/content/browser/cache_storage/cache_storage_cache.cc
index ac8e0f6b..95b8622 100644
--- a/content/browser/cache_storage/cache_storage_cache.cc
+++ b/content/browser/cache_storage/cache_storage_cache.cc
@@ -27,6 +27,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
diff --git a/content/browser/cache_storage/cache_storage_cache.h b/content/browser/cache_storage/cache_storage_cache.h
index d006681..72a20d3 100644
--- a/content/browser/cache_storage/cache_storage_cache.h
+++ b/content/browser/cache_storage/cache_storage_cache.h
@@ -17,6 +17,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
 #include "components/services/storage/public/mojom/cache_storage_control.mojom.h"
 #include "content/browser/cache_storage/blob_storage_context_wrapper.h"
diff --git a/content/browser/cache_storage/cache_storage_cache_unittest.cc b/content/browser/cache_storage/cache_storage_cache_unittest.cc
index 1d19431..0ffc6d3 100644
--- a/content/browser/cache_storage/cache_storage_cache_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_cache_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
diff --git a/content/browser/cache_storage/cache_storage_context_impl.cc b/content/browser/cache_storage/cache_storage_context_impl.cc
index f088186..96721bd 100644
--- a/content/browser/cache_storage/cache_storage_context_impl.cc
+++ b/content/browser/cache_storage/cache_storage_context_impl.cc
@@ -8,7 +8,6 @@
 #include "base/files/file_path.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/services/storage/public/cpp/buckets/bucket_info.h"
 #include "components/services/storage/public/cpp/buckets/constants.h"
diff --git a/content/browser/cache_storage/cache_storage_context_unittest.cc b/content/browser/cache_storage/cache_storage_context_unittest.cc
index 32ffb0bd..eb7e3567 100644
--- a/content/browser/cache_storage/cache_storage_context_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_context_unittest.cc
@@ -5,6 +5,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
diff --git a/content/browser/cache_storage/cache_storage_control_wrapper.cc b/content/browser/cache_storage/cache_storage_control_wrapper.cc
index f385b42..1fe13178 100644
--- a/content/browser/cache_storage/cache_storage_control_wrapper.cc
+++ b/content/browser/cache_storage/cache_storage_control_wrapper.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "content/browser/cache_storage/cache_storage_control_wrapper.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
 
 namespace content {
diff --git a/content/browser/cache_storage/cache_storage_control_wrapper.h b/content/browser/cache_storage/cache_storage_control_wrapper.h
index 9024ee3..892ee00 100644
--- a/content/browser/cache_storage/cache_storage_control_wrapper.h
+++ b/content/browser/cache_storage/cache_storage_control_wrapper.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/public/mojom/cache_storage_control.mojom.h"
 #include "content/browser/cache_storage/cache_storage_context_impl.h"
 #include "storage/browser/quota/quota_manager_proxy.h"
diff --git a/content/browser/cache_storage/cache_storage_operation.cc b/content/browser/cache_storage/cache_storage_operation.cc
index cc6c5b1..76bb4da 100644
--- a/content/browser/cache_storage/cache_storage_operation.cc
+++ b/content/browser/cache_storage/cache_storage_operation.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/cache_storage/cache_storage_operation.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/cache_storage/cache_storage_histogram_utils.h"
 
 namespace content {
diff --git a/content/browser/cache_storage/cache_storage_scheduler.h b/content/browser/cache_storage/cache_storage_scheduler.h
index de0fcab..63c12886 100644
--- a/content/browser/cache_storage/cache_storage_scheduler.h
+++ b/content/browser/cache_storage/cache_storage_scheduler.h
@@ -12,6 +12,7 @@
 #include "base/callback.h"
 #include "base/feature_list.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/cache_storage/cache_storage_scheduler_types.h"
 #include "content/common/content_export.h"
 
diff --git a/content/browser/child_process_task_port_provider_mac_unittest.cc b/content/browser/child_process_task_port_provider_mac_unittest.cc
index 2fe7ecf4..55b2fda 100644
--- a/content/browser/child_process_task_port_provider_mac_unittest.cc
+++ b/content/browser/child_process_task_port_provider_mac_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/clang_profiling_buildflags.h"
 #include "base/mac/scoped_mach_port.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
diff --git a/content/browser/code_cache/generated_code_cache_context.h b/content/browser/code_cache/generated_code_cache_context.h
index 0c6e4fc..eb4b87e7 100644
--- a/content/browser/code_cache/generated_code_cache_context.h
+++ b/content/browser/code_cache/generated_code_cache_context.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/devtools/browser_devtools_agent_host.h b/content/browser/devtools/browser_devtools_agent_host.h
index e6b1ef0..ccdc898 100644
--- a/content/browser/devtools/browser_devtools_agent_host.h
+++ b/content/browser/devtools/browser_devtools_agent_host.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_DEVTOOLS_BROWSER_DEVTOOLS_AGENT_HOST_H_
 #define CONTENT_BROWSER_DEVTOOLS_BROWSER_DEVTOOLS_AGENT_HOST_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/devtools/devtools_agent_host_impl.h"
 
 namespace content {
diff --git a/content/browser/devtools/devtools_agent_host_impl_unittest.cc b/content/browser/devtools/devtools_agent_host_impl_unittest.cc
index 058dd88..4487339 100644
--- a/content/browser/devtools/devtools_agent_host_impl_unittest.cc
+++ b/content/browser/devtools/devtools_agent_host_impl_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/browser/devtools/shared_worker_devtools_manager.h"
 #include "content/common/content_constants_internal.h"
diff --git a/content/browser/devtools/devtools_http_handler_unittest.cc b/content/browser/devtools/devtools_http_handler_unittest.cc
index a1ce60a2..f6796abb 100644
--- a/content/browser/devtools/devtools_http_handler_unittest.cc
+++ b/content/browser/devtools/devtools_http_handler_unittest.cc
@@ -23,7 +23,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "content/browser/devtools/devtools_agent_host_impl.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/content/browser/devtools/devtools_stream_file.h b/content/browser/devtools/devtools_stream_file.h
index 48fdbb8..d7b50fa 100644
--- a/content/browser/devtools/devtools_stream_file.h
+++ b/content/browser/devtools/devtools_stream_file.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/devtools/devtools_io_context.h"
 
 #include <string>
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index 4c9df3e..34293fb6 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -20,7 +20,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "components/back_forward_cache/disabled_reason_id.h"
diff --git a/content/browser/devtools/protocol/tethering_handler.cc b/content/browser/devtools/protocol/tethering_handler.cc
index e622ce0a..e637569 100644
--- a/content/browser/devtools/protocol/tethering_handler.cc
+++ b/content/browser/devtools/protocol/tethering_handler.cc
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "net/base/io_buffer.h"
diff --git a/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc b/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc
index 845942b2..228b173 100644
--- a/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc
+++ b/content/browser/direct_sockets/direct_sockets_udp_browsertest.cc
@@ -7,7 +7,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "content/browser/direct_sockets/direct_sockets_service_impl.h"
 #include "content/browser/direct_sockets/direct_sockets_test_utils.h"
 #include "content/public/browser/browser_context.h"
diff --git a/content/browser/dom_storage/dom_storage_context_wrapper.cc b/content/browser/dom_storage/dom_storage_context_wrapper.cc
index a95b792..1c5b6a4 100644
--- a/content/browser/dom_storage/dom_storage_context_wrapper.cc
+++ b/content/browser/dom_storage/dom_storage_context_wrapper.cc
@@ -18,7 +18,6 @@
 #include "base/syslog_logging.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/services/storage/dom_storage/local_storage_impl.h"
 #include "components/services/storage/dom_storage/session_storage_impl.h"
diff --git a/content/browser/download/download_manager_impl.h b/content/browser/download/download_manager_impl.h
index 7ac6cfd..9ebcc91a 100644
--- a/content/browser/download/download_manager_impl.h
+++ b/content/browser/download/download_manager_impl.h
@@ -18,6 +18,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner_helpers.h"
 #include "build/build_config.h"
 #include "components/download/public/common/download_item_impl_delegate.h"
diff --git a/content/browser/download/drag_download_file.cc b/content/browser/download/drag_download_file.cc
index fca3a54..f5c1076 100644
--- a/content/browser/download/drag_download_file.cc
+++ b/content/browser/download/drag_download_file.cc
@@ -11,7 +11,6 @@
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/download/public/common/download_item.h"
 #include "components/download/public/common/download_stats.h"
diff --git a/content/browser/file_system/file_system_url_loader_factory_browsertest.cc b/content/browser/file_system/file_system_url_loader_factory_browsertest.cc
index dae5482b..5927dca8 100644
--- a/content/browser/file_system/file_system_url_loader_factory_browsertest.cc
+++ b/content/browser/file_system/file_system_url_loader_factory_browsertest.cc
@@ -16,6 +16,8 @@
 #include "base/i18n/unicodestring.h"
 #include "base/memory/raw_ptr.h"
 #include "base/rand_util.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "build/build_config.h"
diff --git a/content/browser/file_system_access/file_system_access_capacity_allocation_host_impl_unittest.cc b/content/browser/file_system_access/file_system_access_capacity_allocation_host_impl_unittest.cc
index 92b99cb..bffcb6a 100644
--- a/content/browser/file_system_access/file_system_access_capacity_allocation_host_impl_unittest.cc
+++ b/content/browser/file_system_access/file_system_access_capacity_allocation_host_impl_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc b/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc
index 15678fa..aaba5fb 100644
--- a/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc
+++ b/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc b/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc
index 1c0eae2b..1c809f6 100644
--- a/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc
+++ b/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc
@@ -15,6 +15,8 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/guid.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
diff --git a/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc b/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc
index c2337dd..eeb2744 100644
--- a/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc
+++ b/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
diff --git a/content/browser/file_system_access/file_system_access_safe_move_helper_unittest.cc b/content/browser/file_system_access/file_system_access_safe_move_helper_unittest.cc
index 5d8acf9d..5bcb9ac 100644
--- a/content/browser/file_system_access/file_system_access_safe_move_helper_unittest.cc
+++ b/content/browser/file_system_access/file_system_access_safe_move_helper_unittest.cc
@@ -14,6 +14,8 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "content/browser/file_system_access/features.h"
diff --git a/content/browser/file_system_access/file_system_chooser_unittest.cc b/content/browser/file_system_access/file_system_chooser_unittest.cc
index 1ff7c1c..3e3f49c 100644
--- a/content/browser/file_system_access/file_system_chooser_unittest.cc
+++ b/content/browser/file_system_access/file_system_chooser_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "base/test/test_future.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "content/browser/file_system_access/file_system_chooser_test_helpers.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/font_access/font_access_manager_browsertest.cc b/content/browser/font_access/font_access_manager_browsertest.cc
index cc4ebcf..5652da5e 100644
--- a/content/browser/font_access/font_access_manager_browsertest.cc
+++ b/content/browser/font_access/font_access_manager_browsertest.cc
@@ -13,7 +13,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/sequence_bound.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/font_access/font_access_test_utils.h"
 #include "content/browser/font_access/font_enumeration_cache.h"
@@ -197,4 +196,4 @@
 }
 #endif  // BUILDFLAG(IS_WIN)
 
-}  // namespace content
\ No newline at end of file
+}  // namespace content
diff --git a/content/browser/font_access/font_access_manager_unittest.cc b/content/browser/font_access/font_access_manager_unittest.cc
index 2e05178..17f11db 100644
--- a/content/browser/font_access/font_access_manager_unittest.cc
+++ b/content/browser/font_access/font_access_manager_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/content/browser/font_access/font_enumeration_cache.cc b/content/browser/font_access/font_enumeration_cache.cc
index bfe739c..04221fdc 100644
--- a/content/browser/font_access/font_enumeration_cache.cc
+++ b/content/browser/font_access/font_enumeration_cache.cc
@@ -13,6 +13,7 @@
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/sequence_bound.h"
diff --git a/content/browser/font_service.cc b/content/browser/font_service.cc
index bdba47c..6a3001f 100644
--- a/content/browser/font_service.cc
+++ b/content/browser/font_service.cc
@@ -5,6 +5,7 @@
 #include "content/browser/font_service.h"
 
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/services/font/font_service_app.h"
 
diff --git a/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc b/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc
index ea3394e7..6def1ca 100644
--- a/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc
+++ b/content/browser/font_unique_name_lookup/font_unique_name_lookup.cc
@@ -13,6 +13,7 @@
 #include "base/no_destructor.h"
 #include "base/path_service.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/public/common/font_unique_name_lookup/font_table_matcher.h"
diff --git a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc
index 2cda560..ea8f3be 100644
--- a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc
+++ b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.cc
@@ -8,6 +8,7 @@
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "content/browser/font_unique_name_lookup/font_unique_name_lookup.h"
 #include "content/public/common/content_features.h"
diff --git a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
index 1dbe690d..d5c12505 100644
--- a/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
+++ b/content/browser/font_unique_name_lookup/font_unique_name_lookup_service.h
@@ -6,6 +6,7 @@
 #define CONTENT_BROWSER_FONT_UNIQUE_NAME_LOOKUP_FONT_UNIQUE_NAME_LOOKUP_SERVICE_H_
 
 #include "base/memory/raw_ref.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/mojom/font_unique_name_lookup/font_unique_name_lookup.mojom.h"
 
diff --git a/content/browser/geolocation/geolocation_service_impl_unittest.cc b/content/browser/geolocation/geolocation_service_impl_unittest.cc
index 5a96e55..4ecf64c4 100644
--- a/content/browser/geolocation/geolocation_service_impl_unittest.cc
+++ b/content/browser/geolocation/geolocation_service_impl_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/permissions/permission_controller_impl.h"
 #include "content/public/browser/device_service.h"
 #include "content/public/browser/permission_controller.h"
diff --git a/content/browser/gpu/gpu_ipc_browsertests.cc b/content/browser/gpu/gpu_ipc_browsertests.cc
index 4f19413..d4bacc5 100644
--- a/content/browser/gpu/gpu_ipc_browsertests.cc
+++ b/content/browser/gpu/gpu_ipc_browsertests.cc
@@ -109,6 +109,7 @@
 // Include the shared tests.
 #define CONTEXT_TEST_F IN_PROC_BROWSER_TEST_F
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "content/public/browser/browser_thread.h"
 #include "gpu/ipc/client/gpu_context_tests.h"
diff --git a/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc b/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc
index 668fcf8..8c981d34 100644
--- a/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc
+++ b/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/check_op.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/viz/host/gpu_host_impl.h"
 #include "content/browser/gpu/gpu_data_manager_impl.h"
diff --git a/content/browser/gpu/peak_gpu_memory_tracker_impl.cc b/content/browser/gpu/peak_gpu_memory_tracker_impl.cc
index 56e56ed..c044e41 100644
--- a/content/browser/gpu/peak_gpu_memory_tracker_impl.cc
+++ b/content/browser/gpu/peak_gpu_memory_tracker_impl.cc
@@ -11,7 +11,6 @@
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/strcat.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/gpu/gpu_process_host.h"
 #include "content/public/browser/gpu_data_manager.h"
 #include "services/viz/privileged/mojom/gl/gpu_service.mojom.h"
diff --git a/content/browser/hyphenation/hyphenation_impl.cc b/content/browser/hyphenation/hyphenation_impl.cc
index 6e7295f..95e62a1a 100644
--- a/content/browser/hyphenation/hyphenation_impl.cc
+++ b/content/browser/hyphenation/hyphenation_impl.cc
@@ -15,6 +15,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/timer/elapsed_timer.h"
 #include "build/build_config.h"
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry.cc b/content/browser/indexed_db/indexed_db_active_blob_registry.cc
index 345f39e8..af12f57 100644
--- a/content/browser/indexed_db/indexed_db_active_blob_registry.cc
+++ b/content/browser/indexed_db/indexed_db_active_blob_registry.cc
@@ -8,7 +8,6 @@
 #include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/task/task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "content/browser/indexed_db/indexed_db_backing_store.h"
 #include "content/browser/indexed_db/indexed_db_factory.h"
 #include "content/browser/indexed_db/indexed_db_leveldb_coding.h"
diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc
index 2254752..0554e6ef 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store.cc
@@ -24,6 +24,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/trace_event/base_tracing.h"
 #include "base/trace_event/memory_dump_manager.h"
diff --git a/content/browser/indexed_db/indexed_db_context_unittest.cc b/content/browser/indexed_db/indexed_db_context_unittest.cc
index 2092dbd..f6e3a6c 100644
--- a/content/browser/indexed_db/indexed_db_context_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_context_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
diff --git a/content/browser/indexed_db/indexed_db_control_wrapper.cc b/content/browser/indexed_db/indexed_db_control_wrapper.cc
index 8b50de40..a54b178 100644
--- a/content/browser/indexed_db/indexed_db_control_wrapper.cc
+++ b/content/browser/indexed_db/indexed_db_control_wrapper.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/indexed_db/indexed_db_control_wrapper.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
diff --git a/content/browser/indexed_db/indexed_db_control_wrapper.h b/content/browser/indexed_db/indexed_db_control_wrapper.h
index 346431b..2401783 100644
--- a/content/browser/indexed_db/indexed_db_control_wrapper.h
+++ b/content/browser/indexed_db/indexed_db_control_wrapper.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CONTROL_WRAPPER_H_
 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CONTROL_WRAPPER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h"
 #include "components/services/storage/public/mojom/storage_policy_update.mojom.h"
diff --git a/content/browser/indexed_db/indexed_db_database_callbacks.h b/content/browser/indexed_db/indexed_db_database_callbacks.h
index c98f17d7..57d3017c 100644
--- a/content/browser/indexed_db/indexed_db_database_callbacks.h
+++ b/content/browser/indexed_db/indexed_db_database_callbacks.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
diff --git a/content/browser/indexed_db/indexed_db_factory_unittest.cc b/content/browser/indexed_db/indexed_db_factory_unittest.cc
index 2c684e5..ce4e711 100644
--- a/content/browser/indexed_db/indexed_db_factory_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_factory_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_clock.h"
diff --git a/content/browser/indexed_db/indexed_db_feature_observer_browsertest.cc b/content/browser/indexed_db/indexed_db_feature_observer_browsertest.cc
index e0afb5e..d82524b 100644
--- a/content/browser/indexed_db/indexed_db_feature_observer_browsertest.cc
+++ b/content/browser/indexed_db/indexed_db_feature_observer_browsertest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/browser/indexed_db/indexed_db_pre_close_task_queue.h b/content/browser/indexed_db/indexed_db_pre_close_task_queue.h
index 367faeb7..18455ad 100644
--- a/content/browser/indexed_db/indexed_db_pre_close_task_queue.h
+++ b/content/browser/indexed_db/indexed_db_pre_close_task_queue.h
@@ -12,6 +12,7 @@
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/indexed_db/indexed_db_quota_client.cc b/content/browser/indexed_db/indexed_db_quota_client.cc
index 22716287..0aa7c9f 100644
--- a/content/browser/indexed_db/indexed_db_quota_client.cc
+++ b/content/browser/indexed_db/indexed_db_quota_client.cc
@@ -13,7 +13,6 @@
 #include "base/check.h"
 #include "base/sequence_checker.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
 #include "storage/browser/database/database_util.h"
diff --git a/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc b/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc
index 3eac2b9..f31857ba 100644
--- a/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc
+++ b/content/browser/indexed_db/indexed_db_tombstone_sweeper.cc
@@ -11,7 +11,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/tick_clock.h"
 #include "components/services/storage/indexed_db/scopes/varint_coding.h"
 #include "content/browser/indexed_db/indexed_db_backing_store.h"
diff --git a/content/browser/indexed_db/indexed_db_transaction.cc b/content/browser/indexed_db/indexed_db_transaction.cc
index cf24ea57..a6c1a250 100644
--- a/content/browser/indexed_db/indexed_db_transaction.cc
+++ b/content/browser/indexed_db/indexed_db_transaction.cc
@@ -15,7 +15,6 @@
 #include "base/notreached.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/trace_event/base_tracing.h"
 #include "content/browser/indexed_db/indexed_db_backing_store.h"
 #include "content/browser/indexed_db/indexed_db_cursor.h"
diff --git a/content/browser/indexed_db/indexed_db_transaction_unittest.cc b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
index e852051..a4bfb661 100644
--- a/content/browser/indexed_db/indexed_db_transaction_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/time/default_clock.h"
diff --git a/content/browser/indexed_db/indexed_db_unittest.cc b/content/browser/indexed_db/indexed_db_unittest.cc
index cec1716..7a6697e 100644
--- a/content/browser/indexed_db/indexed_db_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.cc b/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.cc
index 0366ec5..ce7129e 100644
--- a/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.cc
+++ b/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.cc
@@ -10,6 +10,7 @@
 
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scope.h"
 #include "components/services/storage/indexed_db/scopes/leveldb_scopes.h"
 #include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h"
diff --git a/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.h b/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.h
index 60153d95..adaebd5 100644
--- a/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.h
+++ b/content/browser/indexed_db/mock_browsertest_indexed_db_class_factory.h
@@ -11,6 +11,7 @@
 #include <memory>
 #include <set>
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/indexed_db/locks/partitioned_lock_manager.h"
 #include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h"
 #include "components/services/storage/privileged/mojom/indexed_db_control_test.mojom.h"
diff --git a/content/browser/indexed_db/transaction_impl.cc b/content/browser/indexed_db/transaction_impl.cc
index df8b49eb..c3ac19a 100644
--- a/content/browser/indexed_db/transaction_impl.cc
+++ b/content/browser/indexed_db/transaction_impl.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/indexed_db/indexed_db_callback_helpers.h"
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
diff --git a/content/browser/interest_group/ad_auction_service_impl_unittest.cc b/content/browser/interest_group/ad_auction_service_impl_unittest.cc
index 44faf4d..5745d261 100644
--- a/content/browser/interest_group/ad_auction_service_impl_unittest.cc
+++ b/content/browser/interest_group/ad_auction_service_impl_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/mock_callback.h"
diff --git a/content/browser/interest_group/auction_runner.cc b/content/browser/interest_group/auction_runner.cc
index f76a2ecc..a415a785 100644
--- a/content/browser/interest_group/auction_runner.cc
+++ b/content/browser/interest_group/auction_runner.cc
@@ -81,7 +81,7 @@
       std::move(auction_config), std::move(client_security_state),
       std::move(is_interest_group_api_allowed_callback),
       std::move(abort_receiver), std::move(callback)));
-  instance->StartAuctionIfReady();
+  instance->StartAuction();
   return instance;
 }
 
@@ -97,6 +97,7 @@
 
   blink::AuctionConfig* config = LookupAuction(*owned_auction_config_, auction);
   if (!config) {
+    // TODO(morlovich): Abort on these.
     mojo::ReportBadMessage("Invalid auction ID in ResolvedPromiseParam");
     return;
   }
@@ -111,7 +112,6 @@
         return;
       }
       config->non_shared_params.auction_signals = std::move(new_val);
-      --promise_fields_in_auction_config_;
       break;
 
     case blink::mojom::AuctionAdConfigField::kSellerSignals:
@@ -120,10 +120,22 @@
         return;
       }
       config->non_shared_params.seller_signals = std::move(new_val);
-      --promise_fields_in_auction_config_;
       break;
   }
-  StartAuctionIfReady();
+  --promise_fields_in_auction_config_;
+  DCHECK_EQ(promise_fields_in_auction_config_,
+            owned_auction_config_->non_shared_params.NumPromises());
+
+  if (!auction->is_main_auction() &&
+      config->non_shared_params.NumPromises() == 0) {
+    auction_.NotifyComponentConfigPromisesResolved(
+        auction->get_component_auction());
+  }
+
+  // This may happen when updating a component auction as well.
+  if (promise_fields_in_auction_config_ == 0) {
+    auction_.NotifyConfigPromisesResolved();
+  }
 }
 
 void AuctionRunner::Abort() {
@@ -189,10 +201,7 @@
                interest_group_manager,
                /*auction_start_time=*/base::Time::Now()) {}
 
-void AuctionRunner::StartAuctionIfReady() {
-  if (promise_fields_in_auction_config_ > 0) {
-    return;
-  }
+void AuctionRunner::StartAuction() {
   auction_.StartLoadInterestGroupsPhase(
       is_interest_group_api_allowed_callback_,
       base::BindOnce(&AuctionRunner::OnLoadInterestGroupsComplete,
diff --git a/content/browser/interest_group/auction_runner.h b/content/browser/interest_group/auction_runner.h
index d167461..a62981f 100644
--- a/content/browser/interest_group/auction_runner.h
+++ b/content/browser/interest_group/auction_runner.h
@@ -185,7 +185,7 @@
       RunAuctionCallback callback);
 
   // Tells `auction_` to start the loading interest groups phase.
-  void StartAuctionIfReady();
+  void StartAuction();
 
   // Invoked asynchronously by `auction_` once all interest groups have loaded.
   // Fails the auction if `success` is false. Otherwise, starts the bidding and
@@ -233,6 +233,9 @@
   std::unique_ptr<blink::AuctionConfig> owned_auction_config_;
 
   RunAuctionCallback callback_;
+
+  // Number of fields in `owned_auction_config_` that are promises; decremented
+  // as they get resolved.
   int promise_fields_in_auction_config_;
 
   InterestGroupAuction auction_;
diff --git a/content/browser/interest_group/auction_runner_unittest.cc b/content/browser/interest_group/auction_runner_unittest.cc
index 57555be..7911278 100644
--- a/content/browser/interest_group/auction_runner_unittest.cc
+++ b/content/browser/interest_group/auction_runner_unittest.cc
@@ -1642,6 +1642,22 @@
     }
   }
 
+  int NumBidderWorklets() const {
+    int total = 0;
+    for (const auto& svc : auction_worklet_services_) {
+      total += svc->NumBidderWorkletsForTesting();
+    }
+    return total;
+  }
+
+  int NumSellerWorklets() const {
+    int total = 0;
+    for (const auto& svc : auction_worklet_services_) {
+      total += svc->NumSellerWorkletsForTesting();
+    }
+    return total;
+  }
+
  private:
   RenderProcessHost* LaunchProcess(
       mojo::PendingReceiver<auction_worklet::mojom::AuctionWorkletService>
@@ -1861,14 +1877,21 @@
           component_auction);
     }
 
+    // Need to clear `same_process_auction_process_manager_` since underlying
+    // object may be owned by `interest_group_manager_`.
+    same_process_auction_process_manager_ = nullptr;
     interest_group_manager_ = std::make_unique<InterestGroupManagerImpl>(
         base::FilePath(), /*in_memory=*/true,
         InterestGroupManagerImpl::ProcessMode::kDedicated,
         /*url_loader_factory=*/nullptr,
         /*k_anonymity_service=*/nullptr);
     if (!auction_process_manager_) {
-      auction_process_manager_ =
+      auto same_process_auction_process_manager =
           std::make_unique<SameProcessAuctionProcessManager>();
+      same_process_auction_process_manager_ =
+          same_process_auction_process_manager.get();
+      auction_process_manager_ =
+          std::move(same_process_auction_process_manager);
     }
     auction_worklet_manager_ = std::make_unique<AuctionWorkletManager>(
         auction_process_manager_.get(), top_frame_origin_, frame_origin_, this);
@@ -2152,6 +2175,7 @@
   void UseMockWorkletService() {
     auto mock_auction_process_manager =
         std::make_unique<MockAuctionProcessManager>();
+    same_process_auction_process_manager_ = nullptr;
     mock_auction_process_manager_ = mock_auction_process_manager.get();
     auction_process_manager_ = std::move(mock_auction_process_manager);
   }
@@ -2395,6 +2419,12 @@
   // InterestGroupManager.
   raw_ptr<MockAuctionProcessManager> mock_auction_process_manager_ = nullptr;
 
+  // If StartAuction() created a SameProcessAuctionProcessManager for
+  // `auction_process_manager_`, this alises it.
+  // Reset by other things that set `auction_process_manager_`.
+  raw_ptr<SameProcessAuctionProcessManager>
+      same_process_auction_process_manager_ = nullptr;
+
   // The InterestGroupManager is recreated and repopulated for each auction.
   std::unique_ptr<InterestGroupManagerImpl> interest_group_manager_;
 
@@ -3009,12 +3039,6 @@
 TEST_F(AuctionRunnerTest, PauseBidder) {
   pause_worklet_url_ = kBidder2Url;
 
-  // Save a pointer to SameProcessAuctionProcessManager since we'll need its help
-  // to resume things.
-  auto process_manager = std::make_unique<SameProcessAuctionProcessManager>();
-  SameProcessAuctionProcessManager* process_manager_impl = process_manager.get();
-  auction_process_manager_ = std::move(process_manager);
-
   // Have a 404 for script 2 until ready to resume.
   url_loader_factory_.AddResponse(kBidder2Url.spec(), "", net::HTTP_NOT_FOUND);
   auction_worklet::AddJavascriptResponse(
@@ -3046,12 +3070,12 @@
                     kBidder2, kBidder2Name,
                     /*has_signals=*/true, "l2", "b"));
 
-  process_manager_impl->ResumeAllPaused();
+  same_process_auction_process_manager_->ResumeAllPaused();
 
   // Need to resume a second time, when the script is re-loaded to run
   // ReportWin().
   task_environment_.RunUntilIdle();
-  process_manager_impl->ResumeAllPaused();
+  same_process_auction_process_manager_->ResumeAllPaused();
 
   auction_run_loop_->Run();
   EXPECT_THAT(result_.errors, testing::ElementsAre());
@@ -3093,12 +3117,6 @@
 TEST_F(AuctionRunnerTest, PauseSeller) {
   pause_worklet_url_ = kSellerUrl;
 
-  // Save a pointer to SameProcessAuctionProcessManager since we'll need its help
-  // to resume things.
-  auto process_manager = std::make_unique<SameProcessAuctionProcessManager>();
-  SameProcessAuctionProcessManager* process_manager_impl = process_manager.get();
-  auction_process_manager_ = std::move(process_manager);
-
   // Have a 404 for seller until ready to resume.
   url_loader_factory_.AddResponse(kSellerUrl.spec(), "", net::HTTP_NOT_FOUND);
 
@@ -3131,7 +3149,7 @@
   auction_worklet::AddJavascriptResponse(&url_loader_factory_, kSellerUrl,
                                          MakeAuctionScript());
 
-  process_manager_impl->ResumeAllPaused();
+  same_process_auction_process_manager_->ResumeAllPaused();
 
   auction_run_loop_->Run();
   EXPECT_THAT(result_.errors, testing::ElementsAre());
@@ -5331,7 +5349,9 @@
                   /*expected_sellers=*/1);
 }
 
-// An auction that passes auctionSignals via promises.
+// An auction that passes auctionSignals via promises. This makes sure to
+// order worklet process creation before promise delivery (compare to
+// PromiseAuctionSignalsDeliveredBeforeWorklet).
 TEST_F(AuctionRunnerTest, PromiseAuctionSignals) {
   use_promise_for_auction_signals_ = true;
 
@@ -5359,8 +5379,77 @@
       /*ad_component_urls=*/absl::nullopt));
   StartAuction(kSellerUrl, std::move(bidders));
 
+  // Make sure the worklet processes are created. Since promises haven't
+  // resolved yet, the auction should not complete.
+  task_environment_.RunUntilIdle();
+  EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
+  EXPECT_EQ(same_process_auction_process_manager_->NumBidderWorklets(), 2);
+
+  // Feed in auctionSignals.
+  abortable_ad_auction_->ResolvedPromiseParam(
+      blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
+      blink::mojom::AuctionAdConfigField::kAuctionSignals,
+      MakeAuctionSignals(/*use_promise=*/false, url::Origin::Create(kSellerUrl))
+          .json_payload());
+
+  auction_run_loop_->Run();
+
+  EXPECT_EQ(InterestGroupKey(kBidder2, kBidder2Name), result_.winning_group_id);
+  EXPECT_EQ(GURL("https://ad2.com/"), result_.ad_url);
+  EXPECT_THAT(result_.errors, testing::ElementsAre());
+}
+
+// Checks case where auction signals promises resolves before the bidder worklet
+// process is ready.
+TEST_F(AuctionRunnerTest, PromiseAuctionSignalsDeliveredBeforeWorklet) {
+  use_promise_for_auction_signals_ = true;
+
+  // Create AuctionProcessManager in advance of starting the auction so can
+  // create worklets before the auction starts.
+  auction_process_manager_ =
+      std::make_unique<SameProcessAuctionProcessManager>();
+
+  std::vector<std::unique_ptr<AuctionProcessManager::ProcessHandle>>
+      busy_processes;
+  for (size_t i = 0; i < AuctionProcessManager::kMaxBidderProcesses; ++i) {
+    busy_processes.push_back(
+        std::make_unique<AuctionProcessManager::ProcessHandle>());
+    url::Origin origin = url::Origin::Create(
+        GURL(base::StringPrintf("https://blocking.bidder.%zu.test", i)));
+    EXPECT_TRUE(auction_process_manager_->RequestWorkletService(
+        AuctionProcessManager::WorkletType::kBidder, origin,
+        scoped_refptr<SiteInstance>(), &*busy_processes.back(),
+        base::BindOnce(
+            []() { ADD_FAILURE() << "This should not be called"; })));
+  }
+  task_environment_.RunUntilIdle();
+
+  auction_worklet::AddJavascriptResponse(
+      &url_loader_factory_, kBidder1Url,
+      MakeBidScript(kSeller, "1", "https://ad1.com/", /*num_ad_components=*/0,
+                    kBidder1, kBidder1Name));
+  auction_worklet::AddJavascriptResponse(
+      &url_loader_factory_, kBidder2Url,
+      MakeBidScript(kSeller, "2", "https://ad2.com/", /*num_ad_components=*/0,
+                    kBidder2, kBidder2Name));
+  auction_worklet::AddJavascriptResponse(&url_loader_factory_, kSellerUrl,
+                                         MakeAuctionScript());
+
+  std::vector<StorageInterestGroup> bidders;
+  bidders.emplace_back(MakeInterestGroup(
+      kBidder1, kBidder1Name, kBidder1Url,
+      /*trusted_bidding_signals_url=*/absl::nullopt,
+      /*trusted_bidding_signals_keys=*/{}, GURL("https://ad1.com"),
+      /*ad_component_urls=*/absl::nullopt));
+  bidders.emplace_back(MakeInterestGroup(
+      kBidder2, kBidder2Name, kBidder2Url,
+      /*trusted_bidding_signals_url=*/absl::nullopt,
+      /*trusted_bidding_signals_keys=*/{}, GURL("https://ad2.com"),
+      /*ad_component_urls=*/absl::nullopt));
+  StartAuction(kSellerUrl, std::move(bidders));
+
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in auctionSignals.
@@ -5370,6 +5459,13 @@
       MakeAuctionSignals(/*use_promise=*/false, url::Origin::Create(kSellerUrl))
           .json_payload());
 
+  // Can't complete yet since there is no process slot.
+  task_environment_.RunUntilIdle();
+  EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
+
+  // Free up process space to permit this to proceed.
+  busy_processes.clear();
+
   auction_run_loop_->Run();
 
   EXPECT_EQ(InterestGroupKey(kBidder2, kBidder2Name), result_.winning_group_id);
@@ -5407,7 +5503,7 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in sellerSignals.
@@ -5415,7 +5511,7 @@
       blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
       blink::mojom::AuctionAdConfigField::kSellerSignals,
       MakeSellerSignals(/*use_promise=*/false, kSellerUrl).json_payload());
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in auctionSignals.
@@ -5463,14 +5559,14 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in sellerSignals.
   abortable_ad_auction_->ResolvedPromiseParam(
       blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
       blink::mojom::AuctionAdConfigField::kSellerSignals, absl::nullopt);
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in auctionSignals.
@@ -5489,6 +5585,69 @@
                                   "Uncaught Error: wrong auctionSignals."));
 }
 
+// Runs an auction that passes auctionSignals via a promise, and makes sure that
+// URL fetches begin, and worklet processes are launched, before the promise is
+// resolved.
+TEST_F(AuctionRunnerTest, PromiseSignalsParallelism) {
+  use_promise_for_seller_signals_ = true;
+
+  StartStandardAuction();
+
+  // Various scripts and trusted signals should be pending, and worklets should
+  // be created.
+  task_environment_.RunUntilIdle();
+
+  EXPECT_EQ(1, same_process_auction_process_manager_->NumSellerWorklets());
+  EXPECT_EQ(2, same_process_auction_process_manager_->NumBidderWorklets());
+  GURL trusted_bidding_signals_url1 = GURL(kBidder1TrustedSignalsUrl.spec() +
+                                           "?hostname=publisher1.com&keys=k1,k2"
+                                           "&interestGroupNames=Ad+Platform");
+  GURL trusted_bidding_signals_url2 =
+      GURL(kBidder2TrustedSignalsUrl.spec() +
+           "?hostname=publisher1.com&keys=l1,l2"
+           "&interestGroupNames=Another+Ad+Thing");
+  EXPECT_TRUE(url_loader_factory_.IsPending(kBidder1Url.spec()));
+  EXPECT_TRUE(url_loader_factory_.IsPending(kBidder2Url.spec()));
+  EXPECT_TRUE(url_loader_factory_.IsPending(kSellerUrl.spec()));
+  EXPECT_TRUE(
+      url_loader_factory_.IsPending(trusted_bidding_signals_url1.spec()));
+  EXPECT_TRUE(
+      url_loader_factory_.IsPending(trusted_bidding_signals_url2.spec()));
+
+  auction_worklet::AddJavascriptResponse(
+      &url_loader_factory_, kBidder1Url,
+      MakeBidScript(kSeller, "1", "https://ad1.com/", /*num_ad_components=*/2,
+                    kBidder1, kBidder1Name,
+                    /*has_signals=*/true, "k1", "a",
+                    /*report_post_auction_signals=*/true));
+  auction_worklet::AddJavascriptResponse(
+      &url_loader_factory_, kBidder2Url,
+      MakeBidScript(kSeller, "2", "https://ad2.com/", /*num_ad_components=*/2,
+                    kBidder2, kBidder2Name,
+                    /*has_signals=*/true, "l2", "b",
+                    /*report_post_auction_signals=*/true));
+  auction_worklet::AddJavascriptResponse(
+      &url_loader_factory_, kSellerUrl,
+      MakeAuctionScript(/*report_post_auction_signals=*/true));
+  auction_worklet::AddBidderJsonResponse(
+      &url_loader_factory_, trusted_bidding_signals_url1, kBidder1SignalsJson);
+  auction_worklet::AddBidderJsonResponse(
+      &url_loader_factory_, trusted_bidding_signals_url2, kBidder2SignalsJson);
+  // Feed in the sources.
+  task_environment_.RunUntilIdle();
+
+  // Feed in sellerSignals.
+  abortable_ad_auction_->ResolvedPromiseParam(
+      blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
+      blink::mojom::AuctionAdConfigField::kSellerSignals,
+      MakeSellerSignals(/*use_promise=*/false, kSellerUrl).json_payload());
+  auction_run_loop_->Run();
+
+  EXPECT_EQ(InterestGroupKey(kBidder2, kBidder2Name), result_.winning_group_id);
+  EXPECT_EQ(GURL("https://ad2.com/"), result_.ad_url);
+  EXPECT_THAT(result_.errors, testing::ElementsAre());
+}
+
 TEST_F(AuctionRunnerTest, PromiseSignalsResolveAfterAbort) {
   use_promise_for_seller_signals_ = true;
   dont_reset_auction_runner_ = true;
@@ -5518,7 +5677,8 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
+  ;
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   abortable_ad_auction_->Abort();
@@ -5531,7 +5691,7 @@
       blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
       blink::mojom::AuctionAdConfigField::kSellerSignals,
       MakeSellerSignals(/*use_promise=*/false, kSellerUrl).json_payload());
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
   EXPECT_TRUE(result_.manually_aborted);
 }
@@ -5558,15 +5718,17 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
-  // Feed in the signals.
+  // Feed in the signals. Updating main before component auctions is significant
+  // because it makes sure main auction is notified of config readiness
+  // triggered by component config updates, too.
   abortable_ad_auction_->ResolvedPromiseParam(
       blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
       blink::mojom::AuctionAdConfigField::kSellerSignals,
       MakeSellerSignals(/*use_promise=*/false, kSellerUrl).json_payload());
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   abortable_ad_auction_->ResolvedPromiseParam(
@@ -5574,7 +5736,7 @@
       blink::mojom::AuctionAdConfigField::kAuctionSignals,
       MakeAuctionSignals(/*use_promise=*/false, url::Origin::Create(kSellerUrl))
           .json_payload());
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   for (int component = 0; component < 2; ++component) {
@@ -5584,7 +5746,7 @@
         blink::mojom::AuctionAdConfigAuctionId::NewComponentAuction(component),
         blink::mojom::AuctionAdConfigField::kSellerSignals,
         MakeSellerSignals(/*use_promise=*/false, url).json_payload());
-    auction_run_loop_->RunUntilIdle();
+    task_environment_.RunUntilIdle();
     EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
     abortable_ad_auction_->ResolvedPromiseParam(
         blink::mojom::AuctionAdConfigAuctionId::NewComponentAuction(component),
@@ -5592,7 +5754,7 @@
         MakeAuctionSignals(/*use_promise=*/false, url::Origin::Create(url))
             .json_payload());
     if (component != 1) {
-      auction_run_loop_->RunUntilIdle();
+      task_environment_.RunUntilIdle();
       EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
     }
   }
@@ -5603,6 +5765,125 @@
   EXPECT_THAT(result_.errors, testing::ElementsAre());
 }
 
+// Coverage of what happens when promises come in for a component auction that
+// got dropped at the database load stage, due to not having anything to bid,
+// including that it still gets error-checked.
+TEST_F(AuctionRunnerTest, PromiseSignalsComponentAuctionRejected) {
+  use_promise_for_auction_signals_ = true;
+
+  SetUpComponentAuctionAndResponses(/*bidder1_seller=*/kComponentSeller1,
+                                    /*bidder2_seller=*/kComponentSeller2,
+                                    /*bid_from_component_auction_wins=*/true,
+                                    /*report_post_auction_signals=*/false);
+
+  for (bool inject_incorrect_call : {false, true}) {
+    SCOPED_TRACE(inject_incorrect_call);
+    std::vector<StorageInterestGroup> bidders;
+    // Only component 2's bidder added.
+    bidders.emplace_back(MakeInterestGroup(
+        kBidder2, kBidder2Name, kBidder2Url, kBidder2TrustedSignalsUrl,
+        {"l1", "l2"}, GURL("https://ad2.com"),
+        std::vector<GURL>{GURL("https://ad2.com-component1.com"),
+                          GURL("https://ad2.com-component2.com")}));
+    StartAuction(kSellerUrl, std::move(bidders));
+
+    // Can't complete yet.
+    task_environment_.RunUntilIdle();
+    EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
+
+    // Feed in the signals.
+    abortable_ad_auction_->ResolvedPromiseParam(
+        blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
+        blink::mojom::AuctionAdConfigField::kAuctionSignals,
+        MakeAuctionSignals(/*use_promise=*/false,
+                           url::Origin::Create(kSellerUrl))
+            .json_payload());
+    task_environment_.RunUntilIdle();
+    EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
+
+    for (int component = 0; component < 2; ++component) {
+      const GURL& url =
+          (component == 0) ? kComponentSeller1Url : kComponentSeller2Url;
+      abortable_ad_auction_->ResolvedPromiseParam(
+          blink::mojom::AuctionAdConfigAuctionId::NewComponentAuction(
+              component),
+          blink::mojom::AuctionAdConfigField::kAuctionSignals,
+          MakeAuctionSignals(/*use_promise=*/false, url::Origin::Create(url))
+              .json_payload());
+
+      if (component == 0) {
+        if (inject_incorrect_call) {
+          abortable_ad_auction_->ResolvedPromiseParam(
+              blink::mojom::AuctionAdConfigAuctionId::NewComponentAuction(
+                  component),
+              blink::mojom::AuctionAdConfigField::kAuctionSignals,
+              MakeAuctionSignals(/*use_promise=*/false,
+                                 url::Origin::Create(url))
+                  .json_payload());
+        }
+        task_environment_.RunUntilIdle();
+        EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
+      }
+    }
+
+    if (inject_incorrect_call) {
+      EXPECT_EQ("ResolvedPromiseParam updating non-promise", TakeBadMessage());
+    }
+
+    // TODO(morlovich): This should eventually abort rather than succeed in the
+    // `inject_incorrect_call` case.
+    auction_run_loop_->Run();
+
+    EXPECT_EQ(GURL("https://ad2.com/"), result_.ad_url);
+    EXPECT_THAT(result_.errors, testing::ElementsAre());
+  }
+}
+
+// Make sure the scoring portion of the auction waits to have promises resolved.
+// Checking at bidding time is not enough since a top-level auction can receive
+// bids to score from component auctions, and those complete their configuration
+// independently.
+TEST_F(AuctionRunnerTest, PromiseSignalsSellerDependency) {
+  use_promise_for_seller_signals_ = true;
+
+  SetUpComponentAuctionAndResponses(/*bidder1_seller=*/kComponentSeller1,
+                                    /*bidder2_seller=*/kComponentSeller2,
+                                    /*bid_from_component_auction_wins=*/true,
+                                    /*report_post_auction_signals=*/false);
+  // Make sure there is nothing at top-level.
+  interest_group_buyers_->clear();
+
+  StartStandardAuction();
+
+  // Can't complete yet.
+  task_environment_.RunUntilIdle();
+  EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
+
+  // Feed in the signals for component auctions (but not top-level auction)
+  for (int component = 0; component < 2; ++component) {
+    const GURL& url =
+        (component == 0) ? kComponentSeller1Url : kComponentSeller2Url;
+    abortable_ad_auction_->ResolvedPromiseParam(
+        blink::mojom::AuctionAdConfigAuctionId::NewComponentAuction(component),
+        blink::mojom::AuctionAdConfigField::kSellerSignals,
+        MakeSellerSignals(/*use_promise=*/false, url).json_payload());
+
+    task_environment_.RunUntilIdle();
+    EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
+  }
+
+  // Now finally pass in the main auction param, unblocking the seller worklet.
+  abortable_ad_auction_->ResolvedPromiseParam(
+      blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
+      blink::mojom::AuctionAdConfigField::kSellerSignals,
+      MakeSellerSignals(/*use_promise=*/false, kSellerUrl).json_payload());
+
+  auction_run_loop_->Run();
+  EXPECT_EQ(InterestGroupKey(kBidder2, kBidder2Name), result_.winning_group_id);
+  EXPECT_EQ(GURL("https://ad2.com/"), result_.ad_url);
+  EXPECT_THAT(result_.errors, testing::ElementsAre());
+}
+
 TEST_F(AuctionRunnerTest, PromiseSignalsBadAuctionId) {
   use_promise_for_seller_signals_ = true;
   use_promise_for_auction_signals_ = true;
@@ -5632,7 +5913,7 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in sellerSignals with wrong component ID.
@@ -5674,7 +5955,7 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in auctionSignals, which isn't a promise in the first place.
@@ -5715,7 +5996,7 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in auctionSignals twice.
@@ -5725,7 +6006,7 @@
   abortable_ad_auction_->ResolvedPromiseParam(
       blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
       blink::mojom::AuctionAdConfigField::kAuctionSignals, absl::nullopt);
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_EQ("ResolvedPromiseParam updating non-promise", TakeBadMessage());
 }
 
@@ -5760,13 +6041,13 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   abortable_ad_auction_->ResolvedPromiseParam(
       blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
       blink::mojom::AuctionAdConfigField::kSellerSignals, absl::nullopt);
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_EQ("ResolvedPromiseParam updating non-promise", TakeBadMessage());
 }
 
@@ -5800,7 +6081,7 @@
   StartAuction(kSellerUrl, std::move(bidders));
 
   // Can't complete yet.
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_FALSE(auction_run_loop_->AnyQuitCalled());
 
   // Feed in auctionSignals twice.
@@ -5810,7 +6091,7 @@
   abortable_ad_auction_->ResolvedPromiseParam(
       blink::mojom::AuctionAdConfigAuctionId::NewMainAuction(0),
       blink::mojom::AuctionAdConfigField::kSellerSignals, absl::nullopt);
-  auction_run_loop_->RunUntilIdle();
+  task_environment_.RunUntilIdle();
   EXPECT_EQ("ResolvedPromiseParam updating non-promise", TakeBadMessage());
 }
 
diff --git a/content/browser/interest_group/interest_group_auction.cc b/content/browser/interest_group/interest_group_auction.cc
index 902a351e..f73487f 100644
--- a/content/browser/interest_group/interest_group_auction.cc
+++ b/content/browser/interest_group/interest_group_auction.cc
@@ -507,6 +507,12 @@
     }
   }
 
+  void NotifyConfigPromisesResolved() {
+    for (const auto& bid_state : bid_states_) {
+      FinishGenerateBidIfReady(bid_state.get());
+    }
+  }
+
  private:
   // Sorts by descending priority, also grouping entries within each priority
   // band to permit context reuse if the executionMode allows it.
@@ -631,8 +637,6 @@
 
     mojo::PendingAssociatedRemote<auction_worklet::mojom::GenerateBidClient>
         pending_remote;
-    mojo::AssociatedRemote<auction_worklet::mojom::GenerateBidFinalizer>
-        bid_finalizer;
     bid_state->generate_bid_client_receiver_id =
         generate_bid_client_receiver_set_.Add(
             this, pending_remote.InitWithNewEndpointAndPassReceiver(),
@@ -660,7 +664,7 @@
         bid_state->bidder->bidding_browser_signals.Clone(),
         auction_->auction_start_time_, *bid_state->trace_id,
         std::move(pending_remote),
-        bid_finalizer.BindNewEndpointAndPassReceiver());
+        bid_state->bid_finalizer.BindNewEndpointAndPassReceiver());
 
     // Invoke SendPendingSignalsRequests() asynchronously, if necessary. Do this
     // asynchronously so that all BeginGenerateBid() calls that share a
@@ -676,11 +680,26 @@
                          weak_ptr_factory_.GetWeakPtr(), bid_state));
     }
 
-    bid_finalizer->FinishGenerateBid(
+    FinishGenerateBidIfReady(bid_state);
+  }
+
+  void FinishGenerateBidIfReady(BidState* bid_state) {
+    if (!auction_->config_promises_resolved_) {
+      return;
+    }
+
+    if (!bid_state->bid_finalizer.is_bound()) {
+      // This can happen if the promise resolves while the worklet process is
+      // still being launched.
+      return;
+    }
+
+    bid_state->bid_finalizer->FinishGenerateBid(
         auction_->config_->non_shared_params.auction_signals.maybe_json(),
         GetPerBuyerSignals(*auction_->config_,
                            bid_state->bidder->interest_group.owner),
         auction_->PerBuyerTimeout(bid_state));
+    bid_state->bid_finalizer.reset();
   }
 
   // Invoked when OnBiddingSignalsReceived() has been called for `state`, or
@@ -1055,6 +1074,7 @@
       generate_bid_client_receiver_set_.Remove(
           *state.generate_bid_client_receiver_id);
       state.generate_bid_client_receiver_id.reset();
+      state.bid_finalizer.reset();
     }
   }
 
@@ -1104,6 +1124,7 @@
       auction_worklet_manager_(auction_worklet_manager),
       interest_group_manager_(interest_group_manager),
       config_(config),
+      config_promises_resolved_(config_->non_shared_params.NumPromises() == 0),
       parent_(parent),
       auction_start_time_(auction_start_time),
       creation_time_(base::TimeTicks::Now()),
@@ -1113,13 +1134,17 @@
                                     "decision_logic_url",
                                     config_->decision_logic_url);
 
+  uint32_t child_pos = 0;
   for (const auto& component_auction_config :
        config->non_shared_params.component_auctions) {
     // Nested component auctions are not supported.
     DCHECK(!parent_);
-    component_auctions_.emplace_back(std::make_unique<InterestGroupAuction>(
-        kanon_mode_, &component_auction_config, /*parent=*/this,
-        auction_worklet_manager, interest_group_manager, auction_start_time));
+    component_auctions_.emplace(
+        child_pos, std::make_unique<InterestGroupAuction>(
+                       kanon_mode_, &component_auction_config, /*parent=*/this,
+                       auction_worklet_manager, interest_group_manager,
+                       auction_start_time));
+    ++child_pos;
   }
 }
 
@@ -1192,11 +1217,10 @@
 
   for (auto component_auction = component_auctions_.begin();
        component_auction != component_auctions_.end(); ++component_auction) {
-    (*component_auction)
-        ->StartLoadInterestGroupsPhase(
-            is_interest_group_api_allowed_callback,
-            base::BindOnce(&InterestGroupAuction::OnComponentInterestGroupsRead,
-                           weak_ptr_factory_.GetWeakPtr(), component_auction));
+    component_auction->second->StartLoadInterestGroupsPhase(
+        is_interest_group_api_allowed_callback,
+        base::BindOnce(&InterestGroupAuction::OnComponentInterestGroupsRead,
+                       weak_ptr_factory_.GetWeakPtr(), component_auction));
     ++num_pending_loads_;
   }
 
@@ -1259,13 +1283,15 @@
     // component auctions before invoking StartBiddingAndScoringPhase() on any
     // component auction.
     pending_component_seller_worklet_requests_ = component_auctions_.size();
-    for (auto& component_auction : component_auctions_) {
+    for (auto& component_auction_info : component_auctions_) {
+      InterestGroupAuction* component_auction =
+          component_auction_info.second.get();
       component_auction->StartBiddingAndScoringPhase(
           base::BindOnce(
               &InterestGroupAuction::OnComponentSellerWorkletReceived,
               base::Unretained(this)),
           base::BindOnce(&InterestGroupAuction::OnComponentAuctionComplete,
-                         base::Unretained(this), component_auction.get()));
+                         base::Unretained(this), component_auction));
     }
   }
 
@@ -1368,6 +1394,30 @@
       TakePrivateAggregationRequests());
 }
 
+void InterestGroupAuction::NotifyConfigPromisesResolved() {
+  DCHECK(!config_promises_resolved_);
+  DCHECK_EQ(0, config_->non_shared_params.NumPromises());
+  config_promises_resolved_ = true;
+  for (const auto& buyer_helper : buyer_helpers_) {
+    buyer_helper->NotifyConfigPromisesResolved();
+  }
+
+  ScoreQueuedBidsIfReady();
+}
+
+void InterestGroupAuction::NotifyComponentConfigPromisesResolved(uint32_t pos) {
+  DCHECK(!parent_);  // Should not be called on a component.
+  auto it = component_auctions_.find(pos);
+
+  if (it == component_auctions_.end()) {
+    // It's OK if the component auction isn't found; that means it got dropped
+    // at database loading stage.
+    return;
+  }
+
+  it->second->NotifyConfigPromisesResolved();
+}
+
 void InterestGroupAuction::ClosePipes() {
   // This is needed in addition to closing worklet pipes since the callbacks
   // passed to Mojo pipes this class doesn't own aren't cancellable.
@@ -1381,8 +1431,8 @@
   seller_worklet_handle_.reset();
 
   // Close pipes for component auctions as well.
-  for (auto& component_auction : component_auctions_) {
-    component_auction->ClosePipes();
+  for (auto& component_auction_info : component_auctions_) {
+    component_auction_info.second->ClosePipes();
   }
 }
 
@@ -1391,8 +1441,8 @@
   for (const auto& buyer_helper : buyer_helpers_) {
     num_interest_groups += buyer_helper->num_potential_bidders();
   }
-  for (auto& component_auction : component_auctions_) {
-    num_interest_groups += component_auction->NumPotentialBidders();
+  for (const auto& component_auction_info : component_auctions_) {
+    num_interest_groups += component_auction_info.second->NumPotentialBidders();
   }
   return num_interest_groups;
 }
@@ -1407,8 +1457,8 @@
   }
 
   // Retrieve data from component auctions as well.
-  for (auto& component_auction : component_auctions_) {
-    component_auction->GetInterestGroupsThatBid(interest_groups);
+  for (const auto& component_auction_info : component_auctions_) {
+    component_auction_info.second->GetInterestGroupsThatBid(interest_groups);
   }
 }
 
@@ -1594,17 +1644,17 @@
   }
 
   // Retrieve data from component auctions as well.
-  for (auto& component_auction : component_auctions_) {
-    component_auction->TakeDebugReportUrls(debug_win_report_urls,
-                                           debug_loss_report_urls);
+  for (auto& component_auction_info : component_auctions_) {
+    component_auction_info.second->TakeDebugReportUrls(debug_win_report_urls,
+                                                       debug_loss_report_urls);
   }
 }
 
 std::map<url::Origin, InterestGroupAuction::PrivateAggregationRequests>
 InterestGroupAuction::TakePrivateAggregationRequests() {
-  for (auto& component_auction : component_auctions_) {
+  for (auto& component_auction_info : component_auctions_) {
     std::map<url::Origin, PrivateAggregationRequests> requests_map =
-        component_auction->TakePrivateAggregationRequests();
+        component_auction_info.second->TakePrivateAggregationRequests();
     for (auto& [origin, requests] : requests_map) {
       DCHECK(!requests.empty());
       PrivateAggregationRequests& destination_vector =
@@ -1618,8 +1668,9 @@
 }
 
 std::vector<std::string> InterestGroupAuction::TakeErrors() {
-  for (auto& component_auction : component_auctions_) {
-    std::vector<std::string> errors = component_auction->TakeErrors();
+  for (auto& component_auction_info : component_auctions_) {
+    std::vector<std::string> errors =
+        component_auction_info.second->TakeErrors();
     errors_.insert(errors_.begin(), errors.begin(), errors.end());
   }
   return std::move(errors_);
@@ -1631,8 +1682,8 @@
     owners.emplace_back(std::move(owner));
   }
 
-  for (auto& component_auction : component_auctions_) {
-    component_auction->TakePostAuctionUpdateOwners(owners);
+  for (auto& component_auction_info : component_auctions_) {
+    component_auction_info.second->TakePostAuctionUpdateOwners(owners);
   }
 }
 
@@ -1808,17 +1859,18 @@
 }
 
 void InterestGroupAuction::OnComponentInterestGroupsRead(
-    AuctionList::iterator component_auction,
+    AuctionMap::iterator component_auction,
     bool success) {
-  num_owners_loaded_ += (*component_auction)->num_owners_loaded_;
+  num_owners_loaded_ += component_auction->second->num_owners_loaded_;
   num_owners_with_interest_groups_ +=
-      (*component_auction)->num_owners_with_interest_groups_;
+      component_auction->second->num_owners_with_interest_groups_;
 
   // Erase component auctions that failed to load anything, so they won't be
   // invoked in the generate bid phase. This is not a problem in the reporting
   // phase, as the top-level auction knows which component auction, if any, won.
-  if (!success)
+  if (!success) {
     component_auctions_.erase(component_auction);
+  }
   OnOneLoadCompleted();
 }
 
@@ -1930,6 +1982,13 @@
     std::move(on_seller_receiver_callback_).Run();
 
   seller_worklet_received_ = true;
+  ScoreQueuedBidsIfReady();
+}
+
+void InterestGroupAuction::ScoreQueuedBidsIfReady() {
+  if (!ReadyToScoreBids() || unscored_bids_.empty()) {
+    return;
+  }
 
   auto unscored_bids = std::move(unscored_bids_);
   for (auto& unscored_bid : unscored_bids) {
@@ -2022,11 +2081,11 @@
 void InterestGroupAuction::OnBidSourceDone() {
   --outstanding_bid_sources_;
 
-  // If this is the only bid that yet to be sent to the seller worklet, and
-  // the seller worklet has loaded, then tell the seller worklet to send any
+  // If we issued the final set of bids to a seller worklet, tell it to send any
   // pending scoring signals request to complete the auction more quickly.
-  if (outstanding_bid_sources_ == 0 && seller_worklet_received_)
+  if (outstanding_bid_sources_ == 0 && ReadyToScoreBids()) {
     seller_worklet_handle_->GetSellerWorklet()->SendPendingSignalsRequests();
+  }
 
   MaybeCompleteBiddingAndScoringPhase();
 }
@@ -2037,9 +2096,11 @@
 
   any_bid_made_ = true;
 
-  // If seller worklet hasn't been received yet, wait until it is.
+  // If seller worklet hasn't been received yet, or configuration is still
+  // waiting on some promises, wait till everything is ready.
+  // TODO(morlovich): Tracing doesn't reflect config wait here.
   uint64_t bid_trace_id = bid->TraceId();
-  if (!seller_worklet_received_) {
+  if (!ReadyToScoreBids()) {
     TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("fledge", "wait_for_seller_worklet",
                                       bid_trace_id);
     unscored_bids_.emplace_back(std::move(bid));
@@ -2056,6 +2117,7 @@
   mojo::PendingRemote<auction_worklet::mojom::ScoreAdClient> score_ad_remote;
   score_ad_receivers_.Add(
       this, score_ad_remote.InitWithNewPipeAndPassReceiver(), std::move(bid));
+  DCHECK_EQ(0, config_->non_shared_params.NumPromises());
   seller_worklet_handle_->GetSellerWorklet()->ScoreAd(
       bid_raw->ad_metadata, bid_raw->bid, config_->non_shared_params,
       GetDirectFromSellerSellerSignals(*subresource_url_builder_),
@@ -2407,12 +2469,15 @@
   // If this is a top-level auction with component auction, update final state
   // of all successfully completed component auctions with bids that did not win
   // to reflect a loss.
-  for (auto& component_auction : component_auctions_) {
+  for (auto& component_auction_info : component_auctions_) {
+    InterestGroupAuction* component_auction =
+        component_auction_info.second.get();
     // Leave the state of the winning component auction alone, if the winning
     // bid is from a component auction.
     ScoredBid* winner = top_bid();
-    if (winner && winner->bid->auction == component_auction.get())
+    if (winner && winner->bid->auction == component_auction) {
       continue;
+    }
     if (component_auction->final_auction_result_)
       continue;
     component_auction->final_auction_result_ =
diff --git a/content/browser/interest_group/interest_group_auction.h b/content/browser/interest_group/interest_group_auction.h
index 4cf355a..37779b34 100644
--- a/content/browser/interest_group/interest_group_auction.h
+++ b/content/browser/interest_group/interest_group_auction.h
@@ -219,6 +219,11 @@
     // generateBid() is running.
     absl::optional<mojo::ReceiverId> generate_bid_client_receiver_id;
 
+    // Mojo pipe to use to fill in potentially promise-provided arguments.
+    // Only populated in between BeginGenerateBid and FinishGenerateBid().
+    mojo::AssociatedRemote<auction_worklet::mojom::GenerateBidFinalizer>
+        bid_finalizer;
+
     // True when OnBiddingSignalsReceived() has been invoked. Needed to
     // correctly handle the case the bidder worklet pipe is closed before
     // OnBiddingSignalsReceived() is invoked.
@@ -415,6 +420,19 @@
   std::unique_ptr<InterestGroupAuctionReporter> CreateReporter(
       std::unique_ptr<blink::AuctionConfig> auction_config);
 
+  // Called by AuctionRunner (for component auctions, indirectly via
+  // NotifyComponentConfigPromisesResolved) when all promises relevant to this
+  // particular auction have been resolved (not called when there were no
+  // promises to wait for to start with).
+  void NotifyConfigPromisesResolved();
+
+  // Called by AuctionRunner when all promises relevant to component auction
+  // with position `pos` in the original configuration have been resolved.
+  //
+  // Assumes that `pos` has already been range-checked, and that this is
+  // a parent auction.
+  void NotifyComponentConfigPromisesResolved(uint32_t pos);
+
   // Close all Mojo pipes and release all weak pointers. Called when an
   // auction fails and on auction complete.
   void ClosePipes();
@@ -502,7 +520,9 @@
       const SubresourceUrlBuilder& subresource_url_builder);
 
  private:
-  using AuctionList = std::list<std::unique_ptr<InterestGroupAuction>>;
+  // Note: this needs to be a type with iterator stability, since we both pass
+  // iterators around and remove things from here.
+  using AuctionMap = std::map<uint32_t, std::unique_ptr<InterestGroupAuction>>;
 
   // BuyerHelpers create and own the BidStates for a particular buyer, to
   // better handle per-buyer cross-interest-group behavior (e.g., enforcing
@@ -550,7 +570,7 @@
 
   // Invoked when the interest groups for an entire component auction have
   // loaded. If `success` is false, removes the component auction.
-  void OnComponentInterestGroupsRead(AuctionList::iterator component_auction,
+  void OnComponentInterestGroupsRead(AuctionMap::iterator component_auction,
                                      bool success);
 
   // Invoked when the interest groups for a buyer or for an entire component
@@ -579,10 +599,20 @@
   // Requests a seller worklet from the AuctionWorkletManager.
   void RequestSellerWorklet();
 
+  // True if all async prerequisites for calling ScoreBid on the SellerWorklet
+  // are done.
+  bool ReadyToScoreBids() const {
+    return seller_worklet_received_ && config_promises_resolved_;
+  }
+
   // Called when RequestSellerWorklet() returns. Starts scoring bids, if there
-  // are any.
+  // are any and config has been resolved.
   void OnSellerWorkletReceived();
 
+  // Score bids if both the seller worklet and config with all promises resolved
+  // are ready.
+  void ScoreQueuedBidsIfReady();
+
   // Invoked by the AuctionWorkletManager on fatal errors, at any point after
   // a SellerWorklet has been provided. Results in auction immediately
   // failing.
@@ -739,15 +769,25 @@
 
   // Configuration of this auction.
   raw_ptr<const blink::AuctionConfig> config_;
+
+  // True once all promises in this and component auction's configuration have
+  // been resolved. (Note that if `this` is a component auction, it only looks
+  // at itself; while main auctions do look at their components recursively).
+  bool config_promises_resolved_ = false;
+
   // If this is a component auction, the parent Auction. Null, otherwise.
   const raw_ptr<const InterestGroupAuction> parent_;
 
   // Component auctions that are part of this auction. This auction manages
   // their state transition, and their bids may participate in this auction as
   // well. Component auctions that fail in the load phase are removed from
-  // this list, to avoid trying to load their worklets during the scoring
+  // this map, to avoid trying to load their worklets during the scoring
   // phase.
-  AuctionList component_auctions_;
+  //
+  // The key of the map is the original index of the auction's AuctionConfig
+  // in `config_->non_shared_params.component_auctions`; there may be
+  // discontinuities if some entries got removed in the load phase.
+  AuctionMap component_auctions_;
 
   // Final result of the auction, once completed. Null before completion.
   absl::optional<AuctionResult> final_auction_result_;
diff --git a/content/browser/interest_group/interest_group_browsertest.cc b/content/browser/interest_group/interest_group_browsertest.cc
index 46ce25c..0aa40f05 100644
--- a/content/browser/interest_group/interest_group_browsertest.cc
+++ b/content/browser/interest_group/interest_group_browsertest.cc
@@ -3084,31 +3084,80 @@
   WaitForAccessObserved({});
 }
 
+// Exercise rejection path in the renderer for promise-delivered auction
+// signals.
 IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest,
                        RunAdAuctionRejectPromiseAuctionSignals) {
-  ASSERT_TRUE(NavigateToURL(shell(), https_server_->GetURL("a.test", "/echo")));
+  GURL test_url = https_server_->GetURL("a.test", "/echo");
+  url::Origin test_origin = url::Origin::Create(test_url);
+  ASSERT_TRUE(NavigateToURL(shell(), test_url));
+  GURL ad_url = https_server_->GetURL("c.test", "/echo?render_cars");
+  GURL decision_url =
+      https_server_->GetURL("a.test", "/interest_group/decision_logic.js");
+  // Note: at present at least one bid must be made for promise checking to
+  // be guaranteed to happen; if the auction is (effectively) empty whether
+  // it happens or not is timing-dependent.
+  EXPECT_EQ(
+      kSuccess,
+      JoinInterestGroupAndVerify(
+          /*owner=*/test_origin,
+          /*name=*/"cars",
+          /*priority=*/0.0,
+          /*execution_mode=*/
+          blink::InterestGroup::ExecutionMode::kCompatibilityMode,
+          /*bidding_url=*/
+          https_server_->GetURL("a.test", "/interest_group/bidding_logic.js"),
+          /*ads=*/{{{ad_url, /*metadata=*/absl::nullopt}}}));
+
+  const char kAuctionConfigTemplate[] = R"({
+      seller: $1,
+      decisionLogicUrl: $2,
+      auctionSignals: new Promise((resolve, reject) => { setTimeout(
+          () => { reject('boo'); }, 10) }),
+      interestGroupBuyers: [$1]
+  })";
 
   EXPECT_EQ("Promise argument rejected or resolved to invalid value.",
-            RunAuctionAndWait(R"({
-      seller: 'https://test.com',
-      decisionLogicUrl: 'https://test.com',
-      auctionSignals: new Promise((resolve, reject) => { setTimeout(
-          () => { reject('boo'); }, 10) })
-  })"));
+            RunAuctionAndWait(
+                JsReplace(kAuctionConfigTemplate, test_origin, decision_url)));
   WaitForAccessObserved({});
 }
 
+// Exercise error-handling path in the renderer for promise-delivered auction
+// signals.
 IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest,
                        RunAdAuctionResolvePromiseInvalidAuctionSignals) {
-  ASSERT_TRUE(NavigateToURL(shell(), https_server_->GetURL("a.test", "/echo")));
+  GURL test_url = https_server_->GetURL("a.test", "/echo");
+  url::Origin test_origin = url::Origin::Create(test_url);
+  ASSERT_TRUE(NavigateToURL(shell(), test_url));
+  GURL ad_url = https_server_->GetURL("c.test", "/echo?render_cars");
+  GURL decision_url =
+      https_server_->GetURL("a.test", "/interest_group/decision_logic.js");
+  // Note: at present at least one bid must be made for promise checking to
+  // be guaranteed to happen; if the auction is (effectively) empty whether
+  // it happens or not is timing-dependent.
+  EXPECT_EQ(
+      kSuccess,
+      JoinInterestGroupAndVerify(
+          /*owner=*/test_origin,
+          /*name=*/"cars",
+          /*priority=*/0.0,
+          /*execution_mode=*/
+          blink::InterestGroup::ExecutionMode::kCompatibilityMode,
+          /*bidding_url=*/
+          https_server_->GetURL("a.test", "/interest_group/bidding_logic.js"),
+          /*ads=*/{{{ad_url, /*metadata=*/absl::nullopt}}}));
 
-  EXPECT_EQ("Promise argument rejected or resolved to invalid value.",
-            RunAuctionAndWait(R"({
-      seller: 'https://test.com',
-      decisionLogicUrl: 'https://test.com',
+  const char kAuctionConfigTemplate[] = R"({
+      seller: $1,
+      decisionLogicUrl: $2,
       auctionSignals: new Promise((resolve, reject) => { setTimeout(
-          () => { resolve(function() {}); }, 10) })
-  })"));
+          () => { resolve(function() {}); }, 10) }),
+      interestGroupBuyers: [$1]
+  })";
+  EXPECT_EQ("Promise argument rejected or resolved to invalid value.",
+            RunAuctionAndWait(
+                JsReplace(kAuctionConfigTemplate, test_origin, decision_url)));
   WaitForAccessObserved({});
 }
 
@@ -3128,31 +3177,80 @@
   WaitForAccessObserved({});
 }
 
+// Exercise rejection path in the renderer for promise-delivered seller signals.
 IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest,
                        RunAdAuctionRejectPromiseSellerSignals) {
-  ASSERT_TRUE(NavigateToURL(shell(), https_server_->GetURL("a.test", "/echo")));
+  GURL test_url = https_server_->GetURL("a.test", "/echo");
+  url::Origin test_origin = url::Origin::Create(test_url);
+  ASSERT_TRUE(NavigateToURL(shell(), test_url));
+  GURL ad_url = https_server_->GetURL("c.test", "/echo?render_cars");
+  GURL decision_url =
+      https_server_->GetURL("a.test", "/interest_group/decision_logic.js");
+  // Note: at present at least one bid must be made for promise checking to
+  // be guaranteed to happen; if the auction is (effectively) empty whether
+  // it happens or not is timing-dependent.
+  EXPECT_EQ(
+      kSuccess,
+      JoinInterestGroupAndVerify(
+          /*owner=*/test_origin,
+          /*name=*/"cars",
+          /*priority=*/0.0,
+          /*execution_mode=*/
+          blink::InterestGroup::ExecutionMode::kCompatibilityMode,
+          /*bidding_url=*/
+          https_server_->GetURL("a.test", "/interest_group/bidding_logic.js"),
+          /*ads=*/{{{ad_url, /*metadata=*/absl::nullopt}}}));
+
+  const char kAuctionConfigTemplate[] = R"({
+      seller: $1,
+      decisionLogicUrl: $2,
+      sellerSignals: new Promise((resolve, reject) => { setTimeout(
+          () => { reject('boo'); }, 10) }),
+      interestGroupBuyers: [$1]
+  })";
 
   EXPECT_EQ("Promise argument rejected or resolved to invalid value.",
-            RunAuctionAndWait(R"({
-      seller: 'https://test.com',
-      decisionLogicUrl: 'https://test.com',
-      sellerSignals: new Promise((resolve, reject) => { setTimeout(
-          () => { reject('boo'); }, 10) })
-  })"));
+            RunAuctionAndWait(
+                JsReplace(kAuctionConfigTemplate, test_origin, decision_url)));
   WaitForAccessObserved({});
 }
 
+// Exercise error-handling path in the renderer for promise-delivered seller
+// signals.
 IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest,
                        RunAdAuctionResolvePromiseInvalidSellerSignals) {
-  ASSERT_TRUE(NavigateToURL(shell(), https_server_->GetURL("a.test", "/echo")));
+  GURL test_url = https_server_->GetURL("a.test", "/echo");
+  url::Origin test_origin = url::Origin::Create(test_url);
+  ASSERT_TRUE(NavigateToURL(shell(), test_url));
+  GURL ad_url = https_server_->GetURL("c.test", "/echo?render_cars");
+  GURL decision_url =
+      https_server_->GetURL("a.test", "/interest_group/decision_logic.js");
+  // Note: at present at least one bid must be made for promise checking to
+  // be guaranteed to happen; if the auction is (effectively) empty whether
+  // it happens or not is timing-dependent.
+  EXPECT_EQ(
+      kSuccess,
+      JoinInterestGroupAndVerify(
+          /*owner=*/test_origin,
+          /*name=*/"cars",
+          /*priority=*/0.0,
+          /*execution_mode=*/
+          blink::InterestGroup::ExecutionMode::kCompatibilityMode,
+          /*bidding_url=*/
+          https_server_->GetURL("a.test", "/interest_group/bidding_logic.js"),
+          /*ads=*/{{{ad_url, /*metadata=*/absl::nullopt}}}));
+
+  const char kAuctionConfigTemplate[] = R"({
+      seller: $1,
+      decisionLogicUrl: $2,
+      sellerSignals: new Promise((resolve, reject) => { setTimeout(
+          () => { resolve(function() {}); }, 10) }),
+      interestGroupBuyers: [$1]
+  })";
 
   EXPECT_EQ("Promise argument rejected or resolved to invalid value.",
-            RunAuctionAndWait(R"({
-      seller: 'https://test.com',
-      decisionLogicUrl: 'https://test.com',
-      sellerSignals: new Promise((resolve, reject) => { setTimeout(
-          () => { resolve(function() {}); }, 10) })
-  })"));
+            RunAuctionAndWait(
+                JsReplace(kAuctionConfigTemplate, test_origin, decision_url)));
   WaitForAccessObserved({});
 }
 
diff --git a/content/browser/interest_group/interest_group_storage.cc b/content/browser/interest_group/interest_group_storage.cc
index d472d9348..3d7398e6 100644
--- a/content/browser/interest_group/interest_group_storage.cc
+++ b/content/browser/interest_group/interest_group_storage.cc
@@ -27,7 +27,6 @@
 #include "base/strings/escape.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/browser/interest_group/interest_group_k_anonymity_manager.h"
 #include "content/browser/interest_group/interest_group_update.h"
diff --git a/content/browser/loader/navigation_early_hints_browsertest.cc b/content/browser/loader/navigation_early_hints_browsertest.cc
index 2f404a7d..cde19f2 100644
--- a/content/browser/loader/navigation_early_hints_browsertest.cc
+++ b/content/browser/loader/navigation_early_hints_browsertest.cc
@@ -7,6 +7,8 @@
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/content/browser/loader/object_navigation_fallback_body_loader.cc b/content/browser/loader/object_navigation_fallback_body_loader.cc
index b550421d..ac0ecd07 100644
--- a/content/browser/loader/object_navigation_fallback_body_loader.cc
+++ b/content/browser/loader/object_navigation_fallback_body_loader.cc
@@ -33,88 +33,21 @@
 
 namespace {
 
-// This logic is duplicated from Performance::PassesTimingAllowCheck. Ensure
-// that any changes are synced between both copies.
-bool PassesTimingAllowCheck(
-    const network::mojom::URLResponseHead& response_head,
-    const GURL& url,
-    const GURL& next_url,
-    const url::Origin& parent_origin,
-    bool* response_tainting_basic,
-    bool* tainted_origin_flag) {
-  DCHECK(response_tainting_basic);
-  DCHECK(tainted_origin_flag);
-  const url::Origin response_origin = url::Origin::Create(url);
-  const bool is_same_origin = response_origin.IsSameOriginWith(parent_origin);
-  // Still same-origin and resource tainting is "basic": just return true.
-  if (*response_tainting_basic && is_same_origin) {
-    return true;
-  }
-
-  // Otherwise, a cross-origin response is currently (or has previously) been
-  // handled, so resource tainting is no longer "basic".
-  *response_tainting_basic = false;
-
-  const network::mojom::TimingAllowOriginPtr& tao =
-      response_head.parsed_headers->timing_allow_origin;
-  if (!tao) {
-    return false;
-  }
-
-  if (tao->which() == network::mojom::TimingAllowOrigin::Tag::kAll)
-    return true;
-
-  // TODO(https://crbug.com/1128402): For now, this bookkeeping only exists to
-  // stay in sync with the Blink code.
-  bool is_next_resource_same_origin = true;
-  if (url != next_url) {
-    is_next_resource_same_origin =
-        response_origin.IsSameOriginWith(url::Origin::Create(next_url));
-  }
-
-  if (!is_same_origin && !is_next_resource_same_origin) {
-    *tainted_origin_flag = true;
-  }
-
-  return base::Contains(tao->get_serialized_origins(),
-                        parent_origin.Serialize());
-}
-
 // This logic is duplicated from Performance::AllowsTimingRedirect(). Ensure
 // that any changes are synced between both copies.
-//
-// TODO(https://crbug.com/1201767): There is a *third* implementation of the TAO
-// check in CorsURLLoader, but it exactly implements the TAO check as defined in
-// the Fetch standard. Unfortunately, the definition in the standard always
-// allows timing details for navigations: the response tainting is always
-// considered "basic" for navigations, which means that timing details will
-// always be allowed, even for cross-origin frames. Oops.
-bool AllowTimingDetailsForParent(
+bool IsCrossOriginResponseOrHasCrossOriginRedirects(
     const url::Origin& parent_origin,
     const blink::mojom::CommonNavigationParams& common_params,
-    const blink::mojom::CommitNavigationParams& commit_params,
-    const network::mojom::URLResponseHead& response_head,
-    bool* response_tainting_basic) {
-  bool tainted_origin_flag = false;
-
+    const blink::mojom::CommitNavigationParams& commit_params) {
   DCHECK_EQ(commit_params.redirect_infos.size(),
             commit_params.redirect_response.size());
-  for (size_t i = 0; i < commit_params.redirect_infos.size(); ++i) {
-    const GURL& next_response_url =
-        i + 1 < commit_params.redirect_infos.size()
-            ? commit_params.redirect_infos[i + 1].new_url
-            : common_params.url;
-    if (!PassesTimingAllowCheck(
-            *commit_params.redirect_response[i],
-            commit_params.redirect_infos[i].new_url, next_response_url,
-            parent_origin, response_tainting_basic, &tainted_origin_flag)) {
-      return false;
+  for (const auto& info : commit_params.redirect_infos) {
+    if (!parent_origin.IsSameOriginWith(info.new_url)) {
+      return true;
     }
   }
 
-  return PassesTimingAllowCheck(response_head, common_params.url,
-                                common_params.url, parent_origin,
-                                response_tainting_basic, &tainted_origin_flag);
+  return !parent_origin.IsSameOriginWith(common_params.url);
 }
 
 // This logic is duplicated from Performance::GenerateResourceTiming(). Ensure
@@ -149,15 +82,12 @@
   }
   // `response_end` will be populated after loading the body.
   timing_info->context_type = blink::mojom::RequestContextType::OBJECT;
-
-  bool response_tainting_basic = true;
-  timing_info->allow_timing_details =
-      AllowTimingDetailsForParent(parent_origin, common_params, commit_params,
-                                  response_head, &response_tainting_basic);
+  timing_info->allow_timing_details = response_head.timing_allow_passed;
 
   // Only expose the response code when the response tainting is "basic" -
   // same-origin requests throughout the redirect chain
-  if (response_tainting_basic) {
+  if (!IsCrossOriginResponseOrHasCrossOriginRedirects(
+          parent_origin, common_params, commit_params)) {
     timing_info->response_status = commit_params.http_response_code;
   }
 
diff --git a/content/browser/locks/lock_manager_browsertest.cc b/content/browser/locks/lock_manager_browsertest.cc
index cadf9b9..97f452d51 100644
--- a/content/browser/locks/lock_manager_browsertest.cc
+++ b/content/browser/locks/lock_manager_browsertest.cc
@@ -5,6 +5,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "content/browser/feature_observer.h"
diff --git a/content/browser/media/android/browser_gpu_video_accelerator_factories.h b/content/browser/media/android/browser_gpu_video_accelerator_factories.h
index 224685c..aa3b621 100644
--- a/content/browser/media/android/browser_gpu_video_accelerator_factories.h
+++ b/content/browser/media/android/browser_gpu_video_accelerator_factories.h
@@ -6,6 +6,7 @@
 #define CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_GPU_VIDEO_ACCELERATOR_FACTORIES_H_
 
 #include "base/callback_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/video/gpu_video_accelerator_factories.h"
 
 namespace viz {
diff --git a/content/browser/media/capture/DEPS b/content/browser/media/capture/DEPS
index 596af51..4e77016 100644
--- a/content/browser/media/capture/DEPS
+++ b/content/browser/media/capture/DEPS
@@ -10,7 +10,8 @@
     "+ui/base/resource/resource_bundle.h",
   ],
   "desktop_capture_device_unittest.cc": [
-    # Some test cases are not yet supported on Wayland.
+    # Some test cases are not yet supported depending on platform.
     "+ui/ozone/buildflags.h",
+    "+ui/ozone/public/ozone_platform.h",
   ]
 }
diff --git a/content/browser/media/capture/desktop_capture_device.h b/content/browser/media/capture/desktop_capture_device.h
index 8b6ae30c..dbca8bd 100644
--- a/content/browser/media/capture/desktop_capture_device.h
+++ b/content/browser/media/capture/desktop_capture_device.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/media/capture/desktop_capture_device_mac.cc b/content/browser/media/capture/desktop_capture_device_mac.cc
index 67e0e14..f1a6617 100644
--- a/content/browser/media/capture/desktop_capture_device_mac.cc
+++ b/content/browser/media/capture/desktop_capture_device_mac.cc
@@ -6,6 +6,7 @@
 
 #include <CoreGraphics/CoreGraphics.h>
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/media/capture/io_surface_capture_device_base_mac.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h"
 #include "ui/gfx/native_widget_types.h"
diff --git a/content/browser/media/capture/desktop_capture_device_unittest.cc b/content/browser/media/capture/desktop_capture_device_unittest.cc
index d55e86af..0d60d5d 100644
--- a/content/browser/media/capture/desktop_capture_device_unittest.cc
+++ b/content/browser/media/capture/desktop_capture_device_unittest.cc
@@ -33,6 +33,7 @@
 
 #if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/buildflags.h"
+#include "ui/ozone/public/ozone_platform.h"
 #endif  // BUILDFLAG(IS_OZONE)
 
 using ::testing::_;
@@ -272,20 +273,28 @@
 };
 
 TEST_F(DesktopCaptureDeviceTest, Capture) {
+#if BUILDFLAG(IS_FUCHSIA)
+  if (ui::OzonePlatform::GetInstance()->GetPlatformNameForTest() !=
+      "flatland") {
+    GTEST_SKIP() << "ScreenCapturer is supported only when using Flatland";
+  }
+#endif
+
   std::unique_ptr<webrtc::DesktopCapturer> capturer(
       webrtc::DesktopCapturer::CreateScreenCapturer(
           webrtc::DesktopCaptureOptions::CreateDefault()));
 
-#if BUILDFLAG(IS_OZONE)
+#if BUILDFLAG(IS_OZONE) && (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
 #if !BUILDFLAG(OZONE_PLATFORM_X11)
   // webrtc::DesktopCapturer is only supported on Ozone X11 by default.
   // TODO(webrtc/13429): Enable for Wayland.
   EXPECT_FALSE(capturer);
-  // Check return value to avoid compiler warnings.
-  if (!capturer)
-    return;
+  GTEST_SKIP();
 #endif  // !BUILDFLAG(OZONE_PLATFORM_X11)
-#endif  // BUILDFLAG(IS_OZONE)
+#endif  // BUILDFLAG(IS_OZONE) && (BUILDFLAG(IS_LINUX) ||
+        // BUILDFLAG(IS_CHROMEOS))
+
+  EXPECT_TRUE(capturer);
 
   CreateScreenCaptureDevice(std::move(capturer));
 
diff --git a/content/browser/media/capture/frame_sink_video_capture_device.cc b/content/browser/media/capture/frame_sink_video_capture_device.cc
index ed28400a0..9caa2c6 100644
--- a/content/browser/media/capture/frame_sink_video_capture_device.cc
+++ b/content/browser/media/capture/frame_sink_video_capture_device.cc
@@ -13,6 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/notreached.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/token.h"
diff --git a/content/browser/media/capture/mouse_cursor_overlay_controller.cc b/content/browser/media/capture/mouse_cursor_overlay_controller.cc
index 0322681..9ee4e44 100644
--- a/content/browser/media/capture/mouse_cursor_overlay_controller.cc
+++ b/content/browser/media/capture/mouse_cursor_overlay_controller.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 
 namespace content {
diff --git a/content/browser/media/capture/screen_capture_kit_device_mac.mm b/content/browser/media/capture/screen_capture_kit_device_mac.mm
index dc28dc53..618a17d8 100644
--- a/content/browser/media/capture/screen_capture_kit_device_mac.mm
+++ b/content/browser/media/capture/screen_capture_kit_device_mac.mm
@@ -9,6 +9,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/task/bind_post_task.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/timer/timer.h"
 #include "content/browser/media/capture/io_surface_capture_device_base_mac.h"
diff --git a/content/browser/media/capture/video_capture_device_proxy_lacros.cc b/content/browser/media/capture/video_capture_device_proxy_lacros.cc
index 62a95a5..9d9fbe1 100644
--- a/content/browser/media/capture/video_capture_device_proxy_lacros.cc
+++ b/content/browser/media/capture/video_capture_device_proxy_lacros.cc
@@ -12,7 +12,6 @@
 #include "base/check_op.h"
 #include "base/memory/weak_ptr.h"
 #include "base/notreached.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/token.h"
 #include "chromeos/crosapi/mojom/screen_manager.mojom.h"
 #include "chromeos/crosapi/mojom/video_capture.mojom.h"
diff --git a/content/browser/media/capture/web_contents_frame_tracker.cc b/content/browser/media/capture/web_contents_frame_tracker.cc
index c5a9d360..4ba60de 100644
--- a/content/browser/media/capture/web_contents_frame_tracker.cc
+++ b/content/browser/media/capture/web_contents_frame_tracker.cc
@@ -14,7 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/strcat.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "content/browser/media/capture/web_contents_video_capture_device.h"
diff --git a/content/browser/media/capture/web_contents_frame_tracker.h b/content/browser/media/capture/web_contents_frame_tracker.h
index b91423c..2d312ebd 100644
--- a/content/browser/media/capture/web_contents_frame_tracker.h
+++ b/content/browser/media/capture/web_contents_frame_tracker.h
@@ -11,7 +11,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/media/capture/web_contents_frame_tracker_unittest.cc b/content/browser/media/capture/web_contents_frame_tracker_unittest.cc
index 865e849..4362de9 100644
--- a/content/browser/media/capture/web_contents_frame_tracker_unittest.cc
+++ b/content/browser/media/capture/web_contents_frame_tracker_unittest.cc
@@ -6,6 +6,8 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "content/browser/media/capture/mouse_cursor_overlay_controller.h"
diff --git a/content/browser/media/key_system_support_impl_unittest.cc b/content/browser/media/key_system_support_impl_unittest.cc
index 04498ca83..0594155 100644
--- a/content/browser/media/key_system_support_impl_unittest.cc
+++ b/content/browser/media/key_system_support_impl_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/callback_helpers.h"
 #include "base/containers/contains.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/mock_callback.h"
 #include "content/public/test/browser_task_environment.h"
diff --git a/content/browser/media/media_license_manager_unittest.cc b/content/browser/media/media_license_manager_unittest.cc
index 22977f3..df83af4 100644
--- a/content/browser/media/media_license_manager_unittest.cc
+++ b/content/browser/media/media_license_manager_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece_forward.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
diff --git a/content/browser/media/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc
index b0c3d092..8ebab3e 100644
--- a/content/browser/media/media_web_contents_observer.cc
+++ b/content/browser/media/media_web_contents_observer.cc
@@ -12,7 +12,7 @@
 #include "base/debug/crash_logging.h"
 #include "base/debug/dump_without_crashing.h"
 #include "base/memory/raw_ptr.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "content/browser/media/audible_metrics.h"
 #include "content/browser/media/media_devices_util.h"
diff --git a/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc b/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc
index 49ede48c..65da0b7f 100644
--- a/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc
+++ b/content/browser/memory_pressure/user_level_memory_pressure_signal_generator.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "content/browser/memory_pressure/user_level_memory_pressure_signal_generator.h"
+#include "base/task/sequenced_task_runner.h"
 
 #if BUILDFLAG(IS_ANDROID)
 #include <ctype.h>
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index fad768e..9bd8431 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -19,6 +19,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
diff --git a/content/browser/network_service_instance_impl.cc b/content/browser/network_service_instance_impl.cc
index a9488dab..c692226 100644
--- a/content/browser/network_service_instance_impl.cc
+++ b/content/browser/network_service_instance_impl.cc
@@ -25,6 +25,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/sequence_local_storage_slot.h"
 #include "base/threading/thread.h"
diff --git a/content/browser/notifications/blink_notification_service_impl_unittest.cc b/content/browser/notifications/blink_notification_service_impl_unittest.cc
index b07eaab..a8e229e 100644
--- a/content/browser/notifications/blink_notification_service_impl_unittest.cc
+++ b/content/browser/notifications/blink_notification_service_impl_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/browser/notifications/blink_notification_service_impl.h"
 #include "content/browser/notifications/platform_notification_context_impl.h"
diff --git a/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc b/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc
index ee30a0ee..42cb31a 100644
--- a/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc
+++ b/content/browser/notifications/notification_event_dispatcher_impl_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/test/test_renderer_host.h"
diff --git a/content/browser/notifications/platform_notification_context_impl.cc b/content/browser/notifications/platform_notification_context_impl.cc
index 76e711c..6e44c3b 100644
--- a/content/browser/notifications/platform_notification_context_impl.cc
+++ b/content/browser/notifications/platform_notification_context_impl.cc
@@ -13,6 +13,7 @@
 #include "base/files/file_util.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "content/browser/notifications/blink_notification_service_impl.h"
 #include "content/browser/notifications/notification_database.h"
diff --git a/content/browser/notifications/platform_notification_context_trigger_unittest.cc b/content/browser/notifications/platform_notification_context_trigger_unittest.cc
index c51c2888..08c9577 100644
--- a/content/browser/notifications/platform_notification_context_trigger_unittest.cc
+++ b/content/browser/notifications/platform_notification_context_trigger_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/content/browser/preloading/prerender/prerender_browsertest.cc b/content/browser/preloading/prerender/prerender_browsertest.cc
index f5c6ae49..e2b4487 100644
--- a/content/browser/preloading/prerender/prerender_browsertest.cc
+++ b/content/browser/preloading/prerender/prerender_browsertest.cc
@@ -22,6 +22,7 @@
 #include "base/strings/escape.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_mock_time_task_runner.h"
diff --git a/content/browser/preloading/prerender/prerender_host_registry.cc b/content/browser/preloading/prerender/prerender_host_registry.cc
index 6d5ebab..7b8344f 100644
--- a/content/browser/preloading/prerender/prerender_host_registry.cc
+++ b/content/browser/preloading/prerender/prerender_host_registry.cc
@@ -15,6 +15,7 @@
 #include "base/observer_list.h"
 #include "base/system/sys_info.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_conversion_helper.h"
 #include "build/build_config.h"
diff --git a/content/browser/preloading/prerender/prerender_host_registry.h b/content/browser/preloading/prerender/prerender_host_registry.h
index e266435..e23ccd9 100644
--- a/content/browser/preloading/prerender/prerender_host_registry.h
+++ b/content/browser/preloading/prerender/prerender_host_registry.h
@@ -13,6 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/observer_list_types.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "base/types/pass_key.h"
 #include "content/browser/preloading/prerender/prerender_attributes.h"
diff --git a/content/browser/quota/quota_change_dispatcher.h b/content/browser/quota/quota_change_dispatcher.h
index bef981c..1a7af72 100644
--- a/content/browser/quota/quota_change_dispatcher.h
+++ b/content/browser/quota/quota_change_dispatcher.h
@@ -11,6 +11,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
diff --git a/content/browser/quota/quota_change_dispatcher_unittest.cc b/content/browser/quota/quota_change_dispatcher_unittest.cc
index 4fbde37..29e873f 100644
--- a/content/browser/quota/quota_change_dispatcher_unittest.cc
+++ b/content/browser/quota/quota_change_dispatcher_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/run_loop.h"
 #include "base/task/task_traits.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/common/content_switches.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/content/browser/renderer_host/back_forward_cache_impl.h b/content/browser/renderer_host/back_forward_cache_impl.h
index d234048f..11c6389 100644
--- a/content/browser/renderer_host/back_forward_cache_impl.h
+++ b/content/browser/renderer_host/back_forward_cache_impl.h
@@ -709,4 +709,4 @@
 
 }  // namespace content
 
-#endif  // CONTENT_BROWSER_RENDERER_HOST_BACK_FORWARD_CACHE_IMPL_H_
\ No newline at end of file
+#endif  // CONTENT_BROWSER_RENDERER_HOST_BACK_FORWARD_CACHE_IMPL_H_
diff --git a/content/browser/renderer_host/back_forward_cache_metrics_browsertest.cc b/content/browser/renderer_host/back_forward_cache_metrics_browsertest.cc
index f744e46..977f3bb 100644
--- a/content/browser/renderer_host/back_forward_cache_metrics_browsertest.cc
+++ b/content/browser/renderer_host/back_forward_cache_metrics_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/content/browser/renderer_host/clipboard_host_impl.cc b/content/browser/renderer_host/clipboard_host_impl.cc
index 0255f30..4dd80ee 100644
--- a/content/browser/renderer_host/clipboard_host_impl.cc
+++ b/content/browser/renderer_host/clipboard_host_impl.cc
@@ -16,7 +16,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/file_system/browser_file_system_helper.h"
 #include "content/browser/file_system_access/file_system_access_manager_impl.h"
diff --git a/content/browser/renderer_host/compositor_impl_android_browsertest.cc b/content/browser/renderer_host/compositor_impl_android_browsertest.cc
index f0dd5de..edd8f973 100644
--- a/content/browser/renderer_host/compositor_impl_android_browsertest.cc
+++ b/content/browser/renderer_host/compositor_impl_android_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/browser_main_loop.h"
 #include "content/browser/gpu/gpu_process_host.h"
 #include "content/browser/renderer_host/compositor_impl_android.h"
diff --git a/content/browser/renderer_host/direct_manipulation_helper_win.cc b/content/browser/renderer_host/direct_manipulation_helper_win.cc
index 8360110d..8a50a63 100644
--- a/content/browser/renderer_host/direct_manipulation_helper_win.cc
+++ b/content/browser/renderer_host/direct_manipulation_helper_win.cc
@@ -9,7 +9,6 @@
 
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/win/win_util.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/base/win/window_event_target.h"
diff --git a/content/browser/renderer_host/dwrite_font_proxy_impl_win_unittest.cc b/content/browser/renderer_host/dwrite_font_proxy_impl_win_unittest.cc
index 74b38fa9..097dd3c 100644
--- a/content/browser/renderer_host/dwrite_font_proxy_impl_win_unittest.cc
+++ b/content/browser/renderer_host/dwrite_font_proxy_impl_win_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/common/content_features.h"
 #include "content/public/test/browser_task_environment.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/content/browser/renderer_host/http_error_navigation_throttle.h b/content/browser/renderer_host/http_error_navigation_throttle.h
index 6a98c22..85354dd 100644
--- a/content/browser/renderer_host/http_error_navigation_throttle.h
+++ b/content/browser/renderer_host/http_error_navigation_throttle.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_RENDERER_HOST_HTTP_ERROR_NAVIGATION_THROTTLE_H_
 #define CONTENT_BROWSER_RENDERER_HOST_HTTP_ERROR_NAVIGATION_THROTTLE_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/navigation_throttle.h"
 #include "mojo/public/cpp/system/simple_watcher.h"
diff --git a/content/browser/renderer_host/input/fling_browsertest.cc b/content/browser/renderer_host/input/fling_browsertest.cc
index 92e7922..815b806 100644
--- a/content/browser/renderer_host/input/fling_browsertest.cc
+++ b/content/browser/renderer_host/input/fling_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
index 27e9abac..276ff66c 100644
--- a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "content/browser/renderer_host/input/input_router_config_helper.h"
diff --git a/content/browser/renderer_host/input/input_router.h b/content/browser/renderer_host/input/input_router.h
index c8e39da2..6632dd7 100644
--- a/content/browser/renderer_host/input/input_router.h
+++ b/content/browser/renderer_host/input/input_router.h
@@ -6,6 +6,7 @@
 #define CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_ROUTER_H_
 
 #include "base/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "cc/input/touch_action.h"
 #include "content/browser/renderer_host/event_with_latency_info.h"
 #include "content/browser/renderer_host/input/gesture_event_queue.h"
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
index d6a77d3..ed2dd98 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/renderer_host/input/gesture_event_queue.h"
 #include "content/browser/renderer_host/input/input_disposition_handler.h"
 #include "content/browser/renderer_host/input/input_router_client.h"
diff --git a/content/browser/renderer_host/input/input_router_impl.h b/content/browser/renderer_host/input/input_router_impl.h
index c2da664..a4d2315 100644
--- a/content/browser/renderer_host/input/input_router_impl.h
+++ b/content/browser/renderer_host/input/input_router_impl.h
@@ -13,6 +13,7 @@
 #include "base/containers/flat_map.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "cc/input/touch_action.h"
 #include "content/browser/renderer_host/input/fling_scheduler.h"
 #include "content/browser/renderer_host/input/gesture_event_queue.h"
diff --git a/content/browser/renderer_host/input/mock_input_router.cc b/content/browser/renderer_host/input/mock_input_router.cc
index 367e516..d136f0e 100644
--- a/content/browser/renderer_host/input/mock_input_router.cc
+++ b/content/browser/renderer_host/input/mock_input_router.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/renderer_host/input/mock_input_router.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/renderer_host/input/input_router_client.h"
 
 namespace content {
diff --git a/content/browser/renderer_host/input/mock_input_router.h b/content/browser/renderer_host/input/mock_input_router.h
index cad6305..7bfd0b4 100644
--- a/content/browser/renderer_host/input/mock_input_router.h
+++ b/content/browser/renderer_host/input/mock_input_router.h
@@ -8,6 +8,7 @@
 #include "base/memory/raw_ptr.h"
 #include "content/browser/renderer_host/input/input_router.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "cc/input/touch_action.h"
 #include "content/browser/renderer_host/event_with_latency_info.h"
 #include "content/common/input/event_with_latency_info.h"
diff --git a/content/browser/renderer_host/input/scroll_latency_browsertest.cc b/content/browser/renderer_host/input/scroll_latency_browsertest.cc
index 4b55bace..bca8d53 100644
--- a/content/browser/renderer_host/input/scroll_latency_browsertest.cc
+++ b/content/browser/renderer_host/input/scroll_latency_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller.cc b/content/browser/renderer_host/input/synthetic_gesture_controller.cc
index 6cea9d5..25b74e32 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "content/browser/renderer_host/input/synthetic_gesture_target.h"
 #include "content/common/input/synthetic_smooth_scroll_gesture_params.h"
diff --git a/content/browser/renderer_host/input/synthetic_input_browsertest.cc b/content/browser/renderer_host/input/synthetic_input_browsertest.cc
index 745c157..b9c31a0 100644
--- a/content/browser/renderer_host/input/synthetic_input_browsertest.cc
+++ b/content/browser/renderer_host/input/synthetic_input_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/input/touch_action_browsertest.cc b/content/browser/renderer_host/input/touch_action_browsertest.cc
index 1fe4883c..e17c0e7 100644
--- a/content/browser/renderer_host/input/touch_action_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_action_browsertest.cc
@@ -13,6 +13,7 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/input/touch_input_browsertest.cc b/content/browser/renderer_host/input/touch_input_browsertest.cc
index 4a0f84f5..66c8e1e 100644
--- a/content/browser/renderer_host/input/touch_input_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_input_browsertest.cc
@@ -7,7 +7,6 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/gpu/compositor_util.h"
 #include "content/browser/renderer_host/render_widget_host_delegate.h"
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
index 9f928095..1dd76c1 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
@@ -11,6 +11,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc b/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc
index e303552..8be8ebc 100644
--- a/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc
+++ b/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
diff --git a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
index 9ebb782..e93b089 100644
--- a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
+++ b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/public/test/browser_task_environment.h"
 #include "media/audio/audio_system_impl.h"
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
index 01e4296..85b8841 100644
--- a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
+++ b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/mock_callback.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/renderer_host/media/fake_video_capture_device_launcher.cc b/content/browser/renderer_host/media/fake_video_capture_device_launcher.cc
index ffe3466..aae450c 100644
--- a/content/browser/renderer_host/media/fake_video_capture_device_launcher.cc
+++ b/content/browser/renderer_host/media/fake_video_capture_device_launcher.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/callback_forward.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/token.h"
 #include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/media/fake_video_capture_device_launcher.h"
diff --git a/content/browser/renderer_host/media/fuchsia_media_codec_provider_impl.cc b/content/browser/renderer_host/media/fuchsia_media_codec_provider_impl.cc
index 38ffb8a..029b852 100644
--- a/content/browser/renderer_host/media/fuchsia_media_codec_provider_impl.cc
+++ b/content/browser/renderer_host/media/fuchsia_media_codec_provider_impl.cc
@@ -127,12 +127,9 @@
           fuchsia::mediacodec::SecureMemoryMode::ON);
       break;
 
-    case media::mojom::VideoDecoderSecureMemoryMode::CLEAR_INPUT:
-      if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-              switches::kForceProtectedVideoOutputBuffers)) {
-        decoder_params.set_secure_output_mode(
-            fuchsia::mediacodec::SecureMemoryMode::ON);
-      }
+    case media::mojom::VideoDecoderSecureMemoryMode::SECURE_OUTPUT:
+      decoder_params.set_secure_output_mode(
+          fuchsia::mediacodec::SecureMemoryMode::ON);
       break;
   }
 
diff --git a/content/browser/renderer_host/media/in_process_launched_video_capture_device.cc b/content/browser/renderer_host/media/in_process_launched_video_capture_device.cc
index 292dc9efb7..3bdd73e 100644
--- a/content/browser/renderer_host/media/in_process_launched_video_capture_device.cc
+++ b/content/browser/renderer_host/media/in_process_launched_video_capture_device.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/token.h"
 #include "build/build_config.h"
 #include "content/common/buildflags.h"
diff --git a/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc b/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
index d40a6f3..156c8ed 100644
--- a/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
+++ b/content/browser/renderer_host/media/in_process_video_capture_device_launcher.cc
@@ -12,6 +12,7 @@
 #include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/browser/renderer_host/media/in_process_video_capture_provider.cc b/content/browser/renderer_host/media/in_process_video_capture_provider.cc
index 2a02c29..c4ddd05 100644
--- a/content/browser/renderer_host/media/in_process_video_capture_provider.cc
+++ b/content/browser/renderer_host/media/in_process_video_capture_provider.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/renderer_host/media/in_process_video_capture_device_launcher.h"
 
 namespace content {
diff --git a/content/browser/renderer_host/media/media_devices_manager.cc b/content/browser/renderer_host/media/media_devices_manager.cc
index bb5fd44..dd4dfa9a 100644
--- a/content/browser/renderer_host/media/media_devices_manager.cc
+++ b/content/browser/renderer_host/media/media_devices_manager.cc
@@ -21,6 +21,7 @@
 #include "base/sequence_checker.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index f644df8..3d91a252 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -25,6 +25,8 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_local.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h
index 2794f1e..215de98cf 100644
--- a/content/browser/renderer_host/media/media_stream_manager.h
+++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -38,6 +38,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/current_thread.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
diff --git a/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc b/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc
index 290246d03..ead49aa 100644
--- a/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc
+++ b/content/browser/renderer_host/media/service_video_capture_device_launcher_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/mock_callback.h"
 #include "base/threading/thread.h"
 #include "content/browser/renderer_host/media/ref_counted_video_source_provider.h"
diff --git a/content/browser/renderer_host/media/video_capture_browsertest.cc b/content/browser/renderer_host/media/video_capture_browsertest.cc
index b9e5790..891a15ec 100644
--- a/content/browser/renderer_host/media/video_capture_browsertest.cc
+++ b/content/browser/renderer_host/media/video_capture_browsertest.cc
@@ -7,6 +7,7 @@
 #include "base/command_line.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
index 5ab6525..e818899 100644
--- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc
@@ -12,6 +12,7 @@
 #include <utility>
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
diff --git a/content/browser/renderer_host/navigator.cc b/content/browser/renderer_host/navigator.cc
index 0251c00c..a226538e 100644
--- a/content/browser/renderer_host/navigator.cc
+++ b/content/browser/renderer_host/navigator.cc
@@ -1033,13 +1033,14 @@
     return;
   }
 
-  NavigationEntryImpl* navigation_entry =
-      GetNavigationEntryForRendererInitiatedNavigation(*common_params,
-                                                       frame_tree_node);
+  // Compute this ahead of creating the NavigationEntry, since it is needed both
+  // there and in CreateRendererInitiated.
   const bool override_user_agent =
       delegate_->ShouldOverrideUserAgentForRendererInitiatedNavigation();
-  if (navigation_entry)
-    navigation_entry->SetIsOverridingUserAgent(override_user_agent);
+
+  NavigationEntryImpl* navigation_entry =
+      GetNavigationEntryForRendererInitiatedNavigation(
+          *common_params, frame_tree_node, override_user_agent);
 
   frame_tree_node->TakeNavigationRequest(
       NavigationRequest::CreateRendererInitiated(
@@ -1321,7 +1322,8 @@
 NavigationEntryImpl*
 Navigator::GetNavigationEntryForRendererInitiatedNavigation(
     const blink::mojom::CommonNavigationParams& common_params,
-    FrameTreeNode* frame_tree_node) {
+    FrameTreeNode* frame_tree_node,
+    bool override_user_agent) {
   // With MPArch, there may be multiple main frames, but each one has its own
   // NavigationController. Thus, it's correct to check for NavigationEntries for
   // each main frame, even if one is embedded (e.g., a fenced frame).
@@ -1373,6 +1375,7 @@
 
   entry->set_reload_type(NavigationRequest::NavigationTypeToReloadType(
       common_params.navigation_type));
+  entry->SetIsOverridingUserAgent(override_user_agent);
 
   controller_.SetPendingEntry(std::move(entry));
   delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL);
diff --git a/content/browser/renderer_host/navigator.h b/content/browser/renderer_host/navigator.h
index ee3217b..e3bd62d 100644
--- a/content/browser/renderer_host/navigator.h
+++ b/content/browser/renderer_host/navigator.h
@@ -232,7 +232,8 @@
   // NavigationController.
   NavigationEntryImpl* GetNavigationEntryForRendererInitiatedNavigation(
       const blink::mojom::CommonNavigationParams& common_params,
-      FrameTreeNode* frame_tree_node);
+      FrameTreeNode* frame_tree_node,
+      bool override_user_agent);
 
   // Called to record the time it took to execute beforeunload handlers for
   // renderer-inititated navigations. It records the time it took to execute
diff --git a/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc b/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc
index e9d09c4..408b61aa 100644
--- a/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc
@@ -7,6 +7,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "content/common/font_list.h"
 #include "content/public/browser/browser_ppapi_host.h"
diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
index 725f969..5580f14c 100644
--- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
+++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
@@ -15,6 +15,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/renderer_host/pepper/quota_reservation.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
index b3bdb63..9f46196e 100644
--- a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/check_op.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
 #include "content/browser/renderer_host/pepper/pepper_socket_utils.h"
 #include "content/public/browser/browser_context.h"
diff --git a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h
index 1165735..67c15a36 100644
--- a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h
+++ b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.h
@@ -10,6 +10,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/common/process_type.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "net/dns/public/host_resolver_results.h"
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
index 6c72f849..ded5dc0 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h
index 8fee38a..e6560ec 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h
+++ b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
index f3b2095..af4f2cc2 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
@@ -12,6 +12,7 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/pepper/content_browser_pepper_host_factory.h"
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h
index 64b1f08..eb90c4a 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h
+++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h
@@ -15,6 +15,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
index b5a31e5..aea46c3 100644
--- a/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
@@ -9,6 +9,7 @@
 #include <algorithm>
 
 #include "base/numerics/safe_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/renderer_host/pepper/pepper_truetype_font_list.h"
 #include "content/common/font_list.h"
 #include "content/public/browser/browser_ppapi_host.h"
diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
index 3395692..dc1bce3 100644
--- a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
@@ -12,6 +12,7 @@
 #include "base/compiler_specific.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h
index a31619e..ff1a955 100644
--- a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h
+++ b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h
@@ -16,6 +16,7 @@
 #include "base/containers/queue.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc b/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc
index 9f4d6d0a..1d40da6 100644
--- a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc
+++ b/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc
@@ -5,6 +5,7 @@
 #include "content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.h"
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
diff --git a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.h b/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.h
index 333b0e3..6b0ba89 100644
--- a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.h
+++ b/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.h
@@ -16,6 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
 #include "content/public/browser/vpn_service_proxy.h"
 #include "ipc/ipc_message.h"
diff --git a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
index cc329651f..b12f645 100644
--- a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
+++ b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
@@ -24,6 +24,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gtest_util.h"
 #include "base/test/metrics/histogram_tester.h"
diff --git a/content/browser/renderer_host/render_frame_metadata_provider_impl.cc b/content/browser/renderer_host/render_frame_metadata_provider_impl.cc
index c898e5d4..528833d 100644
--- a/content/browser/renderer_host/render_frame_metadata_provider_impl.cc
+++ b/content/browser/renderer_host/render_frame_metadata_provider_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/observer_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "content/browser/renderer_host/frame_token_message_queue.h"
 
diff --git a/content/browser/renderer_host/render_frame_metadata_provider_impl.h b/content/browser/renderer_host/render_frame_metadata_provider_impl.h
index f2d5689c..30b8a9e 100644
--- a/content/browser/renderer_host/render_frame_metadata_provider_impl.h
+++ b/content/browser/renderer_host/render_frame_metadata_provider_impl.h
@@ -8,6 +8,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "cc/mojom/render_frame_metadata.mojom.h"
diff --git a/content/browser/renderer_host/render_process_host_browsertest.cc b/content/browser/renderer_host/render_process_host_browsertest.cc
index 4722af1..873ed8d 100644
--- a/content/browser/renderer_host/render_process_host_browsertest.cc
+++ b/content/browser/renderer_host/render_process_host_browsertest.cc
@@ -13,6 +13,7 @@
 #include "base/scoped_observation.h"
 #include "base/strings/string_split.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/hang_watcher.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index cdd4f54..9c5b522 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -21,6 +21,7 @@
 #include "base/memory/safe_ref.h"
 #include "base/observer_list.h"
 #include "base/scoped_observation_traits.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/render_widget_host_browsertest.cc b/content/browser/renderer_host/render_widget_host_browsertest.cc
index cafc7df..b509d98 100644
--- a/content/browser/renderer_host/render_widget_host_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_browsertest.cc
@@ -9,6 +9,7 @@
 #include "base/containers/contains.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 9460831..b7fc302 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 122842c..a1b7396b 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -26,7 +26,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "cc/base/math_util.h"
 #include "cc/layers/layer.h"
 #include "cc/layers/surface_layer.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.cc b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
index bf9a715..17f07df0 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
@@ -12,7 +12,6 @@
 #include "base/debug/dump_without_crashing.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/viz/common/frame_sinks/copy_output_request.h"
 #include "components/viz/common/frame_sinks/copy_output_result.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
index febcfa43..4a2d2b0 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index e27191c..c3978acc 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -20,6 +20,7 @@
 #include "base/mac/scoped_cftyperef.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/remote_cocoa/browser/ns_view_ids.h"
 #include "components/remote_cocoa/common/application.mojom.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm
index d11d03d..7736a0ba 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm
@@ -4,6 +4,7 @@
 
 #include "base/memory/raw_ptr.h"
 
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #import "content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h"
 
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index be496b1..5caa369 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -16,6 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/content/browser/renderer_host/text_input_client_mac.mm b/content/browser/renderer_host/text_input_client_mac.mm
index 081e14ea..9f5852b 100644
--- a/content/browser/renderer_host/text_input_client_mac.mm
+++ b/content/browser/renderer_host/text_input_client_mac.mm
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/memory/singleton.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
 #include "content/browser/renderer_host/frame_tree.h"
diff --git a/content/browser/scheduler/browser_io_thread_delegate.cc b/content/browser/scheduler/browser_io_thread_delegate.cc
index c73d180..760589d 100644
--- a/content/browser/scheduler/browser_io_thread_delegate.cc
+++ b/content/browser/scheduler/browser_io_thread_delegate.cc
@@ -9,6 +9,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_executor.h"
 #include "base/task/task_observer.h"
 #include "content/browser/scheduler/browser_task_executor.h"
diff --git a/content/browser/scheduler/browser_task_executor.cc b/content/browser/scheduler/browser_task_executor.cc
index ff47089..4f3588f 100644
--- a/content/browser/scheduler/browser_task_executor.cc
+++ b/content/browser/scheduler/browser_task_executor.cc
@@ -10,6 +10,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/task/deferred_sequenced_task_runner.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits_extension.h"
 #include "base/time/time.h"
diff --git a/content/browser/scheduler/browser_task_executor.h b/content/browser/scheduler/browser_task_executor.h
index a2a77b7..6f4a5afa 100644
--- a/content/browser/scheduler/browser_task_executor.h
+++ b/content/browser/scheduler/browser_task_executor.h
@@ -9,6 +9,8 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_executor.h"
 #include "build/build_config.h"
 #include "content/browser/scheduler/browser_io_thread_delegate.h"
diff --git a/content/browser/scheduler/browser_task_queues.cc b/content/browser/scheduler/browser_task_queues.cc
index 273775b..d883344 100644
--- a/content/browser/scheduler/browser_task_queues.cc
+++ b/content/browser/scheduler/browser_task_queues.cc
@@ -15,7 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/content_features.h"
 
diff --git a/content/browser/scheduler/browser_task_queues.h b/content/browser/scheduler/browser_task_queues.h
index 1122853..4c29abe 100644
--- a/content/browser/scheduler/browser_task_queues.h
+++ b/content/browser/scheduler/browser_task_queues.h
@@ -11,6 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/browser_thread.h"
 
diff --git a/content/browser/scheduler/browser_task_queues_unittest.cc b/content/browser/scheduler/browser_task_queues_unittest.cc
index 34a4d26..0cfb79e 100644
--- a/content/browser/scheduler/browser_task_queues_unittest.cc
+++ b/content/browser/scheduler/browser_task_queues_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/task/sequence_manager/sequence_manager.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/mock_callback.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/scheduler/responsiveness/jank_monitor_impl.h b/content/browser/scheduler/responsiveness/jank_monitor_impl.h
index 10111da..758294c2 100644
--- a/content/browser/scheduler/responsiveness/jank_monitor_impl.h
+++ b/content/browser/scheduler/responsiveness/jank_monitor_impl.h
@@ -12,6 +12,7 @@
 #include "base/observer_list.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/content/browser/service_process_host_impl.cc b/content/browser/service_process_host_impl.cc
index e547f42..f0b0335b 100644
--- a/content/browser/service_process_host_impl.cc
+++ b/content/browser/service_process_host_impl.cc
@@ -13,7 +13,6 @@
 #include "base/process/process.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/chromecast_buildflags.h"
 #include "content/browser/utility_process_host.h"
 #include "content/common/child_process.mojom.h"
diff --git a/content/browser/service_worker/embedded_worker_test_helper.h b/content/browser/service_worker/embedded_worker_test_helper.h
index a25b298..c1578f0 100644
--- a/content/browser/service_worker/embedded_worker_test_helper.h
+++ b/content/browser/service_worker/embedded_worker_test_helper.h
@@ -12,6 +12,7 @@
 #include "base/containers/flat_set.h"
 #include "base/containers/unique_ptr_adapters.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/public/mojom/service_worker_storage_control.mojom.h"
 #include "content/browser/service_worker/fake_embedded_worker_instance_client.h"
 #include "content/browser/service_worker/fake_service_worker.h"
diff --git a/content/browser/service_worker/service_worker_client_utils.cc b/content/browser/service_worker/service_worker_client_utils.cc
index 04d2a2f..a9bf790 100644
--- a/content/browser/service_worker/service_worker_client_utils.cc
+++ b/content/browser/service_worker/service_worker_client_utils.cc
@@ -350,12 +350,11 @@
                       std::move(clients));
 }
 
-// TODO(crbug.com/1199077): Update `sane_origin` to StorageKey once
-// ServiceWorkerContainerHost implements StorageKey.
 void DidGetExecutionReadyClient(
     const base::WeakPtr<ServiceWorkerContextCore>& context,
     const std::string& client_uuid,
-    const GURL& sane_origin,
+    const GURL& script_url,
+    const blink::StorageKey& key,
     NavigationCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
@@ -375,7 +374,10 @@
     return;
   }
 
-  CHECK_EQ(container_host->url().DeprecatedGetOriginAsURL(), sane_origin);
+  // In a scenario where "--disable-web-security" is specified the |script_url|
+  // may be cross-origin
+  CHECK_EQ(container_host->GetCorrectStorageKeyForWebSecurityState(script_url),
+           key);
 
   blink::mojom::ServiceWorkerClientInfoPtr info = GetWindowClientInfo(
       container_host->GetRenderFrameHostId(), container_host->create_time(),
@@ -440,8 +442,8 @@
   RenderProcessHost* render_process_host =
       RenderProcessHost::FromID(worker_process_id);
   if (render_process_host->IsForGuestsOnly()) {
-    DidNavigate(context, script_url.DeprecatedGetOriginAsURL(), key,
-                std::move(callback), GlobalRenderFrameHostId());
+    DidNavigate(context, script_url, key, std::move(callback),
+                GlobalRenderFrameHostId());
     return;
   }
 
@@ -451,8 +453,8 @@
       context_wrapper->process_manager()->GetSiteInstanceForWorker(worker_id);
   if (!site_instance) {
     // Worker isn't running anymore. Fail.
-    DidNavigate(context, script_url.DeprecatedGetOriginAsURL(), key,
-                std::move(callback), GlobalRenderFrameHostId());
+    DidNavigate(context, script_url, key, std::move(callback),
+                GlobalRenderFrameHostId());
     return;
   }
 
@@ -477,8 +479,7 @@
   GetContentClient()->browser()->OpenURL(
       site_instance, params,
       base::BindOnce(&DidOpenURL,
-                     base::BindOnce(&DidNavigate, context,
-                                    script_url.DeprecatedGetOriginAsURL(), key,
+                     base::BindOnce(&DidNavigate, context, script_url, key,
                                     std::move(callback))));
 }
 
@@ -494,8 +495,8 @@
   WebContents* web_contents = WebContents::FromRenderFrameHost(rfhi);
 
   if (!rfhi || !web_contents) {
-    DidNavigate(context, script_url.DeprecatedGetOriginAsURL(), key,
-                std::move(callback), GlobalRenderFrameHostId());
+    DidNavigate(context, script_url, key, std::move(callback),
+                GlobalRenderFrameHostId());
     return;
   }
 
@@ -505,8 +506,8 @@
   // RequestOpenURL() crashes if called by a prerendering main frame.
   if (rfhi->frame_tree_node()->GetFrameType() ==
       FrameType::kPrerenderMainFrame) {
-    DidNavigate(context, script_url.DeprecatedGetOriginAsURL(), key,
-                std::move(callback), GlobalRenderFrameHostId());
+    DidNavigate(context, script_url, key, std::move(callback),
+                GlobalRenderFrameHostId());
     return;
   }
 
@@ -517,8 +518,8 @@
       rfhi->frame_tree()->root()->navigation_request();
   if (ongoing_navigation_request &&
       ongoing_navigation_request->browser_initiated()) {
-    DidNavigate(context, script_url.DeprecatedGetOriginAsURL(), key,
-                std::move(callback), GlobalRenderFrameHostId());
+    DidNavigate(context, script_url, key, std::move(callback),
+                GlobalRenderFrameHostId());
     return;
   }
 
@@ -539,8 +540,7 @@
       std::string() /* href_translate */, nullptr /* blob_url_loader_factory */,
       absl::nullopt);
   new OpenURLObserver(web_contents, frame_tree_node_id,
-                      base::BindOnce(&DidNavigate, context,
-                                     script_url.DeprecatedGetOriginAsURL(), key,
+                      base::BindOnce(&DidNavigate, context, script_url, key,
                                      std::move(callback)));
 }
 
@@ -597,7 +597,7 @@
 }
 
 void DidNavigate(const base::WeakPtr<ServiceWorkerContextCore>& context,
-                 const GURL& origin,
+                 const GURL& script_url,
                  const blink::StorageKey& key,
                  NavigationCallback callback,
                  GlobalRenderFrameHostId rfh_id) {
@@ -634,12 +634,12 @@
     if (!container_host->is_execution_ready()) {
       container_host->AddExecutionReadyCallback(base::BindOnce(
           &DidGetExecutionReadyClient, context, container_host->client_uuid(),
-          origin, std::move(callback)));
+          script_url, key, std::move(callback)));
       return;
     }
 
-    DidGetExecutionReadyClient(context, container_host->client_uuid(), origin,
-                               std::move(callback));
+    DidGetExecutionReadyClient(context, container_host->client_uuid(),
+                               script_url, key, std::move(callback));
     return;
   }
 
diff --git a/content/browser/service_worker/service_worker_client_utils.h b/content/browser/service_worker/service_worker_client_utils.h
index d76a481..03d30f1 100644
--- a/content/browser/service_worker/service_worker_client_utils.h
+++ b/content/browser/service_worker/service_worker_client_utils.h
@@ -89,12 +89,13 @@
 // the callback with OK status but nullptr if the host is already
 // destroyed, or call the callback with an error status on error.
 //
-// `origin` is only used for a CHECK_EQ check to ensure we don't accidentally
-// get a cross-origin ServiceWorkerContainerHost.
-// TODO(crbug.com/1199077): Remove `origin` once DidGetExecutionReadyClient
-// implements StorageKey.
+// `key` is only used for a CHECK_EQ check to ensure we don't accidentally
+// get a cross-origin ServiceWorkerContainerHost when "--disable-web-security"
+// is inactive. But for scenarios where "--disable-web-security" is
+// specified/active `script_url` will ensure the correct key (as inferred from
+// the script_url during registration) is used.
 void DidNavigate(const base::WeakPtr<ServiceWorkerContextCore>& context,
-                 const GURL& origin,
+                 const GURL& script_url,
                  const blink::StorageKey& key,
                  NavigationCallback callback,
                  GlobalRenderFrameHostId rfh_id);
diff --git a/content/browser/service_worker/service_worker_container_host.h b/content/browser/service_worker/service_worker_container_host.h
index 5f82ffb..628e8fb 100644
--- a/content/browser/service_worker/service_worker_container_host.h
+++ b/content/browser/service_worker/service_worker_container_host.h
@@ -389,6 +389,16 @@
   // details.
   const blink::StorageKey& key() const { return key_; }
 
+  // This function returns the correct StorageKey depending on the state of the
+  // "disable-web-security" flag.
+  //
+  // If web security is disabled then it's possible for the `url` to be
+  // cross-origin from `this`'s origin. In that case we need to make a new key
+  // with the `url`'s origin, otherwise we might access the wrong storage
+  // partition.
+  blink::StorageKey GetCorrectStorageKeyForWebSecurityState(
+      const GURL& url) const;
+
   // Calls ContentBrowserClient::AllowServiceWorker(). Returns true if content
   // settings allows service workers to run at |scope|. If this container is for
   // a window client, the check involves the topmost frame url as well as
@@ -598,16 +608,6 @@
                                     const char* error_prefix,
                                     Args... args);
 
-  // This function returns the correct StorageKey depending on the state of the
-  // "disable-web-security" flag.
-  //
-  // If web security is disabled then it's possible for the `url` to be
-  // cross-origin from `this`'s origin. In that case we need to make a new key
-  // with the `url`'s origin, otherwise we might access the wrong storage
-  // partition.
-  blink::StorageKey GetCorrectStorageKeyForWebSecurityState(
-      const GURL& url) const;
-
   base::WeakPtr<ServiceWorkerContextCore> context_;
 
   // The time when the container host is created.
diff --git a/content/browser/service_worker/service_worker_container_host_unittest.cc b/content/browser/service_worker/service_worker_container_host_unittest.cc
index 5868feb..cae5852 100644
--- a/content/browser/service_worker/service_worker_container_host_unittest.cc
+++ b/content/browser/service_worker/service_worker_container_host_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/service_worker/embedded_worker_test_helper.h"
 #include "content/browser/service_worker/service_worker_context_core.h"
diff --git a/content/browser/service_worker/service_worker_context_wrapper_unittest.cc b/content/browser/service_worker/service_worker_context_wrapper_unittest.cc
index 93911e63..bab92fa 100644
--- a/content/browser/service_worker/service_worker_context_wrapper_unittest.cc
+++ b/content/browser/service_worker/service_worker_context_wrapper_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "components/services/storage/service_worker/service_worker_storage_control_impl.h"
diff --git a/content/browser/service_worker/service_worker_host.h b/content/browser/service_worker/service_worker_host.h
index d4a8a369..0fdf4e1 100644
--- a/content/browser/service_worker/service_worker_host.h
+++ b/content/browser/service_worker/service_worker_host.h
@@ -11,6 +11,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/browser_interface_broker_impl.h"
 #include "content/browser/buckets/bucket_context.h"
 #include "content/browser/renderer_host/code_cache_host_impl.h"
diff --git a/content/browser/service_worker/service_worker_registration_unittest.cc b/content/browser/service_worker/service_worker_registration_unittest.cc
index 16b8acd..dc2e2f3 100644
--- a/content/browser/service_worker/service_worker_registration_unittest.cc
+++ b/content/browser/service_worker/service_worker_registration_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/test/bind.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/browser/service_worker/embedded_worker_status.h"
 #include "content/browser/service_worker/embedded_worker_test_helper.h"
diff --git a/content/browser/service_worker/service_worker_test_utils.cc b/content/browser/service_worker/service_worker_test_utils.cc
index d6326f95..6507316 100644
--- a/content/browser/service_worker/service_worker_test_utils.cc
+++ b/content/browser/service_worker/service_worker_test_utils.cc
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "base/barrier_closure.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/time/time.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index f12f9f00..f5e9690 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -172,7 +172,7 @@
     int render_frame_id) {
   if (success) {
     service_worker_client_utils::DidNavigate(
-        context, url.DeprecatedGetOriginAsURL(), key,
+        context, url, key,
         base::BindOnce(&OnOpenWindowFinished, std::move(callback)),
         GlobalRenderFrameHostId(render_process_id, render_frame_id));
   } else {
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h
index 848556c..d7c46d9 100644
--- a/content/browser/service_worker/service_worker_version.h
+++ b/content/browser/service_worker/service_worker_version.h
@@ -22,7 +22,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/clock.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index fdd2401..2b07ce1 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -45,7 +45,6 @@
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc
index a0493ab8..163c8574 100644
--- a/content/browser/site_per_process_hit_test_browsertest.cc
+++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -14,6 +14,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
diff --git a/content/browser/site_per_process_layout_browsertest.cc b/content/browser/site_per_process_layout_browsertest.cc
index 3b50fc9..9778f9b 100644
--- a/content/browser/site_per_process_layout_browsertest.cc
+++ b/content/browser/site_per_process_layout_browsertest.cc
@@ -5,6 +5,7 @@
 #include "content/browser/site_per_process_browsertest.h"
 
 #include "base/json/json_reader.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "cc/base/math_util.h"
diff --git a/content/browser/site_per_process_scroll_browsertest.cc b/content/browser/site_per_process_scroll_browsertest.cc
index 026604a..8d19735d 100644
--- a/content/browser/site_per_process_scroll_browsertest.cc
+++ b/content/browser/site_per_process_scroll_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/site_per_process_browsertest.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
diff --git a/content/browser/smart_card/smart_card_browsertest.cc b/content/browser/smart_card/smart_card_browsertest.cc
index ccbbdd5..8d5de1a 100644
--- a/content/browser/smart_card/smart_card_browsertest.cc
+++ b/content/browser/smart_card/smart_card_browsertest.cc
@@ -19,23 +19,44 @@
 #include "net/test/embedded_test_server/default_handlers.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "services/device/public/mojom/smart_card.mojom.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features_generated.h"
+#include "third_party/blink/public/mojom/smart_card/smart_card.mojom.h"
 
 using device::mojom::SmartCardReaderInfo;
 using device::mojom::SmartCardReaderInfoPtr;
 using device::mojom::SmartCardReaderState;
+using ::testing::_;
+using ::testing::AnyNumber;
+using ::testing::Return;
 
 namespace content {
 
 namespace {
 
+class MockSmartCardDelegate : public SmartCardDelegate {
+ public:
+  MOCK_METHOD(void, GetReaders, (GetReadersCallback), (override));
+  MOCK_METHOD(bool,
+              SupportsReaderAddedRemovedNotifications,
+              (),
+              (const, override));
+};
+
 class FakeSmartCardDelegate : public SmartCardDelegate {
  public:
   void GetReaders(GetReadersCallback) override;
   bool SupportsReaderAddedRemovedNotifications() const override { return true; }
 
+  bool AddReader(const std::string& name) {
+    std::vector<uint8_t> atr = {1, 2, 3, 4};
+    SmartCardReaderInfoPtr reader =
+        SmartCardReaderInfo::New(name, SmartCardReaderState::kEmpty, atr);
+    return AddReader(std::move(reader));
+  }
   bool AddReader(SmartCardReaderInfoPtr reader_info);
+
   bool RemoveReader(const std::string& name);
 
  private:
@@ -51,7 +72,7 @@
       SmartCardTestContentBrowserClient&) = delete;
   ~SmartCardTestContentBrowserClient() override;
 
-  FakeSmartCardDelegate& delegate() { return delegate_; }
+  void SetSmartCardDelegate(std::unique_ptr<SmartCardDelegate>);
 
   // ContentBrowserClient:
   SmartCardDelegate* GetSmartCardDelegate(
@@ -65,13 +86,11 @@
       const url::Origin& app_origin) override;
 
  private:
-  FakeSmartCardDelegate delegate_;
+  std::unique_ptr<SmartCardDelegate> delegate_;
 };
 
 class SmartCardTest : public ContentBrowserTest {
  public:
-  FakeSmartCardDelegate& delegate() { return test_client_.delegate(); }
-
   GURL GetIsolatedContextUrl() {
     return https_server_.GetURL(
         "a.com",
@@ -80,15 +99,20 @@
         "Permissions-Policy: smart-card%3D(self)");
   }
 
-  bool AddReader(const std::string& name) {
-    std::vector<uint8_t> atr = {1, 2, 3, 4};
-    SmartCardReaderInfoPtr reader =
-        SmartCardReaderInfo::New(name, SmartCardReaderState::kEmpty, atr);
-    return delegate().AddReader(std::move(reader));
+  FakeSmartCardDelegate* CreateFakeSmartCardDelegate() {
+    auto unique_delegate = std::make_unique<FakeSmartCardDelegate>();
+    FakeSmartCardDelegate* delegate = unique_delegate.get();
+    test_client_.SetSmartCardDelegate(std::move(unique_delegate));
+    return delegate;
   }
 
-  bool RemoveReader(const std::string& name) {
-    return delegate().RemoveReader(name);
+  MockSmartCardDelegate* CreateMockSmartCardDelegate() {
+    auto unique_delegate = std::make_unique<MockSmartCardDelegate>();
+    MockSmartCardDelegate* delegate = unique_delegate.get();
+    test_client_.SetSmartCardDelegate(std::move(unique_delegate));
+    ON_CALL(*delegate, SupportsReaderAddedRemovedNotifications)
+        .WillByDefault(Return(true));
+    return delegate;
   }
 
  private:
@@ -152,7 +176,12 @@
 
 SmartCardDelegate* SmartCardTestContentBrowserClient::GetSmartCardDelegate(
     content::BrowserContext* browser_context) {
-  return &delegate_;
+  return delegate_.get();
+}
+
+void SmartCardTestContentBrowserClient::SetSmartCardDelegate(
+    std::unique_ptr<SmartCardDelegate> delegate) {
+  delegate_ = std::move(delegate);
 }
 
 bool SmartCardTestContentBrowserClient::ShouldUrlUseApplicationIsolationLevel(
@@ -185,7 +214,8 @@
     readers.push_back(reader.second->Clone());
   }
 
-  std::move(callback).Run(std::move(readers));
+  std::move(callback).Run(
+      blink::mojom::SmartCardGetReadersResult::NewReaders(std::move(readers)));
 }
 
 bool FakeSmartCardDelegate::AddReader(SmartCardReaderInfoPtr reader_info) {
@@ -216,7 +246,9 @@
 }
 
 IN_PROC_BROWSER_TEST_F(SmartCardTest, GetReaders) {
-  ASSERT_TRUE(AddReader("Fake Reader"));
+  FakeSmartCardDelegate* delegate = CreateFakeSmartCardDelegate();
+
+  ASSERT_TRUE(delegate->AddReader("Fake Reader"));
 
   ASSERT_TRUE(NavigateToURL(shell(), GetIsolatedContextUrl()));
 
@@ -229,6 +261,8 @@
 }
 
 IN_PROC_BROWSER_TEST_F(SmartCardTest, ReaderAdd) {
+  FakeSmartCardDelegate* delegate = CreateFakeSmartCardDelegate();
+
   ASSERT_TRUE(NavigateToURL(shell(), GetIsolatedContextUrl()));
 
   EXPECT_TRUE(ExecJs(shell(), R"((async () => {
@@ -240,14 +274,16 @@
     });
   })())"));
 
-  ASSERT_TRUE(AddReader("New Fake Reader"));
+  ASSERT_TRUE(delegate->AddReader("New Fake Reader"));
 
   EXPECT_EQ("New Fake Reader", EvalJs(shell(), "window.promise"));
 }
 
 IN_PROC_BROWSER_TEST_F(SmartCardTest, ReaderRemove) {
+  FakeSmartCardDelegate* delegate = CreateFakeSmartCardDelegate();
   const std::string reader_name = "Fake Reader";
-  ASSERT_TRUE(AddReader(reader_name));
+
+  ASSERT_TRUE(delegate->AddReader(reader_name));
 
   ASSERT_TRUE(NavigateToURL(shell(), GetIsolatedContextUrl()));
 
@@ -260,9 +296,34 @@
     });
   })())"));
 
-  ASSERT_TRUE(RemoveReader(reader_name));
+  ASSERT_TRUE(delegate->RemoveReader(reader_name));
 
   EXPECT_EQ(reader_name, EvalJs(shell(), "window.promise"));
 }
 
+IN_PROC_BROWSER_TEST_F(SmartCardTest, GetReadersFails) {
+  MockSmartCardDelegate* delegate = CreateMockSmartCardDelegate();
+
+  EXPECT_CALL(*delegate, SupportsReaderAddedRemovedNotifications);
+
+  EXPECT_CALL(*delegate, GetReaders(_))
+      .WillRepeatedly([&](SmartCardDelegate::GetReadersCallback cb) {
+        std::move(cb).Run(
+            blink::mojom::SmartCardGetReadersResult::NewResponseCode(
+                blink::mojom::SmartCardResponseCode::kNoService));
+      });
+
+  ASSERT_TRUE(NavigateToURL(shell(), GetIsolatedContextUrl()));
+
+  EXPECT_EQ("SmartCardError: no-service", EvalJs(shell(), R"(
+    (async () => {
+      try {
+        let readers = await navigator.smartCard.getReaders();
+      } catch (e) {
+        return `${e.name}: ${e.responseCode}`;
+      }
+    })()
+  )"));
+}
+
 }  // namespace content
diff --git a/content/browser/speech/speech_recognizer_impl_unittest.cc b/content/browser/speech/speech_recognizer_impl_unittest.cc
index 72c3c2e..fa8c179 100644
--- a/content/browser/speech/speech_recognizer_impl_unittest.cc
+++ b/content/browser/speech/speech_recognizer_impl_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/sys_byteorder.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/browser/speech/speech_recognition_engine.h"
 #include "content/browser/speech/speech_recognizer_impl.h"
 #include "content/public/browser/google_streaming_api.pb.h"
diff --git a/content/browser/speech/tts_controller_impl.cc b/content/browser/speech/tts_controller_impl.cc
index ed5e173..a674165 100644
--- a/content/browser/speech/tts_controller_impl.cc
+++ b/content/browser/speech/tts_controller_impl.cc
@@ -578,6 +578,8 @@
   GetTtsPlatform()->WillSpeakUtteranceWithVoice(utterance.get(), voice);
 
   base::RecordAction(base::UserMetricsAction("TextToSpeech.Speak"));
+  UMA_HISTOGRAM_COUNTS_100000("TextToSpeech.Utterance.Rate",
+                              utterance->GetContinuousParameters().rate);
   UMA_HISTOGRAM_COUNTS_100000("TextToSpeech.Utterance.TextLength",
                               utterance->GetText().size());
   UMA_HISTOGRAM_BOOLEAN("TextToSpeech.Utterance.FromExtensionAPI",
@@ -769,21 +771,24 @@
 void TtsControllerImpl::PopulateParsedText(std::string* parsed_text,
                                            const base::Value* element) {
   DCHECK(parsed_text);
-  if (!element)
+  if (!element || !element->is_dict()) {
     return;
+  }
   // Add element's text if present.
   // Note: We don't use data_decoder::GetXmlElementText because it gets the text
   // of element's first child, not text of current element.
-  const base::Value* text_value = element->FindKeyOfType(
-      data_decoder::mojom::XmlParser::kTextKey, base::Value::Type::STRING);
+  const std::string* text_value =
+      element->GetDict().FindString(data_decoder::mojom::XmlParser::kTextKey);
   if (text_value)
-    *parsed_text += text_value->GetString();
+    *parsed_text += *text_value;
 
-  const base::Value* children = data_decoder::GetXmlElementChildren(*element);
-  if (!children || !children->is_list())
+  const base::Value::List* children =
+      data_decoder::GetXmlElementChildren(*element);
+  if (!children) {
     return;
+  }
 
-  for (const auto& entry : children->GetList()) {
+  for (const auto& entry : *children) {
     // We need to iterate over all children because some text elements are
     // nested within other types of elements, such as <emphasis> tags.
     PopulateParsedText(parsed_text, &entry);
diff --git a/content/browser/startup_task_runner.cc b/content/browser/startup_task_runner.cc
index ad2c6a83..c239401a 100644
--- a/content/browser/startup_task_runner.cc
+++ b/content/browser/startup_task_runner.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace content {
 
diff --git a/content/browser/startup_task_runner.h b/content/browser/startup_task_runner.h
index 3ccfd0f..f56ff09b 100644
--- a/content/browser/startup_task_runner.h
+++ b/content/browser/startup_task_runner.h
@@ -12,6 +12,7 @@
 #include "base/time/time.h"
 #include "content/common/content_export.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
 #include "content/public/browser/browser_main_runner.h"
diff --git a/content/browser/storage_partition_impl_browsertest.cc b/content/browser/storage_partition_impl_browsertest.cc
index cf6c562..bd45754 100644
--- a/content/browser/storage_partition_impl_browsertest.cc
+++ b/content/browser/storage_partition_impl_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "build/build_config.h"
 #include "content/public/browser/browser_context.h"
diff --git a/content/browser/text_fragment_browsertest.cc b/content/browser/text_fragment_browsertest.cc
index 06c8f24c..bc13ada 100644
--- a/content/browser/text_fragment_browsertest.cc
+++ b/content/browser/text_fragment_browsertest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
diff --git a/content/browser/tracing/background_tracing_manager_browsertest.cc b/content/browser/tracing/background_tracing_manager_browsertest.cc
index ff31963..23c2120 100644
--- a/content/browser/tracing/background_tracing_manager_browsertest.cc
+++ b/content/browser/tracing/background_tracing_manager_browsertest.cc
@@ -21,6 +21,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_tokenizer.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
 #include "base/test/trace_event_analyzer.h"
diff --git a/content/browser/tracing/startup_tracing_controller.cc b/content/browser/tracing/startup_tracing_controller.cc
index e578289..f1e80b1a 100644
--- a/content/browser/tracing/startup_tracing_controller.cc
+++ b/content/browser/tracing/startup_tracing_controller.cc
@@ -16,7 +16,6 @@
 #include "base/task/thread_pool.h"
 #include "base/thread_annotations.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/typed_macros.h"
 #include "build/build_config.h"
 #include "components/tracing/common/trace_startup_config.h"
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index 12d33f5..fd77a30 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -23,6 +23,7 @@
 #include "base/strings/pattern.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/content/browser/web_database/web_database_host_impl.cc b/content/browser/web_database/web_database_host_impl.cc
index 3a2f6b97..89c0d29 100644
--- a/content/browser/web_database/web_database_host_impl.cc
+++ b/content/browser/web_database/web_database_host_impl.cc
@@ -11,6 +11,7 @@
 #include "base/check_op.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/storage/public/cpp/buckets/bucket_info.h"
 #include "components/services/storage/public/cpp/buckets/constants.h"
 #include "content/browser/child_process_security_policy_impl.h"
diff --git a/content/browser/web_database/web_database_host_impl_unittest.cc b/content/browser/web_database/web_database_host_impl_unittest.cc
index 6c423a85..afb7f2a 100644
--- a/content/browser/web_database/web_database_host_impl_unittest.cc
+++ b/content/browser/web_database/web_database_host_impl_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "components/services/storage/public/cpp/buckets/bucket_info.h"
 #include "components/services/storage/public/cpp/buckets/constants.h"
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc
index 49bd105..4b3db23a 100644
--- a/content/browser/webauth/authenticator_impl_unittest.cc
+++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -30,6 +30,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/system/sys_info.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gtest_util.h"
 #include "base/test/scoped_command_line.h"
diff --git a/content/browser/webrtc/resources/stats_helper.js b/content/browser/webrtc/resources/stats_helper.js
index 4a4e2f4..9049fa2 100644
--- a/content/browser/webrtc/resources/stats_helper.js
+++ b/content/browser/webrtc/resources/stats_helper.js
@@ -30,8 +30,8 @@
 export function generateStatsLabel(report) {
   let label = report.type + ' (';
   let labels = [];
-  if (['outbound-rtp', 'inbound-rtp'].includes(report.type)
-      && report.stats.values) {
+  if (['outbound-rtp', 'remote-outbound-rtp', 'inbound-rtp',
+      'remote-inbound-rtp'].includes(report.type) && report.stats.values) {
     labels = ['kind', 'mid', 'rid', 'ssrc', '[codec]']
       .map(stat => generateLabel(stat, report.stats.values));
   } else if (['local-candidate', 'remote-candidate'].includes(report.type)) {
@@ -45,7 +45,7 @@
       .map(stat => generateLabel(stat, report.stats.values));
   } else if (report.type === 'candidate-pair') {
     labels = ['state']
-    .map(stat => generateLabel(stat, report.stats.values));
+      .map(stat => generateLabel(stat, report.stats.values));
   }
   labels = labels.filter(label => !!label);
   if (labels.length) {
diff --git a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
index ae98e09..f600fa1 100644
--- a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
+++ b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
@@ -6,6 +6,8 @@
 #include "base/command_line.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc
index c967ade3..1f95ca2e 100644
--- a/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc
+++ b/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc
@@ -5,6 +5,8 @@
 #include "base/command_line.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "content/public/browser/video_capture_service.h"
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc
index c7d6d13..b60010ac 100644
--- a/content/browser/webui/url_data_manager_backend.cc
+++ b/content/browser/webui/url_data_manager_backend.cc
@@ -17,7 +17,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "base/values.h"
 #include "content/browser/blob_storage/chrome_blob_storage_context.h"
diff --git a/content/browser/webui/web_ui_main_frame_observer_unittest.cc b/content/browser/webui/web_ui_main_frame_observer_unittest.cc
index 837c544..5ac0e7b 100644
--- a/content/browser/webui/web_ui_main_frame_observer_unittest.cc
+++ b/content/browser/webui/web_ui_main_frame_observer_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/field_trial_params.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/crash/content/browser/error_reporting/javascript_error_report.h"  // nogncheck
 #include "components/crash/content/browser/error_reporting/js_error_report_processor.h"  // nogncheck
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index cf5b8f4..ac8b640e 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -25,9 +25,9 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
 #include "base/system/sys_info.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_allocator_dump_guid.h"
 #include "base/trace_event/memory_dump_manager.h"
diff --git a/content/child/blink_platform_impl.h b/content/child/blink_platform_impl.h
index 1f14e0a..22619a8 100644
--- a/content/child/blink_platform_impl.h
+++ b/content/child/blink_platform_impl.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
diff --git a/content/child/child_process.h b/content/child/child_process.h
index b54adf1..12de6c0 100644
--- a/content/child/child_process.h
+++ b/content/child/child_process.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread.h"
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc
index 7cec02a..e9d76e85 100644
--- a/content/child/child_thread_impl.cc
+++ b/content/child/child_thread_impl.cc
@@ -36,6 +36,7 @@
 #include "base/strings/string_util.h"
 #include "base/synchronization/condition_variable.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_local.h"
 #include "base/timer/elapsed_timer.h"
diff --git a/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc b/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc
index 9d79b44..775e730 100644
--- a/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc
+++ b/content/child/dwrite_font_proxy/dwrite_font_proxy_win.cc
@@ -15,6 +15,7 @@
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/trace_event/trace_event.h"
diff --git a/content/child/dwrite_font_proxy/dwrite_font_proxy_win.h b/content/child/dwrite_font_proxy/dwrite_font_proxy_win.h
index e3a9e9f2..204ad34 100644
--- a/content/child/dwrite_font_proxy/dwrite_font_proxy_win.h
+++ b/content/child/dwrite_font_proxy/dwrite_font_proxy_win.h
@@ -16,6 +16,8 @@
 #include "base/files/memory_mapped_file.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/threading/sequence_local_storage_slot.h"
 #include "content/common/content_export.h"
diff --git a/content/common/android/cpu_time_metrics_internal.cc b/content/common/android/cpu_time_metrics_internal.cc
index 743a965..30fbdec9 100644
--- a/content/common/android/cpu_time_metrics_internal.cc
+++ b/content/common/android/cpu_time_metrics_internal.cc
@@ -31,7 +31,6 @@
 #include "base/task/thread_pool.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread_id_name_manager.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/common/process_visibility_tracker.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/process_type.h"
diff --git a/content/common/font_list.cc b/content/common/font_list.cc
index e2a65b3..d674e5e1 100644
--- a/content/common/font_list.cc
+++ b/content/common/font_list.cc
@@ -5,6 +5,7 @@
 #include "content/common/font_list.h"
 
 #include "base/task/lazy_thread_pool_task_runner.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace content {
 
diff --git a/content/common/in_process_child_thread_params.cc b/content/common/in_process_child_thread_params.cc
index b365a0a..4653fc8 100644
--- a/content/common/in_process_child_thread_params.cc
+++ b/content/common/in_process_child_thread_params.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "content/common/in_process_child_thread_params.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace content {
 
diff --git a/content/gpu/gpu_child_thread.h b/content/gpu/gpu_child_thread.h
index 76995c71..283827c 100644
--- a/content/gpu/gpu_child_thread.h
+++ b/content/gpu/gpu_child_thread.h
@@ -15,6 +15,7 @@
 #include "base/command_line.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/viz/service/gl/gpu_service_impl.h"
diff --git a/content/ppapi_plugin/ppapi_thread.h b/content/ppapi_plugin/ppapi_thread.h
index 9c7e9d8..7bde33b 100644
--- a/content/ppapi_plugin/ppapi_thread.h
+++ b/content/ppapi_plugin/ppapi_thread.h
@@ -13,6 +13,7 @@
 
 #include "base/process/process.h"
 #include "base/scoped_native_library.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "content/child/child_thread_impl.h"
 #include "content/public/common/content_plugin_info.h"
diff --git a/content/public/browser/browser_message_filter.cc b/content/public/browser/browser_message_filter.cc
index 70342f0e..b9b143f 100644
--- a/content/public/browser/browser_message_filter.cc
+++ b/content/public/browser/browser_message_filter.cc
@@ -11,6 +11,7 @@
 #include "base/debug/dump_without_crashing.h"
 #include "base/notreached.h"
 #include "base/process/process_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "build/build_config.h"
 #include "content/browser/browser_child_process_host_impl.h"
diff --git a/content/public/browser/download_manager.cc b/content/public/browser/download_manager.cc
index b1fcb6f..95fd7cf 100644
--- a/content/public/browser/download_manager.cc
+++ b/content/public/browser/download_manager.cc
@@ -4,6 +4,7 @@
 
 #include "content/public/browser/download_manager.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/download/public/common/download_task_runner.h"
 
 namespace content {
diff --git a/content/public/browser/media_device_id.cc b/content/public/browser/media_device_id.cc
index e11aa67..812b9a3 100644
--- a/content/public/browser/media_device_id.cc
+++ b/content/public/browser/media_device_id.cc
@@ -5,7 +5,7 @@
 
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/browser_main_loop.h"
 #include "content/browser/renderer_host/media/media_stream_manager.h"
 #include "media/audio/audio_device_description.h"
diff --git a/content/public/browser/media_device_id.h b/content/public/browser/media_device_id.h
index 7325b49b3..c91a8718 100644
--- a/content/public/browser/media_device_id.h
+++ b/content/public/browser/media_device_id.h
@@ -12,6 +12,7 @@
 
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/resource_context.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/content/public/browser/service_worker_context.h b/content/public/browser/service_worker_context.h
index 447d24b..eba701d 100644
--- a/content/public/browser/service_worker_context.h
+++ b/content/public/browser/service_worker_context.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/service_worker_external_request_result.h"
diff --git a/content/public/browser/smart_card_delegate.h b/content/public/browser/smart_card_delegate.h
index 2854f125..6181c6c 100644
--- a/content/public/browser/smart_card_delegate.h
+++ b/content/public/browser/smart_card_delegate.h
@@ -9,6 +9,7 @@
 #include "base/observer_list.h"
 #include "content/common/content_export.h"
 #include "services/device/public/mojom/smart_card.mojom-forward.h"
+#include "third_party/blink/public/mojom/smart_card/smart_card.mojom-forward.h"
 
 namespace content {
 
@@ -16,8 +17,8 @@
 // API.
 class CONTENT_EXPORT SmartCardDelegate {
  public:
-  using GetReadersCallback = base::OnceCallback<void(
-      std::vector<device::mojom::SmartCardReaderInfoPtr>)>;
+  using GetReadersCallback =
+      base::OnceCallback<void(blink::mojom::SmartCardGetReadersResultPtr)>;
 
   // Observer class for changes to smart card readers.
   //
diff --git a/content/public/browser/video_capture_device_launcher.cc b/content/public/browser/video_capture_device_launcher.cc
index 8828e07..6895c03 100644
--- a/content/public/browser/video_capture_device_launcher.cc
+++ b/content/public/browser/video_capture_device_launcher.cc
@@ -4,6 +4,7 @@
 
 #include "content/public/browser/video_capture_device_launcher.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/browser/renderer_host/media/in_process_video_capture_device_launcher.h"
 
 namespace content {
diff --git a/content/public/browser/video_capture_device_launcher.h b/content/public/browser/video_capture_device_launcher.h
index 0067c9a..f3dab72 100644
--- a/content/public/browser/video_capture_device_launcher.h
+++ b/content/public/browser/video_capture_device_launcher.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/callback_forward.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/token.h"
 #include "content/common/content_export.h"
 #include "media/capture/mojom/video_capture_types.mojom.h"
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index 1a73ff2b..95905f18 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -5,6 +5,8 @@
 #include "content/public/renderer/content_renderer_client.h"
 
 #include "base/command_line.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
 #include "content/public/common/content_switches.h"
diff --git a/content/public/renderer/video_encode_accelerator.cc b/content/public/renderer/video_encode_accelerator.cc
index c44e87f..e009bdb 100644
--- a/content/public/renderer/video_encode_accelerator.cc
+++ b/content/public/renderer/video_encode_accelerator.cc
@@ -5,6 +5,7 @@
 #include "content/public/renderer/video_encode_accelerator.h"
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "content/renderer/render_thread_impl.h"
 #include "media/video/gpu_video_accelerator_factories.h"
diff --git a/content/public/test/fake_service_worker_context.cc b/content/public/test/fake_service_worker_context.cc
index 39616cb1..f380e6409 100644
--- a/content/public/test/fake_service_worker_context.cc
+++ b/content/public/test/fake_service_worker_context.cc
@@ -9,6 +9,7 @@
 #include "base/callback.h"
 #include "base/no_destructor.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/browser/service_worker_context_observer.h"
 #include "third_party/blink/public/common/messaging/transferable_message.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 42e9195..bcd009f 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -17,7 +17,6 @@
 #include "base/notreached.h"
 #include "base/process/process_handle.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/public/test/mock_render_thread.cc b/content/public/test/mock_render_thread.cc
index 444b2227..4f95c38 100644
--- a/content/public/test/mock_render_thread.cc
+++ b/content/public/test/mock_render_thread.cc
@@ -9,7 +9,6 @@
 
 #include "base/logging.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
 #include "components/attribution_reporting/os_support.mojom.h"
diff --git a/content/public/test/shared_storage_test_utils.cc b/content/public/test/shared_storage_test_utils.cc
index c1f461b..919b9e9 100644
--- a/content/public/test/shared_storage_test_utils.cc
+++ b/content/public/test/shared_storage_test_utils.cc
@@ -7,7 +7,6 @@
 #include <map>
 
 #include "base/task/task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
 #include "content/browser/shared_storage/shared_storage_document_service_impl.h"
diff --git a/content/public/test/test_cert_verifier_service_factory.h b/content/public/test/test_cert_verifier_service_factory.h
index c39062c..21f1ecff 100644
--- a/content/public/test/test_cert_verifier_service_factory.h
+++ b/content/public/test/test_cert_verifier_service_factory.h
@@ -10,6 +10,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
+#include "base/task/sequenced_task_runner.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"
diff --git a/content/public/test/test_download_http_response.h b/content/public/test/test_download_http_response.h
index 1f3c328..8d58551 100644
--- a/content/public/test/test_download_http_response.h
+++ b/content/public/test/test_download_http_response.h
@@ -11,6 +11,7 @@
 #include "base/callback_forward.h"
 #include "base/containers/queue.h"
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/http/http_byte_range.h"
 #include "net/http/http_response_info.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
diff --git a/content/public/test/test_utils_unittest.cc b/content/public/test/test_utils_unittest.cc
index 50a71056..b49171d 100644
--- a/content/public/test/test_utils_unittest.cc
+++ b/content/public/test/test_utils_unittest.cc
@@ -5,6 +5,7 @@
 #include "content/public/test/test_utils.h"
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/content/public/utility/content_utility_client.h b/content/public/utility/content_utility_client.h
index d5aa03a..f86678ac 100644
--- a/content/public/utility/content_utility_client.h
+++ b/content/public/utility/content_utility_client.h
@@ -8,6 +8,7 @@
 #include <map>
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/common/content_export.h"
 #include "content/public/common/content_client.h"
 #include "mojo/public/cpp/bindings/binder_map.h"
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc
index 91865564..dd76f56e 100644
--- a/content/renderer/accessibility/render_accessibility_impl.cc
+++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -22,7 +22,6 @@
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/elapsed_timer.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/content/renderer/agent_scheduling_group.h b/content/renderer/agent_scheduling_group.h
index f52bd21..659fe58 100644
--- a/content/renderer/agent_scheduling_group.h
+++ b/content/renderer/agent_scheduling_group.h
@@ -8,6 +8,7 @@
 #include <map>
 
 #include "base/containers/id_map.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/common/agent_scheduling_group.mojom.h"
 #include "content/common/associated_interfaces.mojom.h"
 #include "content/common/content_export.h"
diff --git a/content/renderer/media/android/flinging_renderer_client.cc b/content/renderer/media/android/flinging_renderer_client.cc
index dca9b49..befad154 100644
--- a/content/renderer/media/android/flinging_renderer_client.cc
+++ b/content/renderer/media/android/flinging_renderer_client.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace content {
 
diff --git a/content/renderer/media/android/flinging_renderer_client_factory.cc b/content/renderer/media/android/flinging_renderer_client_factory.cc
index 6298f1b..ac4c79e9 100644
--- a/content/renderer/media/android/flinging_renderer_client_factory.cc
+++ b/content/renderer/media/android/flinging_renderer_client_factory.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/check.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/renderer/media/android/flinging_renderer_client.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/clients/mojo_renderer_factory.h"
diff --git a/content/renderer/media/android/flinging_renderer_client_factory.h b/content/renderer/media/android/flinging_renderer_client_factory.h
index aead4dc..3232ee1b 100644
--- a/content/renderer/media/android/flinging_renderer_client_factory.h
+++ b/content/renderer/media/android/flinging_renderer_client_factory.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "media/base/media_status.h"
 #include "media/base/renderer_factory.h"
diff --git a/content/renderer/media/android/media_player_renderer_client.cc b/content/renderer/media/android/media_player_renderer_client.cc
index 43d6817a..5af3554 100644
--- a/content/renderer/media/android/media_player_renderer_client.cc
+++ b/content/renderer/media/android/media_player_renderer_client.cc
@@ -7,6 +7,8 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace content {
 
diff --git a/content/renderer/media/android/media_player_renderer_client.h b/content/renderer/media/android/media_player_renderer_client.h
index 76038c33..0f65452c 100644
--- a/content/renderer/media/android/media_player_renderer_client.h
+++ b/content/renderer/media/android/media_player_renderer_client.h
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "content/common/content_export.h"
 #include "media/base/android/stream_texture_wrapper.h"
diff --git a/content/renderer/media/android/media_player_renderer_client_factory.cc b/content/renderer/media/android/media_player_renderer_client_factory.cc
index 898c4c0..6250133 100644
--- a/content/renderer/media/android/media_player_renderer_client_factory.cc
+++ b/content/renderer/media/android/media_player_renderer_client_factory.cc
@@ -4,6 +4,8 @@
 
 #include "content/renderer/media/android/media_player_renderer_client_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/renderer/media/android/media_player_renderer_client.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/clients/mojo_renderer_factory.h"
diff --git a/content/renderer/media/android/media_player_renderer_client_factory.h b/content/renderer/media/android/media_player_renderer_client_factory.h
index 0f1b1c7..c36af8e2 100644
--- a/content/renderer/media/android/media_player_renderer_client_factory.h
+++ b/content/renderer/media/android/media_player_renderer_client_factory.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "content/common/content_export.h"
 #include "media/base/android/stream_texture_wrapper.h"
diff --git a/content/renderer/media/android/stream_texture_factory.cc b/content/renderer/media/android/stream_texture_factory.cc
index ec0bf81..f4a6ef31 100644
--- a/content/renderer/media/android/stream_texture_factory.cc
+++ b/content/renderer/media/android/stream_texture_factory.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/ipc/client/client_shared_image_interface.h"
 #include "gpu/ipc/client/gpu_channel_host.h"
 #include "gpu/ipc/common/gpu_channel.mojom.h"
diff --git a/content/renderer/media/android/stream_texture_proxy_unittest.cc b/content/renderer/media/android/stream_texture_proxy_unittest.cc
index dc9496b..3d5e351 100644
--- a/content/renderer/media/android/stream_texture_proxy_unittest.cc
+++ b/content/renderer/media/android/stream_texture_proxy_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/renderer/media/android/stream_texture_factory.h"
 #include "content/renderer/stream_texture_host_android.h"
 #include "gpu/command_buffer/common/mailbox.h"
diff --git a/content/renderer/media/android/stream_texture_wrapper_impl.cc b/content/renderer/media/android/stream_texture_wrapper_impl.cc
index b1027fe8..c86a0280 100644
--- a/content/renderer/media/android/stream_texture_wrapper_impl.cc
+++ b/content/renderer/media/android/stream_texture_wrapper_impl.cc
@@ -9,6 +9,7 @@
 #include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/layers/video_frame_provider.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
diff --git a/content/renderer/media/android/stream_texture_wrapper_impl_unittest.cc b/content/renderer/media/android/stream_texture_wrapper_impl_unittest.cc
index 4ff2f5e..015cae0 100644
--- a/content/renderer/media/android/stream_texture_wrapper_impl_unittest.cc
+++ b/content/renderer/media/android/stream_texture_wrapper_impl_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
 
diff --git a/content/renderer/media/cast_renderer_client_factory.cc b/content/renderer/media/cast_renderer_client_factory.cc
index 9678eee9..aba7f89 100644
--- a/content/renderer/media/cast_renderer_client_factory.cc
+++ b/content/renderer/media/cast_renderer_client_factory.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "content/renderer/media/cast_renderer_client_factory.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_log.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/clients/mojo_renderer_factory.h"
diff --git a/content/renderer/media/cast_renderer_client_factory.h b/content/renderer/media/cast_renderer_client_factory.h
index 70f19f5..464d1ef2 100644
--- a/content/renderer/media/cast_renderer_client_factory.h
+++ b/content/renderer/media/cast_renderer_client_factory.h
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/renderer.h"
 #include "media/base/renderer_factory.h"
 #include "ui/gfx/color_space.h"
diff --git a/content/renderer/media/cast_renderer_factory.cc b/content/renderer/media/cast_renderer_factory.cc
index 98175b7c..62813d4 100644
--- a/content/renderer/media/cast_renderer_factory.cc
+++ b/content/renderer/media/cast_renderer_factory.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromecast/media/audio/cast_audio_renderer.h"
 #include "media/base/decoder_factory.h"
 #include "media/renderers/renderer_impl.h"
diff --git a/content/renderer/media/cast_renderer_factory.h b/content/renderer/media/cast_renderer_factory.h
index 067a04e4f..c12075d 100644
--- a/content/renderer/media/cast_renderer_factory.h
+++ b/content/renderer/media/cast_renderer_factory.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/callback_forward.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/renderer_factory.h"
 
 namespace blink {
diff --git a/content/renderer/media/codec_factory.cc b/content/renderer/media/codec_factory.cc
index 5c03298..a9906d8 100644
--- a/content/renderer/media/codec_factory.cc
+++ b/content/renderer/media/codec_factory.cc
@@ -10,6 +10,7 @@
 #include "base/functional/callback_forward.h"
 #include "base/memory/ptr_util.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/decoder.h"
 #include "media/base/media_log.h"
diff --git a/content/renderer/media/codec_factory.h b/content/renderer/media/codec_factory.h
index 2c47f18..fe2b270 100644
--- a/content/renderer/media/codec_factory.h
+++ b/content/renderer/media/codec_factory.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/functional/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "media/base/decoder.h"
 #include "media/base/media_log.h"
diff --git a/content/renderer/media/codec_factory_fuchsia.cc b/content/renderer/media/codec_factory_fuchsia.cc
index c8e02ebb..e4a9118 100644
--- a/content/renderer/media/codec_factory_fuchsia.cc
+++ b/content/renderer/media/codec_factory_fuchsia.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/renderer/media/codec_factory.h"
 #include "media/base/decoder.h"
 #include "media/base/overlay_info.h"
diff --git a/content/renderer/media/codec_factory_fuchsia.h b/content/renderer/media/codec_factory_fuchsia.h
index 0242d9de..43028ca 100644
--- a/content/renderer/media/codec_factory_fuchsia.h
+++ b/content/renderer/media/codec_factory_fuchsia.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_RENDERER_MEDIA_CODEC_FACTORY_FUCHSIA_H_
 #define CONTENT_RENDERER_MEDIA_CODEC_FACTORY_FUCHSIA_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "content/renderer/media/codec_factory.h"
 #include "media/base/overlay_info.h"
diff --git a/content/renderer/media/codec_factory_mojo.cc b/content/renderer/media/codec_factory_mojo.cc
index 578920a7..717e4c9 100644
--- a/content/renderer/media/codec_factory_mojo.cc
+++ b/content/renderer/media/codec_factory_mojo.cc
@@ -7,6 +7,7 @@
 #include "base/functional/bind.h"
 #include "base/location.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/renderer/media/codec_factory.h"
 #include "media/base/overlay_info.h"
 #include "media/mojo/clients/mojo_video_decoder.h"
diff --git a/content/renderer/media/codec_factory_mojo.h b/content/renderer/media/codec_factory_mojo.h
index 106d3c5..b1c3604 100644
--- a/content/renderer/media/codec_factory_mojo.h
+++ b/content/renderer/media/codec_factory_mojo.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "content/renderer/media/codec_factory.h"
 #include "media/base/decoder.h"
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl_unittest.cc b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl_unittest.cc
index dfbbebe0..523fd7fc 100644
--- a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl_unittest.cc
+++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl_unittest.cc
@@ -9,6 +9,7 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gtest_util.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc
index 6a188779..6c5c4c03 100644
--- a/content/renderer/media/media_factory.cc
+++ b/content/renderer/media/media_factory.cc
@@ -16,7 +16,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
 #include "build/chromecast_buildflags.h"
diff --git a/content/renderer/media/media_factory.h b/content/renderer/media/media_factory.h
index ae3e2b8d..f0fab474 100644
--- a/content/renderer/media/media_factory.h
+++ b/content/renderer/media/media_factory.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
 #include "build/chromecast_buildflags.h"
diff --git a/content/renderer/media/renderer_webaudiodevice_impl.cc b/content/renderer/media/renderer_webaudiodevice_impl.cc
index bf8eee3a2..de263f22 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl.cc
+++ b/content/renderer/media/renderer_webaudiodevice_impl.cc
@@ -14,6 +14,8 @@
 #include "base/command_line.h"
 #include "base/notreached.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc b/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc
index 71d91f6d0..95e3318 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc
+++ b/content/renderer/media/renderer_webaudiodevice_impl_unittest.cc
@@ -8,8 +8,8 @@
 
 #include "base/bind.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "media/base/audio_capturer_source.h"
 #include "media/base/audio_glitch_info.h"
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc
index 022a506fb..2ed9461 100644
--- a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc
+++ b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc
@@ -11,7 +11,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/public/test/render_view_test.h"
 #include "content/renderer/media/renderer_webmediaplayer_delegate.h"
 #include "content/renderer/render_process.h"
diff --git a/content/renderer/media/win/dcomp_texture_factory.cc b/content/renderer/media/win/dcomp_texture_factory.cc
index 5b9f0ae5b3..4ff16e5 100644
--- a/content/renderer/media/win/dcomp_texture_factory.cc
+++ b/content/renderer/media/win/dcomp_texture_factory.cc
@@ -4,6 +4,7 @@
 
 #include "content/renderer/media/win/dcomp_texture_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "gpu/ipc/client/client_shared_image_interface.h"
 #include "gpu/ipc/client/gpu_channel_host.h"
 #include "media/base/win/mf_helpers.h"
diff --git a/content/renderer/media/win/dcomp_texture_host.cc b/content/renderer/media/win/dcomp_texture_host.cc
index 46c85e4..e32742a9 100644
--- a/content/renderer/media/win/dcomp_texture_host.cc
+++ b/content/renderer/media/win/dcomp_texture_host.cc
@@ -5,6 +5,7 @@
 #include "content/renderer/media/win/dcomp_texture_host.h"
 
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/unguessable_token.h"
 #include "gpu/ipc/client/gpu_channel_host.h"
 #include "gpu/ipc/common/command_buffer_id.h"
diff --git a/content/renderer/media/win/dcomp_texture_wrapper_impl.cc b/content/renderer/media/win/dcomp_texture_wrapper_impl.cc
index 4694cfd..cce8ded9 100644
--- a/content/renderer/media/win/dcomp_texture_wrapper_impl.cc
+++ b/content/renderer/media/win/dcomp_texture_wrapper_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/callback.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "cc/layers/video_frame_provider.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
diff --git a/content/renderer/media/win/dcomp_texture_wrapper_unittest.cc b/content/renderer/media/win/dcomp_texture_wrapper_unittest.cc
index 77de48b..c6c7c9f 100644
--- a/content/renderer/media/win/dcomp_texture_wrapper_unittest.cc
+++ b/content/renderer/media/win/dcomp_texture_wrapper_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
 #include "content/renderer/media/win/dcomp_texture_factory.h"
diff --git a/content/renderer/mhtml_handle_writer.cc b/content/renderer/mhtml_handle_writer.cc
index f9f80ba..38e6efb9 100644
--- a/content/renderer/mhtml_handle_writer.cc
+++ b/content/renderer/mhtml_handle_writer.cc
@@ -5,6 +5,7 @@
 #include "content/renderer/mhtml_handle_writer.h"
 
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
diff --git a/content/renderer/mojo/blink_interface_registry_impl.cc b/content/renderer/mojo/blink_interface_registry_impl.cc
index 6cc6a8c..4f642ed 100644
--- a/content/renderer/mojo/blink_interface_registry_impl.cc
+++ b/content/renderer/mojo/blink_interface_registry_impl.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 
 namespace content {
diff --git a/content/renderer/pepper/host_dispatcher_wrapper.cc b/content/renderer/pepper/host_dispatcher_wrapper.cc
index a476371d..4b0d326 100644
--- a/content/renderer/pepper/host_dispatcher_wrapper.cc
+++ b/content/renderer/pepper/host_dispatcher_wrapper.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "content/public/renderer/render_frame.h"
 #include "content/renderer/pepper/pepper_browser_connection.h"
diff --git a/content/renderer/pepper/host_dispatcher_wrapper.h b/content/renderer/pepper/host_dispatcher_wrapper.h
index 0fce319..4981b44 100644
--- a/content/renderer/pepper/host_dispatcher_wrapper.h
+++ b/content/renderer/pepper/host_dispatcher_wrapper.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/process/process_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/renderer/pepper/pepper_hung_plugin_filter.h"
 #include "ppapi/c/pp_instance.h"
 #include "ppapi/c/ppp.h"
diff --git a/content/renderer/pepper/pepper_audio_encoder_host.h b/content/renderer/pepper/pepper_audio_encoder_host.h
index ba649de..3120031 100644
--- a/content/renderer/pepper/pepper_audio_encoder_host.h
+++ b/content/renderer/pepper/pepper_audio_encoder_host.h
@@ -11,6 +11,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/numerics/safe_math.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ppapi/c/pp_codecs.h"
 #include "ppapi/host/host_message_context.h"
 #include "ppapi/host/resource_host.h"
diff --git a/content/renderer/pepper/pepper_hung_plugin_filter.h b/content/renderer/pepper/pepper_hung_plugin_filter.h
index 7b08a246..8f8a68a 100644
--- a/content/renderer/pepper/pepper_hung_plugin_filter.h
+++ b/content/renderer/pepper/pepper_hung_plugin_filter.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "content/common/pepper_plugin.mojom.h"
 #include "ipc/ipc_channel_proxy.h"
diff --git a/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h b/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h
index f6e98e9e..151d441 100644
--- a/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h
+++ b/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_RENDERER_PEPPER_PEPPER_PROXY_CHANNEL_DELEGATE_IMPL_H_
 #define CONTENT_RENDERER_PEPPER_PEPPER_PROXY_CHANNEL_DELEGATE_IMPL_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "ppapi/proxy/proxy_channel.h"
 
 namespace base {
diff --git a/content/renderer/pepper/pepper_video_encoder_host.cc b/content/renderer/pepper/pepper_video_encoder_host.cc
index 82b9ce9..240e23c3 100644
--- a/content/renderer/pepper/pepper_video_encoder_host.cc
+++ b/content/renderer/pepper/pepper_video_encoder_host.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/numerics/safe_math.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/common/pepper_file_util.h"
 #include "content/public/common/gpu_stream_constants.h"
diff --git a/content/renderer/pepper/plugin_module.cc b/content/renderer/pepper/plugin_module.cc
index f8831ab..cc025de9 100644
--- a/content/renderer/pepper/plugin_module.cc
+++ b/content/renderer/pepper/plugin_module.cc
@@ -17,6 +17,7 @@
 #include "base/logging.h"
 #include "base/no_destructor.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/nacl/common/buildflags.h"
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index ac2265f..4d57400d 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -40,8 +40,8 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/base_tracing.h"
 #include "base/trace_event/trace_event.h"
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc
index 95ef6e5..d50fecd 100644
--- a/content/renderer/render_thread_impl_browsertest.cc
+++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -19,11 +19,10 @@
 #include "base/metrics/field_trial.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/test_switches.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "content/app/mojo/mojo_init.h"
 #include "content/common/in_process_child_thread_params.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index c313231..ca714503 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -29,7 +29,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "cc/trees/raster_context_provider_wrapper.h"
diff --git a/content/renderer/renderer_thread_type_handler.cc b/content/renderer/renderer_thread_type_handler.cc
index 267107d..ed17ff8 100644
--- a/content/renderer/renderer_thread_type_handler.cc
+++ b/content/renderer/renderer_thread_type_handler.cc
@@ -5,6 +5,7 @@
 #include "content/renderer/renderer_thread_type_handler.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/renderer/render_thread_impl.h"
 
 namespace content {
diff --git a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
index 88abc82..f8149360 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "content/child/child_thread_impl.h"
 #include "content/child/scoped_child_process_reference.h"
diff --git a/content/renderer/service_worker/embedded_worker_instance_client_impl.h b/content/renderer/service_worker/embedded_worker_instance_client_impl.h
index d826205e..833268b 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.h
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/child/child_thread_impl.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc
index de1b731e..5c60dbe 100644
--- a/content/renderer/service_worker/service_worker_context_client.cc
+++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -19,7 +19,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "content/public/common/content_features.h"
diff --git a/content/renderer/service_worker/service_worker_provider_context.cc b/content/renderer/service_worker/service_worker_provider_context.cc
index 086474708..f3f8ec59 100644
--- a/content/renderer/service_worker/service_worker_provider_context.cc
+++ b/content/renderer/service_worker/service_worker_provider_context.cc
@@ -11,10 +11,10 @@
 #include "base/bind.h"
 #include "base/containers/cxx20_erase.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner_helpers.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "content/renderer/service_worker/controller_service_worker_connector.h"
 #include "content/renderer/service_worker/service_worker_subresource_loader.h"
 #include "content/renderer/service_worker/web_service_worker_provider_impl.h"
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.cc b/content/renderer/service_worker/service_worker_subresource_loader.cc
index 6e86106..e27fda9 100644
--- a/content/renderer/service_worker/service_worker_subresource_loader.cc
+++ b/content/renderer/service_worker/service_worker_subresource_loader.cc
@@ -11,6 +11,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "content/common/fetch/fetch_request_type_converters.h"
 #include "content/renderer/renderer_blink_platform_impl.h"
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.h b/content/renderer/service_worker/service_worker_subresource_loader.h
index 5780cf0b..fa0a349 100644
--- a/content/renderer/service_worker/service_worker_subresource_loader.h
+++ b/content/renderer/service_worker/service_worker_subresource_loader.h
@@ -8,6 +8,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/common/content_export.h"
 #include "content/renderer/service_worker/controller_service_worker_connector.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/content/renderer/worker/dedicated_worker_host_factory_client.cc b/content/renderer/worker/dedicated_worker_host_factory_client.cc
index 52c17fd..fa0dfd63 100644
--- a/content/renderer/worker/dedicated_worker_host_factory_client.cc
+++ b/content/renderer/worker/dedicated_worker_host_factory_client.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include <utility>
+#include "base/task/single_thread_task_runner.h"
 #include "content/renderer/render_thread_impl.h"
 #include "content/renderer/service_worker/service_worker_provider_context.h"
 #include "content/renderer/worker/fetch_client_settings_object_helpers.h"
diff --git a/content/renderer/worker/dedicated_worker_host_factory_client.h b/content/renderer/worker/dedicated_worker_host_factory_client.h
index 3698370..ba036ed 100644
--- a/content/renderer/worker/dedicated_worker_host_factory_client.h
+++ b/content/renderer/worker/dedicated_worker_host_factory_client.h
@@ -6,6 +6,7 @@
 #define CONTENT_RENDERER_WORKER_DEDICATED_WORKER_HOST_FACTORY_CLIENT_H_
 
 #include <memory>
+#include "base/task/single_thread_task_runner.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/content/renderer/worker/worker_thread_registry.cc b/content/renderer/worker/worker_thread_registry.cc
index 77572b9..5161092 100644
--- a/content/renderer/worker/worker_thread_registry.cc
+++ b/content/renderer/worker/worker_thread_registry.cc
@@ -14,6 +14,7 @@
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_local.h"
 #include "content/public/renderer/worker_thread.h"
diff --git a/content/services/auction_worklet/auction_worklet_service_impl.h b/content/services/auction_worklet/auction_worklet_service_impl.h
index 6514fe39..bbe2ac77 100644
--- a/content/services/auction_worklet/auction_worklet_service_impl.h
+++ b/content/services/auction_worklet/auction_worklet_service_impl.h
@@ -50,6 +50,9 @@
 
   std::vector<scoped_refptr<AuctionV8Helper>> AuctionV8HelpersForTesting();
 
+  int NumBidderWorkletsForTesting() const { return bidder_worklets_.size(); }
+  int NumSellerWorkletsForTesting() const { return seller_worklets_.size(); }
+
   // mojom::AuctionWorkletService implementation:
   void LoadBidderWorklet(
       mojo::PendingReceiver<mojom::BidderWorklet> bidder_worklet_receiver,
diff --git a/content/services/auction_worklet/bidder_worklet.h b/content/services/auction_worklet/bidder_worklet.h
index bbfa1ff6..d350562 100644
--- a/content/services/auction_worklet/bidder_worklet.h
+++ b/content/services/auction_worklet/bidder_worklet.h
@@ -20,6 +20,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "content/common/content_export.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
diff --git a/content/services/auction_worklet/debug_command_queue.cc b/content/services/auction_worklet/debug_command_queue.cc
index 117c368..0a0f683 100644
--- a/content/services/auction_worklet/debug_command_queue.cc
+++ b/content/services/auction_worklet/debug_command_queue.cc
@@ -3,8 +3,7 @@
 // found in the LICENSE file.
 
 #include "content/services/auction_worklet/debug_command_queue.h"
-
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace auction_worklet {
 
diff --git a/content/services/auction_worklet/debug_command_queue_unittest.cc b/content/services/auction_worklet/debug_command_queue_unittest.cc
index 8d028e07..88b3eba 100644
--- a/content/services/auction_worklet/debug_command_queue_unittest.cc
+++ b/content/services/auction_worklet/debug_command_queue_unittest.cc
@@ -10,10 +10,10 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/thread_annotations.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
 #include "testing/gmock/include/gmock/gmock-matchers.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/services/auction_worklet/seller_worklet.h b/content/services/auction_worklet/seller_worklet.h
index babef52..ffb7fe1 100644
--- a/content/services/auction_worklet/seller_worklet.h
+++ b/content/services/auction_worklet/seller_worklet.h
@@ -19,6 +19,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "content/common/content_export.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
diff --git a/content/services/auction_worklet/trusted_signals.h b/content/services/auction_worklet/trusted_signals.h
index b1f636f..b97de96 100644
--- a/content/services/auction_worklet/trusted_signals.h
+++ b/content/services/auction_worklet/trusted_signals.h
@@ -15,6 +15,7 @@
 #include "base/containers/flat_map.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "content/common/content_export.h"
 #include "content/services/auction_worklet/auction_v8_helper.h"
diff --git a/content/services/isolated_xr_device/xr_device_service.cc b/content/services/isolated_xr_device/xr_device_service.cc
index 98c11677..a921079 100644
--- a/content/services/isolated_xr_device/xr_device_service.cc
+++ b/content/services/isolated_xr_device/xr_device_service.cc
@@ -4,6 +4,7 @@
 
 #include "content/services/isolated_xr_device/xr_device_service.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "content/services/isolated_xr_device/xr_runtime_provider.h"
 #include "content/services/isolated_xr_device/xr_service_test_hook.h"
diff --git a/content/services/isolated_xr_device/xr_device_service.h b/content/services/isolated_xr_device/xr_device_service.h
index 005fbb19..c9f8956 100644
--- a/content/services/isolated_xr_device/xr_device_service.h
+++ b/content/services/isolated_xr_device/xr_device_service.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_SERVICES_ISOLATED_XR_DEVICE_XR_DEVICE_SERVICE_H_
 #define CONTENT_SERVICES_ISOLATED_XR_DEVICE_XR_DEVICE_SERVICE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "device/vr/public/mojom/browser_test_interfaces.mojom.h"
 #include "device/vr/public/mojom/isolated_xr_service.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/content/services/isolated_xr_device/xr_runtime_provider.h b/content/services/isolated_xr_device/xr_runtime_provider.h
index 7399650..7b95e07 100644
--- a/content/services/isolated_xr_device/xr_runtime_provider.h
+++ b/content/services/isolated_xr_device/xr_runtime_provider.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "device/vr/buildflags/buildflags.h"
 #include "device/vr/public/mojom/isolated_xr_service.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/content/services/isolated_xr_device/xr_test_hook_wrapper.h b/content/services/isolated_xr_device/xr_test_hook_wrapper.h
index f275f2b..cb46a93e 100644
--- a/content/services/isolated_xr_device/xr_test_hook_wrapper.h
+++ b/content/services/isolated_xr_device/xr_test_hook_wrapper.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_WRAPPER_H_
 #define CONTENT_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_WRAPPER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "device/vr/public/mojom/browser_test_interfaces.mojom.h"
 #include "device/vr/test/test_hook.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/content/services/shared_storage_worklet/shared_storage_worklet_global_scope_unittest.cc b/content/services/shared_storage_worklet/shared_storage_worklet_global_scope_unittest.cc
index ad596cb7..be4ae3a 100644
--- a/content/services/shared_storage_worklet/shared_storage_worklet_global_scope_unittest.cc
+++ b/content/services/shared_storage_worklet/shared_storage_worklet_global_scope_unittest.cc
@@ -5,6 +5,7 @@
 #include "content/services/shared_storage_worklet/shared_storage_worklet_global_scope.h"
 
 #include "base/check_op.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "components/services/storage/shared_storage/public/mojom/shared_storage.mojom.h"
diff --git a/content/shell/browser/shell.cc b/content/shell/browser/shell.cc
index dc74300..36f98af 100644
--- a/content/shell/browser/shell.cc
+++ b/content/shell/browser/shell.cc
@@ -19,7 +19,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/custom_handlers/protocol_handler.h"
 #include "components/custom_handlers/protocol_handler_registry.h"
diff --git a/content/shell/gpu/shell_content_gpu_client.cc b/content/shell/gpu/shell_content_gpu_client.cc
index 371ec69..f470af16 100644
--- a/content/shell/gpu/shell_content_gpu_client.cc
+++ b/content/shell/gpu/shell_content_gpu_client.cc
@@ -5,6 +5,7 @@
 #include "content/shell/gpu/shell_content_gpu_client.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/shell/common/power_monitor_test_impl.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index 0354d42..a597758 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/notreached.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/cdm/renderer/external_clear_key_key_system_info.h"
 #include "components/network_hints/renderer/web_prescient_networking_impl.h"
 #include "components/web_cache/renderer/web_cache_impl.h"
diff --git a/content/shell/utility/shell_content_utility_client.cc b/content/shell/utility/shell_content_utility_client.cc
index dfbe40f..5f33b9e0 100644
--- a/content/shell/utility/shell_content_utility_client.cc
+++ b/content/shell/utility/shell_content_utility_client.cc
@@ -18,6 +18,7 @@
 #include "base/memory/writable_shared_memory_region.h"
 #include "base/process/process.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/services/storage/test_api/test_api.h"
 #include "content/public/child/child_thread.h"
diff --git a/content/test/content_browser_test_utils_internal.cc b/content/test/content_browser_test_utils_internal.cc
index d2afcc4..be3a2ed 100644
--- a/content/test/content_browser_test_utils_internal.cc
+++ b/content/test/content_browser_test_utils_internal.cc
@@ -21,7 +21,6 @@
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/browser/preloading/prerender/prerender_host_registry.h"
 #include "content/browser/renderer_host/delegated_frame_host.h"
diff --git a/content/test/data/accessibility/aria/aria-insertion-deletion-expected-uia-win.txt b/content/test/data/accessibility/aria/aria-insertion-deletion-expected-uia-win.txt
new file mode 100644
index 0000000..22321bf
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-insertion-deletion-expected-uia-win.txt
@@ -0,0 +1,9 @@
+Document LocalizedControlType='document'
+++Group LocalizedControlType='group' IsControlElement=false
+++++Text LocalizedControlType='text' Name='My favorite browser is '
+++++Group LocalizedControlType='deletion'
+++++++Text LocalizedControlType='text' Name='ABC'
+++++Text LocalizedControlType='text' Name=' '
+++++Group LocalizedControlType='insertion'
+++++++Text LocalizedControlType='text' Name='Chrome'
+++++Text LocalizedControlType='text' Name='!'
diff --git a/content/test/data/accessibility/aria/aria-insertion-deletion.html b/content/test/data/accessibility/aria/aria-insertion-deletion.html
index 45ed847..cb776f7 100644
--- a/content/test/data/accessibility/aria/aria-insertion-deletion.html
+++ b/content/test/data/accessibility/aria/aria-insertion-deletion.html
@@ -1,4 +1,7 @@
 <!DOCTYPE html>
+<!--
+@UIA-WIN-ALLOW:LocalizedControlType*
+-->
 <html>
 <head>
 <style>
diff --git a/content/test/data/accessibility/html/del-expected-uia-win.txt b/content/test/data/accessibility/html/del-expected-uia-win.txt
index 50bd303..f7944fab1 100644
--- a/content/test/data/accessibility/html/del-expected-uia-win.txt
+++ b/content/test/data/accessibility/html/del-expected-uia-win.txt
@@ -1,5 +1,5 @@
-Document
-++Group IsControlElement=false
-++++Text Name='I am '
-++++Group IsControlElement=false
-++++++Text Name='vegetarian'
+Document LocalizedControlType='document'
+++Group LocalizedControlType='group' IsControlElement=false
+++++Text LocalizedControlType='text' Name='I am '
+++++Group LocalizedControlType='deletion' IsControlElement=false
+++++++Text LocalizedControlType='text' Name='vegetarian'
diff --git a/content/test/data/accessibility/html/del.html b/content/test/data/accessibility/html/del.html
index 86a608a..4223de2 100644
--- a/content/test/data/accessibility/html/del.html
+++ b/content/test/data/accessibility/html/del.html
@@ -1,4 +1,5 @@
 <!--
+@UIA-WIN-ALLOW:LocalizedControlType*
 -->
 <!DOCTYPE html>
 <html>
diff --git a/content/test/data/accessibility/html/s-expected-android-external.txt b/content/test/data/accessibility/html/s-expected-android-external.txt
index e96a8d0..55a7d80 100644
--- a/content/test/data/accessibility/html/s-expected-android-external.txt
+++ b/content/test/data/accessibility/html/s-expected-android-external.txt
@@ -1,2 +1,3 @@
 WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
-++TextView text:"My car is blue." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"]
\ No newline at end of file
+++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"]
+++++View text:"My car is blue." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="contentDeletion", roleDescription="deletion"]
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/s-expected-android.txt b/content/test/data/accessibility/html/s-expected-android.txt
index 01d5ebf..263c24e1 100644
--- a/content/test/data/accessibility/html/s-expected-android.txt
+++ b/content/test/data/accessibility/html/s-expected-android.txt
@@ -1,2 +1,3 @@
 android.webkit.WebView focusable focused scrollable
-++android.widget.TextView name='My car is blue.'
\ No newline at end of file
+++android.view.View
+++++android.view.View role_description='deletion' name='My car is blue.'
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/s-expected-auralinux.txt b/content/test/data/accessibility/html/s-expected-auralinux.txt
index 8ed215f..22f74d1 100644
--- a/content/test/data/accessibility/html/s-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/s-expected-auralinux.txt
@@ -1,3 +1,4 @@
 [document web]
 ++[section]
-++++[static] name='My car is blue.'
+++++[content deletion]
+++++++[static] name='My car is blue.'
diff --git a/content/test/data/accessibility/html/s-expected-blink.txt b/content/test/data/accessibility/html/s-expected-blink.txt
index 39c2febc..30f16d0 100644
--- a/content/test/data/accessibility/html/s-expected-blink.txt
+++ b/content/test/data/accessibility/html/s-expected-blink.txt
@@ -1,5 +1,6 @@
 rootWebArea
 ++genericContainer ignored
 ++++genericContainer
-++++++staticText name='My car is blue.'
-++++++++inlineTextBox name='My car is blue.'
+++++++contentDeletion
+++++++++staticText name='My car is blue.'
+++++++++++inlineTextBox name='My car is blue.'
diff --git a/content/test/data/accessibility/html/s-expected-mac.txt b/content/test/data/accessibility/html/s-expected-mac.txt
index 0220ec2c..cce1fded 100644
--- a/content/test/data/accessibility/html/s-expected-mac.txt
+++ b/content/test/data/accessibility/html/s-expected-mac.txt
@@ -1,3 +1,4 @@
 AXWebArea
 ++AXGroup
-++++AXStaticText AXValue='My car is blue.'
+++++AXGroup AXSubrole=AXDeleteStyleGroup
+++++++AXStaticText AXValue='My car is blue.'
diff --git a/content/test/data/accessibility/html/s-expected-uia-win.txt b/content/test/data/accessibility/html/s-expected-uia-win.txt
index 5d7ed88..074bf78 100644
--- a/content/test/data/accessibility/html/s-expected-uia-win.txt
+++ b/content/test/data/accessibility/html/s-expected-uia-win.txt
@@ -1 +1,4 @@
-#<skip - Doesn't have an accessible>
+Document LocalizedControlType='document'
+++Group LocalizedControlType='group' IsControlElement=false
+++++Group LocalizedControlType='deletion' IsControlElement=false
+++++++Text LocalizedControlType='text' Name='My car is blue.'
diff --git a/content/test/data/accessibility/html/s-expected-win.txt b/content/test/data/accessibility/html/s-expected-win.txt
index 5d7ed88..340bc8cc 100644
--- a/content/test/data/accessibility/html/s-expected-win.txt
+++ b/content/test/data/accessibility/html/s-expected-win.txt
@@ -1 +1,4 @@
-#<skip - Doesn't have an accessible>
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE
+++IA2_ROLE_SECTION
+++++IA2_ROLE_CONTENT_DELETION
+++++++ROLE_SYSTEM_STATICTEXT name='My car is blue.'
diff --git a/content/test/data/accessibility/html/s.html b/content/test/data/accessibility/html/s.html
index d17bffb..2055b77 100644
--- a/content/test/data/accessibility/html/s.html
+++ b/content/test/data/accessibility/html/s.html
@@ -1,3 +1,6 @@
+<!--
+@UIA-WIN-ALLOW:LocalizedControlType*
+-->
 <!DOCTYPE html>
 <html>
 <body>
diff --git a/content/test/data/attribution_reporting/interop/README.md b/content/test/data/attribution_reporting/interop/README.md
index 5cc4a5c..a5db5a9 100644
--- a/content/test/data/attribution_reporting/interop/README.md
+++ b/content/test/data/attribution_reporting/interop/README.md
@@ -177,7 +177,15 @@
                 "aggregation_keys": {
                   // Value is uint128 formatted as a base-16 string.
                   "a": "0x1"
-                }
+                },
+
+                // Optional int64 in seconds formatted as a base-10 string.
+                // Default to expiry.
+                "event_report_window": "86400000",
+
+                // Optional int64 in seconds formatted as a base-10 string.
+                // Default to expiry.
+                "aggregatable_report_window": "86400000"
               }
             }
           }
@@ -280,7 +288,11 @@
                 "filters": {
                   "a": ["b", "c"],
                   "d": []
-                }
+                },
+
+                // Optional uint64 formatted as a base-10 string. Defaults to
+                // null.
+                "aggregatable_deduplication_key": "456"
               }
             }
           }
diff --git a/content/test/data/attribution_reporting/simulator/README.md b/content/test/data/attribution_reporting/simulator/README.md
index 16e08ce..e83ca838 100644
--- a/content/test/data/attribution_reporting/simulator/README.md
+++ b/content/test/data/attribution_reporting/simulator/README.md
@@ -51,7 +51,18 @@
         "aggregation_keys": {
             // Value is uint128 formatted as a base-16 string.
             "a": "0x1"
-        }
+        },
+
+        // Optional int64 in seconds formatted as a base-10 string.
+        // Default to expiry.
+        "event_report_window": "86400000",
+
+        // Optional int64 in seconds formatted as a base-10 string.
+        // Default to expiry.
+        "aggregatable_report_window": "86400000",
+
+        // Optional boolean. Defaults to false.
+        "debug_reporting": true
       }
     }
   ],
@@ -138,7 +149,13 @@
         "filters": {
           "a": ["b", "c"],
           "d": []
-        }
+        },
+
+        // Optional uint64 formatted as a base-10 string. Defaults to null.
+        "aggregatable_deduplication_key": "456",
+
+        // Optional boolean. Defaults to false.
+        "debug_reporting": true
       }
     }
   ],
@@ -295,6 +312,23 @@
       // for details about its fields.
       "report": {}
     }
+  ],
+
+  // List of verbose debug reports. Omitted if empty.
+  "verbose_debug_reports": [
+    {
+      // Time at which the report would have been sent in milliseconds since
+      // the UNIX epoch formatted as a base-10 string.
+      "report_time": "123",
+
+      // URL to which the report would have been sent.
+      "report_url": "https://reporting.example/.well-known/attribution-reporting/debug/verbose",
+
+      // The report itself. See
+      // https://github.com/WICG/attribution-reporting-api/blob/main/EVENT.md#verbose-debugging-reports
+      // for details about its fields.
+      "report": {}
+    }
   ]
 }
 ```
diff --git a/content/test/fuzzer/audio_context_manager_mojolpm_fuzzer.cc b/content/test/fuzzer/audio_context_manager_mojolpm_fuzzer.cc
index 938e8222..25b8ee28 100644
--- a/content/test/fuzzer/audio_context_manager_mojolpm_fuzzer.cc
+++ b/content/test/fuzzer/audio_context_manager_mojolpm_fuzzer.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "content/browser/media/webaudio/audio_context_manager_impl.h"  // [nogncheck]
 #include "content/browser/site_instance_impl.h"  // nogncheck
diff --git a/content/test/fuzzer/clipboard_host_mojolpm_fuzzer.cc b/content/test/fuzzer/clipboard_host_mojolpm_fuzzer.cc
index c700b78..fce51e9 100644
--- a/content/test/fuzzer/clipboard_host_mojolpm_fuzzer.cc
+++ b/content/test/fuzzer/clipboard_host_mojolpm_fuzzer.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/renderer_host/clipboard_host_impl.h"
 #include "content/public/test/test_browser_context.h"
 #include "content/test/fuzzer/clipboard_host_mojolpm_fuzzer.pb.h"
diff --git a/content/test/fuzzer/file_system_manager_mojolpm_fuzzer.cc b/content/test/fuzzer/file_system_manager_mojolpm_fuzzer.cc
index 1952ae6..f1fa021 100644
--- a/content/test/fuzzer/file_system_manager_mojolpm_fuzzer.cc
+++ b/content/test/fuzzer/file_system_manager_mojolpm_fuzzer.cc
@@ -7,6 +7,7 @@
 
 #include "base/files/scoped_temp_dir.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread.h"
 #include "content/browser/blob_storage/chrome_blob_storage_context.h"  // nogncheck
diff --git a/content/test/fuzzer/image_capture_mojolpm_fuzzer.cc b/content/test/fuzzer/image_capture_mojolpm_fuzzer.cc
index 6dee060a..c4bfdad3 100644
--- a/content/test/fuzzer/image_capture_mojolpm_fuzzer.cc
+++ b/content/test/fuzzer/image_capture_mojolpm_fuzzer.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/scoped_command_line.h"
 #include "content/browser/browser_main_loop.h"                 //nogncheck
diff --git a/content/test/fuzzer/media_stream_dispatcher_host_mojolpm_fuzzer.cc b/content/test/fuzzer/media_stream_dispatcher_host_mojolpm_fuzzer.cc
index 9311a1f..ead98d2783 100644
--- a/content/test/fuzzer/media_stream_dispatcher_host_mojolpm_fuzzer.cc
+++ b/content/test/fuzzer/media_stream_dispatcher_host_mojolpm_fuzzer.cc
@@ -28,6 +28,7 @@
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "content/browser/media/media_internals.h"
 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
 #include "content/browser/renderer_host/media/media_stream_manager.h"
diff --git a/content/test/fuzzer/mojolpm_fuzzer_support.h b/content/test/fuzzer/mojolpm_fuzzer_support.h
index 5cd62627..349a3109 100644
--- a/content/test/fuzzer/mojolpm_fuzzer_support.h
+++ b/content/test/fuzzer/mojolpm_fuzzer_support.h
@@ -6,6 +6,7 @@
 #define CONTENT_TEST_FUZZER_MOJOLPM_FUZZER_SUPPORT_H_
 
 #include "base/at_exit.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "content/public/test/browser_task_environment.h"
 #include "content/public/test/test_content_client_initializer.h"
diff --git a/content/test/fuzzer/presentation_service_mojolpm_fuzzer.cc b/content/test/fuzzer/presentation_service_mojolpm_fuzzer.cc
index 9e18802..2a561de 100644
--- a/content/test/fuzzer/presentation_service_mojolpm_fuzzer.cc
+++ b/content/test/fuzzer/presentation_service_mojolpm_fuzzer.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/no_destructor.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "content/browser/gpu/gpu_data_manager_impl.h"  // nogncheck
 #include "content/browser/presentation/presentation_service_impl.h"  // nogncheck
diff --git a/content/test/fuzzer/video_capture_host_mojolpm_fuzzer.cc b/content/test/fuzzer/video_capture_host_mojolpm_fuzzer.cc
index 67dfbb5..b1f1b74 100644
--- a/content/test/fuzzer/video_capture_host_mojolpm_fuzzer.cc
+++ b/content/test/fuzzer/video_capture_host_mojolpm_fuzzer.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/no_destructor.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/threading/thread.h"
 #include "content/browser/renderer_host/media/fake_video_capture_provider.h"
diff --git a/content/test/test_blink_web_unit_test_support.cc b/content/test/test_blink_web_unit_test_support.cc
index 047d7e15..91324f1 100644
--- a/content/test/test_blink_web_unit_test_support.cc
+++ b/content/test/test_blink_web_unit_test_support.cc
@@ -20,7 +20,6 @@
 #include "base/test/null_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/trees/layer_tree_settings.h"
 #include "content/app/mojo/mojo_init.h"
diff --git a/content/test/test_blink_web_unit_test_support.h b/content/test/test_blink_web_unit_test_support.h
index fe84b5d265..ac4bad2 100644
--- a/content/test/test_blink_web_unit_test_support.h
+++ b/content/test/test_blink_web_unit_test_support.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "cc/test/test_task_graph_runner.h"
 #include "content/child/blink_platform_impl.h"
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index 323c0a5..41c357d1 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/callback_helpers.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
 #include "content/common/frame.mojom.h"
diff --git a/content/test/url_loader_interceptor_test.cc b/content/test/url_loader_interceptor_test.cc
index 6659f086..2dc3edaf 100644
--- a/content/test/url_loader_interceptor_test.cc
+++ b/content/test/url_loader_interceptor_test.cc
@@ -7,7 +7,6 @@
 #include "base/command_line.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
diff --git a/content/web_test/browser/web_test_control_host.cc b/content/web_test/browser/web_test_control_host.cc
index 9cb4d45c..8b94af89 100644
--- a/content/web_test/browser/web_test_control_host.cc
+++ b/content/web_test/browser/web_test_control_host.cc
@@ -32,6 +32,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "build/build_config.h"
diff --git a/content/web_test/renderer/gc_controller.cc b/content/web_test/renderer/gc_controller.cc
index b521134..1ccf7bc 100644
--- a/content/web_test/renderer/gc_controller.cc
+++ b/content/web_test/renderer/gc_controller.cc
@@ -7,6 +7,7 @@
 #include <tuple>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gin/arguments.h"
 #include "gin/handle.h"
 #include "gin/object_template_builder.h"
diff --git a/content/web_test/renderer/pixel_dump.cc b/content/web_test/renderer/pixel_dump.cc
index 2fb9789..0cf66a7 100644
--- a/content/web_test/renderer/pixel_dump.cc
+++ b/content/web_test/renderer/pixel_dump.cc
@@ -12,7 +12,6 @@
 #include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/paint/paint_flags.h"
 #include "cc/paint/skia_paint_canvas.h"
diff --git a/content/web_test/renderer/spell_check_client.cc b/content/web_test/renderer/spell_check_client.cc
index 4798c240..f15f172 100644
--- a/content/web_test/renderer/spell_check_client.cc
+++ b/content/web_test/renderer/spell_check_client.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/web_test/renderer/web_test_grammar_checker.h"
 #include "third_party/blink/public/web/blink.h"
 #include "third_party/blink/public/web/web_local_frame.h"
diff --git a/content/web_test/renderer/test_websocket_handshake_throttle_provider.h b/content/web_test/renderer/test_websocket_handshake_throttle_provider.h
index 975a5e70..82e4bef2 100644
--- a/content/web_test/renderer/test_websocket_handshake_throttle_provider.h
+++ b/content/web_test/renderer/test_websocket_handshake_throttle_provider.h
@@ -6,6 +6,7 @@
 #define CONTENT_WEB_TEST_RENDERER_TEST_WEBSOCKET_HANDSHAKE_THROTTLE_PROVIDER_H_
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/websocket_handshake_throttle.h"
 #include "third_party/blink/public/platform/websocket_handshake_throttle_provider.h"
 
diff --git a/content/web_test/renderer/web_test_content_renderer_client.cc b/content/web_test/renderer/web_test_content_renderer_client.cc
index 8508e9a..c8be326 100644
--- a/content/web_test/renderer/web_test_content_renderer_client.cc
+++ b/content/web_test/renderer/web_test_content_renderer_client.cc
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/command_line.h"
 #include "base/debug/debugger.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/common/content_switches.h"
diff --git a/dbus/mock_bus.h b/dbus/mock_bus.h
index 7f2db9b3b..9e9e4435 100644
--- a/dbus/mock_bus.h
+++ b/dbus/mock_bus.h
@@ -7,6 +7,7 @@
 
 #include <stdint.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "dbus/bus.h"
 #include "dbus/object_path.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/dbus/object_proxy.cc b/dbus/object_proxy.cc
index efe93279..3314ebbf 100644
--- a/dbus/object_proxy.cc
+++ b/dbus/object_proxy.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/device/bluetooth/bluetooth_adapter_mac.mm b/device/bluetooth/bluetooth_adapter_mac.mm
index dced3773..2414f91 100644
--- a/device/bluetooth/bluetooth_adapter_mac.mm
+++ b/device/bluetooth/bluetooth_adapter_mac.mm
@@ -26,6 +26,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/time/time.h"
diff --git a/device/bluetooth/bluetooth_adapter_mac_unittest.mm b/device/bluetooth/bluetooth_adapter_mac_unittest.mm
index e4110c47..eb97950 100644
--- a/device/bluetooth/bluetooth_adapter_mac_unittest.mm
+++ b/device/bluetooth/bluetooth_adapter_mac_unittest.mm
@@ -5,6 +5,7 @@
 #include "device/bluetooth/bluetooth_adapter_mac.h"
 
 #include "base/memory/raw_ptr.h"
+#import "base/task/sequenced_task_runner.h"
 
 #import <Foundation/Foundation.h>
 
diff --git a/device/bluetooth/bluetooth_adapter_win.h b/device/bluetooth/bluetooth_adapter_win.h
index 9757ad9..491a001 100644
--- a/device/bluetooth/bluetooth_adapter_win.h
+++ b/device/bluetooth/bluetooth_adapter_win.h
@@ -16,6 +16,8 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_discovery_session.h"
diff --git a/device/bluetooth/bluetooth_advertisement_mac.h b/device/bluetooth/bluetooth_advertisement_mac.h
index 7304b40..f803eee 100644
--- a/device/bluetooth/bluetooth_advertisement_mac.h
+++ b/device/bluetooth/bluetooth_advertisement_mac.h
@@ -9,6 +9,7 @@
 
 #import <CoreBluetooth/CoreBluetooth.h>
 
+#include "base/task/single_thread_task_runner.h"
 #include "dbus/object_path.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_advertisement.h"
diff --git a/device/bluetooth/bluetooth_advertisement_mac.mm b/device/bluetooth/bluetooth_advertisement_mac.mm
index 1091cee..daa85ca 100644
--- a/device/bluetooth/bluetooth_advertisement_mac.mm
+++ b/device/bluetooth/bluetooth_advertisement_mac.mm
@@ -5,6 +5,7 @@
 #include "device/bluetooth/bluetooth_advertisement_mac.h"
 
 #include "base/bind.h"
+#import "base/task/single_thread_task_runner.h"
 #include "device/bluetooth/bluetooth_adapter_mac.h"
 
 namespace device {
diff --git a/device/bluetooth/bluetooth_device_winrt.cc b/device/bluetooth/bluetooth_device_winrt.cc
index 9d925e3..0751cec 100644
--- a/device/bluetooth/bluetooth_device_winrt.cc
+++ b/device/bluetooth/bluetooth_device_winrt.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/win/core_winrt_util.h"
 #include "base/win/post_async_results.h"
 #include "base/win/scoped_hstring.h"
diff --git a/device/bluetooth/bluetooth_low_energy_advertisement_manager_mac.mm b/device/bluetooth/bluetooth_low_energy_advertisement_manager_mac.mm
index 3211a8c..9d0ce124 100644
--- a/device/bluetooth/bluetooth_low_energy_advertisement_manager_mac.mm
+++ b/device/bluetooth/bluetooth_low_energy_advertisement_manager_mac.mm
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "device/bluetooth/bluetooth_advertisement.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/device/bluetooth/bluetooth_low_energy_device_watcher_mac.mm b/device/bluetooth/bluetooth_low_energy_device_watcher_mac.mm
index eb922d2..70d8f7b 100644
--- a/device/bluetooth/bluetooth_low_energy_device_watcher_mac.mm
+++ b/device/bluetooth/bluetooth_low_energy_device_watcher_mac.mm
@@ -10,6 +10,7 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "device/bluetooth/bluetooth_adapter_mac.h"
 
diff --git a/device/bluetooth/bluetooth_pairing_winrt.cc b/device/bluetooth/bluetooth_pairing_winrt.cc
index bb6c9e9..5679e50b 100644
--- a/device/bluetooth/bluetooth_pairing_winrt.cc
+++ b/device/bluetooth/bluetooth_pairing_winrt.cc
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/win/com_init_util.h"
 #include "base/win/post_async_results.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
index 5b97193..c4c76ff 100644
--- a/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "device/bluetooth/bluetooth_adapter_mac.h"
 #include "device/bluetooth/bluetooth_device_mac.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_win.cc b/device/bluetooth/bluetooth_remote_gatt_characteristic_win.cc
index 2963899..79d78856 100644
--- a/device/bluetooth/bluetooth_remote_gatt_characteristic_win.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_win.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "device/bluetooth/bluetooth_adapter_win.h"
 #include "device/bluetooth/bluetooth_gatt_notify_session.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm b/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm
index 1d65eb2c..2a2aa4a32 100644
--- a/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm
+++ b/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #import "base/mac/foundation_util.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #import "device/bluetooth/bluetooth_adapter_mac.h"
 #import "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_descriptor_win.cc b/device/bluetooth/bluetooth_remote_gatt_descriptor_win.cc
index c498549..9b673a57 100644
--- a/device/bluetooth/bluetooth_remote_gatt_descriptor_win.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_descriptor_win.cc
@@ -5,6 +5,7 @@
 #include "device/bluetooth/bluetooth_remote_gatt_descriptor_win.h"
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/bluetooth/bluetooth_adapter_win.h"
 #include "device/bluetooth/bluetooth_remote_gatt_characteristic_win.h"
 #include "device/bluetooth/bluetooth_remote_gatt_service_win.h"
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_win.cc b/device/bluetooth/bluetooth_remote_gatt_service_win.cc
index 36f0834..82fd2bc 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_win.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_service_win.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/bluetooth/bluetooth_adapter_win.h"
 #include "device/bluetooth/bluetooth_device_win.h"
 #include "device/bluetooth/bluetooth_remote_gatt_characteristic_win.h"
diff --git a/device/bluetooth/bluez/bluetooth_device_bluez.cc b/device/bluetooth/bluez/bluetooth_device_bluez.cc
index 794e254a..33a7bc7 100644
--- a/device/bluetooth/bluez/bluetooth_device_bluez.cc
+++ b/device/bluetooth/bluez/bluetooth_device_bluez.cc
@@ -16,6 +16,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/device_event_log/device_event_log.h"
 #include "dbus/bus.h"
 #include "device/bluetooth/bluetooth_socket.h"
diff --git a/device/bluetooth/cast/bluetooth_adapter_cast.cc b/device/bluetooth/cast/bluetooth_adapter_cast.cc
index 84eeb3c..a4233c90 100644
--- a/device/bluetooth/cast/bluetooth_adapter_cast.cc
+++ b/device/bluetooth/cast/bluetooth_adapter_cast.cc
@@ -11,7 +11,6 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/no_destructor.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chromecast/device/bluetooth/bluetooth_util.h"
 #include "chromecast/device/bluetooth/le/gatt_client_manager.h"
 #include "chromecast/device/bluetooth/le/le_scan_manager.h"
diff --git a/device/bluetooth/floss/bluetooth_device_floss.cc b/device/bluetooth/floss/bluetooth_device_floss.cc
index 84637335..02c8db0 100644
--- a/device/bluetooth/floss/bluetooth_device_floss.cc
+++ b/device/bluetooth/floss/bluetooth_device_floss.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/device_event_log/device_event_log.h"
 #include "dbus/bus.h"
 #include "device/bluetooth/bluetooth_device.h"
diff --git a/device/bluetooth/floss/bluetooth_device_floss.h b/device/bluetooth/floss/bluetooth_device_floss.h
index f4b542a6..aa1ff997 100644
--- a/device/bluetooth/floss/bluetooth_device_floss.h
+++ b/device/bluetooth/floss/bluetooth_device_floss.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "device/bluetooth/bluetooth_common.h"
 #include "device/bluetooth/bluetooth_device.h"
diff --git a/device/bluetooth/floss/bluetooth_socket_floss.cc b/device/bluetooth/floss/bluetooth_socket_floss.cc
index 73b71d6..aa84a38 100644
--- a/device/bluetooth/floss/bluetooth_socket_floss.cc
+++ b/device/bluetooth/floss/bluetooth_socket_floss.cc
@@ -4,6 +4,7 @@
 
 #include "device/bluetooth/floss/bluetooth_socket_floss.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "device/bluetooth/floss/bluetooth_adapter_floss.h"
 #include "device/bluetooth/floss/bluetooth_device_floss.h"
 #include "device/bluetooth/floss/floss_dbus_client.h"
diff --git a/device/bluetooth/floss/bluetooth_socket_floss.h b/device/bluetooth/floss/bluetooth_socket_floss.h
index 4eaa67c..8ae0d3f 100644
--- a/device/bluetooth/floss/bluetooth_socket_floss.h
+++ b/device/bluetooth/floss/bluetooth_socket_floss.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/task/cancelable_task_tracker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_export.h"
 #include "device/bluetooth/bluetooth_socket.h"
diff --git a/device/bluetooth/floss/fake_floss_admin_client.cc b/device/bluetooth/floss/fake_floss_admin_client.cc
index 2f11573..ddc1dd97 100644
--- a/device/bluetooth/floss/fake_floss_admin_client.cc
+++ b/device/bluetooth/floss/fake_floss_admin_client.cc
@@ -6,7 +6,6 @@
 
 #include "base/logging.h"
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/bluetooth/floss/floss_dbus_client.h"
 
 namespace floss {
diff --git a/device/bluetooth/floss/fake_floss_battery_manager_client.cc b/device/bluetooth/floss/fake_floss_battery_manager_client.cc
index f203b404..e61eafe5 100644
--- a/device/bluetooth/floss/fake_floss_battery_manager_client.cc
+++ b/device/bluetooth/floss/fake_floss_battery_manager_client.cc
@@ -4,7 +4,6 @@
 #include "device/bluetooth/floss/fake_floss_battery_manager_client.h"
 
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/bluetooth/floss/floss_dbus_client.h"
 
 namespace floss {
diff --git a/device/bluetooth/floss/fake_floss_gatt_client.cc b/device/bluetooth/floss/fake_floss_gatt_client.cc
index 56806b701..0a4d49d 100644
--- a/device/bluetooth/floss/fake_floss_gatt_client.cc
+++ b/device/bluetooth/floss/fake_floss_gatt_client.cc
@@ -5,7 +5,6 @@
 #include "device/bluetooth/floss/fake_floss_gatt_client.h"
 
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/bluetooth/floss/floss_dbus_client.h"
 
 namespace floss {
diff --git a/device/bluetooth/floss/fake_floss_socket_manager.cc b/device/bluetooth/floss/fake_floss_socket_manager.cc
index f6d0012..fbf89ce 100644
--- a/device/bluetooth/floss/fake_floss_socket_manager.cc
+++ b/device/bluetooth/floss/fake_floss_socket_manager.cc
@@ -13,7 +13,6 @@
 #include "base/logging.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/types/expected.h"
 #include "device/bluetooth/floss/floss_dbus_client.h"
 
diff --git a/device/bluetooth/floss/floss_adapter_client_unittest.cc b/device/bluetooth/floss/floss_adapter_client_unittest.cc
index 868135d..2f4b49fd 100644
--- a/device/bluetooth/floss/floss_adapter_client_unittest.cc
+++ b/device/bluetooth/floss/floss_adapter_client_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
 #include "dbus/mock_bus.h"
diff --git a/device/bluetooth/floss/floss_admin_client_unittest.cc b/device/bluetooth/floss/floss_admin_client_unittest.cc
index 56601c84..f0b2ded0 100644
--- a/device/bluetooth/floss/floss_admin_client_unittest.cc
+++ b/device/bluetooth/floss/floss_admin_client_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/device_event_log/device_event_log.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
diff --git a/device/bluetooth/floss/floss_advertiser_client_unittest.cc b/device/bluetooth/floss/floss_advertiser_client_unittest.cc
index d2fb5db5f..4e89ce9 100644
--- a/device/bluetooth/floss/floss_advertiser_client_unittest.cc
+++ b/device/bluetooth/floss/floss_advertiser_client_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
 #include "dbus/mock_bus.h"
diff --git a/device/bluetooth/floss/floss_lescan_client_unittest.cc b/device/bluetooth/floss/floss_lescan_client_unittest.cc
index b35e297..8e7aead 100644
--- a/device/bluetooth/floss/floss_lescan_client_unittest.cc
+++ b/device/bluetooth/floss/floss_lescan_client_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/device_event_log/device_event_log.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
diff --git a/device/bluetooth/floss/floss_socket_manager_unittest.cc b/device/bluetooth/floss/floss_socket_manager_unittest.cc
index 6984bcf..c5d1ac95 100644
--- a/device/bluetooth/floss/floss_socket_manager_unittest.cc
+++ b/device/bluetooth/floss/floss_socket_manager_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
 #include "dbus/mock_bus.h"
diff --git a/device/bluetooth/test/fake_central.cc b/device/bluetooth/test/fake_central.cc
index 678d2567..a175b853 100644
--- a/device/bluetooth/test/fake_central.cc
+++ b/device/bluetooth/test/fake_central.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "device/bluetooth/bluetooth_device.h"
 #include "device/bluetooth/bluetooth_discovery_filter.h"
diff --git a/device/bluetooth/test/fake_peripheral.cc b/device/bluetooth/test/fake_peripheral.cc
index f92da0ae..e3e43f8 100644
--- a/device/bluetooth/test/fake_peripheral.cc
+++ b/device/bluetooth/test/fake_peripheral.cc
@@ -13,6 +13,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "device/bluetooth/public/cpp/bluetooth_uuid.h"
 #include "device/bluetooth/test/fake_remote_gatt_service.h"
diff --git a/device/bluetooth/test/fake_remote_gatt_characteristic.cc b/device/bluetooth/test/fake_remote_gatt_characteristic.cc
index 89cbc5b..b5db90c 100644
--- a/device/bluetooth/test/fake_remote_gatt_characteristic.cc
+++ b/device/bluetooth/test/fake_remote_gatt_characteristic.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "device/bluetooth/public/cpp/bluetooth_uuid.h"
 #include "device/bluetooth/test/fake_read_response.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/device/fido/aoa/android_accessory_discovery.cc b/device/fido/aoa/android_accessory_discovery.cc
index 8a1b67c9..5d3950a 100644
--- a/device/fido/aoa/android_accessory_discovery.cc
+++ b/device/fido/aoa/android_accessory_discovery.cc
@@ -10,7 +10,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/no_destructor.h"
 #include "base/rand_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/device_event_log/device_event_log.h"
 #include "device/fido/aoa/android_accessory_device.h"
diff --git a/device/fido/cable/fido_ble_transaction_unittest.cc b/device/fido/cable/fido_ble_transaction_unittest.cc
index 3c26ab03f..3cd5d14a 100644
--- a/device/fido/cable/fido_ble_transaction_unittest.cc
+++ b/device/fido/cable/fido_ble_transaction_unittest.cc
@@ -11,7 +11,6 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/bluetooth/test/bluetooth_test.h"
 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
 #include "device/fido/cable/fido_ble_connection.h"
diff --git a/device/fido/cable/fido_tunnel_device.cc b/device/fido/cable/fido_tunnel_device.cc
index beb1765..26d6a32d 100644
--- a/device/fido/cable/fido_tunnel_device.cc
+++ b/device/fido/cable/fido_tunnel_device.cc
@@ -7,7 +7,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/cbor/reader.h"
 #include "components/cbor/values.h"
 #include "components/cbor/writer.h"
diff --git a/device/fido/get_assertion_handler_unittest.cc b/device/fido/get_assertion_handler_unittest.cc
index 57f265a..8a7f9a9 100644
--- a/device/fido/get_assertion_handler_unittest.cc
+++ b/device/fido/get_assertion_handler_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/callback_helpers.h"
 #include "base/containers/contains.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/device/fido/mac/authenticator.mm b/device/fido/mac/authenticator.mm
index 528fb41..2478d7d 100644
--- a/device/fido/mac/authenticator.mm
+++ b/device/fido/mac/authenticator.mm
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_piece.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "components/device_event_log/device_event_log.h"
 #include "device/base/features.h"
diff --git a/device/fido/mac/discovery.cc b/device/fido/mac/discovery.cc
index 649bec6..285a1bb 100644
--- a/device/fido/mac/discovery.cc
+++ b/device/fido/mac/discovery.cc
@@ -5,7 +5,6 @@
 #include "device/fido/mac/discovery.h"
 
 #include "base/bind.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "device/fido/mac/authenticator.h"
 
 namespace device {
diff --git a/device/fido/mac/touch_id_context.mm b/device/fido/mac/touch_id_context.mm
index f902741..1ddb317 100644
--- a/device/fido/mac/touch_id_context.mm
+++ b/device/fido/mac/touch_id_context.mm
@@ -14,6 +14,7 @@
 #include "base/mac/scoped_cftyperef.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/device/gamepad/abstract_haptic_gamepad.cc b/device/gamepad/abstract_haptic_gamepad.cc
index 217c4aa..0e7e593 100644
--- a/device/gamepad/abstract_haptic_gamepad.cc
+++ b/device/gamepad/abstract_haptic_gamepad.cc
@@ -5,6 +5,7 @@
 #include "device/gamepad/abstract_haptic_gamepad.h"
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 
diff --git a/device/gamepad/abstract_haptic_gamepad_unittest.cc b/device/gamepad/abstract_haptic_gamepad_unittest.cc
index a2127b4..89a67c6 100644
--- a/device/gamepad/abstract_haptic_gamepad_unittest.cc
+++ b/device/gamepad/abstract_haptic_gamepad_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "device/gamepad/public/mojom/gamepad.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/device/gamepad/dualshock4_controller_unittest.cc b/device/gamepad/dualshock4_controller_unittest.cc
index 8aa01470..d6dd359 100644
--- a/device/gamepad/dualshock4_controller_unittest.cc
+++ b/device/gamepad/dualshock4_controller_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "device/gamepad/hid_writer.h"
 #include "device/gamepad/public/mojom/gamepad.mojom.h"
diff --git a/device/gamepad/gamepad_data_fetcher.cc b/device/gamepad/gamepad_data_fetcher.cc
index d886476..0fc073cc 100644
--- a/device/gamepad/gamepad_data_fetcher.cc
+++ b/device/gamepad/gamepad_data_fetcher.cc
@@ -8,6 +8,7 @@
 #include "base/no_destructor.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 
 namespace device {
diff --git a/device/gamepad/gamepad_device_linux.h b/device/gamepad/gamepad_device_linux.h
index c26b11f6..ff36418c 100644
--- a/device/gamepad/gamepad_device_linux.h
+++ b/device/gamepad/gamepad_device_linux.h
@@ -11,6 +11,7 @@
 
 #include "base/files/scoped_file.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/abstract_haptic_gamepad.h"
 #include "device/gamepad/gamepad_id_list.h"
 #include "device/gamepad/gamepad_standard_mappings.h"
diff --git a/device/gamepad/gamepad_platform_data_fetcher_android.cc b/device/gamepad/gamepad_platform_data_fetcher_android.cc
index 7b485f0..bda32eb 100644
--- a/device/gamepad/gamepad_platform_data_fetcher_android.cc
+++ b/device/gamepad/gamepad_platform_data_fetcher_android.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "device/gamepad/gamepad_id_list.h"
 #include "device/gamepad/haptic_gamepad_android.h"
diff --git a/device/gamepad/gamepad_platform_data_fetcher_android.h b/device/gamepad/gamepad_platform_data_fetcher_android.h
index 90cb694e..658332dc 100644
--- a/device/gamepad/gamepad_platform_data_fetcher_android.h
+++ b/device/gamepad/gamepad_platform_data_fetcher_android.h
@@ -11,6 +11,7 @@
 #include <jni.h>
 
 #include "base/android/jni_android.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 #include "device/gamepad/gamepad_provider.h"
 #include "device/gamepad/gamepad_standard_mappings.h"
diff --git a/device/gamepad/gamepad_platform_data_fetcher_linux.cc b/device/gamepad/gamepad_platform_data_fetcher_linux.cc
index 847af663..3d12c752 100644
--- a/device/gamepad/gamepad_platform_data_fetcher_linux.cc
+++ b/device/gamepad/gamepad_platform_data_fetcher_linux.cc
@@ -14,6 +14,7 @@
 #include "base/callback_helpers.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "device/gamepad/gamepad_blocklist.h"
 #include "device/gamepad/gamepad_id_list.h"
diff --git a/device/gamepad/gamepad_platform_data_fetcher_linux.h b/device/gamepad/gamepad_platform_data_fetcher_linux.h
index ee0bcb5..0187a3bc 100644
--- a/device/gamepad/gamepad_platform_data_fetcher_linux.h
+++ b/device/gamepad/gamepad_platform_data_fetcher_linux.h
@@ -11,6 +11,7 @@
 #include <string>
 
 #include "base/compiler_specific.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 #include "device/gamepad/gamepad_device_linux.h"
 #include "device/gamepad/public/cpp/gamepads.h"
diff --git a/device/gamepad/gamepad_platform_data_fetcher_mac.mm b/device/gamepad/gamepad_platform_data_fetcher_mac.mm
index 2ff3f70..f8b1803 100644
--- a/device/gamepad/gamepad_platform_data_fetcher_mac.mm
+++ b/device/gamepad/gamepad_platform_data_fetcher_mac.mm
@@ -10,6 +10,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "device/gamepad/gamepad_blocklist.h"
diff --git a/device/gamepad/gamepad_provider.cc b/device/gamepad/gamepad_provider.cc
index 0c3426f2..c714566 100644
--- a/device/gamepad/gamepad_provider.cc
+++ b/device/gamepad/gamepad_provider.cc
@@ -16,6 +16,7 @@
 #include "base/location.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
 #include "base/threading/thread.h"
diff --git a/device/gamepad/gamepad_provider.h b/device/gamepad/gamepad_provider.h
index 369d6e3f..363761b 100644
--- a/device/gamepad/gamepad_provider.h
+++ b/device/gamepad/gamepad_provider.h
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
 #include "base/system/system_monitor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "device/gamepad/gamepad_export.h"
 #include "device/gamepad/gamepad_pad_state_provider.h"
diff --git a/device/gamepad/gamepad_service.cc b/device/gamepad/gamepad_service.cc
index 44a62862..5cbc1e2 100644
--- a/device/gamepad/gamepad_service.cc
+++ b/device/gamepad/gamepad_service.cc
@@ -11,7 +11,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/gamepad/gamepad_consumer.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 #include "device/gamepad/gamepad_data_fetcher_manager.h"
diff --git a/device/gamepad/hid_haptic_gamepad_unittest.cc b/device/gamepad/hid_haptic_gamepad_unittest.cc
index e200f4d..b739d9c 100644
--- a/device/gamepad/hid_haptic_gamepad_unittest.cc
+++ b/device/gamepad/hid_haptic_gamepad_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "device/gamepad/hid_writer.h"
 #include "device/gamepad/public/mojom/gamepad.mojom.h"
diff --git a/device/gamepad/nintendo_data_fetcher.cc b/device/gamepad/nintendo_data_fetcher.cc
index e8418a66..43c49be9 100644
--- a/device/gamepad/nintendo_data_fetcher.cc
+++ b/device/gamepad/nintendo_data_fetcher.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/gamepad_service.h"
 #include "device/gamepad/gamepad_uma.h"
 
diff --git a/device/gamepad/nintendo_data_fetcher.h b/device/gamepad/nintendo_data_fetcher.h
index 1009d33..418e896 100644
--- a/device/gamepad/nintendo_data_fetcher.h
+++ b/device/gamepad/nintendo_data_fetcher.h
@@ -10,6 +10,7 @@
 #include <unordered_map>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 #include "device/gamepad/nintendo_controller.h"
 #include "device/gamepad/public/cpp/gamepads.h"
diff --git a/device/gamepad/raw_input_data_fetcher_win.cc b/device/gamepad/raw_input_data_fetcher_win.cc
index 865d52e..68410743 100644
--- a/device/gamepad/raw_input_data_fetcher_win.cc
+++ b/device/gamepad/raw_input_data_fetcher_win.cc
@@ -10,6 +10,7 @@
 
 #include "base/bind.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "device/gamepad/gamepad_standard_mappings.h"
 #include "device/gamepad/gamepad_uma.h"
diff --git a/device/gamepad/raw_input_data_fetcher_win.h b/device/gamepad/raw_input_data_fetcher_win.h
index e7c00bd..334615e 100644
--- a/device/gamepad/raw_input_data_fetcher_win.h
+++ b/device/gamepad/raw_input_data_fetcher_win.h
@@ -16,6 +16,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/win/message_window.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 #include "device/gamepad/public/cpp/gamepad.h"
diff --git a/device/gamepad/wgi_data_fetcher_win.cc b/device/gamepad/wgi_data_fetcher_win.cc
index 407825df..b87b8a0e 100644
--- a/device/gamepad/wgi_data_fetcher_win.cc
+++ b/device/gamepad/wgi_data_fetcher_win.cc
@@ -19,7 +19,7 @@
 #include "base/strings/string_util_win.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/win/core_winrt_util.h"
 #include "base/win/hstring_reference.h"
 #include "base/win/windows_version.h"
diff --git a/device/gamepad/xbox_controller_mac.mm b/device/gamepad/xbox_controller_mac.mm
index 7d86fdb..48a5525 100644
--- a/device/gamepad/xbox_controller_mac.mm
+++ b/device/gamepad/xbox_controller_mac.mm
@@ -24,7 +24,6 @@
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_ioobject.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/gamepad/gamepad_uma.h"
 
 namespace device {
diff --git a/device/gamepad/xbox_data_fetcher_mac.cc b/device/gamepad/xbox_data_fetcher_mac.cc
index 1cebdfb..86cfd64 100644
--- a/device/gamepad/xbox_data_fetcher_mac.cc
+++ b/device/gamepad/xbox_data_fetcher_mac.cc
@@ -19,6 +19,7 @@
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/gamepad_id_list.h"
 
 namespace device {
diff --git a/device/gamepad/xbox_data_fetcher_mac.h b/device/gamepad/xbox_data_fetcher_mac.h
index 6ec4cb35..53c8b686 100644
--- a/device/gamepad/xbox_data_fetcher_mac.h
+++ b/device/gamepad/xbox_data_fetcher_mac.h
@@ -16,6 +16,7 @@
 #include "base/mac/scoped_ionotificationportref.h"
 #include "base/mac/scoped_ioobject.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 #include "device/gamepad/xbox_controller_mac.h"
 
diff --git a/device/gamepad/xbox_hid_controller_unittest.cc b/device/gamepad/xbox_hid_controller_unittest.cc
index 10184b1..6641e2a 100644
--- a/device/gamepad/xbox_hid_controller_unittest.cc
+++ b/device/gamepad/xbox_hid_controller_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "device/gamepad/hid_writer.h"
 #include "device/gamepad/public/mojom/gamepad.mojom.h"
diff --git a/device/gamepad/xinput_data_fetcher_win.cc b/device/gamepad/xinput_data_fetcher_win.cc
index 2dfa993..eb8b8f8 100644
--- a/device/gamepad/xinput_data_fetcher_win.cc
+++ b/device/gamepad/xinput_data_fetcher_win.cc
@@ -13,6 +13,7 @@
 #include "base/callback_helpers.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 
diff --git a/device/gamepad/xinput_data_fetcher_win.h b/device/gamepad/xinput_data_fetcher_win.h
index f09d582..fe8aa116 100644
--- a/device/gamepad/xinput_data_fetcher_win.h
+++ b/device/gamepad/xinput_data_fetcher_win.h
@@ -21,6 +21,7 @@
 #include "base/compiler_specific.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_native_library.h"
+#include "base/task/sequenced_task_runner.h"
 #include "device/gamepad/gamepad_data_fetcher.h"
 #include "device/gamepad/gamepad_standard_mappings.h"
 #include "device/gamepad/public/cpp/gamepads.h"
diff --git a/device/vr/android/arcore/ar_compositor_frame_sink.cc b/device/vr/android/arcore/ar_compositor_frame_sink.cc
index 5a82115..900f8864 100644
--- a/device/vr/android/arcore/ar_compositor_frame_sink.cc
+++ b/device/vr/android/arcore/ar_compositor_frame_sink.cc
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/surface_draw_quad.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
diff --git a/device/vr/android/arcore/ar_image_transport.cc b/device/vr/android/arcore/ar_image_transport.cc
index 1aa28dc3..e4db5546 100644
--- a/device/vr/android/arcore/ar_image_transport.cc
+++ b/device/vr/android/arcore/ar_image_transport.cc
@@ -7,6 +7,7 @@
 #include "base/android/android_hardware_buffer_compat.h"
 #include "base/android/scoped_hardware_buffer_handle.h"
 #include "base/containers/queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
 #include "device/vr/android/mailbox_to_surface_bridge.h"
diff --git a/device/vr/android/arcore/arcore_device.cc b/device/vr/android/arcore/arcore_device.cc
index 9933a76..3efe756 100644
--- a/device/vr/android/arcore/arcore_device.cc
+++ b/device/vr/android/arcore/arcore_device.cc
@@ -11,6 +11,7 @@
 #include "base/containers/contains.h"
 #include "base/no_destructor.h"
 #include "base/numerics/math_constants.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "device/vr/android/arcore/ar_image_transport.h"
 #include "device/vr/android/arcore/arcore_gl.h"
diff --git a/device/vr/android/arcore/arcore_device.h b/device/vr/android/arcore/arcore_device.h
index d01cdaf..8a268808e 100644
--- a/device/vr/android/arcore/arcore_device.h
+++ b/device/vr/android/arcore/arcore_device.h
@@ -13,6 +13,7 @@
 #include "base/android/jni_android.h"
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "device/vr/android/arcore/arcore_gl.h"
 #include "device/vr/public/cpp/xr_frame_sink_client.h"
 #include "device/vr/vr_device.h"
diff --git a/device/vr/android/arcore/arcore_impl.cc b/device/vr/android/arcore/arcore_impl.cc
index 083d061..599eb56 100644
--- a/device/vr/android/arcore/arcore_impl.cc
+++ b/device/vr/android/arcore/arcore_impl.cc
@@ -12,6 +12,7 @@
 #include "base/numerics/checked_math.h"
 #include "base/numerics/math_constants.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "base/types/pass_key.h"
 #include "device/vr/android/arcore/arcore_math_utils.h"
diff --git a/device/vr/android/arcore/arcore_impl.h b/device/vr/android/arcore/arcore_impl.h
index 2b949d9..9434b0d 100644
--- a/device/vr/android/arcore/arcore_impl.h
+++ b/device/vr/android/arcore/arcore_impl.h
@@ -6,6 +6,7 @@
 #define DEVICE_VR_ANDROID_ARCORE_ARCORE_IMPL_H_
 
 #include "base/component_export.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/types/id_type.h"
 #include "device/vr/android/arcore/arcore.h"
diff --git a/device/vr/openxr/openxr_api_wrapper.cc b/device/vr/openxr/openxr_api_wrapper.cc
index 879a933..68394da 100644
--- a/device/vr/openxr/openxr_api_wrapper.cc
+++ b/device/vr/openxr/openxr_api_wrapper.cc
@@ -14,6 +14,7 @@
 #include "base/containers/contains.h"
 #include "base/notreached.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "components/viz/common/gpu/context_provider.h"
 #include "device/base/features.h"
diff --git a/device/vr/orientation/orientation_device_provider_unittest.cc b/device/vr/orientation/orientation_device_provider_unittest.cc
index df36e72..92d1149 100644
--- a/device/vr/orientation/orientation_device_provider_unittest.cc
+++ b/device/vr/orientation/orientation_device_provider_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/vr/orientation/orientation_device.h"
 #include "device/vr/orientation/orientation_device_provider.h"
 #include "device/vr/test/fake_orientation_provider.h"
diff --git a/device/vr/orientation/orientation_device_unittest.cc b/device/vr/orientation/orientation_device_unittest.cc
index 9be3053..8be524e 100644
--- a/device/vr/orientation/orientation_device_unittest.cc
+++ b/device/vr/orientation/orientation_device_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/vr/orientation/orientation_device.h"
 #include "device/vr/orientation/orientation_session.h"
 #include "device/vr/test/fake_orientation_provider.h"
diff --git a/device/vr/windows/compositor_base.cc b/device/vr/windows/compositor_base.cc
index 594fa7bc..9404107a 100644
--- a/device/vr/windows/compositor_base.cc
+++ b/device/vr/windows/compositor_base.cc
@@ -5,6 +5,7 @@
 #include "device/vr/windows/compositor_base.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "base/types/cxx23_to_underlying.h"
 #include "build/build_config.h"
diff --git a/device/vr/windows/compositor_base.h b/device/vr/windows/compositor_base.h
index ecee2f5..317c9a4 100644
--- a/device/vr/windows/compositor_base.h
+++ b/device/vr/windows/compositor_base.h
@@ -6,6 +6,7 @@
 #define DEVICE_VR_WINDOWS_COMPOSITOR_BASE_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/docs/code_reviews.md b/docs/code_reviews.md
index ed4aed3..074091f 100644
--- a/docs/code_reviews.md
+++ b/docs/code_reviews.md
@@ -185,10 +185,11 @@
 ```
 per-file *_messages*.h=set noparent
 per-file *_messages*.h=file://ipc/SECURITY_OWNERS
+```
 
 File globbing is supported using the
-[simple path expression format](https://github.com/GerritCodeReview/plugins_code-owners/blob/master/resources/Documentation/path-expressions.md#simplePathExpressions)
-```
+[simple path expression](https://github.com/GerritCodeReview/plugins_code-owners/blob/master/resources/Documentation/path-expressions.md#simple-path-expressions)
+format.
 
 ### Owners-Override
 
diff --git a/docs/workflow/debugging-with-swarming.md b/docs/workflow/debugging-with-swarming.md
index d0db5b9..6cbf6b62 100644
--- a/docs/workflow/debugging-with-swarming.md
+++ b/docs/workflow/debugging-with-swarming.md
@@ -78,6 +78,16 @@
 Note you might need `--swarming-os Ubuntu-14.04` if you get an error like,
 `UnboundLocalError: local variable 'dbus_pid' referenced before assignment`.
 
+Web tests can be also run on swarmed. However:
+- the only supported output folders are `Debug` and `Release`
+- `--no-test-flags` must be specified.
+
+For example, you can run all Web Platform Tests inside `<some-wpt-folder>` like this:
+```
+$ autoninja -C out/Release blink_tests
+$ tools/run-swarmed.py --no-test-flags out/Release blink_wpt_tests <some-wpt-folder>
+```
+
 ### mb.py run
 
 Similar to `tools/run-swarmed.py`, `mb.py run` bundles much of the logic into a
diff --git a/extensions/browser/api/bluetooth/bluetooth_event_router.cc b/extensions/browser/api/bluetooth/bluetooth_event_router.cc
index 84bb1bde..3fd27ac 100644
--- a/extensions/browser/api/bluetooth/bluetooth_event_router.cc
+++ b/extensions/browser/api/bluetooth/bluetooth_event_router.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/device_event_log/device_event_log.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/extensions/browser/api/lock_screen_data/lock_screen_item_storage.cc b/extensions/browser/api/lock_screen_data/lock_screen_item_storage.cc
index c97bde4..1f00863 100644
--- a/extensions/browser/api/lock_screen_data/lock_screen_item_storage.cc
+++ b/extensions/browser/api/lock_screen_data/lock_screen_item_storage.cc
@@ -11,6 +11,7 @@
 #include "base/guid.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/values.h"
 #include "components/prefs/pref_registry_simple.h"
diff --git a/extensions/browser/api/lock_screen_data/lock_screen_value_store_migrator_impl_unittest.cc b/extensions/browser/api/lock_screen_data/lock_screen_value_store_migrator_impl_unittest.cc
index 5771dd7..e1170891 100644
--- a/extensions/browser/api/lock_screen_data/lock_screen_value_store_migrator_impl_unittest.cc
+++ b/extensions/browser/api/lock_screen_data/lock_screen_value_store_migrator_impl_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/callback_helpers.h"
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/value_store/test_value_store_factory.h"
 #include "components/value_store/testing_value_store.h"
diff --git a/extensions/browser/api/metrics_private/metrics_private_api.cc b/extensions/browser/api/metrics_private/metrics_private_api.cc
index f1195a4..37088f8 100644
--- a/extensions/browser/api/metrics_private/metrics_private_api.cc
+++ b/extensions/browser/api/metrics_private/metrics_private_api.cc
@@ -19,6 +19,7 @@
 #include "base/metrics/statistics_recorder.h"
 #include "base/metrics/user_metrics.h"
 #include "base/strings/strcat.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/variations/variations_associated_data.h"
 #include "content/public/browser/histogram_fetcher.h"
 #include "extensions/browser/api/extensions_api_client.h"
diff --git a/extensions/browser/api/networking_private/networking_private_linux.h b/extensions/browser/api/networking_private/networking_private_linux.h
index 2f25933..681ebee 100644
--- a/extensions/browser/api/networking_private/networking_private_linux.h
+++ b/extensions/browser/api/networking_private/networking_private_linux.h
@@ -12,6 +12,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/values.h"
 #include "components/keyed_service/core/keyed_service.h"
diff --git a/extensions/browser/api/offscreen/audio_lifetime_enforcer.cc b/extensions/browser/api/offscreen/audio_lifetime_enforcer.cc
index fa816e47..5467328 100644
--- a/extensions/browser/api/offscreen/audio_lifetime_enforcer.cc
+++ b/extensions/browser/api/offscreen/audio_lifetime_enforcer.cc
@@ -4,6 +4,7 @@
 
 #include "extensions/browser/api/offscreen/audio_lifetime_enforcer.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "extensions/browser/offscreen_document_host.h"
 
diff --git a/extensions/browser/api/storage/backend_task_runner.cc b/extensions/browser/api/storage/backend_task_runner.cc
index aea1bb7..9789578 100644
--- a/extensions/browser/api/storage/backend_task_runner.cc
+++ b/extensions/browser/api/storage/backend_task_runner.cc
@@ -4,6 +4,7 @@
 
 #include "extensions/browser/api/storage/backend_task_runner.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "extensions/browser/extension_file_task_runner.h"
 
 namespace extensions {
diff --git a/extensions/browser/api_test_utils.cc b/extensions/browser/api_test_utils.cc
index c79f543..22c4b54 100644
--- a/extensions/browser/api_test_utils.cc
+++ b/extensions/browser/api_test_utils.cc
@@ -212,7 +212,7 @@
                  std::unique_ptr<ExtensionFunctionDispatcher> dispatcher,
                  RunFunctionFlags flags) {
   SendResponseHelper response_helper(function);
-  function->SetArgs(base::Value(std::move(args)));
+  function->SetArgs(std::move(args));
 
   CHECK(dispatcher);
   function->SetDispatcher(dispatcher->AsWeakPtr());
diff --git a/extensions/browser/app_window/app_window.cc b/extensions/browser/app_window/app_window.cc
index 32298a2..0419d6b90a 100644
--- a/extensions/browser/app_window/app_window.cc
+++ b/extensions/browser/app_window/app_window.cc
@@ -17,7 +17,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/extensions/browser/extension_file_task_runner.h b/extensions/browser/extension_file_task_runner.h
index cd32c0c0..a6948bc53 100644
--- a/extensions/browser/extension_file_task_runner.h
+++ b/extensions/browser/extension_file_task_runner.h
@@ -6,12 +6,9 @@
 #define EXTENSIONS_BROWSER_EXTENSION_FILE_TASK_RUNNER_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 
-namespace base {
-class SequencedTaskRunner;
-}
-
 namespace extensions {
 
 // Returns the singleton instance of the task runner to be used for most
diff --git a/extensions/browser/extension_function.cc b/extensions/browser/extension_function.cc
index 7285dfe..faadf4d 100644
--- a/extensions/browser/extension_function.cc
+++ b/extensions/browser/extension_function.cc
@@ -19,6 +19,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/no_destructor.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/memory_dump_manager.h"
@@ -547,10 +548,9 @@
   RespondWithError(std::move(violation_error));
 }
 
-void ExtensionFunction::SetArgs(base::Value args) {
-  DCHECK(args.is_list());
+void ExtensionFunction::SetArgs(base::Value::List args) {
   DCHECK(!args_.has_value());
-  args_ = std::move(args).TakeList();
+  args_ = std::move(args);
 }
 
 const base::Value::List* ExtensionFunction::GetResultListForTest() const {
diff --git a/extensions/browser/extension_function.h b/extensions/browser/extension_function.h
index d9c1511..e264d8b 100644
--- a/extensions/browser/extension_function.h
+++ b/extensions/browser/extension_function.h
@@ -230,9 +230,8 @@
   // returns an error.
   virtual void OnQuotaExceeded(std::string violation_error);
 
-  // Specifies the raw arguments to the function, as a JSON value. Expects a
-  // base::Value of type LIST.
-  void SetArgs(base::Value args);
+  // Specifies the raw arguments to the function, as a JSON value.
+  void SetArgs(base::Value::List args);
 
   // Retrieves the results of the function as a base::Value::List for testing
   // purposes.
diff --git a/extensions/browser/extension_function_dispatcher.cc b/extensions/browser/extension_function_dispatcher.cc
index bad28683..846f01de 100644
--- a/extensions/browser/extension_function_dispatcher.cc
+++ b/extensions/browser/extension_function_dispatcher.cc
@@ -677,7 +677,7 @@
     return nullptr;
   }
 
-  function->SetArgs(base::Value(params.arguments.Clone()));
+  function->SetArgs(params.arguments.Clone());
 
   const Feature::Context context_type = process_map.GetMostLikelyContextType(
       extension, requesting_process_id, rfh_url);
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index b7f3b993..0e8ac68 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1088,7 +1088,7 @@
   DELETED_SEARCHENGINESPRIVATE_REMOVESEARCHENGINE = 1027,
   DELETED_SEARCHENGINESPRIVATE_UPDATESEARCHENGINE = 1028,
   DELETED_SEARCHENGINESPRIVATE_OPTINTOHOTWORDING = 1029,
-  WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM = 1030,
+  DELETED_WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM = 1030,
   DELETED_WEBSTOREWIDGETPRIVATE_GETSTRINGS = 1031,
   WEBRTCDESKTOPCAPTUREPRIVATE_CHOOSEDESKTOPMEDIA = 1032,
   WEBRTCDESKTOPCAPTUREPRIVATE_CANCELCHOOSEDESKTOPMEDIA = 1033,
diff --git a/extensions/browser/extension_registry_observer.h b/extensions/browser/extension_registry_observer.h
index c5e00ae..6b9dc47 100644
--- a/extensions/browser/extension_registry_observer.h
+++ b/extensions/browser/extension_registry_observer.h
@@ -48,7 +48,7 @@
 // want to see "what are the enabled extensions".
 class ExtensionRegistryObserver {
  public:
-  virtual ~ExtensionRegistryObserver() {}
+  virtual ~ExtensionRegistryObserver() = default;
 
   // Called after an extension is loaded. The extension will exclusively exist
   // in the enabled_extensions set of ExtensionRegistry.
diff --git a/extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.cc b/extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.cc
index ee90e13f..7b6a9a2a 100644
--- a/extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.cc
+++ b/extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.cc
@@ -5,6 +5,7 @@
 #include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "base/time/time.h"
 #include "components/guest_view/browser/test_guest_view_manager.h"
diff --git a/extensions/browser/image_sanitizer.h b/extensions/browser/image_sanitizer.h
index 0f1bc4cf..fd87dd3 100644
--- a/extensions/browser/image_sanitizer.h
+++ b/extensions/browser/image_sanitizer.h
@@ -13,6 +13,7 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/mojom/image_decoder.mojom.h"
diff --git a/extensions/browser/json_file_sanitizer.h b/extensions/browser/json_file_sanitizer.h
index a5e767a..b1212030 100644
--- a/extensions/browser/json_file_sanitizer.h
+++ b/extensions/browser/json_file_sanitizer.h
@@ -12,6 +12,7 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/mojom/json_parser.mojom.h"
diff --git a/extensions/browser/path_util.cc b/extensions/browser/path_util.cc
index 2381541..6867bc9 100644
--- a/extensions/browser/path_util.cc
+++ b/extensions/browser/path_util.cc
@@ -8,7 +8,6 @@
 #include "base/files/file_util.h"
 #include "base/path_service.h"
 #include "base/strings/sys_string_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "extensions/browser/extension_file_task_runner.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/extensions/browser/process_manager.h b/extensions/browser/process_manager.h
index 8dd120b9..af8b5c2 100644
--- a/extensions/browser/process_manager.h
+++ b/extensions/browser/process_manager.h
@@ -20,6 +20,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/scoped_multi_source_observation.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/devtools_agent_host_observer.h"
 #include "content/public/browser/render_process_host.h"
diff --git a/extensions/browser/sandboxed_unpacker_unittest.cc b/extensions/browser/sandboxed_unpacker_unittest.cc
index 5b522dd..5b81f50 100644
--- a/extensions/browser/sandboxed_unpacker_unittest.cc
+++ b/extensions/browser/sandboxed_unpacker_unittest.cc
@@ -20,8 +20,8 @@
 #include "base/strings/pattern.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "components/crx_file/id_util.h"
 #include "components/services/unzip/content/unzip_service.h"
diff --git a/extensions/browser/updater/extension_installer.cc b/extensions/browser/updater/extension_installer.cc
index c99551c2..293fc1a 100644
--- a/extensions/browser/updater/extension_installer.cc
+++ b/extensions/browser/updater/extension_installer.cc
@@ -12,7 +12,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/update_client/update_client_errors.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/extensions/browser/updater/extension_installer_unittest.cc b/extensions/browser/updater/extension_installer_unittest.cc
index 20275d47..41acc5e 100644
--- a/extensions/browser/updater/extension_installer_unittest.cc
+++ b/extensions/browser/updater/extension_installer_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/update_client/update_client.h"
 #include "components/update_client/update_client_errors.h"
 #include "content/public/test/test_utils.h"
diff --git a/extensions/browser/updater/update_data_provider_unittest.cc b/extensions/browser/updater/update_data_provider_unittest.cc
index 51df0a13..2a80a045 100644
--- a/extensions/browser/updater/update_data_provider_unittest.cc
+++ b/extensions/browser/updater/update_data_provider_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/update_client/update_client.h"
 #include "extensions/browser/disable_reason.h"
 #include "extensions/browser/extension_prefs.h"
diff --git a/extensions/browser/updater/update_service_unittest.cc b/extensions/browser/updater/update_service_unittest.cc
index dd6ce57..074af6a 100644
--- a/extensions/browser/updater/update_service_unittest.cc
+++ b/extensions/browser/updater/update_service_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "components/crx_file/id_util.h"
 #include "components/update_client/crx_update_item.h"
diff --git a/extensions/browser/zipfile_installer.cc b/extensions/browser/zipfile_installer.cc
index 3dc3ac3e..8a493ee 100644
--- a/extensions/browser/zipfile_installer.cc
+++ b/extensions/browser/zipfile_installer.cc
@@ -10,6 +10,7 @@
 #include "base/json/json_reader.h"
 #include "base/path_service.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/services/unzip/content/unzip_service.h"
 #include "components/services/unzip/public/cpp/unzip.h"
 #include "components/services/unzip/public/mojom/unzipper.mojom.h"
diff --git a/extensions/browser/zipfile_installer.h b/extensions/browser/zipfile_installer.h
index f000073..7e532bc 100644
--- a/extensions/browser/zipfile_installer.h
+++ b/extensions/browser/zipfile_installer.h
@@ -14,6 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/extensions/common/manifest_handlers/file_handler_manifest_unittest.cc b/extensions/common/manifest_handlers/file_handler_manifest_unittest.cc
index 074e696..5e217f6 100644
--- a/extensions/common/manifest_handlers/file_handler_manifest_unittest.cc
+++ b/extensions/common/manifest_handlers/file_handler_manifest_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "components/services/app_service/public/cpp/file_handler_info.h"
 
+#include "base/memory/scoped_refptr.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/values_test_util.h"
@@ -328,7 +329,6 @@
           }])",
           "Invalid value for 'file_handlers[0]'. `accept` mime type "
           "must have exactly one slash.",
-
       },
       {
           "Error if `accept` has a mime type in the wrong format.",
@@ -339,7 +339,6 @@
           }])",
           "Invalid value for 'file_handlers[0]'. `accept` mime type "
           "must have exactly one slash.",
-
       },
       {
           "`accept` must have the correct type to represent the file "
@@ -351,7 +350,6 @@
           }])",
           "Invalid value for 'file_handlers[0]'. `accept` must have "
           "a valid file extension.",
-
       },
       {
           "Error if `accept` is empty.",
@@ -361,7 +359,6 @@
             "accept": {}
           }])",
           "Invalid value for 'file_handlers[0]'. `accept` cannot be empty.",
-
       },
       {
           "Error if `accept` is empty.",
@@ -372,7 +369,6 @@
           }])",
           "Invalid value for 'file_handlers[0]'. `accept` file "
           "extension must have a value.",
-
       },
       {
           "Error if `accept` is empty.",
diff --git a/extensions/common/mojom/api_permission_id.mojom b/extensions/common/mojom/api_permission_id.mojom
index 6c077d02..2dc3b55 100644
--- a/extensions/common/mojom/api_permission_id.mojom
+++ b/extensions/common/mojom/api_permission_id.mojom
@@ -188,7 +188,7 @@
   kWebrtcDesktopCapturePrivate = 161,
   kWebrtcLoggingPrivate = 162,
   kWebstorePrivate = 163,
-  kWebstoreWidgetPrivate = 164,
+  kDeleted_WebstoreWidgetPrivate = 164,
   kWebView = 165,
   kWindowShape = 166,
   kDeleted_ScreenlockPrivate = 167,
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
index 20b2c776..9848a3d4 100644
--- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
+++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -15,7 +15,7 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "content/public/renderer/render_frame.h"
 #include "content/public/renderer/render_thread.h"
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index 9b72981..538bba1 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/extensions/renderer/script_injection_manager.cc b/extensions/renderer/script_injection_manager.cc
index fefe974..9188655 100644
--- a/extensions/renderer/script_injection_manager.cc
+++ b/extensions/renderer/script_injection_manager.cc
@@ -13,7 +13,6 @@
 #include "base/feature_list.h"
 #include "base/memory/weak_ptr.h"
 #include "base/ranges/algorithm.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "content/public/renderer/render_frame.h"
 #include "content/public/renderer/render_frame_observer.h"
diff --git a/extensions/shell/browser/shell_desktop_controller_aura_browsertest.cc b/extensions/shell/browser/shell_desktop_controller_aura_browsertest.cc
index da3952ad..4e6641d 100644
--- a/extensions/shell/browser/shell_desktop_controller_aura_browsertest.cc
+++ b/extensions/shell/browser/shell_desktop_controller_aura_browsertest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/time/time.h"
 #include "components/keep_alive_registry/keep_alive_registry.h"
diff --git a/extensions/test/extension_test_notification_observer.cc b/extensions/test/extension_test_notification_observer.cc
index 005cc82..720d8e4 100644
--- a/extensions/test/extension_test_notification_observer.cc
+++ b/extensions/test/extension_test_notification_observer.cc
@@ -133,22 +133,6 @@
          !last_loaded_extension_id_.empty();
 }
 
-void ExtensionTestNotificationObserver::Watch(
-    int type,
-    const content::NotificationSource& source) {
-  CHECK(!observer_);
-  observer_ =
-      std::make_unique<content::WindowedNotificationObserver>(type, source);
-  registrar_.Add(this, type, source);
-}
-
-void ExtensionTestNotificationObserver::Wait() {
-  observer_->Wait();
-
-  registrar_.RemoveAll();
-  observer_.reset();
-}
-
 void ExtensionTestNotificationObserver::Observe(
     int type,
     const content::NotificationSource& source,
diff --git a/extensions/test/extension_test_notification_observer.h b/extensions/test/extension_test_notification_observer.h
index 22d504c..bdbff3a6 100644
--- a/extensions/test/extension_test_notification_observer.h
+++ b/extensions/test/extension_test_notification_observer.h
@@ -46,15 +46,6 @@
   // successfully.
   bool WaitForCrxInstallerDone();
 
-  // Watch for the given event type from the given source.
-  // After calling this method, call Wait() to ensure that RunMessageLoop() is
-  // called appropriately and cleanup is performed.
-  void Watch(int type, const content::NotificationSource& source);
-
-  // After registering one or more event types with Watch(), call
-  // this method to run the message loop and perform cleanup.
-  void Wait();
-
   const std::string& last_loaded_extension_id() {
     return last_loaded_extension_id_;
   }
diff --git a/fuchsia_web/runners/BUILD.gn b/fuchsia_web/runners/BUILD.gn
index fcc59664..35afef4 100644
--- a/fuchsia_web/runners/BUILD.gn
+++ b/fuchsia_web/runners/BUILD.gn
@@ -84,7 +84,7 @@
     "//components/fuchsia_component_support:dynamic_component_host",
     "//fuchsia_web/cast_streaming",
     "//fuchsia_web/runners/common/modular",
-    "//fuchsia_web/webinstance_host:webinstance_host_v1",
+    "//fuchsia_web/webinstance_host",
     "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.component.decl",
     "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.diagnostics",
     "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.legacymetrics",
@@ -122,7 +122,7 @@
     "//build:chromecast_buildflags",
     "//components/fuchsia_component_support",
     "//fuchsia_web/common",
-    "//fuchsia_web/webinstance_host:webinstance_host_v1",
+    "//fuchsia_web/webinstance_host",
     "//third_party/fuchsia-sdk/sdk/pkg/sys_inspect_cpp",
   ]
 
diff --git a/fuchsia_web/runners/cast/cast_runner.cc b/fuchsia_web/runners/cast/cast_runner.cc
index 9645e16..59e4277 100644
--- a/fuchsia_web/runners/cast/cast_runner.cc
+++ b/fuchsia_web/runners/cast/cast_runner.cc
@@ -16,7 +16,6 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/fuchsia/file_utils.h"
-#include "base/fuchsia/filtered_service_directory.h"
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/fuchsia/process_context.h"
 #include "base/logging.h"
@@ -30,7 +29,7 @@
 #include "fuchsia_web/runners/cast/cast_streaming.h"
 #include "fuchsia_web/runners/cast/pending_cast_component.h"
 #include "fuchsia_web/runners/common/web_content_runner.h"
-#include "fuchsia_web/webinstance_host/web_instance_host_v1.h"
+#include "fuchsia_web/webinstance_host/web_instance_host.h"
 #include "url/gurl.h"
 
 namespace {
@@ -40,44 +39,6 @@
 constexpr char kAudioCapturerWithEchoCancellationSwitch[] =
     "audio-capturer-with-echo-cancellation";
 
-// List of services in CastRunner's Service Directory that will be passed
-// through to each WebEngine instance it creates. Each service in
-// web_instance.cmx/.cml must appear on a line below, and cast_runner.cml
-// must include all of these services.
-static constexpr const char* kServices[] = {
-    "fuchsia.accessibility.semantics.SemanticsManager",
-    "fuchsia.buildinfo.Provider",
-    "fuchsia.camera3.DeviceWatcher",
-    "fuchsia.device.NameProvider",
-    "fuchsia.fonts.Provider",
-    "fuchsia.hwinfo.Product",
-    "fuchsia.input.virtualkeyboard.ControllerCreator",
-    "fuchsia.intl.PropertyProvider",
-    "fuchsia.legacymetrics.MetricsRecorder",
-    "fuchsia.logger.LogSink",
-    "fuchsia.media.Audio",
-    "fuchsia.media.AudioDeviceEnumerator",
-    "fuchsia.media.ProfileProvider",
-    "fuchsia.media.SessionAudioConsumerFactory",
-    "fuchsia.media.drm.PlayReady",
-    "fuchsia.media.drm.Widevine",
-    "fuchsia.mediacodec.CodecFactory",
-    "fuchsia.memorypressure.Provider",
-    "fuchsia.net.interfaces.State",
-    "fuchsia.net.name.Lookup",
-    "fuchsia.posix.socket.Provider",
-    "fuchsia.process.Launcher",
-    "fuchsia.settings.Display",
-    "fuchsia.sysmem.Allocator",
-    "fuchsia.tracing.perfetto.ProducerConnector",
-    "fuchsia.tracing.provider.Registry",
-    "fuchsia.ui.composition.Allocator",
-    "fuchsia.ui.composition.Flatland",
-    "fuchsia.ui.input3.Keyboard",
-    "fuchsia.ui.scenic.Scenic",
-    "fuchsia.vulkan.loader.Loader",
-};
-
 // Names used to partition the Runner's persistent storage for different uses.
 constexpr char kCdmDataSubdirectoryName[] = "cdm_data";
 constexpr char kProfileSubdirectoryName[] = "web_profile";
@@ -203,33 +164,19 @@
 
 }  // namespace
 
-CastRunner::CastRunner(WebInstanceHostV1& web_instance_host, Options options)
+CastRunner::CastRunner(WebInstanceHost& web_instance_host, Options options)
     : web_instance_host_(web_instance_host),
       is_headless_(options.headless),
       disable_codegen_(options.disable_codegen),
-      main_services_(std::make_unique<base::FilteredServiceDirectory>(
-          base::ComponentContextForProcess()->svc())),
       main_context_(std::make_unique<WebContentRunner>(
           base::BindRepeating(
-              &WebInstanceHostV1::CreateInstanceForContextWithCopiedArgs,
+              &WebInstanceHost::CreateInstanceForContextWithCopiedArgs,
               base::Unretained(&web_instance_host_.get())),
           base::BindRepeating(&CastRunner::GetMainWebInstanceConfig,
-                              base::Unretained(this)))),
-      isolated_services_(std::make_unique<base::FilteredServiceDirectory>(
-          base::ComponentContextForProcess()->svc())) {
+                              base::Unretained(this)))) {
   // Delete persisted data staged for deletion during the previous run.
   DeleteStagedForDeletionDirectoryIfExists();
 
-  // Specify the services to connect via the Runner process' service directory.
-  for (const char* name : kServices) {
-    zx_status_t status = main_services_->AddService(name);
-    ZX_CHECK(status == ZX_OK, status)
-        << "AddService(" << name << ") to main failed";
-    status = isolated_services_->AddService(name);
-    ZX_CHECK(status == ZX_OK, status)
-        << "AddService(" << name << ") to isolated failed";
-  }
-
   // Fetch the list of CORS-exempt headers to apply for all components launched
   // under this Runner.
   zx_status_t status = base::ComponentContextForProcess()->svc()->Connect(
@@ -426,10 +373,6 @@
   config.params.set_user_agent_product("CrKey");
   config.params.set_user_agent_version(chromecast::kFrozenCrKeyValue);
 
-  zx_status_t status = main_services_->ConnectClient(
-      config.params.mutable_service_directory()->NewRequest());
-  ZX_CHECK(status == ZX_OK, status) << "ConnectClient failed";
-
   if (!disable_vulkan_for_test_) {
     SetCdmParamsForMainContext(&config.params);
   }
@@ -459,10 +402,6 @@
   config.params.set_remote_debugging_port(kEphemeralRemoteDebuggingPort);
   config.params.set_content_directories(std::move(content_directories));
 
-  zx_status_t status = isolated_services_->ConnectClient(
-      config.params.mutable_service_directory()->NewRequest());
-  ZX_CHECK(status == ZX_OK, status) << "ConnectClient failed";
-
   return config;
 }
 
@@ -473,12 +412,6 @@
   ApplyCastStreamingContextParams(&config.params);
   config.params.set_remote_debugging_port(kEphemeralRemoteDebuggingPort);
 
-  // TODO(crbug.com/1069746): Use a different FilteredServiceDirectory for Cast
-  // Streaming Contexts.
-  zx_status_t status = main_services_->ConnectClient(
-      config.params.mutable_service_directory()->NewRequest());
-  ZX_CHECK(status == ZX_OK, status) << "ConnectClient failed";
-
   return config;
 }
 
@@ -509,7 +442,7 @@
   // Create an isolated context which will own the CastComponent.
   auto context = std::make_unique<WebContentRunner>(
       base::BindRepeating(
-          &WebInstanceHostV1::CreateInstanceForContextWithCopiedArgs,
+          &WebInstanceHost::CreateInstanceForContextWithCopiedArgs,
           base::Unretained(&web_instance_host_.get())),
       std::move(config));
   context->SetOnEmptyCallback(
diff --git a/fuchsia_web/runners/cast/cast_runner.cml b/fuchsia_web/runners/cast/cast_runner.cml
index 754d604..54eb1ca 100644
--- a/fuchsia_web/runners/cast/cast_runner.cml
+++ b/fuchsia_web/runners/cast/cast_runner.cml
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 {
   include: [
+    "//fuchsia_web/webinstance_host/web_instance_host.shard.cml",
     "inspect/client.shard.cml",
     "syslog/client.shard.cml",
     "vulkan/client.shard.cml",
@@ -71,59 +72,10 @@
       protocol: [
         "chromium.cast.ApplicationConfigManager",
         "chromium.cast.CorsExemptHeaderProvider",
-        // "fuchsia.feedback.CrashReportingProductRegister",
-      ]
-    },
-    {
-      // Capabilities used by the WebInstanceHost.
-      protocol: [
-        "fuchsia.feedback.ComponentDataRegister",
         "fuchsia.feedback.CrashReportingProductRegister",
-        "fuchsia.sys.Environment",
-        "fuchsia.sys.Loader",
       ]
     },
     {
-      // Capabilities to be passed to WebEngine instances.
-      protocol: [
-        "fuchsia.accessibility.semantics.SemanticsManager",
-        "fuchsia.buildinfo.Provider",
-        "fuchsia.device.NameProvider",
-        "fuchsia.fonts.Provider",
-        "fuchsia.hwinfo.Product",
-        "fuchsia.input.virtualkeyboard.ControllerCreator",
-        "fuchsia.intl.PropertyProvider",
-        "fuchsia.kernel.VmexResource",
-        "fuchsia.legacymetrics.MetricsRecorder",
-        "fuchsia.media.AudioDeviceEnumerator",
-        "fuchsia.media.ProfileProvider",
-        "fuchsia.media.SessionAudioConsumerFactory",
-        "fuchsia.mediacodec.CodecFactory",
-        "fuchsia.memorypressure.Provider",
-        "fuchsia.net.interfaces.State",
-        "fuchsia.net.name.Lookup",
-        "fuchsia.posix.socket.Provider",
-        "fuchsia.process.Launcher",
-        "fuchsia.settings.Display",
-        "fuchsia.ui.composition.Allocator",
-        "fuchsia.ui.composition.Flatland",
-        "fuchsia.ui.input3.Keyboard",
-        "fuchsia.ui.scenic.Scenic",
-      ]
-    },
-    {
-      // Optional capabilities to be passed to WebEngine instances.
-      protocol: [
-        "fuchsia.camera3.DeviceWatcher",
-        "fuchsia.media.Audio",
-        "fuchsia.media.drm.PlayReady",
-        "fuchsia.media.drm.Widevine",
-        "fuchsia.tracing.perfetto.ProducerConnector",
-        // "fuchsia.tracing.provider.Registry",
-      ],
-      availability: "optional"
-    },
-    {
       protocol: "fuchsia.component.Realm",
       from: "framework",
     },
diff --git a/fuchsia_web/runners/cast/cast_runner.h b/fuchsia_web/runners/cast/cast_runner.h
index baded0b..76f23e23 100644
--- a/fuchsia_web/runners/cast/cast_runner.h
+++ b/fuchsia_web/runners/cast/cast_runner.h
@@ -21,11 +21,7 @@
 #include "fuchsia_web/runners/common/web_content_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-namespace base {
-class FilteredServiceDirectory;
-}
-
-class WebInstanceHostV1;
+class WebInstanceHost;
 
 // ComponentRunner that runs Cast activities specified via cast/casts URIs.
 class CastRunner final : public fuchsia::component::runner::ComponentRunner,
@@ -48,7 +44,7 @@
   // `web_instance_host` is used to create a "main" instance to host Cast apps
   // and serve `FrameHost` instances, and isolated containers for apps that
   // need them.
-  CastRunner(WebInstanceHostV1& web_instance_host, Options options);
+  CastRunner(WebInstanceHost& web_instance_host, Options options);
   ~CastRunner() override;
 
   CastRunner(const CastRunner&) = delete;
@@ -126,7 +122,7 @@
   bool WasPersistedCacheErased();
 
   // Passed to WebContentRunners to use to create web_instance Components.
-  const raw_ref<WebInstanceHostV1> web_instance_host_;
+  const raw_ref<WebInstanceHost> web_instance_host_;
 
   // True if this Runner uses Context(s) with the HEADLESS feature set.
   const bool is_headless_;
@@ -138,11 +134,8 @@
   // Holds the main fuchsia.web.Context used to host CastComponents.
   // Note that although |main_context_| is actually a WebContentRunner, that is
   // only being used to maintain the Context for the hosted components.
-  const std::unique_ptr<base::FilteredServiceDirectory> main_services_;
   const std::unique_ptr<WebContentRunner> main_context_;
 
-  const std::unique_ptr<base::FilteredServiceDirectory> isolated_services_;
-
   // Holds `fuchsia.web.Context`s used to host isolated components.
   base::flat_set<std::unique_ptr<WebContentRunner>, base::UniquePtrComparator>
       isolated_contexts_;
diff --git a/fuchsia_web/runners/cast/cast_runner_integration_test.cc b/fuchsia_web/runners/cast/cast_runner_integration_test.cc
index 75c11266..895715e 100644
--- a/fuchsia_web/runners/cast/cast_runner_integration_test.cc
+++ b/fuchsia_web/runners/cast/cast_runner_integration_test.cc
@@ -37,7 +37,6 @@
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
 #include "fuchsia_web/common/string_util.h"
diff --git a/fuchsia_web/runners/cast/main.cc b/fuchsia_web/runners/cast/main.cc
index 032e2e9..8f894a8b 100644
--- a/fuchsia_web/runners/cast/main.cc
+++ b/fuchsia_web/runners/cast/main.cc
@@ -31,7 +31,7 @@
 #include "fuchsia_web/runners/cast/cast_runner.h"
 #include "fuchsia_web/runners/cast/cast_runner_switches.h"
 #include "fuchsia_web/runners/cast/cast_runner_v1.h"
-#include "fuchsia_web/webinstance_host/web_instance_host_v1.h"
+#include "fuchsia_web/webinstance_host/web_instance_host.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace {
@@ -135,7 +135,7 @@
       resolver_binding(outgoing_directory, &resolver);
 
   // Publish the fuchsia.component.runner.ComponentRunner for Cast apps.
-  WebInstanceHostV1 web_instance_host;
+  WebInstanceHost web_instance_host;
   CastRunner runner(
       web_instance_host,
       {.headless = command_line->HasSwitch(kForceHeadlessForTestsSwitch) ||
@@ -160,7 +160,7 @@
 
   // Allow web containers to be debugged, by end-to-end tests.
   base::ScopedServiceBinding<fuchsia::web::Debug> debug_binding(
-      outgoing_directory, web_instance_host.debug_api());
+      outgoing_directory, &web_instance_host.debug_api());
 
   if (command_line->HasSwitch(kDisableVulkanForTestsSwitch)) {
     runner.set_disable_vulkan_for_test();  // IN-TEST
diff --git a/fuchsia_web/runners/web/web_runner_smoke_test.cc b/fuchsia_web/runners/web/web_runner_smoke_test.cc
index 8b02445..1f2d7b2 100644
--- a/fuchsia_web/runners/web/web_runner_smoke_test.cc
+++ b/fuchsia_web/runners/web/web_runner_smoke_test.cc
@@ -16,7 +16,6 @@
 #include "base/process/process.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "net/test/embedded_test_server/http_request.h"
diff --git a/fuchsia_web/webengine/browser/content_directory_loader_factory.h b/fuchsia_web/webengine/browser/content_directory_loader_factory.h
index f616a2cc..b24aa0e 100644
--- a/fuchsia_web/webengine/browser/content_directory_loader_factory.h
+++ b/fuchsia_web/webengine/browser/content_directory_loader_factory.h
@@ -9,6 +9,7 @@
 #include <fuchsia/web/cpp/fidl.h>
 #include <lib/fidl/cpp/interface_handle.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "fuchsia_web/webengine/web_engine_export.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/fuchsia_web/webengine/browser/frame_impl_browsertest.cc b/fuchsia_web/webengine/browser/frame_impl_browsertest.cc
index 155138b..3fb3885 100644
--- a/fuchsia_web/webengine/browser/frame_impl_browsertest.cc
+++ b/fuchsia_web/webengine/browser/frame_impl_browsertest.cc
@@ -8,6 +8,7 @@
 
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/fuchsia/mem_buffer_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_future.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
diff --git a/fuchsia_web/webengine/browser/message_port.cc b/fuchsia_web/webengine/browser/message_port.cc
index fbbaa1b..93c4b99 100644
--- a/fuchsia_web/webengine/browser/message_port.cc
+++ b/fuchsia_web/webengine/browser/message_port.cc
@@ -22,6 +22,7 @@
 #include "base/fuchsia/mem_buffer_util.h"
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 namespace {
 
 using BlinkMessage = blink::WebMessagePort::Message;
diff --git a/fuchsia_web/webengine/browser/navigation_controller_impl.cc b/fuchsia_web/webengine/browser/navigation_controller_impl.cc
index d83978a..4ec61768 100644
--- a/fuchsia_web/webengine/browser/navigation_controller_impl.cc
+++ b/fuchsia_web/webengine/browser/navigation_controller_impl.cc
@@ -13,6 +13,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/typed_macros.h"
 #include "components/favicon/content/content_favicon_driver.h"
diff --git a/fuchsia_web/webengine/browser/navigation_policy_browsertest.cc b/fuchsia_web/webengine/browser/navigation_policy_browsertest.cc
index 5b587d92..bd5ca72 100644
--- a/fuchsia_web/webengine/browser/navigation_policy_browsertest.cc
+++ b/fuchsia_web/webengine/browser/navigation_policy_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include <fuchsia/web/cpp/fidl.h>
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/test/browser_test.h"
 #include "fuchsia_web/common/test/frame_test_util.h"
 #include "fuchsia_web/common/test/test_navigation_listener.h"
diff --git a/fuchsia_web/webengine/renderer/web_engine_audio_output_device.cc b/fuchsia_web/webengine/renderer/web_engine_audio_output_device.cc
index 18b36f2d..8c82304e 100644
--- a/fuchsia_web/webengine/renderer/web_engine_audio_output_device.cc
+++ b/fuchsia_web/webengine/renderer/web_engine_audio_output_device.cc
@@ -9,8 +9,8 @@
 #include "base/memory/shared_memory_mapping.h"
 #include "base/memory/writable_shared_memory_region.h"
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/base/audio_glitch_info.h"
 #include "media/base/audio_timestamp_helper.h"
 
diff --git a/fuchsia_web/webengine/renderer/web_engine_audio_renderer.cc b/fuchsia_web/webengine/renderer/web_engine_audio_renderer.cc
index a9a26bb..d6edfc9e 100644
--- a/fuchsia_web/webengine/renderer/web_engine_audio_renderer.cc
+++ b/fuchsia_web/webengine/renderer/web_engine_audio_renderer.cc
@@ -10,8 +10,6 @@
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "media/base/cdm_context.h"
 #include "media/base/decoder_buffer.h"
diff --git a/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.cc b/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.cc
index 9094e722..cdc8a1b 100644
--- a/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.cc
+++ b/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "fuchsia_web/webengine/renderer/web_engine_audio_renderer.h"
 #include "media/base/decoder_factory.h"
 #include "media/renderers/renderer_impl.h"
diff --git a/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.h b/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.h
index 41f08dd..08a400d8 100644
--- a/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.h
+++ b/fuchsia_web/webengine/renderer/web_engine_media_renderer_factory.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "fuchsia_web/webengine/mojom/web_engine_media_resource_provider.mojom.h"
 #include "media/base/renderer_factory.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/fuchsia_web/webinstance_host/web_instance_host.cc b/fuchsia_web/webinstance_host/web_instance_host.cc
index 33b9142..3758dc4 100644
--- a/fuchsia_web/webinstance_host/web_instance_host.cc
+++ b/fuchsia_web/webinstance_host/web_instance_host.cc
@@ -198,13 +198,13 @@
 void InstanceBuilder::AppendOffersForServices(
     const std::vector<std::string>& services) {
   for (const auto& service_name : services) {
-    dynamic_offers_.push_back(fcdecl::Offer::WithProtocol(
-        std::move(fcdecl::OfferProtocol()
-                      .set_source(fcdecl::Ref::WithParent({}))
-                      .set_source_name(service_name)
-                      .set_target_name(service_name)
-                      .set_dependency_type(fcdecl::DependencyType::STRONG)
-                      .set_availability(fcdecl::Availability::REQUIRED))));
+    dynamic_offers_.push_back(fcdecl::Offer::WithProtocol(std::move(
+        fcdecl::OfferProtocol()
+            .set_source(fcdecl::Ref::WithParent({}))
+            .set_source_name(service_name)
+            .set_target_name(service_name)
+            .set_dependency_type(fcdecl::DependencyType::STRONG)
+            .set_availability(fcdecl::Availability::SAME_AS_TARGET))));
   }
 }
 
@@ -503,10 +503,6 @@
                                               zx_status_t status) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  // Drop the hold on the instance's Binder.
-  auto count = instances_.erase(id);
-  DCHECK_EQ(count, 1UL);
-
   // Destroy the child instance.
   const std::string name(InstanceNameFromId(id));
   DestroyChild(*realm_, name);
@@ -514,6 +510,12 @@
   // Drop the directory subtree for the child instance.
   DestroyChildDirectory(GetWebInstancesCollectionDir(), name);
 
+  // Drop the hold on the instance's Binder. Note: destroying the InterfacePtr
+  // here also deletes the lambda into which `id` was bound, so `id` must not
+  // be touched after this next statement.
+  auto count = instances_.erase(id);
+  DCHECK_EQ(count, 1UL);
+
   if (instances_.empty()) {
     Uninitialize();
   }
diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc
index a82c7d1..e8608bb8 100644
--- a/gin/isolate_holder.cc
+++ b/gin/isolate_holder.cc
@@ -15,7 +15,6 @@
 #include "base/system/sys_info.h"
 #include "base/task/current_thread.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "gin/debug_impl.h"
 #include "gin/function_template.h"
diff --git a/gin/per_isolate_data.cc b/gin/per_isolate_data.cc
index 1ddbd2b40..b9c1f26 100644
--- a/gin/per_isolate_data.cc
+++ b/gin/per_isolate_data.cc
@@ -9,7 +9,6 @@
 #include "base/check.h"
 #include "base/notreached.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "gin/public/gin_embedders.h"
 #include "gin/v8_foreground_task_runner.h"
 #include "gin/v8_foreground_task_runner_with_locker.h"
diff --git a/gin/v8_foreground_task_runner.cc b/gin/v8_foreground_task_runner.cc
index e5376e83..d75db97 100644
--- a/gin/v8_foreground_task_runner.cc
+++ b/gin/v8_foreground_task_runner.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 
 namespace gin {
diff --git a/gin/v8_foreground_task_runner_with_locker.cc b/gin/v8_foreground_task_runner_with_locker.cc
index 2a3bea7..f1692c0 100644
--- a/gin/v8_foreground_task_runner_with_locker.cc
+++ b/gin/v8_foreground_task_runner_with_locker.cc
@@ -8,7 +8,6 @@
 #include "base/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "v8/include/v8-isolate.h"
 #include "v8/include/v8-locker.h"
diff --git a/gin/v8_isolate_memory_dump_provider.cc b/gin/v8_isolate_memory_dump_provider.cc
index 4c46cac0..ed1ec6abc 100644
--- a/gin/v8_isolate_memory_dump_provider.cc
+++ b/gin/v8_isolate_memory_dump_provider.cc
@@ -10,6 +10,7 @@
 #include "base/check_op.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/process_memory_dump.h"
 #include "gin/public/isolate_holder.h"
diff --git a/google_apis/common/base_requests.cc b/google_apis/common/base_requests.cc
index ea498cfd..66d2d441 100644
--- a/google_apis/common/base_requests.cc
+++ b/google_apis/common/base_requests.cc
@@ -15,6 +15,7 @@
 #include "base/json/json_reader.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "google_apis/common/request_sender.h"
diff --git a/google_apis/drive/drive_base_requests.cc b/google_apis/drive/drive_base_requests.cc
index b6b80c3d..4208ad7 100644
--- a/google_apis/drive/drive_base_requests.cc
+++ b/google_apis/drive/drive_base_requests.cc
@@ -19,7 +19,6 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "google_apis/common/request_sender.h"
 #include "google_apis/common/task_util.h"
diff --git a/google_apis/drive/drive_base_requests_unittest.cc b/google_apis/drive/drive_base_requests_unittest.cc
index f7d54e6..aa984b5f 100644
--- a/google_apis/drive/drive_base_requests_unittest.cc
+++ b/google_apis/drive/drive_base_requests_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/values.h"
 #include "google_apis/common/dummy_auth_service.h"
diff --git a/google_apis/drive/files_list_request_runner_unittest.cc b/google_apis/drive/files_list_request_runner_unittest.cc
index 4fa9963..675c6d8 100644
--- a/google_apis/drive/files_list_request_runner_unittest.cc
+++ b/google_apis/drive/files_list_request_runner_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "google_apis/common/dummy_auth_service.h"
 #include "google_apis/common/request_sender.h"
 #include "google_apis/drive/drive_base_requests.h"
diff --git a/google_apis/gcm/engine/checkin_request.cc b/google_apis/gcm/engine/checkin_request.cc
index bff920d0..9853964 100644
--- a/google_apis/gcm/engine/checkin_request.cc
+++ b/google_apis/gcm/engine/checkin_request.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 #include "google_apis/gcm/protocol/checkin.pb.h"
diff --git a/google_apis/gcm/engine/checkin_request.h b/google_apis/gcm/engine/checkin_request.h
index 9ac2f1e..5f286eec 100644
--- a/google_apis/gcm/engine/checkin_request.h
+++ b/google_apis/gcm/engine/checkin_request.h
@@ -13,6 +13,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "google_apis/gcm/base/gcm_export.h"
 #include "google_apis/gcm/protocol/android_checkin.pb.h"
diff --git a/google_apis/gcm/engine/connection_factory_impl.cc b/google_apis/gcm/engine/connection_factory_impl.cc
index e5c9a6c..20ac43c 100644
--- a/google_apis/gcm/engine/connection_factory_impl.cc
+++ b/google_apis/gcm/engine/connection_factory_impl.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "google_apis/gcm/engine/connection_handler_impl.h"
 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 #include "google_apis/gcm/protocol/mcs.pb.h"
diff --git a/google_apis/gcm/engine/connection_factory_impl.h b/google_apis/gcm/engine/connection_factory_impl.h
index 1328cb32..11d2661 100644
--- a/google_apis/gcm/engine/connection_factory_impl.h
+++ b/google_apis/gcm/engine/connection_factory_impl.h
@@ -12,6 +12,7 @@
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "google_apis/gcm/engine/connection_event_tracker.h"
 #include "google_apis/gcm/engine/connection_handler.h"
diff --git a/google_apis/gcm/engine/connection_handler_impl.cc b/google_apis/gcm/engine/connection_handler_impl.cc
index a7b08600..85bec84 100644
--- a/google_apis/gcm/engine/connection_handler_impl.cc
+++ b/google_apis/gcm/engine/connection_handler_impl.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "google/protobuf/io/coded_stream.h"
 #include "google/protobuf/io/zero_copy_stream_impl_lite.h"
 #include "google_apis/gcm/base/mcs_util.h"
diff --git a/google_apis/gcm/engine/connection_handler_impl.h b/google_apis/gcm/engine/connection_handler_impl.h
index 61561009..ddd65512 100644
--- a/google_apis/gcm/engine/connection_handler_impl.h
+++ b/google_apis/gcm/engine/connection_handler_impl.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "google_apis/gcm/engine/connection_handler.h"
diff --git a/google_apis/gcm/engine/gcm_request_test_base.h b/google_apis/gcm/engine/gcm_request_test_base.h
index a512994..c780636 100644
--- a/google_apis/gcm/engine/gcm_request_test_base.h
+++ b/google_apis/gcm/engine/gcm_request_test_base.h
@@ -7,7 +7,6 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/backoff_entry.h"
 #include "services/network/test/test_url_loader_factory.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/google_apis/gcm/engine/heartbeat_manager.cc b/google_apis/gcm/engine/heartbeat_manager.cc
index 14a022b..44a9a79 100644
--- a/google_apis/gcm/engine/heartbeat_manager.cc
+++ b/google_apis/gcm/engine/heartbeat_manager.cc
@@ -11,6 +11,7 @@
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/power_monitor/power_monitor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
diff --git a/google_apis/gcm/engine/heartbeat_manager.h b/google_apis/gcm/engine/heartbeat_manager.h
index b9bcb46..cfafaf7 100644
--- a/google_apis/gcm/engine/heartbeat_manager.h
+++ b/google_apis/gcm/engine/heartbeat_manager.h
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/power_monitor/power_observer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "google_apis/gcm/base/gcm_export.h"
 #include "google_apis/gcm/engine/connection_factory.h"
diff --git a/google_apis/gcm/engine/mcs_client.cc b/google_apis/gcm/engine/mcs_client.cc
index 70236cba..ed2e394 100644
--- a/google_apis/gcm/engine/mcs_client.cc
+++ b/google_apis/gcm/engine/mcs_client.cc
@@ -13,6 +13,7 @@
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/clock.h"
 #include "base/time/time.h"
diff --git a/google_apis/gcm/engine/mcs_client.h b/google_apis/gcm/engine/mcs_client.h
index 5b36be7..782c2f8 100644
--- a/google_apis/gcm/engine/mcs_client.h
+++ b/google_apis/gcm/engine/mcs_client.h
@@ -15,6 +15,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "google_apis/gcm/base/gcm_export.h"
 #include "google_apis/gcm/base/mcs_message.h"
 #include "google_apis/gcm/engine/connection_factory.h"
diff --git a/google_apis/gcm/engine/mcs_client_unittest.cc b/google_apis/gcm/engine/mcs_client_unittest.cc
index 453aef65..95204d7 100644
--- a/google_apis/gcm/engine/mcs_client_unittest.cc
+++ b/google_apis/gcm/engine/mcs_client_unittest.cc
@@ -17,6 +17,8 @@
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/simple_test_clock.h"
 #include "base/test/task_environment.h"
 #include "base/timer/timer.h"
diff --git a/google_apis/gcm/engine/registration_request.cc b/google_apis/gcm/engine/registration_request.cc
index 20caa24..77ac54d 100644
--- a/google_apis/gcm/engine/registration_request.cc
+++ b/google_apis/gcm/engine/registration_request.cc
@@ -12,6 +12,7 @@
 #include "base/location.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "google_apis/gcm/base/gcm_util.h"
 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
diff --git a/google_apis/gcm/engine/registration_request.h b/google_apis/gcm/engine/registration_request.h
index 9ef8714..3d8102ec 100644
--- a/google_apis/gcm/engine/registration_request.h
+++ b/google_apis/gcm/engine/registration_request.h
@@ -16,6 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "google_apis/gcm/base/gcm_export.h"
 #include "net/base/backoff_entry.h"
 #include "url/gurl.h"
diff --git a/google_apis/gcm/engine/unregistration_request.cc b/google_apis/gcm/engine/unregistration_request.cc
index e0452d81..22c123fa 100644
--- a/google_apis/gcm/engine/unregistration_request.cc
+++ b/google_apis/gcm/engine/unregistration_request.cc
@@ -11,6 +11,7 @@
 #include "base/strings/escape.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "google_apis/gcm/base/gcm_util.h"
 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
diff --git a/google_apis/gcm/engine/unregistration_request.h b/google_apis/gcm/engine/unregistration_request.h
index 27ab79a..1b653913 100644
--- a/google_apis/gcm/engine/unregistration_request.h
+++ b/google_apis/gcm/engine/unregistration_request.h
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "google_apis/gcm/base/gcm_export.h"
 #include "net/base/backoff_entry.h"
 #include "url/gurl.h"
diff --git a/gpu/command_buffer/client/cmd_buffer_helper.cc b/gpu/command_buffer/client/cmd_buffer_helper.cc
index 947e98d..d1756298 100644
--- a/gpu/command_buffer/client/cmd_buffer_helper.cc
+++ b/gpu/command_buffer/client/cmd_buffer_helper.cc
@@ -11,7 +11,6 @@
 #include <algorithm>
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/memory_dump_manager.h"
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index af00845b..fbd03b2 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -30,7 +30,6 @@
 #include "base/numerics/safe_math.h"
 #include "base/strings/string_split.h"
 #include "base/system/sys_info.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/memory_dump_manager.h"
diff --git a/gpu/command_buffer/client/mapped_memory.cc b/gpu/command_buffer/client/mapped_memory.cc
index 75cbbb12..8acb49e 100644
--- a/gpu/command_buffer/client/mapped_memory.cc
+++ b/gpu/command_buffer/client/mapped_memory.cc
@@ -17,7 +17,6 @@
 #include "base/numerics/checked_math.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/stringprintf.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/client/cmd_buffer_helper.h"
diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc
index 210cc0b..c3590dd06 100644
--- a/gpu/command_buffer/service/command_buffer_service.cc
+++ b/gpu/command_buffer/service/command_buffer_service.cc
@@ -13,7 +13,6 @@
 #include "base/logging.h"
 #include "base/memory/page_size.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "base/trace_event/memory_dump_request_args.h"
diff --git a/gpu/command_buffer/service/display_compositor_memory_and_task_controller_on_gpu.cc b/gpu/command_buffer/service/display_compositor_memory_and_task_controller_on_gpu.cc
index f0b395c0..27d28ee3 100644
--- a/gpu/command_buffer/service/display_compositor_memory_and_task_controller_on_gpu.cc
+++ b/gpu/command_buffer/service/display_compositor_memory_and_task_controller_on_gpu.cc
@@ -5,7 +5,6 @@
 #include "gpu/command_buffer/service/display_compositor_memory_and_task_controller_on_gpu.h"
 
 #include "base/atomic_sequence_num.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "gpu/command_buffer/service/command_buffer_task_executor.h"
 #include "gpu/command_buffer/service/gpu_command_buffer_memory_tracker.h"
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index e119c49d..6607e709 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -19548,16 +19548,30 @@
 }
 
 bool GLES2DecoderImpl::SupportsCreateAnonymousImage() {
-  return image_factory_for_nacl_swapchain()->SupportsCreateAnonymousImage();
+#if BUILDFLAG(IS_OZONE)
+  if (auto* image_factory_native_pixmap =
+          image_factory_for_nacl_swapchain()->AsImageFactoryNativePixmap()) {
+    return image_factory_native_pixmap->SupportsCreateAnonymousImage();
+  }
+#endif
+
+  return false;
 }
 
 scoped_refptr<gl::GLImage> GLES2DecoderImpl::CreateAnonymousImage(
     const gfx::Size& size,
     gfx::BufferFormat format,
     bool* is_cleared) {
-  return image_factory_for_nacl_swapchain()->CreateAnonymousImage(
-      size, format, gfx::BufferUsage::SCANOUT, gpu::kNullSurfaceHandle,
-      is_cleared);
+#if BUILDFLAG(IS_OZONE)
+  if (auto* image_factory_native_pixmap =
+          image_factory_for_nacl_swapchain()->AsImageFactoryNativePixmap()) {
+    return image_factory_native_pixmap->CreateAnonymousImage(
+        size, format, gfx::BufferUsage::SCANOUT, gpu::kNullSurfaceHandle,
+        is_cleared);
+  }
+#endif
+
+  return nullptr;
 }
 
 // An image can only be bound to a texture with the appropriate type.
diff --git a/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc b/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc
index be19e09..4c5cd21 100644
--- a/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc
+++ b/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/ipc/common/command_buffer_id.h"
 #include "gpu/ipc/common/gpu_peak_memory.h"
 
diff --git a/gpu/command_buffer/service/gpu_tracer.cc b/gpu/command_buffer/service/gpu_tracer.cc
index 60cda43..039916ca 100644
--- a/gpu/command_buffer/service/gpu_tracer.cc
+++ b/gpu/command_buffer/service/gpu_tracer.cc
@@ -12,7 +12,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
diff --git a/gpu/command_buffer/service/image_factory.cc b/gpu/command_buffer/service/image_factory.cc
index 0740c6c..0534b631 100644
--- a/gpu/command_buffer/service/image_factory.cc
+++ b/gpu/command_buffer/service/image_factory.cc
@@ -12,20 +12,6 @@
 
 ImageFactory::~ImageFactory() = default;
 
-bool ImageFactory::SupportsCreateAnonymousImage() const {
-  return false;
-}
-
-scoped_refptr<gl::GLImage> ImageFactory::CreateAnonymousImage(
-    const gfx::Size& size,
-    gfx::BufferFormat format,
-    gfx::BufferUsage usage,
-    SurfaceHandle surface_handle,
-    bool* is_cleared) {
-  NOTREACHED();
-  return nullptr;
-}
-
 unsigned ImageFactory::RequiredTextureType() {
   NOTIMPLEMENTED();
   return 0;
@@ -35,4 +21,8 @@
   return true;
 }
 
+ImageFactoryNativePixmap* ImageFactory::AsImageFactoryNativePixmap() {
+  return nullptr;
+}
+
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/image_factory.h b/gpu/command_buffer/service/image_factory.h
index 785d6229..a2b10bf 100644
--- a/gpu/command_buffer/service/image_factory.h
+++ b/gpu/command_buffer/service/image_factory.h
@@ -12,15 +12,13 @@
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/gpu_memory_buffer.h"
 
-namespace gl {
-class GLImage;
-}
-
 namespace gpu {
 namespace gles2 {
 class GLES2DecoderImpl;
 }
 
+class ImageFactoryNativePixmap;
+
 class GPU_EXPORT ImageFactory {
  public:
   virtual ~ImageFactory();
@@ -34,22 +32,15 @@
   friend class gles2::GLES2DecoderImpl;
   friend class IOSurfaceImageBackingFactory;
 
-  // Create an anonymous GLImage backed by a GpuMemoryBuffer that doesn't have a
-  // client_id. It can't be passed to other processes. Used only by validating
-  // command decoder to support NaCL swap chain.
-  virtual bool SupportsCreateAnonymousImage() const;
-  virtual scoped_refptr<gl::GLImage> CreateAnonymousImage(
-      const gfx::Size& size,
-      gfx::BufferFormat format,
-      gfx::BufferUsage usage,
-      SurfaceHandle surface_handle,
-      bool* is_cleared);
-
   // An image can only be bound to a texture with the appropriate type.
   virtual unsigned RequiredTextureType();
 
   // Whether a created image can have format GL_RGB.
   virtual bool SupportsFormatRGB();
+
+  // Returns this instance as an ImageFactoryNativePixmap, or nullptr if this
+  // instance is not an ImageFactoryNativePixmap instance.
+  virtual ImageFactoryNativePixmap* AsImageFactoryNativePixmap();
 };
 
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/image_factory_native_pixmap.cc b/gpu/command_buffer/service/image_factory_native_pixmap.cc
index f42b9551..1a5a638 100644
--- a/gpu/command_buffer/service/image_factory_native_pixmap.cc
+++ b/gpu/command_buffer/service/image_factory_native_pixmap.cc
@@ -57,4 +57,9 @@
   return GL_TEXTURE_2D;
 }
 
+ImageFactoryNativePixmap*
+ImageFactoryNativePixmap::AsImageFactoryNativePixmap() {
+  return this;
+}
+
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/image_factory_native_pixmap.h b/gpu/command_buffer/service/image_factory_native_pixmap.h
index 9c8d2ee..868edfc0 100644
--- a/gpu/command_buffer/service/image_factory_native_pixmap.h
+++ b/gpu/command_buffer/service/image_factory_native_pixmap.h
@@ -23,14 +23,19 @@
 
   ~ImageFactoryNativePixmap() override;
 
-  // Overridden from ImageFactory:
-  bool SupportsCreateAnonymousImage() const override;
+  // Create an anonymous GLImage backed by a GpuMemoryBuffer that doesn't have a
+  // client_id. It can't be passed to other processes. Used only by validating
+  // command decoder to support NaCL swap chain.
+  bool SupportsCreateAnonymousImage() const;
   scoped_refptr<gl::GLImage> CreateAnonymousImage(const gfx::Size& size,
                                                   gfx::BufferFormat format,
                                                   gfx::BufferUsage usage,
                                                   SurfaceHandle surface_handle,
-                                                  bool* is_cleared) override;
+                                                  bool* is_cleared);
+
+  // Overridden from ImageFactory:
   unsigned RequiredTextureType() override;
+  ImageFactoryNativePixmap* AsImageFactoryNativePixmap() override;
 };
 
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/image_reader_gl_owner.cc b/gpu/command_buffer/service/image_reader_gl_owner.cc
index 2497c096..6798547c7 100644
--- a/gpu/command_buffer/service/image_reader_gl_owner.cc
+++ b/gpu/command_buffer/service/image_reader_gl_owner.cc
@@ -22,7 +22,6 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/bind_post_task.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "gpu/command_buffer/service/abstract_texture.h"
 #include "gpu/config/gpu_finch_features.h"
 #include "ui/gfx/android/android_surface_control_compat.h"
diff --git a/gpu/command_buffer/service/passthrough_abstract_texture_impl.cc b/gpu/command_buffer/service/passthrough_abstract_texture_impl.cc
index 13749a0..cc2b0b4e 100644
--- a/gpu/command_buffer/service/passthrough_abstract_texture_impl.cc
+++ b/gpu/command_buffer/service/passthrough_abstract_texture_impl.cc
@@ -49,48 +49,40 @@
 
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
 void PassthroughAbstractTextureImpl::SetUnboundImage(gl::GLImage* image) {
-  BindImageInternal(image, /*client_managed=*/false);
-}
-#else
-void PassthroughAbstractTextureImpl::SetBoundImage(gl::GLImage* image) {
-  BindImageInternal(image, /*client_managed=*/true);
-}
-#endif
-
-void PassthroughAbstractTextureImpl::BindImageInternal(gl::GLImage* image,
-                                                       bool client_managed) {
   if (!texture_passthrough_)
     return;
 
   const GLuint target = texture_passthrough_->target();
   const GLuint level = 0;
 
-  // If there is a decoder-managed image bound, release it.
+  // If the previous execution of SetUnboundImage() set an image, check if the
+  // image has since been bound and release it if so.
   if (decoder_managed_image_) {
     gl::GLImage* current_image =
         texture_passthrough_->GetLevelImage(target, level);
-#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
     bool is_bound = !texture_passthrough_->is_bind_pending();
-#else
-    bool is_bound = true;
-#endif
     if (current_image && is_bound)
       current_image->ReleaseTexImage(target);
   }
 
   // Configure the new image.
-  decoder_managed_image_ = image && !client_managed;
-#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
-  CHECK(!client_managed);
+  decoder_managed_image_ = (image != nullptr);
   if (decoder_managed_image_)
     texture_passthrough_->set_bind_pending();
   else
     texture_passthrough_->clear_bind_pending();
-#else
-  CHECK(client_managed);
-#endif
   texture_passthrough_->SetLevelImage(target, level, image);
 }
+#else
+void PassthroughAbstractTextureImpl::SetBoundImage(gl::GLImage* image) {
+  if (!texture_passthrough_) {
+    return;
+  }
+
+  texture_passthrough_->SetLevelImage(texture_passthrough_->target(),
+                                      /*level=*/0, image);
+}
+#endif
 
 gl::GLImage* PassthroughAbstractTextureImpl::GetImageForTesting() const {
   if (!texture_passthrough_)
diff --git a/gpu/command_buffer/service/passthrough_abstract_texture_impl.h b/gpu/command_buffer/service/passthrough_abstract_texture_impl.h
index b9e06755..db0b4d1 100644
--- a/gpu/command_buffer/service/passthrough_abstract_texture_impl.h
+++ b/gpu/command_buffer/service/passthrough_abstract_texture_impl.h
@@ -45,15 +45,10 @@
   scoped_refptr<TexturePassthrough> OnDecoderWillDestroy();
 
  private:
-  // Attaches |image| to |texture_passthrough_|, setting |texture_passthrough_|
-  // as needing binding if |client_managed| is false. Releases any previous
-  // image if *that* image was not client-managed.
-  // NOTE: |client_managed| must be false on Windows/Mac and true on all other
-  // platforms.
-  void BindImageInternal(gl::GLImage* image, bool client_managed);
-
   scoped_refptr<TexturePassthrough> texture_passthrough_;
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
   bool decoder_managed_image_ = false;
+#endif
   raw_ptr<gl::GLApi> gl_api_;
   raw_ptr<GLES2DecoderPassthroughImpl> decoder_;
   CleanupCallback cleanup_cb_;
diff --git a/gpu/command_buffer/service/scheduler_dfs_unittest.cc b/gpu/command_buffer/service/scheduler_dfs_unittest.cc
index 1bb1828..4d410107 100644
--- a/gpu/command_buffer/service/scheduler_dfs_unittest.cc
+++ b/gpu/command_buffer/service/scheduler_dfs_unittest.cc
@@ -13,6 +13,7 @@
 #include <algorithm>
 
 #include "base/functional/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
diff --git a/gpu/command_buffer/service/scheduler_sequence.cc b/gpu/command_buffer/service/scheduler_sequence.cc
index 54c9990..f28e46dd 100644
--- a/gpu/command_buffer/service/scheduler_sequence.cc
+++ b/gpu/command_buffer/service/scheduler_sequence.cc
@@ -5,6 +5,7 @@
 #include "gpu/command_buffer/service/scheduler_sequence.h"
 
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_local.h"
 #include "gpu/command_buffer/service/scheduler.h"
 
diff --git a/gpu/command_buffer/service/scheduler_unittest.cc b/gpu/command_buffer/service/scheduler_unittest.cc
index 9c3cf0b..921a9d0b 100644
--- a/gpu/command_buffer/service/scheduler_unittest.cc
+++ b/gpu/command_buffer/service/scheduler_unittest.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/time/time.h"
diff --git a/gpu/command_buffer/service/shared_image/shared_image_manager_unittest.cc b/gpu/command_buffer/service/shared_image/shared_image_manager_unittest.cc
index 957f195..624f086 100644
--- a/gpu/command_buffer/service/shared_image/shared_image_manager_unittest.cc
+++ b/gpu/command_buffer/service/shared_image/shared_image_manager_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "gpu/command_buffer/service/shared_image/shared_image_manager.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
diff --git a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc
index 5130c3d..937a7a1 100644
--- a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing.cc
@@ -8,6 +8,7 @@
 
 #include "base/logging.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "gpu/command_buffer/common/shared_image_usage.h"
 #include "gpu/command_buffer/service/shared_context_state.h"
diff --git a/gpu/command_buffer/service/surface_texture_gl_owner.cc b/gpu/command_buffer/service/surface_texture_gl_owner.cc
index 8b0d91d..4880236 100644
--- a/gpu/command_buffer/service/surface_texture_gl_owner.cc
+++ b/gpu/command_buffer/service/surface_texture_gl_owner.cc
@@ -15,7 +15,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
 #include "base/synchronization/waitable_event.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "gpu/command_buffer/service/abstract_texture.h"
 #include "gpu/config/gpu_finch_features.h"
 #include "ui/gl/scoped_binders.h"
diff --git a/gpu/command_buffer/service/webgpu_decoder_impl.cc b/gpu/command_buffer/service/webgpu_decoder_impl.cc
index 0815a824..15ccec78 100644
--- a/gpu/command_buffer/service/webgpu_decoder_impl.cc
+++ b/gpu/command_buffer/service/webgpu_decoder_impl.cc
@@ -20,6 +20,7 @@
 #include "base/memory/raw_ref.h"
 #include "base/numerics/checked_math.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
diff --git a/gpu/command_buffer/tests/gl_helper_benchmark.cc b/gpu/command_buffer/tests/gl_helper_benchmark.cc
index 19f09ba..3ab1831 100644
--- a/gpu/command_buffer/tests/gl_helper_benchmark.cc
+++ b/gpu/command_buffer/tests/gl_helper_benchmark.cc
@@ -26,7 +26,6 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/viz/test/test_gpu_service_holder.h"
 #include "gpu/command_buffer/client/gl_helper.h"
diff --git a/gpu/command_buffer/tests/gl_helper_unittest.cc b/gpu/command_buffer/tests/gl_helper_unittest.cc
index e7a561a7..6ec7ba21 100644
--- a/gpu/command_buffer/tests/gl_helper_unittest.cc
+++ b/gpu/command_buffer/tests/gl_helper_unittest.cc
@@ -24,7 +24,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/viz/test/test_gpu_service_holder.h"
 #include "gpu/command_buffer/client/gl_helper_scaling.h"
diff --git a/gpu/command_buffer/tests/shared_image_gl_backing_produce_dawn_unittest.cc b/gpu/command_buffer/tests/shared_image_gl_backing_produce_dawn_unittest.cc
index 12c9f0a..e22e961 100644
--- a/gpu/command_buffer/tests/shared_image_gl_backing_produce_dawn_unittest.cc
+++ b/gpu/command_buffer/tests/shared_image_gl_backing_produce_dawn_unittest.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 "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/viz/test/test_gpu_service_holder.h"
 #include "gpu/GLES2/gl2extchromium.h"
diff --git a/gpu/ipc/client/command_buffer_proxy_impl.cc b/gpu/ipc/client/command_buffer_proxy_impl.cc
index ed3263e1..7d7fbab7 100644
--- a/gpu/ipc/client/command_buffer_proxy_impl.cc
+++ b/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -14,7 +14,7 @@
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
diff --git a/gpu/ipc/client/gpu_in_process_context_tests.cc b/gpu/ipc/client/gpu_in_process_context_tests.cc
index ea380752..3b96cf1 100644
--- a/gpu/ipc/client/gpu_in_process_context_tests.cc
+++ b/gpu/ipc/client/gpu_in_process_context_tests.cc
@@ -10,7 +10,6 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/viz/test/test_gpu_memory_buffer_manager.h"
 #include "gpu/command_buffer/client/gles2_implementation.h"
diff --git a/gpu/ipc/gpu_in_process_thread_service.cc b/gpu/ipc/gpu_in_process_thread_service.cc
index 42e0414..e737de1 100644
--- a/gpu/ipc/gpu_in_process_thread_service.cc
+++ b/gpu/ipc/gpu_in_process_thread_service.cc
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "base/notreached.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/service/scheduler.h"
 #include "gpu/command_buffer/service/scheduler_sequence.h"
 
diff --git a/gpu/ipc/in_process_gpu_thread_holder.cc b/gpu/ipc/in_process_gpu_thread_holder.cc
index 39b0516b..f44510c 100644
--- a/gpu/ipc/in_process_gpu_thread_holder.cc
+++ b/gpu/ipc/in_process_gpu_thread_holder.cc
@@ -8,7 +8,6 @@
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/synchronization/waitable_event.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "gpu/command_buffer/service/mailbox_manager_factory.h"
 #include "gpu/command_buffer/service/scheduler.h"
diff --git a/gpu/ipc/service/command_buffer_stub.h b/gpu/ipc/service/command_buffer_stub.h
index 73ec072c..3a1b26e 100644
--- a/gpu/ipc/service/command_buffer_stub.h
+++ b/gpu/ipc/service/command_buffer_stub.h
@@ -17,6 +17,8 @@
 #include "base/memory/raw_ref.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
diff --git a/gpu/ipc/service/gpu_channel.cc b/gpu/ipc/service/gpu_channel.cc
index 9eb91aa..056444f3 100644
--- a/gpu/ipc/service/gpu_channel.cc
+++ b/gpu/ipc/service/gpu_channel.cc
@@ -9,6 +9,7 @@
 #include "base/containers/cxx20_erase.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_WIN)
diff --git a/gpu/ipc/service/gpu_channel_manager.cc b/gpu/ipc/service/gpu_channel_manager.cc
index 3e2f188..63684f8 100644
--- a/gpu/ipc/service/gpu_channel_manager.cc
+++ b/gpu/ipc/service/gpu_channel_manager.cc
@@ -8,6 +8,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_WIN)
diff --git a/gpu/ipc/service/gpu_channel_test_common.cc b/gpu/ipc/service/gpu_channel_test_common.cc
index 9cf9278..2706b98 100644
--- a/gpu/ipc/service/gpu_channel_test_common.cc
+++ b/gpu/ipc/service/gpu_channel_test_common.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
diff --git a/gpu/ipc/service/gpu_memory_buffer_factory.cc b/gpu/ipc/service/gpu_memory_buffer_factory.cc
index 235a17b..fd186bc 100644
--- a/gpu/ipc/service/gpu_memory_buffer_factory.cc
+++ b/gpu/ipc/service/gpu_memory_buffer_factory.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_MAC)
diff --git a/gpu/ipc/service/gpu_memory_buffer_factory_dxgi.cc b/gpu/ipc/service/gpu_memory_buffer_factory_dxgi.cc
index 80d73a2e..ecabd51 100644
--- a/gpu/ipc/service/gpu_memory_buffer_factory_dxgi.cc
+++ b/gpu/ipc/service/gpu_memory_buffer_factory_dxgi.cc
@@ -8,6 +8,7 @@
 
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
 #include "gpu/ipc/common/dxgi_helpers.h"
diff --git a/gpu/ipc/service/gpu_watchdog_thread.cc b/gpu/ipc/service/gpu_watchdog_thread.cc
index 6371fca1..ce2e779f 100644
--- a/gpu/ipc/service/gpu_watchdog_thread.cc
+++ b/gpu/ipc/service/gpu_watchdog_thread.cc
@@ -24,7 +24,6 @@
 #include "base/system/sys_info.h"
 #include "base/task/current_thread.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "gpu/config/gpu_crash_keys.h"
diff --git a/gpu/ipc/service/image_transport_surface_mac.mm b/gpu/ipc/service/image_transport_surface_mac.mm
index 3f6c36a..5a8970b 100644
--- a/gpu/ipc/service/image_transport_surface_mac.mm
+++ b/gpu/ipc/service/image_transport_surface_mac.mm
@@ -4,7 +4,6 @@
 
 #include "gpu/ipc/service/image_transport_surface.h"
 
-#include "base/threading/thread_task_runner_handle.h"
 #include "gpu/ipc/service/image_transport_surface_overlay_mac.h"
 #include "gpu/ipc/service/pass_through_image_transport_surface.h"
 #include "ui/gfx/native_widget_types.h"
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
index 70ce56d..9395c60 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.mm
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
 #include "base/metrics/histogram_macros.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
diff --git a/gpu/ipc/service/stream_texture_android.h b/gpu/ipc/service/stream_texture_android.h
index 78e9604..df8edbd 100644
--- a/gpu/ipc/service/stream_texture_android.h
+++ b/gpu/ipc/service/stream_texture_android.h
@@ -12,6 +12,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/unguessable_token.h"
 #include "gpu/command_buffer/service/shared_context_state.h"
diff --git a/gpu/vulkan/vulkan_swap_chain.h b/gpu/vulkan/vulkan_swap_chain.h
index 513ac0a..398e63d 100644
--- a/gpu/vulkan/vulkan_swap_chain.h
+++ b/gpu/vulkan/vulkan_swap_chain.h
@@ -17,6 +17,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/condition_variable.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/geometry/rect.h"
diff --git a/headless/app/headless_command_handler.h b/headless/app/headless_command_handler.h
index ffb2bc61..6c0e47a 100644
--- a/headless/app/headless_command_handler.h
+++ b/headless/app/headless_command_handler.h
@@ -8,6 +8,7 @@
 #include "base/files/file_path.h"
 #include "base/functional/callback.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 #include "components/devtools/simple_devtools_protocol_client/simple_devtools_protocol_client.h"
 #include "content/public/browser/web_contents_observer.h"
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
index e08385b9..c40b9391 100644
--- a/headless/app/headless_shell.cc
+++ b/headless/app/headless_shell.cc
@@ -233,9 +233,6 @@
   params.argv = options.argv;
 #endif
 
-  // TODO(skyostil): Implement custom message pumps.
-  DCHECK(!options.message_pump);
-
   auto browser = std::make_unique<HeadlessBrowserImpl>(
       std::move(on_browser_start_callback), std::move(options));
   HeadlessContentMainDelegate delegate(std::move(browser));
diff --git a/headless/lib/browser/headless_browser_context_impl.cc b/headless/lib/browser/headless_browser_context_impl.cc
index 0028e98..fc2a160 100644
--- a/headless/lib/browser/headless_browser_context_impl.cc
+++ b/headless/lib/browser/headless_browser_context_impl.cc
@@ -388,13 +388,6 @@
 
 HeadlessBrowserContext::Builder::Builder(Builder&&) = default;
 
-HeadlessBrowserContext::Builder&
-HeadlessBrowserContext::Builder::SetProductNameAndVersion(
-    const std::string& product_name_and_version) {
-  options_->product_name_and_version_ = product_name_and_version;
-  return *this;
-}
-
 HeadlessBrowserContext::Builder& HeadlessBrowserContext::Builder::SetUserAgent(
     const std::string& user_agent) {
   options_->user_agent_ = user_agent;
@@ -441,24 +434,8 @@
   return *this;
 }
 
-HeadlessBrowserContext::Builder&
-HeadlessBrowserContext::Builder::SetOverrideWebPreferencesCallback(
-    base::RepeatingCallback<void(blink::web_pref::WebPreferences*)> callback) {
-  options_->override_web_preferences_callback_ = std::move(callback);
-  return *this;
-}
-
 HeadlessBrowserContext* HeadlessBrowserContext::Builder::Build() {
   return browser_->CreateBrowserContext(this);
 }
 
-HeadlessBrowserContext::Builder::MojoBindings::MojoBindings() = default;
-
-HeadlessBrowserContext::Builder::MojoBindings::MojoBindings(
-    const std::string& mojom_name,
-    const std::string& js_bindings)
-    : mojom_name(mojom_name), js_bindings(js_bindings) {}
-
-HeadlessBrowserContext::Builder::MojoBindings::~MojoBindings() = default;
-
 }  // namespace headless
diff --git a/headless/lib/browser/headless_browser_context_options.cc b/headless/lib/browser/headless_browser_context_options.cc
index 263b95d..f56372e 100644
--- a/headless/lib/browser/headless_browser_context_options.cc
+++ b/headless/lib/browser/headless_browser_context_options.cc
@@ -31,12 +31,6 @@
     HeadlessBrowser::Options* options)
     : browser_options_(options) {}
 
-const std::string& HeadlessBrowserContextOptions::product_name_and_version()
-    const {
-  return ReturnOverriddenValue(product_name_and_version_,
-                               browser_options_->product_name_and_version);
-}
-
 const std::string& HeadlessBrowserContextOptions::accept_language() const {
   return ReturnOverriddenValue(accept_language_,
                                browser_options_->accept_language);
@@ -70,13 +64,6 @@
                                browser_options_->block_new_web_contents);
 }
 
-base::RepeatingCallback<void(blink::web_pref::WebPreferences*)>
-HeadlessBrowserContextOptions::override_web_preferences_callback() const {
-  return ReturnOverriddenValue(
-      override_web_preferences_callback_,
-      browser_options_->override_web_preferences_callback);
-}
-
 gfx::FontRenderParams::Hinting
 HeadlessBrowserContextOptions::font_render_hinting() const {
   return ReturnOverriddenValue(font_render_hinting_,
diff --git a/headless/lib/browser/headless_browser_context_options.h b/headless/lib/browser/headless_browser_context_options.h
index e725a389e..8176bfa 100644
--- a/headless/lib/browser/headless_browser_context_options.h
+++ b/headless/lib/browser/headless_browser_context_options.h
@@ -7,12 +7,11 @@
 
 #include <string>
 
-#include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/memory/raw_ptr.h"
 #include "headless/public/headless_browser.h"
-#include "headless/public/headless_browser_context.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/gfx/font_render_params.h"
 
 namespace headless {
 
@@ -32,7 +31,6 @@
   HeadlessBrowserContextOptions& operator=(
       HeadlessBrowserContextOptions&& options);
 
-  const std::string& product_name_and_version() const;
   const std::string& accept_language() const;
   const std::string& user_agent() const;
 
@@ -53,11 +51,6 @@
   // See HeadlessBrowser::Options::font_render_hinting.
   gfx::FontRenderParams::Hinting font_render_hinting() const;
 
-  // Callback that is invoked to override WebPreferences for RenderViews
-  // created within this HeadlessBrowserContext.
-  base::RepeatingCallback<void(blink::web_pref::WebPreferences*)>
-  override_web_preferences_callback() const;
-
  private:
   friend class HeadlessBrowserContext::Builder;
 
@@ -65,18 +58,13 @@
 
   raw_ptr<HeadlessBrowser::Options> browser_options_;
 
-  absl::optional<std::string> product_name_and_version_;
   absl::optional<std::string> accept_language_;
   absl::optional<std::string> user_agent_;
   std::unique_ptr<net::ProxyConfig> proxy_config_;
-  absl::optional<std::string> host_resolver_rules_;
   absl::optional<gfx::Size> window_size_;
   absl::optional<base::FilePath> user_data_dir_;
   absl::optional<bool> incognito_mode_;
   absl::optional<bool> block_new_web_contents_;
-  absl::optional<
-      base::RepeatingCallback<void(blink::web_pref::WebPreferences*)>>
-      override_web_preferences_callback_;
 
   absl::optional<gfx::FontRenderParams::Hinting> font_render_hinting_;
 };
diff --git a/headless/lib/browser/headless_browser_impl.cc b/headless/lib/browser/headless_browser_impl.cc
index 1a12231..c5e251b 100644
--- a/headless/lib/browser/headless_browser_impl.cc
+++ b/headless/lib/browser/headless_browser_impl.cc
@@ -12,7 +12,7 @@
 #include "base/command_line.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/public/app/content_main.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/headless/lib/browser/headless_content_browser_client.cc b/headless/lib/browser/headless_content_browser_client.cc
index 5cae591..b9a9913 100644
--- a/headless/lib/browser/headless_content_browser_client.cc
+++ b/headless/lib/browser/headless_content_browser_client.cc
@@ -106,9 +106,7 @@
 
 HeadlessContentBrowserClient::HeadlessContentBrowserClient(
     HeadlessBrowserImpl* browser)
-    : browser_(browser),
-      append_command_line_flags_callback_(
-          browser_->options()->append_command_line_flags_callback) {}
+    : browser_(browser) {}
 
 HeadlessContentBrowserClient::~HeadlessContentBrowserClient() = default;
 
@@ -125,14 +123,7 @@
 
 void HeadlessContentBrowserClient::OverrideWebkitPrefs(
     content::WebContents* web_contents,
-    blink::web_pref::WebPreferences* prefs) {
-  auto* browser_context =
-      HeadlessBrowserContextImpl::From(web_contents->GetBrowserContext());
-  base::RepeatingCallback<void(blink::web_pref::WebPreferences*)> callback =
-      browser_context->options()->override_web_preferences_callback();
-  if (callback)
-    callback.Run(prefs);
-}
+    blink::web_pref::WebPreferences* prefs) {}
 
 void HeadlessContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
     content::RenderFrameHost* render_frame_host,
@@ -244,22 +235,6 @@
     command_line->CopySwitchesFrom(old_command_line, kSwitchNames,
                                    std::size(kSwitchNames));
   }
-
-  if (append_command_line_flags_callback_) {
-    HeadlessBrowserContextImpl* headless_browser_context_impl = nullptr;
-    if (process_type == ::switches::kRendererProcess) {
-      // Renderer processes are initialized on the UI thread, so this is safe.
-      content::RenderProcessHost* render_process_host =
-          content::RenderProcessHost::FromID(child_process_id);
-      if (render_process_host) {
-        headless_browser_context_impl = HeadlessBrowserContextImpl::From(
-            render_process_host->GetBrowserContext());
-      }
-    }
-    append_command_line_flags_callback_.Run(command_line,
-                                            headless_browser_context_impl,
-                                            process_type, child_process_id);
-  }
 }
 
 std::string HeadlessContentBrowserClient::GetApplicationLocale() {
@@ -309,7 +284,7 @@
   // site-per-process setting from //content - this way tools (tests, but also
   // production cases like screenshot or pdf generation) based on //headless
   // will use a mode that is actually shipping in Chrome.
-  return browser_->options()->site_per_process;
+  return false;
 }
 
 void HeadlessContentBrowserClient::ConfigureNetworkContextParams(
@@ -325,7 +300,7 @@
 }
 
 std::string HeadlessContentBrowserClient::GetProduct() {
-  return browser_->options()->product_name_and_version;
+  return HeadlessBrowser::GetProductNameAndVersion();
 }
 
 std::string HeadlessContentBrowserClient::GetUserAgent() {
diff --git a/headless/lib/browser/headless_content_browser_client.h b/headless/lib/browser/headless_content_browser_client.h
index 441423c6..c96642d5 100644
--- a/headless/lib/browser/headless_content_browser_client.h
+++ b/headless/lib/browser/headless_content_browser_client.h
@@ -102,10 +102,6 @@
 
   raw_ptr<HeadlessBrowserImpl> browser_;  // Not owned.
 
-  // We store the callback here because we may call it from the I/O thread.
-  HeadlessBrowser::Options::AppendCommandLineFlagsCallback
-      append_command_line_flags_callback_;
-
   std::unique_ptr<StubBadgeService> stub_badge_service_;
 };
 
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index 1fc2a4d..799d62f 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -184,15 +184,6 @@
   if (!command_line->HasSwitch(::switches::kHeadless))
     command_line->AppendSwitch(::switches::kHeadless);
 
-  if (options()->single_process_mode)
-    command_line->AppendSwitch(::switches::kSingleProcess);
-
-  if (options()->disable_sandbox)
-    command_line->AppendSwitch(sandbox::policy::switches::kNoSandbox);
-
-  if (!options()->enable_resource_scheduler)
-    command_line->AppendSwitch(::switches::kDisableResourceScheduler);
-
 #if BUILDFLAG(IS_OZONE)
   // The headless backend is automatically chosen for a headless build, but also
   // adding it here allows us to run in a non-headless build too.
diff --git a/headless/public/headless_browser.cc b/headless/public/headless_browser.cc
index b6c70ecb..3aa4f9a 100644
--- a/headless/public/headless_browser.cc
+++ b/headless/public/headless_browser.cc
@@ -28,9 +28,6 @@
 constexpr gfx::FontRenderParams::Hinting kDefaultFontRenderHinting =
     gfx::FontRenderParams::Hinting::HINTING_FULL;
 
-std::string GetProductNameAndVersion() {
-  return std::string(kHeadlessProductName) + "/" + PRODUCT_VERSION;
-}
 }  // namespace
 
 Options::Options(int argc, const char** argv)
@@ -38,8 +35,8 @@
       argv(argv),
       gl_implementation(gl::kGLImplementationANGLEName),
       angle_implementation(gl::kANGLEImplementationSwiftShaderForWebGLName),
-      product_name_and_version(GetProductNameAndVersion()),
-      user_agent(content::BuildUserAgentFromProduct(product_name_and_version)),
+      user_agent(content::BuildUserAgentFromProduct(
+          HeadlessBrowser::GetProductNameAndVersion())),
       window_size(kDefaultWindowSize),
       font_render_hinting(kDefaultFontRenderHinting) {}
 
@@ -59,12 +56,6 @@
 
 Builder::~Builder() = default;
 
-Builder& Builder::SetProductNameAndVersion(
-    const std::string& name_and_version) {
-  options_.product_name_and_version = name_and_version;
-  return *this;
-}
-
 Builder& Builder::SetUserAgent(const std::string& agent) {
   options_.user_agent = agent;
   return *this;
@@ -90,31 +81,11 @@
   return *this;
 }
 
-Builder& Builder::SetMessagePump(base::MessagePump* pump) {
-  options_.message_pump = pump;
-  return *this;
-}
-
 Builder& Builder::SetProxyConfig(std::unique_ptr<net::ProxyConfig> config) {
   options_.proxy_config = std::move(config);
   return *this;
 }
 
-Builder& Builder::SetSingleProcessMode(bool single_process) {
-  options_.single_process_mode = single_process;
-  return *this;
-}
-
-Builder& Builder::SetDisableSandbox(bool disable) {
-  options_.disable_sandbox = disable;
-  return *this;
-}
-
-Builder& Builder::SetEnableResourceScheduler(bool enable) {
-  options_.enable_resource_scheduler = enable;
-  return *this;
-}
-
 Builder& Builder::SetGLImplementation(const std::string& implementation) {
   options_.gl_implementation = implementation;
   return *this;
@@ -125,12 +96,6 @@
   return *this;
 }
 
-Builder& Builder::SetAppendCommandLineFlagsCallback(
-    const Options::AppendCommandLineFlagsCallback& callback) {
-  options_.append_command_line_flags_callback = callback;
-  return *this;
-}
-
 #if BUILDFLAG(IS_WIN)
 Builder& Builder::SetInstance(HINSTANCE hinstance) {
   options_.instance = hinstance;
@@ -158,22 +123,11 @@
   return *this;
 }
 
-Builder& Builder::SetSitePerProcess(bool per_process) {
-  options_.site_per_process = per_process;
-  return *this;
-}
-
 Builder& Builder::SetBlockNewWebContents(bool block) {
   options_.block_new_web_contents = block;
   return *this;
 }
 
-Builder& Builder::SetOverrideWebPreferencesCallback(
-    base::RepeatingCallback<void(blink::web_pref::WebPreferences*)> callback) {
-  options_.override_web_preferences_callback = std::move(callback);
-  return *this;
-}
-
 Builder& Builder::SetCrashReporterEnabled(bool enabled) {
   options_.enable_crash_reporter = enabled;
   return *this;
@@ -193,4 +147,9 @@
   return std::move(options_);
 }
 
+/// static
+std::string HeadlessBrowser::GetProductNameAndVersion() {
+  return std::string(kHeadlessProductName) + "/" + PRODUCT_VERSION;
+}
+
 }  // namespace headless
diff --git a/headless/public/headless_browser.h b/headless/public/headless_browser.h
index 48efaa7..c901efe1e 100644
--- a/headless/public/headless_browser.h
+++ b/headless/public/headless_browser.h
@@ -26,7 +26,6 @@
 #endif
 
 namespace base {
-class MessagePump;
 class SingleThreadTaskRunner;
 }
 
@@ -94,6 +93,8 @@
   // become invalid after calling this function.
   virtual void Shutdown() = 0;
 
+  static std::string GetProductNameAndVersion();
+
  protected:
   HeadlessBrowser() {}
   virtual ~HeadlessBrowser() {}
@@ -134,21 +135,6 @@
   // A single way to test whether the devtools server has been requested.
   bool DevtoolsServerEnabled();
 
-  // Optional message pump that overrides the default. Must outlive the browser.
-  raw_ptr<base::MessagePump> message_pump = nullptr;
-
-  // Run the browser in single process mode instead of using separate renderer
-  // processes as per default. Note that this also disables any sandboxing of
-  // web content, which can be a security risk.
-  bool single_process_mode = false;
-
-  // Run the browser without renderer sandbox. This option can be
-  // a security risk and should be used with caution.
-  bool disable_sandbox = false;
-
-  // Whether or not to enable content::ResourceScheduler. Enabled by default.
-  bool enable_resource_scheduler = true;
-
   // Choose the GL implementation to use for rendering. A suitable
   // implementantion is selected by default. Setting this to an empty
   // string can be used to disable GL rendering (e.g., WebGL support).
@@ -159,8 +145,6 @@
   std::string angle_implementation;
 
   // Default per-context options, can be specialized on per-context basis.
-
-  std::string product_name_and_version;
   std::string accept_language;
   std::string user_agent;
 
@@ -185,33 +169,6 @@
   // (experimental).
   bool enable_begin_frame_control = false;
 
-  // Whether or not all sites should have a dedicated process.
-  bool site_per_process = false;
-
-  // Set a callback that is invoked to override WebPreferences for RenderViews
-  // created within the HeadlessBrowser. Called whenever the WebPreferences of a
-  // RenderView change. Executed on the browser main thread.
-  //
-  // WARNING: We cannot provide any guarantees about the stability of the
-  // exposed WebPreferences API, so use with care.
-  base::RepeatingCallback<void(blink::web_pref::WebPreferences*)>
-      override_web_preferences_callback;
-
-  // Set a callback that is invoked when a new child process is spawned or
-  // forked and allows adding additional command line flags to the child
-  // process's command line. Executed on the browser main thread.
-  // |child_browser_context| points to the BrowserContext of the child
-  // process, but will only be set if the child process is a renderer process.
-  //
-  // NOTE: This callback may be called on the UI or IO thread even after the
-  // HeadlessBrowser has been destroyed.
-  using AppendCommandLineFlagsCallback = base::RepeatingCallback<void(
-      base::CommandLine* command_line,
-      HeadlessBrowserContext* child_browser_context,
-      const std::string& child_process_type,
-      int child_process_id)>;
-  AppendCommandLineFlagsCallback append_command_line_flags_callback;
-
   // Minidump crash reporter settings. Crash reporting is disabled by default.
   // By default crash dumps are written to the directory containing the
   // executable.
@@ -241,14 +198,8 @@
 
   Builder& EnableDevToolsServer(const net::HostPortPair& endpoint);
   Builder& EnableDevToolsPipe();
-  Builder& SetMessagePump(base::MessagePump* pump);
-  Builder& SetSingleProcessMode(bool single_process);
-  Builder& SetDisableSandbox(bool disable);
-  Builder& SetEnableResourceScheduler(bool enable);
   Builder& SetGLImplementation(const std::string& implementation);
   Builder& SetANGLEImplementation(const std::string& implementation);
-  Builder& SetAppendCommandLineFlagsCallback(
-      const Options::AppendCommandLineFlagsCallback& callback);
 #if BUILDFLAG(IS_WIN)
   Builder& SetInstance(HINSTANCE hinstance);
   Builder& SetSandboxInfo(sandbox::SandboxInterfaceInfo* info);
@@ -256,7 +207,6 @@
 
   // Per-context settings.
 
-  Builder& SetProductNameAndVersion(const std::string& name_and_version);
   Builder& SetAcceptLanguage(const std::string& language);
   Builder& SetEnableBeginFrameControl(bool enable);
   Builder& SetUserAgent(const std::string& agent);
@@ -264,10 +214,7 @@
   Builder& SetWindowSize(const gfx::Size& size);
   Builder& SetUserDataDir(const base::FilePath& dir);
   Builder& SetIncognitoMode(bool incognito);
-  Builder& SetSitePerProcess(bool per_process);
   Builder& SetBlockNewWebContents(bool block);
-  Builder& SetOverrideWebPreferencesCallback(
-      base::RepeatingCallback<void(blink::web_pref::WebPreferences*)> callback);
   Builder& SetCrashReporterEnabled(bool enabled);
   Builder& SetCrashDumpsDir(const base::FilePath& dir);
   Builder& SetFontRenderHinting(gfx::FontRenderParams::Hinting hinting);
diff --git a/headless/public/headless_browser_context.h b/headless/public/headless_browser_context.h
index 81c7927..dd28fc1 100644
--- a/headless/public/headless_browser_context.h
+++ b/headless/public/headless_browser_context.h
@@ -89,11 +89,6 @@
   Builder& EnableUnsafeNetworkAccessWithMojoBindings(
       bool enable_http_and_https_if_mojo_used);
 
-  // By default |HeadlessBrowserContext| inherits the following options from
-  // the browser instance. The methods below can be used to override these
-  // settings. See HeadlessBrowser::Options for their meaning.
-  Builder& SetProductNameAndVersion(
-      const std::string& product_name_and_version);
   Builder& SetAcceptLanguage(const std::string& accept_language);
   Builder& SetUserAgent(const std::string& user_agent);
   Builder& SetProxyConfig(std::unique_ptr<net::ProxyConfig> proxy_config);
@@ -101,8 +96,6 @@
   Builder& SetUserDataDir(const base::FilePath& user_data_dir);
   Builder& SetIncognitoMode(bool incognito_mode);
   Builder& SetBlockNewWebContents(bool block_new_web_contents);
-  Builder& SetOverrideWebPreferencesCallback(
-      base::RepeatingCallback<void(WebPreferences*)> callback);
 
   HeadlessBrowserContext* Build();
 
@@ -112,24 +105,8 @@
 
   explicit Builder(HeadlessBrowserImpl* browser);
 
-  struct MojoBindings {
-    MojoBindings();
-    MojoBindings(const std::string& mojom_name, const std::string& js_bindings);
-
-    MojoBindings(const MojoBindings&) = delete;
-    MojoBindings& operator=(const MojoBindings&) = delete;
-
-    ~MojoBindings();
-
-    std::string mojom_name;
-    std::string js_bindings;
-  };
-
   raw_ptr<HeadlessBrowserImpl> browser_;
   std::unique_ptr<HeadlessBrowserContextOptions> options_;
-
-  std::list<MojoBindings> mojo_bindings_;
-  bool enable_http_and_https_if_mojo_used_;
 };
 
 }  // namespace headless
diff --git a/headless/test/headless_browser_browsertest.cc b/headless/test/headless_browser_browsertest.cc
index 734249f..60d4c71 100644
--- a/headless/test/headless_browser_browsertest.cc
+++ b/headless/test/headless_browser_browsertest.cc
@@ -606,44 +606,6 @@
   EXPECT_TRUE(WaitForLoad(web_contents));
 }
 
-class HeadlessBrowserTestAppendCommandLineFlags : public HeadlessBrowserTest {
- public:
-  HeadlessBrowserTestAppendCommandLineFlags() {
-    options()->append_command_line_flags_callback = base::BindRepeating(
-        &HeadlessBrowserTestAppendCommandLineFlags::AppendCommandLineFlags,
-        base::Unretained(this));
-  }
-
-  void AppendCommandLineFlags(base::CommandLine* command_line,
-                              HeadlessBrowserContext* child_browser_context,
-                              const std::string& child_process_type,
-                              int child_process_id) {
-    if (child_process_type != "renderer")
-      return;
-
-    callback_was_run_ = true;
-    EXPECT_LE(0, child_process_id);
-    EXPECT_NE(nullptr, command_line);
-    EXPECT_NE(nullptr, child_browser_context);
-  }
-
- protected:
-  bool callback_was_run_ = false;
-};
-
-IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestAppendCommandLineFlags,
-                       AppendChildProcessCommandLineFlags) {
-  // Create a new renderer process, and verify that callback was executed.
-  HeadlessBrowserContext* browser_context =
-      browser()->CreateBrowserContextBuilder().Build();
-  // Used only for lifetime, thus std::ignore.
-  std::ignore = browser_context->CreateWebContentsBuilder()
-                    .SetInitialURL(GURL("about:blank"))
-                    .Build();
-
-  EXPECT_TRUE(callback_was_run_);
-}
-
 #if BUILDFLAG(IS_FUCHSIA)
 // TODO(crbug.com/1090933): Fix this test on Fuchsia and re-enable.
 #define MAYBE_ServerWantsClientCertificate DISABLED_ServerWantsClientCertificate
diff --git a/headless/test/headless_browser_context_browsertest.cc b/headless/test/headless_browser_context_browsertest.cc
index ad4e031..453db17 100644
--- a/headless/test/headless_browser_context_browsertest.cc
+++ b/headless/test/headless_browser_context_browsertest.cc
@@ -259,30 +259,4 @@
   EXPECT_EQ(incognito(), base::IsDirectoryEmpty(user_data_dir()));
 }
 
-IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, ContextWebPreferences) {
-  // By default, hide_scrollbars should be false.
-  EXPECT_FALSE(WebPreferences().hide_scrollbars);
-
-  // Set hide_scrollbars preference to true for a new BrowserContext.
-  HeadlessBrowserContext* browser_context =
-      browser()
-          ->CreateBrowserContextBuilder()
-          .SetOverrideWebPreferencesCallback(base::BindRepeating(
-              [](blink::web_pref::WebPreferences* preferences) {
-                preferences->hide_scrollbars = true;
-              }))
-          .Build();
-  HeadlessWebContents* web_contents =
-      browser_context->CreateWebContentsBuilder()
-          .SetInitialURL(GURL("about:blank"))
-          .Build();
-
-  // Verify that the preference takes effect.
-  HeadlessWebContentsImpl* contents_impl =
-      HeadlessWebContentsImpl::From(web_contents);
-  EXPECT_TRUE(contents_impl->web_contents()
-                  ->GetOrCreateWebPreferences()
-                  .hide_scrollbars);
-}
-
 }  // namespace headless
diff --git a/headless/test/headless_command_browsertest.cc b/headless/test/headless_command_browsertest.cc
index 0d20fc4..82dc71f6 100644
--- a/headless/test/headless_command_browsertest.cc
+++ b/headless/test/headless_command_browsertest.cc
@@ -10,8 +10,8 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "content/public/test/browser_test.h"
 #include "headless/app/headless_command_handler.h"
@@ -74,7 +74,7 @@
         GetTargetUrl(),
         base::BindOnce(&HeadlessCommandBrowserTest::FinishTest,
                        base::Unretained(this)),
-        base::ThreadTaskRunnerHandle::Get());
+        base::SingleThreadTaskRunner::GetCurrentDefault());
 
     RunAsynchronousTest();
 
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md
index 48e3ba1f..9e7fd08 100644
--- a/infra/config/generated/cq-builders.md
+++ b/infra/config/generated/cq-builders.md
@@ -39,6 +39,8 @@
 
 * [chromium_presubmit](https://ci.chromium.org/p/chromium/builders/try/chromium_presubmit) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""chromium_presubmit""))
 
+* [fuchsia-arm64-rel](https://ci.chromium.org/p/chromium/builders/try/fuchsia-arm64-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""fuchsia-arm64-rel""))
+
 * [fuchsia-binary-size](https://ci.chromium.org/p/chromium/builders/try/fuchsia-binary-size) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""fuchsia-binary-size""))
 
 * [fuchsia-x64-cast-receiver-rel](https://ci.chromium.org/p/chromium/builders/try/fuchsia-x64-cast-receiver-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""fuchsia-x64-cast-receiver-rel""))
diff --git a/infra/config/generated/cq-usage/default.cfg b/infra/config/generated/cq-usage/default.cfg
index 274b1e52..cb0ffc7 100644
--- a/infra/config/generated/cq-usage/default.cfg
+++ b/infra/config/generated/cq-usage/default.cfg
@@ -50,6 +50,9 @@
         disable_reuse: true
       }
       builders {
+        name: "chromium/try/fuchsia-arm64-rel"
+      }
+      builders {
         name: "chromium/try/fuchsia-binary-size"
       }
       builders {
diff --git a/infra/config/generated/cq-usage/full.cfg b/infra/config/generated/cq-usage/full.cfg
index 240a9dc..401cc0b 100644
--- a/infra/config/generated/cq-usage/full.cfg
+++ b/infra/config/generated/cq-usage/full.cfg
@@ -1110,6 +1110,26 @@
         }
       }
       builders {
+        name: "chromium/try/fuchsia-arm64-rel"
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "docs/.+"
+          exclude: true
+        }
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "infra/config/.+"
+          exclude: true
+        }
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "infra/config/generated/builders/try/fuchsia-arm64-rel/.+"
+        }
+      }
+      builders {
         name: "chromium/try/fuchsia-binary-size"
         location_filters {
           gerrit_host_regexp: ".*"
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg
index 90b933a6..f3f3800f 100644
--- a/infra/config/generated/luci/commit-queue.cfg
+++ b/infra/config/generated/luci/commit-queue.cfg
@@ -1696,7 +1696,23 @@
       }
       builders {
         name: "chromium/try/fuchsia-arm64-rel"
-        includable_only: true
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "docs/.+"
+          exclude: true
+        }
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "infra/config/.+"
+          exclude: true
+        }
+        location_filters {
+          gerrit_host_regexp: ".*"
+          gerrit_project_regexp: ".*"
+          path_regexp: "infra/config/generated/builders/try/fuchsia-arm64-rel/.+"
+        }
       }
       builders {
         name: "chromium/try/fuchsia-arm64-rel-compilator"
@@ -4055,9 +4071,6 @@
       ref_regexp: "refs/branch-heads/.*"
       ref_regexp_exclude: "refs/branch-heads/5005"
       ref_regexp_exclude: "refs/branch-heads/5112"
-      ref_regexp_exclude: "refs/branch-heads/5195"
-      ref_regexp_exclude: "refs/branch-heads/5249"
-      ref_regexp_exclude: "refs/branch-heads/5304"
       ref_regexp_exclude: "refs/branch-heads/5359"
       ref_regexp_exclude: "refs/branch-heads/5414"
       ref_regexp_exclude: "refs/branch-heads/5481"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg
index ba2b0cf..230af64 100644
--- a/infra/config/generated/luci/luci-milo.cfg
+++ b/infra/config/generated/luci/luci-milo.cfg
@@ -823,18 +823,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -1562,18 +1550,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -2065,18 +2041,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -2423,18 +2387,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -3029,18 +2981,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -3372,18 +3312,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -3815,18 +3743,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -4154,18 +4070,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -4706,18 +4610,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -5093,18 +4985,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -5501,18 +5381,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -5846,18 +5714,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -6292,18 +6148,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -6855,18 +6699,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -7323,18 +7155,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -7703,18 +7523,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -8081,18 +7889,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -8573,18 +8369,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -9422,18 +9206,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -9852,18 +9624,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -10256,18 +10016,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -10650,18 +10398,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -11297,18 +11033,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -11710,18 +11434,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -12128,18 +11840,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -12571,18 +12271,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -12909,18 +12597,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -13272,18 +12948,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -13735,18 +13399,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -14089,18 +13741,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -14467,18 +14107,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -14965,18 +14593,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -15338,18 +14954,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -15752,18 +15356,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -16130,18 +15722,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -16534,18 +16114,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
@@ -16885,18 +16453,6 @@
         url: "/p/chromium-m104/g/main/console"
       }
       links {
-        text: "m105"
-        url: "/p/chromium-m105/g/main/console"
-      }
-      links {
-        text: "m106"
-        url: "/p/chromium-m106/g/main/console"
-      }
-      links {
-        text: "m107"
-        url: "/p/chromium-m107/g/main/console"
-      }
-      links {
         text: "m108"
         url: "/p/chromium-m108/g/main/console"
       }
diff --git a/infra/config/generated/luci/realms.cfg b/infra/config/generated/luci/realms.cfg
index d307b292..833d393 100644
--- a/infra/config/generated/luci/realms.cfg
+++ b/infra/config/generated/luci/realms.cfg
@@ -364,9 +364,6 @@
     role: "role/swarming.poolUser"
     principals: "project:chromium-m102"
     principals: "project:chromium-m104"
-    principals: "project:chromium-m105"
-    principals: "project:chromium-m106"
-    principals: "project:chromium-m107"
     principals: "project:chromium-m108"
     principals: "project:chromium-m109"
     principals: "project:chromium-m110"
@@ -418,9 +415,6 @@
     principals: "group:chromium-led-users"
     principals: "project:chromium-m102"
     principals: "project:chromium-m104"
-    principals: "project:chromium-m105"
-    principals: "project:chromium-m106"
-    principals: "project:chromium-m107"
     principals: "project:chromium-m108"
     principals: "project:chromium-m109"
     principals: "project:chromium-m110"
diff --git a/infra/config/milestones.json b/infra/config/milestones.json
index 7cfc0c74..6c3a8ea 100644
--- a/infra/config/milestones.json
+++ b/infra/config/milestones.json
@@ -9,21 +9,6 @@
         "project": "chromium-m104",
         "ref": "refs/branch-heads/5112"
     },
-    "105": {
-        "name": "m105",
-        "project": "chromium-m105",
-        "ref": "refs/branch-heads/5195"
-    },
-    "106": {
-        "name": "m106",
-        "project": "chromium-m106",
-        "ref": "refs/branch-heads/5249"
-    },
-    "107": {
-        "name": "m107",
-        "project": "chromium-m107",
-        "ref": "refs/branch-heads/5304"
-    },
     "108": {
         "name": "m108",
         "project": "chromium-m108",
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star b/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star
index 274dd42..e64611f4 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star
@@ -67,6 +67,7 @@
         "ci/fuchsia-arm64-rel",
     ],
     main_list_view = "try",
+    tryjob = try_.job(),
     experiments = {
         "enable_weetbix_queries": 100,
         "weetbix.retry_weak_exonerations": 100,
diff --git a/ios/chrome/app/spotlight/spotlight_manager_unittest.mm b/ios/chrome/app/spotlight/spotlight_manager_unittest.mm
index 67e1726..a8d296aa 100644
--- a/ios/chrome/app/spotlight/spotlight_manager_unittest.mm
+++ b/ios/chrome/app/spotlight/spotlight_manager_unittest.mm
@@ -12,6 +12,7 @@
 #import "base/strings/sys_string_conversions.h"
 #import "base/strings/utf_string_conversions.h"
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/test/task_environment.h"
 #import "components/bookmarks/browser/bookmark_model.h"
 #import "components/bookmarks/test/bookmark_test_helpers.h"
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
index 7ad4542..1e518dd 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h"
 
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
index 87124476..de8896e 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.mm
@@ -23,7 +23,6 @@
 #import "base/strings/string_util.h"
 #import "base/task/single_thread_task_runner.h"
 #import "base/task/thread_pool.h"
-#import "base/threading/thread_task_runner_handle.h"
 #import "components/content_settings/core/browser/content_settings_provider.h"
 #import "components/content_settings/core/browser/cookie_settings.h"
 #import "components/content_settings/core/browser/host_content_settings_map.h"
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
index a086550..df7826b4 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_BROWSER_STATE_OFF_THE_RECORD_CHROME_BROWSER_STATE_IMPL_H_
 #define IOS_CHROME_BROWSER_BROWSER_STATE_OFF_THE_RECORD_CHROME_BROWSER_STATE_IMPL_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.h"
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state.mm b/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
index a1f9a72..001e57f 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
@@ -13,6 +13,7 @@
 #import "base/logging.h"
 #import "base/memory/ptr_util.h"
 #import "base/path_service.h"
+#import "base/task/sequenced_task_runner.h"
 #import "base/task/single_thread_task_runner.h"
 #import "base/task/thread_pool.h"
 #import "base/test/test_file_util.h"
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm b/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm
index 57c17156..1ceb8e30 100644
--- a/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm
+++ b/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm
@@ -9,7 +9,6 @@
 #import <memory>
 
 #import "base/strings/sys_string_conversions.h"
-#import "base/threading/thread_task_runner_handle.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service.mm b/ios/chrome/browser/credential_provider/credential_provider_service.mm
index 9603e8b..67446d3 100644
--- a/ios/chrome/browser/credential_provider/credential_provider_service.mm
+++ b/ios/chrome/browser/credential_provider/credential_provider_service.mm
@@ -10,7 +10,6 @@
 #import "base/metrics/histogram_functions.h"
 #import "base/notreached.h"
 #import "base/strings/sys_string_conversions.h"
-#import "base/threading/sequenced_task_runner_handle.h"
 #import "build/build_config.h"
 #import "components/password_manager/core/browser/affiliation/affiliated_match_helper.h"
 #import "components/password_manager/core/browser/affiliation/affiliation_service.h"
diff --git a/ios/chrome/browser/download/background_service/background_download_service_factory.cc b/ios/chrome/browser/download/background_service/background_download_service_factory.cc
index dc74cf2..2aa752f 100644
--- a/ios/chrome/browser/download/background_service/background_download_service_factory.cc
+++ b/ios/chrome/browser/download/background_service/background_download_service_factory.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/time/default_clock.h"
diff --git a/ios/chrome/browser/external_files/external_file_remover_impl.mm b/ios/chrome/browser/external_files/external_file_remover_impl.mm
index e8d4da4..b031a624 100644
--- a/ios/chrome/browser/external_files/external_file_remover_impl.mm
+++ b/ios/chrome/browser/external_files/external_file_remover_impl.mm
@@ -11,6 +11,7 @@
 #import "base/logging.h"
 #import "base/strings/sys_string_conversions.h"
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/task/thread_pool.h"
 #import "base/threading/scoped_blocking_call.h"
 #import "components/bookmarks/browser/bookmark_model.h"
diff --git a/ios/chrome/browser/find_in_page/BUILD.gn b/ios/chrome/browser/find_in_page/BUILD.gn
index 801f387..115e648 100644
--- a/ios/chrome/browser/find_in_page/BUILD.gn
+++ b/ios/chrome/browser/find_in_page/BUILD.gn
@@ -42,3 +42,12 @@
     "//testing/gtest",
   ]
 }
+
+source_set("features") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "features.h",
+    "features.mm",
+  ]
+  public_deps = [ "//base:base" ]
+}
diff --git a/ios/chrome/browser/find_in_page/features.h b/ios/chrome/browser/find_in_page/features.h
new file mode 100644
index 0000000..84e446c8
--- /dev/null
+++ b/ios/chrome/browser/find_in_page/features.h
@@ -0,0 +1,20 @@
+// Copyright 2023 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_FIND_IN_PAGE_FEATURES_H_
+#define IOS_CHROME_BROWSER_FIND_IN_PAGE_FEATURES_H_
+
+#import "base/feature_list.h"
+
+// Feature flag that enables Native Find in Page.
+BASE_DECLARE_FEATURE(kNativeFindInPage);
+
+// Feature parameters for Native Find in Page. If no parameter is set, Find in
+// Page will use the system Find panel.
+extern const char kNativeFindInPageParameterName[];
+
+// Indicates if Native Find in Page with Chrome Find bar should be used.
+extern const char kNativeFindInPageWithChromeFindBarParam[];
+
+#endif  // IOS_CHROME_BROWSER_FIND_IN_PAGE_FEATURES_H_
diff --git a/ios/chrome/browser/find_in_page/features.mm b/ios/chrome/browser/find_in_page/features.mm
new file mode 100644
index 0000000..680fb05bf
--- /dev/null
+++ b/ios/chrome/browser/find_in_page/features.mm
@@ -0,0 +1,18 @@
+// Copyright 2023 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/find_in_page/features.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+BASE_FEATURE(kNativeFindInPage,
+             "NativeFindInPage",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
+const char kNativeFindInPageParameterName[] = "variant";
+
+const char kNativeFindInPageWithChromeFindBarParam[] =
+    "variant_with_chrome_find_bar";
diff --git a/ios/chrome/browser/flags/BUILD.gn b/ios/chrome/browser/flags/BUILD.gn
index d8bf8ca..00040e5954 100644
--- a/ios/chrome/browser/flags/BUILD.gn
+++ b/ios/chrome/browser/flags/BUILD.gn
@@ -56,6 +56,7 @@
     "//ios/chrome/browser/crash_report",
     "//ios/chrome/browser/credential_provider_promo:features",
     "//ios/chrome/browser/drag_and_drop",
+    "//ios/chrome/browser/find_in_page:features",
     "//ios/chrome/browser/ntp:features",
     "//ios/chrome/browser/policy",
     "//ios/chrome/browser/policy:constants",
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index b5827b9..f240342a 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -67,6 +67,7 @@
 #import "ios/chrome/browser/browsing_data/browsing_data_features.h"
 #import "ios/chrome/browser/crash_report/features.h"
 #import "ios/chrome/browser/credential_provider_promo/features.h"
+#import "ios/chrome/browser/find_in_page/features.h"
 #import "ios/chrome/browser/flags/chrome_switches.h"
 #import "ios/chrome/browser/flags/ios_chrome_flag_descriptions.h"
 #import "ios/chrome/browser/flags/system_flags.h"
@@ -553,6 +554,12 @@
      {"Sort by Latest", kFollowingFeedSortTypeSortByLatest,
       std::size(kFollowingFeedSortTypeSortByLatest), nullptr}};
 
+const FeatureEntry::FeatureParam kNativeFindInPageWithChromeFindBar[] = {
+    {kNativeFindInPageParameterName, kNativeFindInPageWithChromeFindBarParam}};
+const FeatureEntry::FeatureVariation kNativeFindInPageVariations[] = {
+    {"With Chrome Find Bar", kNativeFindInPageWithChromeFindBar,
+     std::size(kNativeFindInPageWithChromeFindBar), nullptr}};
+
 // To add a new entry, add to the end of kFeatureEntries. There are four
 // distinct types of entries:
 // . ENABLE_DISABLE_VALUE: entry is either enabled, disabled, or uses the
@@ -1259,7 +1266,11 @@
      flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(
          autofill::features::kAutofillSuggestServerCardInsteadOfLocalCard)},
-
+    {"native-find-in-page", flag_descriptions::kNativeFindInPageName,
+     flag_descriptions::kNativeFindInPageDescription, flags_ui::kOsIos,
+     FEATURE_WITH_PARAMS_VALUE_TYPE(kNativeFindInPage,
+                                    kNativeFindInPageVariations,
+                                    "NativeFindInPage")},
 };
 
 bool SkipConditionalFeatureEntry(const flags_ui::FeatureEntry& entry) {
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index 23a0839..683f3f74 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -499,6 +499,12 @@
     "websites in a tile format when the user focuses the omnibox on a search "
     "result page (SRP) or on web.";
 
+const char kNativeFindInPageName[] = "Native Find in Page";
+const char kNativeFindInPageDescription[] =
+    "When enabled, the JavaScript implementation of the Find in Page feature "
+    "is replaced with a native implementation which also enables searching "
+    "text in PDF files. Available for iOS 16 or later.";
+
 const char kNewMobileIdentityConsistencyFREName[] = "New MICE FRE";
 const char kNewMobileIdentityConsistencyFREDescription[] =
     "New Mobile Identity Consistency FRE";
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 32d5767b..1c82f73 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -449,6 +449,11 @@
 extern const char kMostVisitedTilesName[];
 extern const char kMostVisitedTilesDescription[];
 
+// Title and description of the flag to enable the native Find in Page API
+// for iOS 16 and later.
+extern const char kNativeFindInPageName[];
+extern const char kNativeFindInPageDescription[];
+
 // Title and description for the flag to use the new MICe FRE.
 extern const char kNewMobileIdentityConsistencyFREName[];
 extern const char kNewMobileIdentityConsistencyFREDescription[];
diff --git a/ios/chrome/browser/follow/follow_tab_helper.mm b/ios/chrome/browser/follow/follow_tab_helper.mm
index 5c8304e..385d7c53 100644
--- a/ios/chrome/browser/follow/follow_tab_helper.mm
+++ b/ios/chrome/browser/follow/follow_tab_helper.mm
@@ -11,6 +11,7 @@
 #import "base/strings/utf_string_conversions.h"
 #import "base/task/cancelable_task_tracker.h"
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/time/time.h"
 #import "components/feature_engagement/public/feature_constants.h"
 #import "components/feature_engagement/public/tracker.h"
diff --git a/ios/chrome/browser/main/browser_observer_bridge.mm b/ios/chrome/browser/main/browser_observer_bridge.mm
index 6a0fda0..b97ee0d 100644
--- a/ios/chrome/browser/main/browser_observer_bridge.mm
+++ b/ios/chrome/browser/main/browser_observer_bridge.mm
@@ -19,6 +19,10 @@
 BrowserObserverBridge::~BrowserObserverBridge() {}
 
 void BrowserObserverBridge::BrowserDestroyed(Browser* browser) {
-  [observer_ browserDestroyed:browser];
+  DCHECK(browser_observation_.IsObservingSource(browser));
   browser_observation_.Reset();
+
+  // The following invocation may lead to the destruction
+  // of `this`. No code should follow.
+  [observer_ browserDestroyed:browser];
 }
diff --git a/ios/chrome/browser/net/chrome_cookie_store_ios_client.mm b/ios/chrome/browser/net/chrome_cookie_store_ios_client.mm
index 3fddb32d..735ebda 100644
--- a/ios/chrome/browser/net/chrome_cookie_store_ios_client.mm
+++ b/ios/chrome/browser/net/chrome_cookie_store_ios_client.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/net/chrome_cookie_store_ios_client.h"
 
+#import "base/task/sequenced_task_runner.h"
 #import "ios/web/public/thread/web_task_traits.h"
 #import "ios/web/public/thread/web_thread.h"
 
diff --git a/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc b/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc
index 895146c..a412070 100644
--- a/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc
+++ b/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state_io_data.h"
 #include "ios/web/public/thread/web_task_traits.h"
 #include "ios/web/public/thread/web_thread.h"
diff --git a/ios/chrome/browser/optimization_guide/optimization_guide_tab_helper.mm b/ios/chrome/browser/optimization_guide/optimization_guide_tab_helper.mm
index 1c1d4527..b1f9b72 100644
--- a/ios/chrome/browser/optimization_guide/optimization_guide_tab_helper.mm
+++ b/ios/chrome/browser/optimization_guide/optimization_guide_tab_helper.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/browser/optimization_guide/optimization_guide_tab_helper.h"
 
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "components/optimization_guide/core/optimization_guide_features.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/optimization_guide/optimization_guide_service.h"
diff --git a/ios/chrome/browser/passwords/ios_chrome_affiliation_service_factory.mm b/ios/chrome/browser/passwords/ios_chrome_affiliation_service_factory.mm
index f8ad3aec..60e7d548 100644
--- a/ios/chrome/browser/passwords/ios_chrome_affiliation_service_factory.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_affiliation_service_factory.mm
@@ -12,8 +12,8 @@
 #import "base/task/thread_pool.h"
 #import "components/keyed_service/ios/browser_state_dependency_manager.h"
 #import "components/keyed_service/ios/browser_state_keyed_service_factory.h"
-#import "components/password_manager/core/browser/password_manager_constants.h"
 #import "components/password_manager/core/browser/affiliation/affiliation_service_impl.h"
+#import "components/password_manager/core/browser/password_manager_constants.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/browser_state/browser_state_otr_helper.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
diff --git a/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h
index 259a0a6..340c35f 100644
--- a/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h
+++ b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_POLICY_CHROME_BROWSER_CLOUD_MANAGEMENT_CONTROLLER_IOS_H_
 #define IOS_CHROME_BROWSER_POLICY_CHROME_BROWSER_CLOUD_MANAGEMENT_CONTROLLER_IOS_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h"
 
 namespace policy {
diff --git a/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.mm b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.mm
index 0657096..9ae0884 100644
--- a/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.mm
+++ b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.mm
@@ -7,6 +7,7 @@
 #import <utility>
 
 #import "base/bind.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/task/task_traits.h"
 #import "components/enterprise/browser/reporting/report_generator.h"
 #import "components/enterprise/browser/reporting/report_scheduler.h"
diff --git a/ios/chrome/browser/policy/policy_unittest.mm b/ios/chrome/browser/policy/policy_unittest.mm
index c89dee5..17b841f9 100644
--- a/ios/chrome/browser/policy/policy_unittest.mm
+++ b/ios/chrome/browser/policy/policy_unittest.mm
@@ -11,7 +11,6 @@
 #import "base/path_service.h"
 #import "base/run_loop.h"
 #import "base/test/task_environment.h"
-#import "base/threading/thread_task_runner_handle.h"
 #import "components/policy/core/browser/policy_pref_mapping_test.h"
 #import "components/policy/core/common/mock_configuration_policy_provider.h"
 #import "components/policy/core/common/policy_map.h"
diff --git a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.mm b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.mm
index eb1c9f4..d79c06dd 100644
--- a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.mm
+++ b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.mm
@@ -11,6 +11,7 @@
 #import "base/feature_list.h"
 #import "base/memory/ptr_util.h"
 #import "base/metrics/histogram_macros.h"
+#import "base/task/sequenced_task_runner.h"
 #import "components/policy/core/browser/browser_policy_connector.h"
 #import "components/policy/core/common/policy_service.h"
 #import "components/prefs/json_pref_store.h"
diff --git a/ios/chrome/browser/providers/BUILD.gn b/ios/chrome/browser/providers/BUILD.gn
index 95bf066c..8b9efc91 100644
--- a/ios/chrome/browser/providers/BUILD.gn
+++ b/ios/chrome/browser/providers/BUILD.gn
@@ -35,6 +35,7 @@
     "//ios/chrome/browser/providers/branded_images:chromium_branded_images",
     "//ios/chrome/browser/providers/context_menu:chromium_context_menu",
     "//ios/chrome/browser/providers/discover_feed:chromium_discover_feed",
+    "//ios/chrome/browser/providers/find_in_page:chromium_find_in_page",
     "//ios/chrome/browser/providers/follow:chromium_follow",
     "//ios/chrome/browser/providers/font:chromium_font",
     "//ios/chrome/browser/providers/fullscreen:chromium_fullscreen",
diff --git a/ios/chrome/browser/providers/find_in_page/BUILD.gn b/ios/chrome/browser/providers/find_in_page/BUILD.gn
new file mode 100644
index 0000000..edeb204
--- /dev/null
+++ b/ios/chrome/browser/providers/find_in_page/BUILD.gn
@@ -0,0 +1,11 @@
+# Copyright 2022 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("chromium_find_in_page") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [ "chromium_find_in_page.mm" ]
+  frameworks = [ "Foundation.framework" ]
+  deps =
+      [ "//ios/public/provider/chrome/browser/find_in_page:find_in_page_api" ]
+}
diff --git a/ios/chrome/browser/providers/find_in_page/chromium_find_in_page.mm b/ios/chrome/browser/providers/find_in_page/chromium_find_in_page.mm
new file mode 100644
index 0000000..4de26f7
--- /dev/null
+++ b/ios/chrome/browser/providers/find_in_page/chromium_find_in_page.mm
@@ -0,0 +1,42 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Foundation/Foundation.h>
+
+#import "ios/public/provider/chrome/browser/find_in_page/find_in_page_api.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace ios {
+namespace provider {
+
+bool IsNativeFindInPageWithSystemFindPanel() {
+  return false;
+}
+
+bool IsNativeFindInPageWithChromeFindBar() {
+  return false;
+}
+
+bool IsNativeFindInPageEnabled() {
+  return false;
+}
+
+id<UITextSearching> GetSearchableObjectForWebState(web::WebState* web_state)
+    API_AVAILABLE(ios(16)) {
+  return nil;
+}
+
+void StartTextSearchInWebState(web::WebState* web_state) {
+  return;
+}
+
+void StopTextSearchInWebState(web::WebState* web_state) {
+  return;
+}
+
+}  // namespace provider
+}  // namespace ios
diff --git a/ios/chrome/browser/providers/lens/chromium_lens.mm b/ios/chrome/browser/providers/lens/chromium_lens.mm
index 467926f..69f597e2 100644
--- a/ios/chrome/browser/providers/lens/chromium_lens.mm
+++ b/ios/chrome/browser/providers/lens/chromium_lens.mm
@@ -8,7 +8,6 @@
 
 #import "base/bind.h"
 #import "base/notreached.h"
-#import "base/threading/sequenced_task_runner_handle.h"
 
 #import <UIKit/UIKit.h>
 
diff --git a/ios/chrome/browser/push_notification/push_notification_browser_state_service.mm b/ios/chrome/browser/push_notification/push_notification_browser_state_service.mm
index a6e0a8e96..8c49250 100644
--- a/ios/chrome/browser/push_notification/push_notification_browser_state_service.mm
+++ b/ios/chrome/browser/push_notification/push_notification_browser_state_service.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/browser/push_notification/push_notification_browser_state_service.h"
 
 #import "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #import "components/signin/public/identity_manager/primary_account_change_event.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/browser_state/browser_state_info_cache.h"
diff --git a/ios/chrome/browser/reading_list/reading_list_download_service.mm b/ios/chrome/browser/reading_list/reading_list_download_service.mm
index f75c3b4..c9ea327 100644
--- a/ios/chrome/browser/reading_list/reading_list_download_service.mm
+++ b/ios/chrome/browser/reading_list/reading_list_download_service.mm
@@ -14,6 +14,7 @@
 #import "base/metrics/histogram_macros.h"
 #import "base/strings/string_util.h"
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/task/thread_pool.h"
 #import "components/reading_list/core/offline_url_utils.h"
 #import "components/reading_list/core/reading_list_entry.h"
diff --git a/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm b/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm
index c860638..9809c62e 100644
--- a/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm
+++ b/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm
@@ -881,10 +881,11 @@
                 reused_password_account_type, &actual_verdict));
 
   // Return VERDICT_TYPE_UNSPECIFIED if look up for a URL whose variants match
-  // test.com/def, but the corresponding verdict is expired.
+  // test.com/def, but the corresponding verdict is expired, so the most
+  // matching unexpired verdict will return SAFE
   reused_password_account_type.set_account_type(
       ReusedPasswordAccountType::GSUITE);
-  EXPECT_EQ(LoginReputationClientResponse::VERDICT_TYPE_UNSPECIFIED,
+  EXPECT_EQ(LoginReputationClientResponse::SAFE,
             service_->GetCachedVerdict(
                 GURL("http://test.com/def/ghi/index.html"),
                 LoginReputationClientRequest::PASSWORD_REUSE_EVENT,
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
index 9da8a4e..b385e72b 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
@@ -106,11 +106,12 @@
       AddressProfileSavePromptCallback callback) override;
   bool HasCreditCardScanFeature() override;
   void ScanCreditCard(CreditCardScanCallback callback) override;
+  bool TryToShowFastCheckout(const FormData& form,
+                             const FormFieldData& field,
+                             AutofillDriver* driver) override;
+  void HideFastCheckout(bool allow_further_runs) override;
   bool IsFastCheckoutSupported() override;
-  bool IsFastCheckoutTriggerForm(const FormData& form,
-                                 const FormFieldData& field) override;
-  bool ShowFastCheckout(base::WeakPtr<FastCheckoutDelegate> delegate) override;
-  void HideFastCheckout() override;
+  bool IsShowingFastCheckoutUI() override;
   bool IsTouchToFillCreditCardSupported() override;
   bool ShowTouchToFillCreditCard(
       base::WeakPtr<TouchToFillDelegate> delegate,
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
index 9769dff..a2612fa 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
@@ -384,20 +384,16 @@
   return false;
 }
 
-bool ChromeAutofillClientIOS::IsFastCheckoutTriggerForm(
-    const FormData& form,
-    const FormFieldData& field) {
+bool ChromeAutofillClientIOS::TryToShowFastCheckout(const FormData& form,
+                                                    const FormFieldData& field,
+                                                    AutofillDriver* driver) {
   return false;
 }
 
-bool ChromeAutofillClientIOS::ShowFastCheckout(
-    base::WeakPtr<FastCheckoutDelegate> delegate) {
-  NOTREACHED();
-  return false;
-}
+void ChromeAutofillClientIOS::HideFastCheckout(bool allow_further_runs) {}
 
-void ChromeAutofillClientIOS::HideFastCheckout() {
-  NOTREACHED();
+bool ChromeAutofillClientIOS::IsShowingFastCheckoutUI() {
+  return false;
 }
 
 bool ChromeAutofillClientIOS::IsTouchToFillCreditCardSupported() {
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
index ba6b1319..00d795f 100644
--- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn
+++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -163,15 +163,9 @@
 
 source_set("content_suggestions_ui") {
   sources = [
-    "content_suggestions_collection_controlling.h",
-    "content_suggestions_collection_synchronizing.h",
     "content_suggestions_commands.h",
     "content_suggestions_consumer.h",
     "content_suggestions_header_commands.h",
-    "content_suggestions_header_controlling.h",
-    "content_suggestions_header_synchronizer.h",
-    "content_suggestions_header_synchronizer.mm",
-    "content_suggestions_header_synchronizing.h",
     "content_suggestions_header_view.h",
     "content_suggestions_header_view.mm",
     "content_suggestions_header_view_controller.h",
@@ -278,7 +272,6 @@
   sources = [
     "content_suggestions_category_wrapper_unittest.mm",
     "content_suggestions_collection_utils_unittest.mm",
-    "content_suggestions_header_synchronizer_unittest.mm",
     "content_suggestions_mediator_unittest.mm",
     "content_suggestions_tile_saver_unittest.mm",
   ]
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_controlling.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_controlling.h
deleted file mode 100644
index 1fe5ba02..0000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_controlling.h
+++ /dev/null
@@ -1,29 +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_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_COLLECTION_CONTROLLING_H_
-#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_COLLECTION_CONTROLLING_H_
-
-#import <UIKit/UIKit.h>
-
-@protocol ContentSuggestionsHeaderSynchronizing;
-
-// Controller for the ContentSuggestions collection.
-@protocol ContentSuggestionsCollectionControlling
-
-// `YES` if the collection is scrolled to the point where the omnibox is stuck
-// to the top of the NTP. Used to lock this position in place on various frame
-// changes.
-@property(nonatomic, assign) BOOL scrolledToMinimumHeight;
-
-// Synchronizer for the collection controller, allowing it to synchronize with
-// its header.
-@property(nonatomic, weak) id<ContentSuggestionsHeaderSynchronizing>
-    headerSynchronizer;
-
-- (UICollectionView*)collectionView;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_COLLECTION_CONTROLLING_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_synchronizing.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_synchronizing.h
deleted file mode 100644
index 3fe2ddf..0000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_synchronizing.h
+++ /dev/null
@@ -1,27 +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_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_COLLECTION_SYNCHRONIZING_H_
-#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_COLLECTION_SYNCHRONIZING_H_
-
-#import <UIKit/UIKit.h>
-
-#import "base/ios/block_types.h"
-
-// Synchronization protocol used by the ContentSuggestions header controller to
-// synchronize with the ContentSuggestions collection.
-@protocol ContentSuggestionsCollectionSynchronizing
-
-// Moves the tiles down, by setting the content offset of the collection to 0.
-- (void)shiftTilesDown;
-// Moves the tiles up by pinning the omnibox to the top. `completion` is called
-// when the collection is scrolled to top. `animations` is called only if it is
-// not yet scrolled to the top.
-- (void)shiftTilesUpWithAnimations:(ProceduralBlock)animations
-                        completion:
-                            (void (^)(UIViewAnimatingPosition))completion;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_COLLECTION_SYNCHRONIZING_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_controlling.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_controlling.h
deleted file mode 100644
index 10b00e0..0000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_controlling.h
+++ /dev/null
@@ -1,54 +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_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLING_H_
-#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLING_H_
-
-#import <UIKit/UIKit.h>
-
-@protocol ContentSuggestionsCollectionSynchronizing;
-
-// Controller for the ContentSuggestions header.
-@protocol ContentSuggestionsHeaderControlling
-
-// Synchronizer for the header controller, allowing it to synchronize with its
-// collection.
-@property(nonatomic, weak) id<ContentSuggestionsCollectionSynchronizing>
-    collectionSynchronizer;
-
-// `YES` if its view is visible.  When set to `NO` various UI updates are
-// ignored.
-@property(nonatomic, assign, getter=isShowing) BOOL showing;
-
-// Updates the iPhone fakebox's frame based on the current scroll view `offset`
-// and `width`. `width` is the width of the screen, including the space outside
-// the safe area. The `safeAreaInsets` is relative to the view used to calculate
-// the `width`.
-- (void)updateFakeOmniboxForOffset:(CGFloat)offset
-                       screenWidth:(CGFloat)screenWidth
-                    safeAreaInsets:(UIEdgeInsets)safeAreaInsets;
-
-// Updates the fakeomnibox's width in order to be adapted to the new `width`,
-// without taking the y-position into account.
-- (void)updateFakeOmniboxForWidth:(CGFloat)width;
-
-// Unfocuses the omnibox.
-- (void)unfocusOmnibox;
-
-// Calls layoutIfNeeded on the header.
-- (void)layoutHeader;
-
-// Update any dynamic constraints.
-- (void)updateConstraints;
-
-// Returns the Y value to use for the scroll view's contentOffset when scrolling
-// the omnibox to the top of the screen.
-- (CGFloat)pinnedOffsetY;
-
-// Whether the omnibox is currently focused.
-- (BOOL)isOmniboxFocused;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_CONTROLLING_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h
deleted file mode 100644
index d5bae7a4..0000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h
+++ /dev/null
@@ -1,42 +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_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_SYNCHRONIZER_H_
-#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_SYNCHRONIZER_H_
-
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_synchronizing.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizing.h"
-
-#import <UIKit/UIKit.h>
-
-#import "base/ios/block_types.h"
-
-@protocol ContentSuggestionsCollectionControlling;
-@protocol ContentSuggestionsHeaderControlling;
-
-// Synchronizer for all the interactions between the HeaderController and the
-// CollectionView. It handles the interactions both ways.
-@interface ContentSuggestionsHeaderSynchronizer
-    : NSObject<ContentSuggestionsCollectionSynchronizing,
-               ContentSuggestionsHeaderSynchronizing>
-
-// Initializes the CommandHandler with the `suggestionsViewController` and the
-// `headerController`.
-- (nullable instancetype)
-initWithCollectionController:
-    (nullable id<ContentSuggestionsCollectionControlling>)collectionController
-            headerController:(nullable id<ContentSuggestionsHeaderControlling>)
-                                 headerController NS_DESIGNATED_INITIALIZER;
-
-- (nullable instancetype)init NS_UNAVAILABLE;
-
-// When the omnibox is focused, this value represents the shift distance of the
-// collection needed to pin the omnibox to the top. It is 0 if the omnibox has
-// not been moved when focused (i.e. the collection was already scrolled to
-// top).
-@property(nonatomic, assign) CGFloat collectionShiftingOffset;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_SYNCHRONIZER_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.mm
deleted file mode 100644
index a2a3123b..0000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.mm
+++ /dev/null
@@ -1,306 +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/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h"
-
-#import "base/ios/ios_util.h"
-#import "base/mac/foundation_util.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_controlling.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_controlling.h"
-#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-namespace {
-const CGFloat kShiftTilesDownAnimationDuration = 0.2;
-const CGFloat kShiftTilesUpAnimationDuration = 0.25;
-}  // namespace
-
-@interface ContentSuggestionsHeaderSynchronizer ()<UIGestureRecognizerDelegate>
-
-@property(nonatomic, weak, readonly) UICollectionView* collectionView;
-// `YES` if the fakebox header should be animated on scroll.
-@property(nonatomic, assign) BOOL shouldAnimateHeader;
-@property(nonatomic, weak) id<ContentSuggestionsCollectionControlling>
-    collectionController;
-@property(nonatomic, weak) id<ContentSuggestionsHeaderControlling>
-    headerController;
-@property(nonatomic, assign) CFTimeInterval shiftTileStartTime;
-
-// Tap gesture recognizer when the omnibox is focused.
-@property(nonatomic, strong) UITapGestureRecognizer* tapGestureRecognizer;
-// Animator for the shiftTilesUp animation.
-@property(nonatomic, strong) UIViewPropertyAnimator* animator;
-@end
-
-@implementation ContentSuggestionsHeaderSynchronizer
-
-@synthesize collectionController = _collectionController;
-@synthesize headerController = _headerController;
-@synthesize shouldAnimateHeader = _shouldAnimateHeader;
-@synthesize shiftTileStartTime = _shiftTileStartTime;
-@synthesize tapGestureRecognizer = _tapGestureRecognizer;
-@synthesize collectionShiftingOffset = _collectionShiftingOffset;
-// Synthesized for ContentSuggestionsSynchronizing protocol.
-@synthesize additionalOffset = _additionalOffset;
-
-- (instancetype)
-initWithCollectionController:
-    (id<ContentSuggestionsCollectionControlling>)collectionController
-            headerController:
-                (id<ContentSuggestionsHeaderControlling>)headerController {
-  self = [super init];
-  if (self) {
-    _shiftTileStartTime = -1;
-    _shouldAnimateHeader = YES;
-
-    _headerController = headerController;
-    _collectionController = collectionController;
-
-    _tapGestureRecognizer = [[UITapGestureRecognizer alloc]
-        initWithTarget:_headerController
-                action:@selector(unfocusOmnibox)];
-    [_tapGestureRecognizer setDelegate:self];
-
-    _collectionShiftingOffset = 0;
-    _additionalOffset = 0;
-  }
-  return self;
-}
-
-#pragma mark - ContentSuggestionsCollectionSynchronizing
-
-- (void)shiftTilesDown {
-  [self.collectionView removeGestureRecognizer:self.tapGestureRecognizer];
-
-  self.shouldAnimateHeader = YES;
-
-  if (self.animator.running) {
-    [self.animator stopAnimation:NO];
-    [self.animator finishAnimationAtPosition:UIViewAnimatingPositionStart];
-    self.animator = nil;
-  }
-
-  if (self.collectionShiftingOffset == 0 || self.collectionView.dragging) {
-    self.collectionShiftingOffset = 0;
-    [self updateFakeOmniboxForScrollPosition];
-    return;
-  }
-
-  self.collectionController.scrolledToMinimumHeight = NO;
-
-  // CADisplayLink is used for this animation instead of the standard UIView
-  // animation because the standard animation did not properly convert the
-  // fakebox from its scrolled up mode to its scrolled down mode. Specifically,
-  // calling `UICollectionView reloadData` adjacent to the standard animation
-  // caused the fakebox's views to jump incorrectly. CADisplayLink avoids this
-  // problem because it allows `shiftTilesDownAnimationDidFire` to directly
-  // control each frame.
-  CADisplayLink* link = [CADisplayLink
-      displayLinkWithTarget:self
-                   selector:@selector(shiftTilesDownAnimationDidFire:)];
-  [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
-}
-
-- (void)shiftTilesUpWithAnimations:(ProceduralBlock)animations
-                        completion:
-                            (void (^)(UIViewAnimatingPosition))completion {
-  // Add gesture recognizer to collection view when the omnibox is focused.
-  [self.collectionView addGestureRecognizer:self.tapGestureRecognizer];
-
-  if (self.collectionView.decelerating) {
-    // Stop the scrolling if the scroll view is decelerating to prevent the
-    // focus to be immediately lost.
-    [self.collectionView setContentOffset:self.collectionView.contentOffset
-                                 animated:NO];
-  }
-
-  if (self.collectionController.scrolledToMinimumHeight) {
-    self.shouldAnimateHeader = NO;
-    if (completion)
-      completion(UIViewAnimatingPositionEnd);
-    return;
-  }
-
-  if (CGSizeEqualToSize(self.collectionView.contentSize, CGSizeZero))
-    [self.collectionView layoutIfNeeded];
-
-  CGFloat pinnedOffsetY = [self.headerController pinnedOffsetY];
-  self.collectionShiftingOffset =
-      MAX(-self.additionalOffset, pinnedOffsetY - [self adjustedOffset].y);
-  self.shouldAnimateHeader = YES;
-
-  CGFloat pinnedOffsetBeforeAnimation = [self pinnedOffsetY];
-  __weak __typeof(self) weakSelf = self;
-
-  ProceduralBlock shiftOmniboxToTop = ^{
-    __typeof(weakSelf) strongSelf = weakSelf;
-    // Changing the contentOffset of the collection results in a
-    // scroll and a change in the constraints of the header.
-    strongSelf.collectionView.contentOffset =
-        CGPointMake(0, [strongSelf pinnedOffsetY]);
-    // Layout the header for the constraints to be animated.
-    [strongSelf.headerController layoutHeader];
-    [strongSelf.collectionView.collectionViewLayout invalidateLayout];
-  };
-
-  self.animator = [[UIViewPropertyAnimator alloc]
-      initWithDuration:kShiftTilesUpAnimationDuration
-                 curve:UIViewAnimationCurveEaseInOut
-            animations:^{
-              if (!weakSelf) {
-                return;
-              }
-
-              __typeof(weakSelf) strongSelf = weakSelf;
-              if (strongSelf.collectionView.contentOffset.y <
-                  [self pinnedOffsetY]) {
-                if (animations)
-                  animations();
-                shiftOmniboxToTop();
-              }
-            }];
-
-  [self.animator addCompletion:^(UIViewAnimatingPosition finalPosition) {
-    ContentSuggestionsHeaderSynchronizer* strongSelf = weakSelf;
-    if (!strongSelf) {
-      return;
-    }
-
-    if (finalPosition == UIViewAnimatingPositionEnd) {
-      // Content suggestion headers can be updated during the scroll, causing
-      // `pinnedOffsetY` to be invalid. When this happens during the animation,
-      // the tiles are not scrolled to the top causing the omnibox to be hidden
-      // by the `PrimaryToolbarView`. In that state, the omnibox's popup and the
-      // keyboard are still visible.
-      // If the animation is not interrupted and `pinnedOffsetY` changed
-      // during the animation, shift the omnibox to the top at the end of the
-      // animation.
-      if ([strongSelf pinnedOffsetY] != pinnedOffsetBeforeAnimation &&
-          strongSelf.collectionView.contentOffset.y <
-              [strongSelf pinnedOffsetY]) {
-        shiftOmniboxToTop();
-      }
-      strongSelf.shouldAnimateHeader = NO;
-    }
-
-    strongSelf.collectionController.scrolledToMinimumHeight = YES;
-    if (completion) {
-      completion(finalPosition);
-    }
-  }];
-
-  self.animator.interruptible = YES;
-  [self.animator startAnimation];
-}
-
-#pragma mark - ContentSuggestionsHeaderSynchronizing
-
-- (void)updateFakeOmniboxForScrollPosition {
-  // Unfocus the omnibox when the scroll view is scrolled by the user (but not
-  // when a scroll is triggered by layout/UIKit).
-  if ([self.headerController isOmniboxFocused] && !self.shouldAnimateHeader &&
-      self.collectionView.dragging) {
-    [self.headerController unfocusOmnibox];
-  }
-
-  if (self.shouldAnimateHeader) {
-    UIEdgeInsets insets = self.collectionView.safeAreaInsets;
-    [self.headerController
-        updateFakeOmniboxForOffset:[self adjustedOffset].y
-                       screenWidth:self.collectionView.frame.size.width
-                    safeAreaInsets:insets];
-  }
-}
-
-- (void)updateFakeOmniboxOnNewWidth:(CGFloat)width {
-  if (self.shouldAnimateHeader) {
-    // We check -superview here because in certain scenarios (such as when the
-    // VC is rotated underneath another presented VC), in a
-    // UICollectionViewController -viewSafeAreaInsetsDidChange the VC.view has
-    // updated safeAreaInsets, but VC.collectionView does not until a layer
-    // -viewDidLayoutSubviews.  Since self.collectionView and it's superview
-    // should always have the same safeArea, this should be safe.
-    UIEdgeInsets insets = self.collectionView.superview.safeAreaInsets;
-    [self.headerController updateFakeOmniboxForOffset:[self adjustedOffset].y
-                                          screenWidth:width
-                                       safeAreaInsets:insets];
-  } else {
-    [self.headerController updateFakeOmniboxForWidth:width];
-  }
-}
-
-- (void)resetPreFocusOffset {
-  self.collectionShiftingOffset = 0;
-}
-
-- (void)unfocusOmnibox {
-  [self.headerController unfocusOmnibox];
-}
-
-- (CGFloat)pinnedOffsetY {
-  return [self.headerController pinnedOffsetY] - self.additionalOffset;
-}
-
-#pragma mark - UIGestureRecognizerDelegate
-
-- (UIView*)nearestAncestorOfView:(UIView*)view withClass:(Class)aClass {
-  if (!view) {
-    return nil;
-  }
-  if ([view isKindOfClass:aClass]) {
-    return view;
-  }
-  return [self nearestAncestorOfView:[view superview] withClass:aClass];
-}
-
-#pragma mark - Private
-
-// Convenience method to get the collection view of the suggestions.
-- (UICollectionView*)collectionView {
-  return [self.collectionController collectionView];
-}
-
-// Updates the collection view's scroll view offset for the next frame of the
-// shiftTilesDown animation.
-- (void)shiftTilesDownAnimationDidFire:(CADisplayLink*)link {
-  // If this is the first frame of the animation, store the starting timestamp
-  // and do nothing.
-  if (self.shiftTileStartTime == -1) {
-    self.shiftTileStartTime = link.timestamp;
-    return;
-  }
-
-  CFTimeInterval timeElapsed = link.timestamp - self.shiftTileStartTime;
-  double percentComplete = timeElapsed / kShiftTilesDownAnimationDuration;
-  // Ensure that the percentage cannot be above 1.0.
-  if (percentComplete > 1.0)
-    percentComplete = 1.0;
-
-  // Find how much the collection view should be scrolled up in the next frame.
-  CGFloat yOffset = (1.0 - percentComplete) * [self pinnedOffsetY] +
-                    percentComplete * MAX([self pinnedOffsetY] -
-                                              self.collectionShiftingOffset,
-                                          -self.additionalOffset);
-  self.collectionView.contentOffset = CGPointMake(0, yOffset);
-
-  if (percentComplete == 1.0) {
-    [link invalidate];
-    self.collectionShiftingOffset = 0;
-    // Reset `shiftTileStartTime` to its sentinel value.
-    self.shiftTileStartTime = -1;
-  }
-}
-
-// Returns y-offset compensated for any additionalOffset that might be set.
-- (CGPoint)adjustedOffset {
-  CGPoint adjustedOffset = self.collectionView.contentOffset;
-  adjustedOffset.y += self.additionalOffset;
-  return adjustedOffset;
-}
-
-@end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer_unittest.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer_unittest.mm
deleted file mode 100644
index 16457356..0000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer_unittest.mm
+++ /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.
-
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h"
-
-#import <memory>
-
-#import "base/run_loop.h"
-#import "base/test/task_environment.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_controlling.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_controlling.h"
-#import "ios/testing/scoped_block_swizzler.h"
-#import "testing/platform_test.h"
-#import "third_party/ocmock/OCMock/OCMock.h"
-#import "third_party/ocmock/gtest_support.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-namespace {
-
-class ContentSuggestionsHeaderSynchronizerTest : public PlatformTest {
- public:
-  ContentSuggestionsHeaderSynchronizerTest() {
-    header_controller_ =
-        OCMProtocolMock(@protocol(ContentSuggestionsHeaderControlling));
-    collection_controller_ =
-        OCMProtocolMock(@protocol(ContentSuggestionsCollectionControlling));
-    synchronizer_ = [[ContentSuggestionsHeaderSynchronizer alloc]
-        initWithCollectionController:collection_controller_
-                    headerController:header_controller_];
-  }
-
-  ContentSuggestionsHeaderSynchronizer* Synchronizer() { return synchronizer_; }
-
-  id HeaderController() { return header_controller_; }
-
-  id CollectionController() { return collection_controller_; }
-  void SetAsIPhone() {
-    device_type_swizzler_ = std::make_unique<ScopedBlockSwizzler>(
-        [UIDevice class], @selector(userInterfaceIdiom),
-        ^UIUserInterfaceIdiom(id self) {
-          return UIUserInterfaceIdiomPhone;
-        });
-  }
-
- private:
-  base::test::TaskEnvironment task_environment_;
-  ContentSuggestionsHeaderSynchronizer* synchronizer_;
-  id header_controller_;
-  id collection_controller_;
-  std::unique_ptr<ScopedBlockSwizzler> device_type_swizzler_;
-  std::unique_ptr<ScopedBlockSwizzler> orientation_swizzler_;
-};
-
-TEST_F(ContentSuggestionsHeaderSynchronizerTest, shiftUp) {
-  // Setup.
-  id collectionController = CollectionController();
-  OCMExpect([collectionController setScrolledToMinimumHeight:YES]);
-
-  // Action.
-  [Synchronizer() shiftTilesUpWithAnimations:nil completion:nil];
-  base::RunLoop().RunUntilIdle();
-
-  // Tests.
-  EXPECT_OCMOCK_VERIFY(collectionController);
-}
-
-TEST_F(ContentSuggestionsHeaderSynchronizerTest, updateFakeOmnibox) {
-  // Setup.
-  id headerController = HeaderController();
-  OCMExpect([[[headerController stub] ignoringNonObjectArgs]
-      updateFakeOmniboxForOffset:10
-                     screenWidth:0
-                  safeAreaInsets:UIEdgeInsetsZero]);
-  SetAsIPhone();
-
-  // Action.
-  [Synchronizer() updateFakeOmniboxForScrollPosition];
-
-  // Tests.
-  EXPECT_OCMOCK_VERIFY(headerController);
-}
-}  // namespace
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizing.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizing.h
deleted file mode 100644
index b31e451..0000000
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizing.h
+++ /dev/null
@@ -1,37 +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_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_SYNCHRONIZING_H_
-#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_SYNCHRONIZING_H_
-
-#import <UIKit/UIKit.h>
-
-// Synchronizing protocol allowing the ContentSuggestionsViewController to
-// synchronize with the header, containing the fake omnibox and the logo.
-@protocol ContentSuggestionsHeaderSynchronizing
-
-// The added y-offset of the NTP collection view to make up for the header.
-// Without this, the offset is negative at the top of the NTP.
-@property(nonatomic, assign) CGFloat additionalOffset;
-
-// Handles the scroll position of the collection and unfocus the omnibox if
-// needed. Updates the fake omnibox to adapt to the current scrolling.
-- (void)updateFakeOmniboxForScrollPosition;
-
-// Updates the fake omnibox to adapt to the current orientation.
-- (void)updateFakeOmniboxOnNewWidth:(CGFloat)width;
-
-// Sets the amount of scrolling needed when unfocusing the omnibox to 0.
-- (void)resetPreFocusOffset;
-
-// Unfocuses the omnibox.
-- (void)unfocusOmnibox;
-
-// Returns the Y value to use for the scroll view's contentOffset when scrolling
-// the omnibox to the top of the screen.
-- (CGFloat)pinnedOffsetY;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_HEADER_SYNCHRONIZING_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h
index 18aa9a9..dd93f3e 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h
@@ -7,14 +7,12 @@
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_controlling.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_consumer.h"
 #import "ios/chrome/browser/ui/content_suggestions/user_account_image_update_delegate.h"
 #import "ios/chrome/browser/ui/ntp/logo_animation_controller.h"
 
 @protocol ApplicationCommands;
 @protocol BrowserCommands;
-@protocol ContentSuggestionsCollectionSynchronizing;
 @protocol ContentSuggestionsCommands;
 @protocol ContentSuggestionsHeaderCommands;
 @protocol ContentSuggestionsHeaderViewControllerDelegate;
@@ -24,14 +22,12 @@
 @protocol LensCommands;
 @class LayoutGuideCenter;
 @class PrimaryToolbarViewController;
-class ReadingListModel;
 
 // Controller for the header containing the logo and the fake omnibox, handling
 // the interactions between the header and the collection, and the rest of the
 // application.
 @interface ContentSuggestionsHeaderViewController
-    : UIViewController <ContentSuggestionsHeaderControlling,
-                        NTPHomeConsumer,
+    : UIViewController <NTPHomeConsumer,
                         LogoAnimationControllerOwnerOwner,
                         UserAccountImageUpdateDelegate>
 
@@ -49,11 +45,10 @@
 @property(nonatomic, weak) id<ContentSuggestionsHeaderViewControllerDelegate>
     delegate;
 @property(nonatomic, weak) id<ContentSuggestionsHeaderCommands> commandHandler;
-@property(nonatomic, assign) ReadingListModel* readingListModel;
 @property(nonatomic, weak) id<NewTabPageControllerDelegate> toolbarDelegate;
 
-// Whether the Google logo or doodle is being shown.
-@property(nonatomic, assign) BOOL logoIsShowing;
+// `YES` when notifications indicate the omnibox is focused.
+@property(nonatomic, assign) BOOL omniboxFocused;
 
 // `YES` if the omnibox should be focused on when the view appears for voice
 // over.
@@ -65,25 +60,58 @@
 // `YES` if the Start Surface is currently being shown.
 @property(nonatomic, assign) BOOL isStartShowing;
 
+// `YES` if its view is visible.  When set to `NO` various UI updates are
+// ignored.
+@property(nonatomic, assign, getter=isShowing) BOOL showing;
+
 // The base view controller from which to present UI.
 @property(nonatomic, weak) UIViewController* baseViewController;
 
 // The layout guide center for the current scene.
 @property(nonatomic, strong) LayoutGuideCenter* layoutGuideCenter;
 
+// Animation to expand this header in response to focusing the omnibox to match
+// the fake omnibox with the omnibox's.
+- (void)expandHeaderForFocus;
+
+// Configure the header after the focus omnibox animation has completed.
+// `finalPosition` is important since the animation could be cancelled before
+// completion.
+- (void)completeHeaderFakeOmniboxFocusAnimationWithFinalPosition:
+    (UIViewAnimatingPosition)finalPosition;
+
+// Updates the iPhone fakebox's frame based on the current scroll view `offset`
+// and `width`. `width` is the width of the screen, including the space outside
+// the safe area. The `safeAreaInsets` is relative to the view used to calculate
+// the `width`.
+- (void)updateFakeOmniboxForOffset:(CGFloat)offset
+                       screenWidth:(CGFloat)screenWidth
+                    safeAreaInsets:(UIEdgeInsets)safeAreaInsets
+            animateScrollAnimation:(BOOL)animateScrollAnimation;
+
+// Updates the fakeomnibox's width in order to be adapted to the new `width`,
+// without taking the y-position into account.
+- (void)updateFakeOmniboxForWidth:(CGFloat)width;
+
+// Returns the Y value to use for the scroll view's contentOffset when scrolling
+// the omnibox to the top of the screen.
+- (CGFloat)pinnedOffsetY;
+
 // Return the toolbar view;
 - (UIView*)toolBarView;
 
-// Animates the NTP fakebox to the focused position and focuses the real
-// omnibox.
-- (void)focusFakebox;
-
 // Sends notification to focus the accessibility of the omnibox.
 - (void)focusAccessibilityOnOmnibox;
 
+// Calls layoutIfNeeded on the header.
+- (void)layoutHeader;
+
 // Returns the height of the entire header.
 - (CGFloat)headerHeight;
 
+// Update any dynamic constraints.
+- (void)updateConstraints;
+
 // Identity disc shown in this ViewController.
 // TODO(crbug.com/1170995): Remove once the Feed header properly supports
 // ContentSuggestions.
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
index 50a15c4..6354079d 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
@@ -17,7 +17,6 @@
 #import "ios/chrome/browser/ui/commands/browser_commands.h"
 #import "ios/chrome/browser/ui/commands/lens_commands.h"
 #import "ios/chrome/browser/ui/commands/omnibox_commands.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_synchronizing.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
@@ -62,14 +61,6 @@
     UIIndirectScribbleInteractionDelegate,
     UIPointerInteractionDelegate>
 
-// If YES the animations of the fake omnibox triggered when the collection is
-// scrolled (expansion) are disabled. This is used for the fake omnibox focus
-// animations so the constraints aren't changed while the ntp is scrolled.
-@property(nonatomic, assign) BOOL disableScrollAnimation;
-
-// `YES` when notifications indicate the omnibox is focused.
-@property(nonatomic, assign, getter=isOmniboxFocused) BOOL omniboxFocused;
-
 // `YES` if this consumer is has voice search enabled.
 @property(nonatomic, assign) BOOL voiceSearchIsEnabled;
 
@@ -90,26 +81,13 @@
 @property(nonatomic, strong) NSLayoutConstraint* headerViewHeightConstraint;
 @property(nonatomic, assign) BOOL logoFetched;
 
+// Whether the Google logo or doodle is being shown.
+@property(nonatomic, assign) BOOL logoIsShowing;
+
 @end
 
 @implementation ContentSuggestionsHeaderViewController
 
-@synthesize collectionSynchronizer = _collectionSynchronizer;
-@synthesize showing = _showing;
-@synthesize omniboxFocused = _omniboxFocused;
-@synthesize headerView = _headerView;
-@synthesize fakeOmnibox = _fakeOmnibox;
-@synthesize accessibilityButton = _accessibilityButton;
-@synthesize doodleHeightConstraint = _doodleHeightConstraint;
-@synthesize doodleTopMarginConstraint = _doodleTopMarginConstraint;
-@synthesize fakeOmniboxWidthConstraint = _fakeOmniboxWidthConstraint;
-@synthesize fakeOmniboxHeightConstraint = _fakeOmniboxHeightConstraint;
-@synthesize fakeOmniboxTopMarginConstraint = _fakeOmniboxTopMarginConstraint;
-@synthesize voiceSearchIsEnabled = _voiceSearchIsEnabled;
-@synthesize logoIsShowing = _logoIsShowing;
-@synthesize logoFetched = _logoFetched;
-@synthesize layoutGuideCenter = _layoutGuideCenter;
-
 - (instancetype)init {
   if (self = [super initWithNibName:nil bundle:nil]) {
     _focusOmniboxWhenViewAppears = YES;
@@ -155,11 +133,60 @@
   [self.accessibilityButton removeObserver:self forKeyPath:@"highlighted"];
 }
 
-#pragma mark - ContentSuggestionsHeaderControlling
+- (void)expandHeaderForFocus {
+  // Make sure that the offset is after the pinned offset to have the fake
+  // omnibox taking the full width.
+  CGFloat offset = 9000;
+  [self.headerView updateSearchFieldWidth:self.fakeOmniboxWidthConstraint
+                                   height:self.fakeOmniboxHeightConstraint
+                                topMargin:self.fakeOmniboxTopMarginConstraint
+                                forOffset:offset
+                              screenWidth:self.headerView.bounds.size.width
+                           safeAreaInsets:self.view.safeAreaInsets];
 
+  self.fakeOmniboxWidthConstraint.constant = self.headerView.bounds.size.width;
+  [self.headerView layoutIfNeeded];
+  NamedGuide* omniboxGuide = [NamedGuide guideWithName:kOmniboxGuide
+                                                  view:self.headerView];
+  CGRect omniboxFrameInFakebox =
+      [[omniboxGuide owningView] convertRect:[omniboxGuide layoutFrame]
+                                      toView:self.fakeOmnibox];
+  self.headerView.fakeLocationBarLeadingConstraint.constant =
+      omniboxFrameInFakebox.origin.x;
+  self.headerView.fakeLocationBarTrailingConstraint.constant =
+      -(self.fakeOmnibox.bounds.size.width -
+        (omniboxFrameInFakebox.origin.x + omniboxFrameInFakebox.size.width));
+  self.headerView.voiceSearchButton.alpha = 0;
+  self.headerView.cancelButton.alpha = 0.7;
+  self.headerView.omnibox.alpha = 1;
+  self.headerView.searchHintLabel.alpha = 0;
+  [self.headerView layoutIfNeeded];
+}
+
+- (void)completeHeaderFakeOmniboxFocusAnimationWithFinalPosition:
+    (UIViewAnimatingPosition)finalPosition {
+  self.headerView.omnibox.hidden = YES;
+  self.headerView.cancelButton.hidden = YES;
+  self.headerView.searchHintLabel.alpha = 1;
+  self.headerView.voiceSearchButton.alpha = 1;
+  if (finalPosition == UIViewAnimatingPositionEnd &&
+      self.delegate.scrolledToMinimumHeight) {
+    // Check to see if the collection are still scrolled to the top --
+    // it's possible (and difficult) to unfocus the omnibox and initiate a
+    // -shiftTilesDownForOmniboxDefocus before the animation here completes.
+    [self.dispatcher fakeboxFocused];
+    if (IsSplitToolbarMode(self)) {
+      [self.dispatcher onFakeboxAnimationComplete];
+    }
+  }
+}
+
+// TODO(crbug.com/1403613): Name animateScrollAnimation something more aligned
+// to its true state indication. Why update the constraints only somtimes?
 - (void)updateFakeOmniboxForOffset:(CGFloat)offset
                        screenWidth:(CGFloat)screenWidth
-                    safeAreaInsets:(UIEdgeInsets)safeAreaInsets {
+                    safeAreaInsets:(UIEdgeInsets)safeAreaInsets
+            animateScrollAnimation:(BOOL)animateScrollAnimation {
   if (self.isShowing) {
     CGFloat progress =
         self.logoIsShowing || !IsRegularXRegularSizeClass(self)
@@ -175,15 +202,14 @@
     }
   }
 
-  if (self.disableScrollAnimation)
-    return;
-
-  [self.headerView updateSearchFieldWidth:self.fakeOmniboxWidthConstraint
-                                   height:self.fakeOmniboxHeightConstraint
-                                topMargin:self.fakeOmniboxTopMarginConstraint
-                                forOffset:offset
-                              screenWidth:screenWidth
-                           safeAreaInsets:safeAreaInsets];
+  if (animateScrollAnimation) {
+    [self.headerView updateSearchFieldWidth:self.fakeOmniboxWidthConstraint
+                                     height:self.fakeOmniboxHeightConstraint
+                                  topMargin:self.fakeOmniboxTopMarginConstraint
+                                  forOffset:offset
+                                screenWidth:screenWidth
+                             safeAreaInsets:safeAreaInsets];
+  }
 }
 
 - (void)updateFakeOmniboxForWidth:(CGFloat)width {
@@ -191,14 +217,6 @@
       content_suggestions::SearchFieldWidth(width, self.traitCollection);
 }
 
-- (void)unfocusOmnibox {
-  if (self.omniboxFocused) {
-    [self.dispatcher cancelOmniboxEdit];
-  } else {
-    [self locationBarResignsFirstResponder];
-  }
-}
-
 - (void)layoutHeader {
   [self.headerView layoutIfNeeded];
 }
@@ -433,13 +451,13 @@
 - (void)fakeTapViewTapped {
   base::RecordAction(base::UserMetricsAction("MobileFakeViewNTPTapped"));
   [self logOmniboxAction];
-  [self focusFakebox];
+  [self.delegate focusFakebox];
 }
 
 - (void)fakeboxTapped {
   base::RecordAction(base::UserMetricsAction("MobileFakeboxNTPTapped"));
   [self logOmniboxAction];
-  [self focusFakebox];
+  [self.delegate focusFakebox];
 }
 
 - (void)logOmniboxAction {
@@ -452,10 +470,6 @@
   }
 }
 
-- (void)focusFakebox {
-  [self shiftTilesUp];
-}
-
 - (void)focusAccessibilityOnOmnibox {
   UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
                                   self.fakeOmnibox);
@@ -544,86 +558,6 @@
       .active = YES;
 }
 
-- (void)shiftTilesDown {
-  if (IsSplitToolbarMode(self)) {
-    [self.dispatcher onFakeboxBlur];
-  }
-  [self.collectionSynchronizer shiftTilesDown];
-}
-
-- (void)shiftTilesUp {
-  if (self.disableScrollAnimation)
-    return;
-
-  void (^animations)() = nil;
-  if (![self.delegate isScrolledToMinimumHeight]) {
-    // Only trigger the fake omnibox animation if the header isn't scrolled to
-    // the top. Otherwise just rely on the normal animation.
-    self.disableScrollAnimation = YES;
-    [self.dispatcher focusOmniboxNoAnimation];
-    NamedGuide* omniboxGuide = [NamedGuide guideWithName:kOmniboxGuide
-                                                    view:self.headerView];
-    // Layout the owning view to make sure that the constrains are applied.
-    [omniboxGuide.owningView layoutIfNeeded];
-
-    self.headerView.omnibox.hidden = NO;
-    self.headerView.cancelButton.hidden = NO;
-    self.headerView.omnibox.alpha = 0;
-    self.headerView.cancelButton.alpha = 0;
-    animations = ^{
-      // Make sure that the offset is after the pinned offset to have the fake
-      // omnibox taking the full width.
-      CGFloat offset = 9000;
-      [self.headerView
-          updateSearchFieldWidth:self.fakeOmniboxWidthConstraint
-                          height:self.fakeOmniboxHeightConstraint
-                       topMargin:self.fakeOmniboxTopMarginConstraint
-                       forOffset:offset
-                     screenWidth:self.headerView.bounds.size.width
-                  safeAreaInsets:self.view.safeAreaInsets];
-
-      self.fakeOmniboxWidthConstraint.constant =
-          self.headerView.bounds.size.width;
-      [self.headerView layoutIfNeeded];
-      CGRect omniboxFrameInFakebox =
-          [[omniboxGuide owningView] convertRect:[omniboxGuide layoutFrame]
-                                          toView:self.fakeOmnibox];
-      self.headerView.fakeLocationBarLeadingConstraint.constant =
-          omniboxFrameInFakebox.origin.x;
-      self.headerView.fakeLocationBarTrailingConstraint.constant = -(
-          self.fakeOmnibox.bounds.size.width -
-          (omniboxFrameInFakebox.origin.x + omniboxFrameInFakebox.size.width));
-      self.headerView.voiceSearchButton.alpha = 0;
-      self.headerView.cancelButton.alpha = 0.7;
-      self.headerView.omnibox.alpha = 1;
-      self.headerView.searchHintLabel.alpha = 0;
-      [self.headerView layoutIfNeeded];
-    };
-  }
-
-  void (^completionBlock)(UIViewAnimatingPosition) =
-      ^(UIViewAnimatingPosition finalPosition) {
-        self.headerView.omnibox.hidden = YES;
-        self.headerView.cancelButton.hidden = YES;
-        self.headerView.searchHintLabel.alpha = 1;
-        self.headerView.voiceSearchButton.alpha = 1;
-        self.disableScrollAnimation = NO;
-        if (finalPosition == UIViewAnimatingPositionEnd &&
-            [self.delegate isScrolledToMinimumHeight]) {
-          // Check to see if the collection are still scrolled to the top --
-          // it's possible (and difficult) to unfocus the omnibox and initiate a
-          // -shiftTilesDown before the animation here completes.
-          [self.dispatcher fakeboxFocused];
-          if (IsSplitToolbarMode(self)) {
-            [self.dispatcher onFakeboxAnimationComplete];
-          }
-        }
-      };
-
-  [self.collectionSynchronizer shiftTilesUpWithAnimations:animations
-                                               completion:completionBlock];
-}
-
 - (CGFloat)topInset {
   return 0;
 }
@@ -726,16 +660,11 @@
 
   self.omniboxFocused = YES;
 
-  [self shiftTilesUp];
+  [self.delegate focusFakebox];
 }
 
 - (void)locationBarResignsFirstResponder {
-  if (!self.isShowing && ![self.delegate isScrolledToMinimumHeight])
-    return;
-
-  self.omniboxFocused = NO;
-
-  [self shiftTilesDown];
+  [self.delegate omniboxDidResignFirstResponder];
 }
 
 - (void)setVoiceSearchIsEnabled:(BOOL)voiceSearchIsEnabled {
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller_delegate.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller_delegate.h
index cbe2a407..838dbba 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller_delegate.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller_delegate.h
@@ -10,8 +10,14 @@
 // Delegate for the ContentSuggestionsHeaderViewController.
 @protocol ContentSuggestionsHeaderViewControllerDelegate
 
-// Returns whether the scrollview is scrolled to the omnibox.
-- (BOOL)isScrolledToMinimumHeight;
+// Whether the scrollview is scrolled to the omnibox.
+@property(nonatomic, assign, readonly) BOOL scrolledToMinimumHeight;
+
+// Indicates that the omnibox stopped being the first responder to the keyboard.
+- (void)omniboxDidResignFirstResponder;
+
+// Indicates to the receiver to update its state to focus the omnibox.
+- (void)focusFakebox;
 
 @end
 
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_consumer.h b/ios/chrome/browser/ui/content_suggestions/ntp_home_consumer.h
index 45e6b38..89a3d91f 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_consumer.h
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_consumer.h
@@ -19,6 +19,8 @@
 - (void)setLogoVendor:(id<LogoVendor>)logoVendor;
 
 // The location bar has lost focus.
+// TODO(crbug.com/1404977): Move this to a consumer protocol directly to
+// NTPViewController.
 - (void)locationBarResignsFirstResponder;
 
 // Tell location bar has taken focus.
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
index 95911c9..de81cf1 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
@@ -261,6 +261,14 @@
   [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
       assertWithMatcher:grey_sufficientlyVisible()];
 }
+// Tests that the Search Widget URL loads the NTP with the Omnibox focused.
+- (void)testOpenSearchWidget {
+  [ChromeEarlGrey sceneOpenURL:GURL("chromewidgetkit://search-widget/search")];
+  [ChromeEarlGrey
+      waitForSufficientlyVisibleElementWithMatcher:chrome_test_util::Omnibox()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
+      assertWithMatcher:grey_notVisible()];
+}
 
 // Tests that the fake omnibox width is correctly updated after a rotation.
 - (void)testOmniboxWidthRotation {
@@ -609,8 +617,7 @@
 }
 
 // Tests that tapping the fake omnibox focuses the real omnibox.
-// TODO(crbug.com/1315304): Reenable.
-- (void)DISABLED_testTapFakeOmnibox {
+- (void)testTapFakeOmnibox {
   // Setup the server.
   self.testServer->RegisterRequestHandler(
       base::BindRepeating(&StandardResponse));
@@ -622,6 +629,12 @@
   // page.
   [self focusFakebox];
 
+  // Check the fake omnibox is not visible.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
+      assertWithMatcher:grey_notVisible()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+
   [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
       performAction:grey_typeText([URL stringByAppendingString:@"\n"])];
 
@@ -661,6 +674,47 @@
       @"The collection is not scrolled back to its previous position");
 }
 
+// Tests that tapping the fake omnibox and then scrolling defocuses the the
+// omnibox.
+- (void)testTapFakeOmniboxAndScrollDefocuses {
+  // Get the collection and its layout.
+  UICollectionView* collectionView = [NewTabPageAppInterface collectionView];
+
+  // Offset before the tap.
+  CGPoint origin = collectionView.contentOffset;
+
+  // Tap the omnibox to focus it.
+  [self focusFakebox];
+
+  // Offset after the fake omnibox has been tapped.
+  CGPoint offsetAfterTap = collectionView.contentOffset;
+
+  // Make sure the fake omnibox has been hidden and the collection has moved.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
+      assertWithMatcher:grey_notVisible()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+  GREYAssertTrue(offsetAfterTap.y >= origin.y,
+                 @"The collection has not moved.");
+
+  // Scroll up.
+  if ([ChromeEarlGrey isIPadIdiom]) {
+    // iPad needs more scrolling to see entire fake omnibox since it appears
+    // from under the toolbar.
+    [[EarlGrey selectElementWithMatcher:chrome_test_util::NTPCollectionView()]
+        performAction:grey_scrollInDirection(kGREYDirectionUp, 100)];
+  } else {
+    [[EarlGrey selectElementWithMatcher:chrome_test_util::NTPCollectionView()]
+        performAction:grey_scrollInDirection(kGREYDirectionUp, 50)];
+  }
+
+  // Check the fake omnibox is displayed again.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
+      assertWithMatcher:grey_notVisible()];
+}
+
 // Tests that tapping the fake omnibox then unfocusing it moves the collection
 // back to where it was.
 - (void)testTapFakeOmniboxScrollScrolled {
diff --git a/ios/chrome/browser/ui/lens/lens_coordinator.mm b/ios/chrome/browser/ui/lens/lens_coordinator.mm
index 5597ed9..7a80e0ee 100644
--- a/ios/chrome/browser/ui/lens/lens_coordinator.mm
+++ b/ios/chrome/browser/ui/lens/lens_coordinator.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/browser/ui/lens/lens_coordinator.h"
 
 #import "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/main/browser.h"
diff --git a/ios/chrome/browser/ui/ntp/BUILD.gn b/ios/chrome/browser/ui/ntp/BUILD.gn
index 4ea71a4..6035795 100644
--- a/ios/chrome/browser/ui/ntp/BUILD.gn
+++ b/ios/chrome/browser/ui/ntp/BUILD.gn
@@ -106,6 +106,7 @@
     "//ios/chrome/browser/ui/ntp/metrics",
     "//ios/chrome/browser/ui/overscroll_actions",
     "//ios/chrome/browser/ui/settings/utils",
+    "//ios/chrome/browser/ui/toolbar/public",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/url_loading",
     "//ios/chrome/browser/voice",
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_content_delegate.h b/ios/chrome/browser/ui/ntp/new_tab_page_content_delegate.h
index f76e9a13..fa83ed3 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_content_delegate.h
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_content_delegate.h
@@ -17,6 +17,12 @@
 // Handles what happens when the signin promo changes visibility in the NTP.
 - (void)signinPromoHasChangedVisibility:(BOOL)visible;
 
+// Signals to the receiver that omnibox edit state should be cancelled.
+- (void)cancelOmniboxEdit;
+
+// Signals to the receiver that the Fakebox is blurring.
+- (void)onFakeboxBlur;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_CONTENT_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
index 910d7b3..6648729a 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
@@ -35,7 +35,6 @@
 #import "ios/chrome/browser/ntp/features.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
 #import "ios/chrome/browser/prefs/pref_names.h"
-#import "ios/chrome/browser/reading_list/reading_list_model_factory.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
@@ -55,7 +54,6 @@
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_commands.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.h"
 #import "ios/chrome/browser/ui/context_menu/link_preview/link_preview_coordinator.h"
@@ -86,6 +84,7 @@
 #import "ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h"
 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h"
 #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h"
+#import "ios/chrome/browser/ui/toolbar/public/fakebox_focuser.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/browser/ui/util/named_guide.h"
 #import "ios/chrome/browser/ui/util/util_swift.h"
@@ -139,7 +138,7 @@
     ContentSuggestionsCoordinator* contentSuggestionsCoordinator;
 
 // View controller for the regular NTP.
-@property(nonatomic, strong) NewTabPageViewController* ntpViewController;
+@property(nonatomic, strong) NewTabPageViewController* NTPViewController;
 
 // Mediator owned by this coordinator.
 @property(nonatomic, strong) NewTabPageMediator* ntpMediator;
@@ -165,11 +164,6 @@
 // Wheter the scene is currently in foreground.
 @property(nonatomic, assign) BOOL sceneInForeground;
 
-// Handles interactions with the content suggestions header and the fake
-// omnibox.
-@property(nonatomic, strong)
-    ContentSuggestionsHeaderSynchronizer* headerSynchronizer;
-
 // The ViewController displayed by this Coordinator. This is the returned
 // ViewController and will contain the `containedViewController` (Which can
 // change depending on Feed visibility).
@@ -310,7 +304,6 @@
   self.feedManagementCoordinator = nil;
   [self.contentSuggestionsCoordinator stop];
   self.contentSuggestionsCoordinator = nil;
-  self.headerSynchronizer = nil;
   self.headerController = nil;
   // Remove before nil to ensure View Hierarchy doesn't hold last strong
   // reference.
@@ -318,8 +311,8 @@
   [self.containedViewController.view removeFromSuperview];
   [self.containedViewController removeFromParentViewController];
   self.containedViewController = nil;
-  self.ntpViewController.feedHeaderViewController = nil;
-  self.ntpViewController = nil;
+  self.NTPViewController.feedHeaderViewController = nil;
+  self.NTPViewController = nil;
   self.feedHeaderViewController.ntpDelegate = nil;
   self.feedHeaderViewController = nil;
   self.feedTopSectionCoordinator.ntpDelegate = nil;
@@ -371,25 +364,21 @@
   if (!self.contentSuggestionsCoordinator) {
     return;
   }
-  [self.ntpViewController stopScrolling];
+  [self.NTPViewController stopScrolling];
 }
 
 - (BOOL)isScrolledToTop {
-  return [self.ntpViewController isNTPScrolledToTop];
+  return [self.NTPViewController isNTPScrolledToTop];
 }
 
 - (void)willUpdateSnapshot {
   if (self.contentSuggestionsCoordinator.started) {
-    [self.ntpViewController willUpdateSnapshot];
+    [self.NTPViewController willUpdateSnapshot];
   }
 }
 
 - (void)focusFakebox {
-  if (self.feedViewController) {
-    [self.ntpViewController focusFakebox];
-  } else {
-    [self.headerController focusFakebox];
-  }
+  [self.NTPViewController focusFakebox];
 }
 
 - (void)reload {
@@ -429,14 +418,14 @@
 }
 
 - (void)handleFeedModelDidEndUpdates:(FeedType)feedType {
-  DCHECK(self.ntpViewController);
-  if (!self.feedViewController || !self.ntpViewController.viewDidAppear) {
+  DCHECK(self.NTPViewController);
+  if (!self.feedViewController || !self.NTPViewController.viewDidAppear) {
     return;
   }
   // When the visible feed has been updated, recalculate the minimum NTP height.
   if (feedType == self.selectedFeed) {
-    [self.ntpViewController updateFeedInsetsForMinimumHeight];
-    [self.ntpViewController updateStickyElements];
+    [self.NTPViewController updateFeedInsetsForMinimumHeight];
+    [self.NTPViewController updateStickyElements];
   }
 }
 
@@ -445,7 +434,7 @@
     [self updateStartForVisibilityChange:visible];
     if (visible && self.started) {
       if ([self isFollowingFeedAvailable]) {
-        self.ntpViewController.shouldScrollIntoFeed = self.shouldScrollIntoFeed;
+        self.NTPViewController.shouldScrollIntoFeed = self.shouldScrollIntoFeed;
         self.shouldScrollIntoFeed = NO;
         // Reassign the sort type in case it changed in another tab.
         self.feedHeaderViewController.followingFeedSortType =
@@ -550,7 +539,7 @@
 
 // Creates all the NTP components.
 - (void)initializeNTPComponents {
-  self.ntpViewController = [[NewTabPageViewController alloc] init];
+  self.NTPViewController = [[NewTabPageViewController alloc] init];
   self.headerController = [[ContentSuggestionsHeaderViewController alloc] init];
   self.ntpMediator = [[NewTabPageMediator alloc]
               initWithWebState:self.webState
@@ -565,9 +554,6 @@
                     logoVendor:ios::provider::CreateLogoVendor(self.browser,
                                                                self.webState)
       identityDiscImageUpdater:self.headerController];
-  self.headerSynchronizer = [[ContentSuggestionsHeaderSynchronizer alloc]
-      initWithCollectionController:self.ntpViewController
-                  headerController:self.headerController];
   self.contentSuggestionsCoordinator = [[ContentSuggestionsCoordinator alloc]
       initWithBaseViewController:nil
                          browser:self.browser];
@@ -579,9 +565,9 @@
 // Creates and configures the feed and feed header based on user prefs.
 - (void)configureFeedAndHeader {
   DCHECK([self isFeedHeaderVisible]);
-  DCHECK(self.ntpViewController);
+  DCHECK(self.NTPViewController);
 
-  self.ntpViewController.feedHeaderViewController =
+  self.NTPViewController.feedHeaderViewController =
       self.feedHeaderViewController;
 
   if ([self isFeedTopSectionVisible]) {
@@ -609,7 +595,6 @@
 - (void)configureHeaderController {
   DCHECK(self.headerController);
   DCHECK(self.ntpMediator);
-  DCHECK(self.headerSynchronizer);
 
   self.headerController.isGoogleDefaultSearchEngine =
       [self isGoogleDefaultSearchEngine];
@@ -620,15 +605,11 @@
                      FakeboxFocuser, LensCommands>>(
           self.browser->GetCommandDispatcher());
   self.headerController.commandHandler = self;
-  self.headerController.delegate = self.ntpViewController;
+  self.headerController.delegate = self.NTPViewController;
   self.headerController.layoutGuideCenter =
       LayoutGuideCenterForBrowser(self.browser);
-  self.headerController.readingListModel =
-      ReadingListModelFactory::GetForBrowserState(
-          self.browser->GetBrowserState());
   self.headerController.toolbarDelegate = self.toolbarDelegate;
   self.headerController.baseViewController = self.baseViewController;
-  self.headerController.collectionSynchronizer = self.headerSynchronizer;
   if (NewTabPageTabHelper::FromWebState(self.webState)
           ->ShouldShowStartSurface()) {
     self.headerController.isStartShowing = YES;
@@ -648,9 +629,8 @@
 - (void)configureNTPMediator {
   DCHECK(self.ntpMediator);
   DCHECK(self.contentSuggestionsCoordinator.contentSuggestionsMediator);
-  self.ntpMediator.headerCollectionInteractionHandler = self.headerSynchronizer;
   self.ntpMediator.browser = self.browser;
-  self.ntpMediator.ntpViewController = self.ntpViewController;
+  self.ntpMediator.NTPViewController = self.NTPViewController;
   self.ntpMediator.feedControlDelegate = self;
   self.ntpMediator.consumer = self.headerController;
   self.ntpMediator.suggestionsMediator =
@@ -664,37 +644,36 @@
   self.feedMetricsRecorder.followDelegate = self;
 }
 
-// Configures `self.ntpViewController` and sets it up as the main ViewController
+// Configures `self.NTPViewController` and sets it up as the main ViewController
 // managed by this Coordinator.
 - (void)configureNTPViewController {
-  DCHECK(self.ntpViewController);
+  DCHECK(self.NTPViewController);
 
-  self.ntpViewController.contentSuggestionsViewController =
+  self.NTPViewController.contentSuggestionsViewController =
       self.contentSuggestionsCoordinator.viewController;
 
-  self.ntpViewController.panGestureHandler = self.panGestureHandler;
-  self.ntpViewController.feedVisible = [self isFeedVisible];
-  self.ntpViewController.headerSynchronizer = self.headerSynchronizer;
+  self.NTPViewController.panGestureHandler = self.panGestureHandler;
+  self.NTPViewController.feedVisible = [self isFeedVisible];
 
   self.feedWrapperViewController = [[FeedWrapperViewController alloc]
         initWithDelegate:self
       feedViewController:self.feedViewController];
 
   if ([self isFeedTopSectionVisible]) {
-    self.ntpViewController.feedTopSectionViewController =
+    self.NTPViewController.feedTopSectionViewController =
         self.feedTopSectionCoordinator.viewController;
   }
 
-  self.ntpViewController.feedWrapperViewController =
+  self.NTPViewController.feedWrapperViewController =
       self.feedWrapperViewController;
-  self.ntpViewController.overscrollDelegate = self;
-  self.ntpViewController.ntpContentDelegate = self;
+  self.NTPViewController.overscrollDelegate = self;
+  self.NTPViewController.ntpContentDelegate = self;
 
-  self.ntpViewController.headerController = self.headerController;
+  self.NTPViewController.headerController = self.headerController;
 
-  [self configureMainViewControllerUsing:self.ntpViewController];
-  self.ntpViewController.feedMetricsRecorder = self.feedMetricsRecorder;
-  self.ntpViewController.bubblePresenter = self.bubblePresenter;
+  [self configureMainViewControllerUsing:self.NTPViewController];
+  self.NTPViewController.feedMetricsRecorder = self.feedMetricsRecorder;
+  self.NTPViewController.bubblePresenter = self.bubblePresenter;
 }
 
 // Configures the main ViewController managed by this Coordinator.
@@ -727,13 +706,13 @@
 }
 
 - (id<ThumbStripSupporting>)thumbStripSupporting {
-  return self.ntpViewController;
+  return self.NTPViewController;
 }
 
 #pragma mark - NewTabPageConfiguring
 
 - (void)selectFeedType:(FeedType)feedType {
-  if (!self.ntpViewController.viewDidAppear ||
+  if (!self.NTPViewController.viewDidAppear ||
       ![self isFollowingFeedAvailable]) {
     self.selectedFeed = feedType;
     return;
@@ -775,7 +754,7 @@
   // for the frame.
   UIButton* menuButton = self.feedHeaderViewController.menuButton;
   self.alertCoordinator = [[ActionSheetCoordinator alloc]
-      initWithBaseViewController:self.ntpViewController
+      initWithBaseViewController:self.NTPViewController
                          browser:self.browser
                            title:nil
                          message:nil
@@ -899,7 +878,7 @@
   self.selectedFeed = feedType;
 
   // Saves scroll position before changing feed.
-  CGFloat scrollPosition = [self.ntpViewController scrollPosition];
+  CGFloat scrollPosition = [self.NTPViewController scrollPosition];
 
   if (feedType == FeedTypeFollowing && IsDotEnabledForNewFollowedContent()) {
     // Clears dot and notifies service that the Following feed content has
@@ -913,7 +892,7 @@
 
   // Scroll position resets when changing the feed, so we set it back to what it
   // was.
-  [self.ntpViewController setContentOffsetToTopOfFeed:scrollPosition];
+  [self.NTPViewController setContentOffsetToTopOfFeed:scrollPosition];
 }
 
 - (void)handleSortTypeForFollowingFeed:(FollowingFeedSortType)sortType {
@@ -924,7 +903,7 @@
   }
 
   // Save the scroll position before changing sort type.
-  CGFloat scrollPosition = [self.ntpViewController scrollPosition];
+  CGFloat scrollPosition = [self.NTPViewController scrollPosition];
 
   [self.feedMetricsRecorder recordFollowingFeedSortTypeSelected:sortType];
   self.prefService->SetInteger(prefs::kNTPFollowingFeedSortType, sortType);
@@ -937,7 +916,7 @@
 
   // Scroll position resets when changing the feed, so we set it back to what it
   // was.
-  [self.ntpViewController setContentOffsetToTopOfFeed:scrollPosition];
+  [self.NTPViewController setContentOffsetToTopOfFeed:scrollPosition];
 }
 
 - (BOOL)shouldFeedBeVisible {
@@ -987,7 +966,7 @@
 - (void)showSignInPromoUI {
   // Show a sign-in promo half sheet.
   self.feedSignInPromoCoordinator = [[FeedSignInPromoCoordinator alloc]
-      initWithBaseViewController:self.ntpViewController
+      initWithBaseViewController:self.NTPViewController
                          browser:self.browser];
   [self.feedSignInPromoCoordinator start];
 }
@@ -1002,7 +981,7 @@
       initWithOperation:AuthenticationOperationSigninAndSync
             accessPoint:access_point];
   signin_metrics::RecordSigninUserActionForAccessPoint(access_point);
-  [handler showSignin:command baseViewController:self.ntpViewController];
+  [handler showSignin:command baseViewController:self.NTPViewController];
 }
 
 #pragma mark - FeedWrapperViewControllerDelegate
@@ -1029,6 +1008,18 @@
   [self.feedTopSectionCoordinator signinPromoHasChangedVisibility:visible];
 }
 
+- (void)cancelOmniboxEdit {
+  id<OmniboxCommands> omniboxCommandHandler =
+      HandlerForProtocol(self.browser->GetCommandDispatcher(), OmniboxCommands);
+  [omniboxCommandHandler cancelOmniboxEdit];
+}
+
+- (void)onFakeboxBlur {
+  id<FakeboxFocuser> fakeboxFocuserHandler =
+      HandlerForProtocol(self.browser->GetCommandDispatcher(), FakeboxFocuser);
+  [fakeboxFocuserHandler onFakeboxBlur];
+}
+
 #pragma mark - NewTabPageDelegate
 
 - (void)updateFeedLayout {
@@ -1039,11 +1030,11 @@
   }
   [self.containedViewController.view setNeedsLayout];
   [self.containedViewController.view layoutIfNeeded];
-  [self.ntpViewController updateNTPLayout];
+  [self.NTPViewController updateNTPLayout];
 }
 
 - (void)setContentOffsetToTop {
-  [self.ntpViewController setContentOffsetToTop];
+  [self.NTPViewController setContentOffsetToTop];
 }
 
 - (BOOL)isGoogleDefaultSearchEngine {
@@ -1065,7 +1056,7 @@
 }
 
 - (void)handleFeedTopSectionClosed {
-  [self.ntpViewController updateScrollPositionForFeedTopSectionClosed];
+  [self.NTPViewController updateScrollPositionForFeedTopSectionClosed];
 }
 
 #pragma mark - NewTabPageFollowDelegate
@@ -1146,7 +1137,7 @@
 
 - (CGFloat)headerInsetForOverscrollActionsController:
     (OverscrollActionsController*)controller {
-  return [self.ntpViewController heightAboveFeed];
+  return [self.NTPViewController heightAboveFeed];
 }
 
 - (CGFloat)headerHeightForOverscrollActionsController:
@@ -1188,14 +1179,14 @@
 #pragma mark - DiscoverFeedObserverBridge
 
 - (void)discoverFeedModelWasCreated {
-  if (self.ntpViewController.viewDidAppear) {
+  if (self.NTPViewController.viewDidAppear) {
     [self updateNTPForFeed];
 
     if (IsWebChannelsEnabled()) {
       [self.feedHeaderViewController updateForFollowingFeedVisibilityChanged];
-      [self.ntpViewController updateNTPLayout];
+      [self.NTPViewController updateNTPLayout];
       [self updateFeedLayout];
-      [self.ntpViewController setContentOffsetToTop];
+      [self.NTPViewController setContentOffsetToTop];
     }
   }
 }
@@ -1318,20 +1309,20 @@
 // Updates the NTP to take into account a new feed, or a change in feed
 // visibility.
 - (void)updateNTPForFeed {
-  DCHECK(self.ntpViewController);
+  DCHECK(self.NTPViewController);
 
   if (!self.started) {
     return;
   }
 
-  [self.ntpViewController resetViewHierarchy];
+  [self.NTPViewController resetViewHierarchy];
 
   if (self.feedViewController) {
     self.discoverFeedService->RemoveFeedViewController(self.feedViewController);
   }
 
-  self.ntpViewController.feedWrapperViewController = nil;
-  self.ntpViewController.feedTopSectionViewController = nil;
+  self.NTPViewController.feedWrapperViewController = nil;
+  self.NTPViewController.feedTopSectionViewController = nil;
   self.feedWrapperViewController = nil;
   self.feedViewController = nil;
   self.feedTopSectionCoordinator = nil;
@@ -1341,25 +1332,25 @@
   if ([self isFeedHeaderVisible]) {
     [self configureFeedAndHeader];
   } else {
-    self.ntpViewController.feedHeaderViewController = nil;
+    self.NTPViewController.feedHeaderViewController = nil;
     self.feedHeaderViewController = nil;
   }
 
   if ([self isFeedTopSectionVisible]) {
-    self.ntpViewController.feedTopSectionViewController =
+    self.NTPViewController.feedTopSectionViewController =
         self.feedTopSectionCoordinator.viewController;
   }
 
-  self.ntpViewController.feedVisible = [self isFeedVisible];
+  self.NTPViewController.feedVisible = [self isFeedVisible];
 
   self.feedWrapperViewController = [[FeedWrapperViewController alloc]
         initWithDelegate:self
       feedViewController:self.feedViewController];
 
-  self.ntpViewController.feedWrapperViewController =
+  self.NTPViewController.feedWrapperViewController =
       self.feedWrapperViewController;
 
-  [self.ntpViewController layoutContentInParentCollectionView];
+  [self.NTPViewController layoutContentInParentCollectionView];
 
   [self updateFeedLayout];
 }
@@ -1431,7 +1422,7 @@
   DiscoverFeedViewControllerConfiguration* viewControllerConfig =
       [[DiscoverFeedViewControllerConfiguration alloc] init];
   viewControllerConfig.browser = self.browser;
-  viewControllerConfig.scrollDelegate = self.ntpViewController;
+  viewControllerConfig.scrollDelegate = self.NTPViewController;
   viewControllerConfig.previewDelegate = self;
   viewControllerConfig.signInPromoDelegate = self;
 
@@ -1466,9 +1457,9 @@
 // Handles how the NTP reacts when the default search engine is changed.
 - (void)defaultSearchEngineDidChange {
   [self.feedHeaderViewController updateForDefaultSearchEngineChanged];
-  [self.ntpViewController updateNTPLayout];
+  [self.NTPViewController updateNTPLayout];
   [self updateFeedLayout];
-  [self.ntpViewController setContentOffsetToTop];
+  [self.NTPViewController setContentOffsetToTop];
 }
 
 // Toggles feed visibility between hidden or expanded using the feed header
@@ -1482,10 +1473,10 @@
 
 // Configures and returns the feed top section coordinator.
 - (FeedTopSectionCoordinator*)createFeedTopSectionCoordinator {
-  DCHECK(self.ntpViewController);
+  DCHECK(self.NTPViewController);
   FeedTopSectionCoordinator* feedTopSectionCoordinator =
       [[FeedTopSectionCoordinator alloc]
-          initWithBaseViewController:self.ntpViewController
+          initWithBaseViewController:self.NTPViewController
                              browser:self.browser];
   feedTopSectionCoordinator.ntpDelegate = self;
   [feedTopSectionCoordinator start];
@@ -1498,7 +1489,7 @@
   self.feedManagementCoordinator = nil;
 
   self.feedManagementCoordinator = [[FeedManagementCoordinator alloc]
-      initWithBaseViewController:self.ntpViewController
+      initWithBaseViewController:self.NTPViewController
                          browser:self.browser];
   self.feedManagementCoordinator.navigationDelegate = self;
   self.feedManagementCoordinator.feedMetricsRecorder = self.feedMetricsRecorder;
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_mediator.h b/ios/chrome/browser/ui/ntp/new_tab_page_mediator.h
index 385039a5..23f9abb 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_mediator.h
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_mediator.h
@@ -18,8 +18,6 @@
 class AuthenticationService;
 class Browser;
 class ChromeAccountManagerService;
-@protocol ContentSuggestionsCollectionControlling;
-@class ContentSuggestionsHeaderSynchronizer;
 @class ContentSuggestionsMediator;
 @protocol FeedControlDelegate;
 @class FeedMetricsRecorder;
@@ -53,13 +51,10 @@
 @property(nonatomic, strong) NTPHomeMetrics* NTPMetrics;
 // Recorder for the metrics related to the feed.
 @property(nonatomic, strong) FeedMetricsRecorder* feedMetricsRecorder;
-// View Controller forthe NTP if using the refactored NTP and the Feed is
-// visible.
+// View Controller for the NTP.
 // TODO(crbug.com/1114792): Create a protocol to avoid duplication and update
 // comment.
-@property(nonatomic, weak) NewTabPageViewController* ntpViewController;
-@property(nonatomic, weak)
-    ContentSuggestionsHeaderSynchronizer* headerCollectionInteractionHandler;
+@property(nonatomic, weak) NewTabPageViewController* NTPViewController;
 // Mediator for the ContentSuggestions.
 // TODO(crbug.com/1403298): Replace this dependency with a delegate.
 @property(nonatomic, strong) ContentSuggestionsMediator* suggestionsMediator;
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_mediator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_mediator.mm
index 204f519..b07a4c9 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_mediator.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_mediator.mm
@@ -27,7 +27,6 @@
 #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_return_to_recent_tab_item.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizer.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller_audience.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_consumer.h"
@@ -179,7 +178,7 @@
     return;
   }
 
-  CGFloat scrollPosition = [self.ntpViewController scrollPosition];
+  CGFloat scrollPosition = [self.NTPViewController scrollPosition];
 
   if ([self.suggestionsMediator mostRecentTabStartSurfaceTileIsShowing]) {
     // Return to Recent tab tile is only shown one time, so subtract it's
@@ -188,14 +187,12 @@
         ReturnToRecentTabHeight() +
         content_suggestions::kReturnToRecentTabSectionBottomMargin;
     if (scrollPosition >
-        tileSectionHeight +
-            [self.headerCollectionInteractionHandler pinnedOffsetY]) {
+        tileSectionHeight + [self.NTPViewController pinnedOffsetY]) {
       scrollPosition -= tileSectionHeight;
     }
   }
 
-  scrollPosition -=
-      self.headerCollectionInteractionHandler.collectionShiftingOffset;
+  scrollPosition -= self.NTPViewController.collectionShiftingOffset;
 
   NewTabPageTabHelper* NTPHelper = NewTabPageTabHelper::FromWebState(webState);
 
@@ -326,12 +323,12 @@
     offsetFromSavedState = -CGFLOAT_MAX;
   }
 
-  CGFloat minimumOffset = -[self.ntpViewController heightAboveFeed];
+  CGFloat minimumOffset = -[self.NTPViewController heightAboveFeed];
   if (offsetFromSavedState > minimumOffset) {
-    [self.ntpViewController setSavedContentOffset:offsetFromSavedState];
+    [self.NTPViewController setSavedContentOffset:offsetFromSavedState];
   } else {
     // Remove this if NTPs are ever scoped back to the WebState.
-    [self.ntpViewController setContentOffsetToTop];
+    [self.NTPViewController setContentOffsetToTop];
     // Refresh NTP content if there is is no saved scrolled state or when a new
     // NTP is opened. Since the same NTP is being shared across tabs, this
     // ensures that new content is being fetched.
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h
index 348fafd..e91272c 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h
@@ -7,7 +7,6 @@
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_controlling.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller_delegate.h"
 #import "ios/chrome/browser/ui/thumb_strip/thumb_strip_supporting.h"
 
@@ -24,8 +23,7 @@
 // View controller containing all the content presented on a standard,
 // non-incognito new tab page.
 @interface NewTabPageViewController
-    : UIViewController <ContentSuggestionsCollectionControlling,
-                        ThumbStripSupporting,
+    : UIViewController <ThumbStripSupporting,
                         ContentSuggestionsHeaderViewControllerDelegate,
                         UIScrollViewDelegate>
 
@@ -99,9 +97,6 @@
 // Lays out content above feed and adjusts content suggestions.
 - (void)updateNTPLayout;
 
-// Scrolls up the collection view enough to focus the omnibox.
-- (void)focusFakebox;
-
 // Returns whether the NTP is scrolled to the top or not.
 - (BOOL)isNTPScrolledToTop;
 
@@ -137,6 +132,16 @@
 // header) to update for the current scroll position.
 - (void)updateStickyElements;
 
+// Returns the Y value to use for the scroll view's contentOffset when scrolling
+// the omnibox to the top of the screen.
+- (CGFloat)pinnedOffsetY;
+
+// When the omnibox is focused, this value represents the scroll distance needed
+// to pin the omnibox to the top. It is 0 if no scrolling was done in order pin
+// the omnibox to the top (i.e. the NTP ScrollView was already scrolled far
+// enough down that the omnibo was already pinned to the top).
+@property(nonatomic, assign, readonly) CGFloat collectionShiftingOffset;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
index a45a856..f9e7ac3 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
@@ -7,11 +7,11 @@
 #import "ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h"
 
 #import "base/check.h"
+#import "base/ios/block_types.h"
 #import "ios/chrome/browser/ntp/features.h"
 #import "ios/chrome/browser/ui/bubble/bubble_presenter.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
-#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_synchronizing.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
@@ -39,6 +39,12 @@
 #error "This file requires ARC support."
 #endif
 
+namespace {
+// Animation time for the shift up/down animations to focus/defocus omnibox.
+const CGFloat kShiftTilesDownAnimationDuration = 0.2;
+const CGFloat kShiftTilesUpAnimationDuration = 0.25;
+}  // namespace
+
 @interface NewTabPageViewController () <NewTabPageOmniboxPositioning,
                                         UICollectionViewDelegate,
                                         UIGestureRecognizerDelegate>
@@ -91,18 +97,55 @@
 // ContentSuggestions.
 @property(nonatomic, weak) UIButton* identityDiscButton;
 
+// Tap gesture recognizer when the omnibox is focused.
+@property(nonatomic, strong) UITapGestureRecognizer* tapGestureRecognizer;
+
+// Animator for the `shiftTilesUpToFocusOmnibox` animation.
+@property(nonatomic, strong) UIViewPropertyAnimator* animator;
+
+// When the omnibox is focused, this value represents the shift distance of the
+// collection needed to pin the omnibox to the top. It is 0 if the omnibox has
+// not been moved when focused (i.e. the collection was already scrolled to
+// top).
+@property(nonatomic, assign, readwrite) CGFloat collectionShiftingOffset;
+
+// `YES` if the collection is scrolled to the point where the omnibox is stuck
+// to the top of the NTP. Used to lock this position in place on various frame
+// changes.
+@property(nonatomic, assign, readwrite) BOOL scrolledToMinimumHeight;
+
+// The added y-offset of the NTP collection view to make up for the header.
+// Without this, the offset is negative at the top of the NTP.
+@property(nonatomic, assign) CGFloat additionalOffset;
+
+// If YES the animations of the fake omnibox triggered when the collection is
+// scrolled (expansion) are disabled. This is used for the fake omnibox focus
+// animations so the constraints aren't changed while the ntp is scrolled.
+@property(nonatomic, assign) BOOL disableScrollAnimation;
+
+// `YES` if the fakebox header should be animated on scroll.
+@property(nonatomic, assign) BOOL shouldAnimateHeader;
+
+// Keeps track of how long the shift down animation has taken. Used to update
+// the Content Suggestions header as the animation progresses.
+@property(nonatomic, assign) CFTimeInterval shiftTileStartTime;
+
 @end
 
 @implementation NewTabPageViewController
 
-// Synthesized for ContentSuggestionsCollectionControlling protocol.
-@synthesize headerSynchronizer = _headerSynchronizer;
-@synthesize scrolledToMinimumHeight = _scrolledToMinimumHeight;
-
 - (instancetype)init {
   self = [super initWithNibName:nil bundle:nil];
   if (self) {
     _viewControllersAboveFeed = [[NSMutableArray alloc] init];
+
+    _tapGestureRecognizer = [[UITapGestureRecognizer alloc]
+        initWithTarget:self
+                action:@selector(unfocusOmnibox)];
+
+    _collectionShiftingOffset = 0;
+    _additionalOffset = 0;
+    _shouldAnimateHeader = YES;
   }
   return self;
 }
@@ -126,7 +169,7 @@
   // Prevent the NTP from spilling behind the toolbar and tab strip.
   self.view.clipsToBounds = YES;
 
-  // TODO(crbug.com/1170995): The contentCollectionView width might be narrower
+  // TODO(crbug.com/1403612): The contentCollectionView width might be narrower
   // than the ContentSuggestions view. This causes elements to be hidden. A
   // gesture recognizer is added to allow these elements to be interactable.
   UITapGestureRecognizer* singleTapRecognizer = [[UITapGestureRecognizer alloc]
@@ -159,7 +202,7 @@
   [super viewWillLayoutSubviews];
 
   [self updateNTPLayout];
-  [self updateHeaderSynchronizerOffset];
+  [self updateAdditionalOffset];
   [self updateScrolledToMinimumHeight];
   [self.headerController updateConstraints];
 }
@@ -178,10 +221,10 @@
 
   // Updates omnibox to ensure that the dimensions are correct when navigating
   // back to the NTP.
-  [self.headerSynchronizer updateFakeOmniboxForScrollPosition];
+  [self updateFakeOmniboxForScrollPosition];
 
-  if (self.shouldFocusFakebox && [self collectionViewHasLoaded]) {
-    [self.headerController focusFakebox];
+  if (self.shouldFocusFakebox) {
+    [self focusFakebox];
     self.shouldFocusFakebox = NO;
   }
 
@@ -263,8 +306,8 @@
 
     // Pinned offset is different based on the orientation, so we reevaluate the
     // minimum scroll position upon device rotation.
-    CGFloat pinnedOffsetY = [weakSelf.headerSynchronizer pinnedOffsetY];
-    if ([weakSelf.headerController isOmniboxFocused] &&
+    CGFloat pinnedOffsetY = [weakSelf pinnedOffsetY];
+    if (weakSelf.headerController.omniboxFocused &&
         [weakSelf scrollPosition] < pinnedOffsetY) {
       weakSelf.collectionView.contentOffset = CGPointMake(0, pinnedOffsetY);
     }
@@ -302,7 +345,7 @@
 
   if (previousTraitCollection.preferredContentSizeCategory !=
       self.traitCollection.preferredContentSizeCategory) {
-    [self.headerSynchronizer updateFakeOmniboxForScrollPosition];
+    [self updateFakeOmniboxForScrollPosition];
   }
 
   [self.headerController updateConstraints];
@@ -411,7 +454,7 @@
   // show a "double" omibox state.
   // TODO(crbug.com/1371261): Replace the -setContentOffsetForWebState: call
   // with calls directly from all async updates to the NTP.
-  if (self.headerController.isOmniboxFocused) {
+  if (self.headerController.omniboxFocused) {
     return;
   }
   [self setContentOffset:-[self heightAboveFeed]];
@@ -434,27 +477,15 @@
   // Reload data to ensure the Most Visited tiles and fake omnibox are correctly
   // positioned, in particular during a rotation while a ViewController is
   // presented in front of the NTP.
-  [self.headerSynchronizer
-      updateFakeOmniboxOnNewWidth:self.collectionView.bounds.size.width];
+  [self updateFakeOmniboxOnNewWidth:self.collectionView.bounds.size.width];
   // Ensure initial fake omnibox layout.
-  [self.headerSynchronizer updateFakeOmniboxForScrollPosition];
+  [self updateFakeOmniboxForScrollPosition];
 
   if (!self.viewDidAppear && ![self isInitialOffsetFromSavedState]) {
     [self setContentOffsetToTop];
   }
 }
 
-- (void)focusFakebox {
-  // The fakebox should only be focused once the collection view has reached its
-  // minimum height. If this is not the case yet, we wait until viewDidAppear
-  // before focusing the fakebox.
-  if ([self collectionViewHasLoaded]) {
-    [self.headerController focusFakebox];
-  } else {
-    self.shouldFocusFakebox = YES;
-  }
-}
-
 - (CGFloat)heightAboveFeed {
   CGFloat heightAboveFeed = self.view.safeAreaInsets.top;
   for (UIViewController* viewController in self.viewControllersAboveFeed) {
@@ -519,8 +550,64 @@
 
 #pragma mark - ContentSuggestionsHeaderViewControllerDelegate
 
-- (BOOL)isScrolledToMinimumHeight {
-  return self.scrolledToMinimumHeight;
+- (void)focusFakebox {
+  // If the feed is meant to be visible and its contents have not loaded yet,
+  // then any omnibox focus animations (i.e. opening app from search widget
+  // action) needs to wait until it is ready. viewDidAppear: currently serves as
+  // this proxy as there is no specific signal given from the feed that its
+  // contents have loaded.
+  if (self.isFeedVisible && ![self collectionViewHasLoaded]) {
+    self.shouldFocusFakebox = YES;
+  } else {
+    [self shiftTilesUpToFocusOmnibox];
+  }
+}
+
+- (void)omniboxDidResignFirstResponder {
+  if (![self.headerController isShowing] && !self.scrolledToMinimumHeight) {
+    return;
+  }
+
+  self.headerController.omniboxFocused = NO;
+  [self shiftTilesDownForOmniboxDefocus];
+}
+
+- (void)shiftTilesDownForOmniboxDefocus {
+  if (IsSplitToolbarMode(self)) {
+    [self.ntpContentDelegate onFakeboxBlur];
+  }
+
+  [self.view removeGestureRecognizer:self.tapGestureRecognizer];
+
+  self.shouldAnimateHeader = YES;
+
+  if (self.animator.running) {
+    [self.animator stopAnimation:NO];
+    [self.animator finishAnimationAtPosition:UIViewAnimatingPositionStart];
+    self.animator = nil;
+  }
+
+  if (self.collectionShiftingOffset == 0 || self.collectionView.dragging) {
+    self.collectionShiftingOffset = 0;
+    [self updateFakeOmniboxForScrollPosition];
+    return;
+  }
+
+  self.scrolledToMinimumHeight = NO;
+
+  // CADisplayLink is used for this animation instead of the standard UIView
+  // animation because the standard animation did not properly convert the
+  // fakebox from its scrolled up mode to its scrolled down mode. Specifically,
+  // calling `UICollectionView reloadData` adjacent to the standard animation
+  // caused the fakebox's views to jump incorrectly. CADisplayLink avoids this
+  // problem because it allows `shiftTilesDownAnimationDidFire` to directly
+  // control each frame.
+  // TODO(crbug.com/1403613): Remove the use of this, listen to the UIScrollView
+  // delegate.
+  CADisplayLink* link = [CADisplayLink
+      displayLinkWithTarget:self
+                   selector:@selector(shiftTilesDownAnimationDidFire:)];
+  [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
 }
 
 #pragma mark - UIScrollViewDelegate
@@ -528,7 +615,7 @@
 - (void)scrollViewDidScroll:(UIScrollView*)scrollView {
   [self.overscrollActionsController scrollViewDidScroll:scrollView];
   [self.panGestureHandler scrollViewDidScroll:scrollView];
-  [self.headerSynchronizer updateFakeOmniboxForScrollPosition];
+  [self updateFakeOmniboxForScrollPosition];
 
   [self updateScrolledToMinimumHeight];
 
@@ -589,18 +676,12 @@
   // User has tapped the status bar to scroll to the top.
   // Prevent scrolling back to pre-focus state, making sure we don't have
   // two scrolling animations running at the same time.
-  [self.headerSynchronizer resetPreFocusOffset];
+  self.collectionShiftingOffset = 0;
   // Unfocus omnibox without scrolling back.
-  [self.headerSynchronizer unfocusOmnibox];
+  [self unfocusOmnibox];
   return YES;
 }
 
-#pragma mark - ContentSuggestionsCollectionControlling
-
-- (UICollectionView*)collectionView {
-  return self.feedWrapperViewController.contentCollectionView;
-}
-
 #pragma mark - NewTabPageOmniboxPositioning
 
 - (CGFloat)stickyOmniboxHeight {
@@ -647,8 +728,139 @@
                                [touch locationInView:self.view]));
 }
 
+#pragma mark - Scrolling Animations
+
+// Updates the collection view's scroll view offset for the next frame of the
+// shiftTilesDownForOmniboxDefocus animation.
+- (void)shiftTilesDownAnimationDidFire:(CADisplayLink*)link {
+  // If this is the first frame of the animation, store the starting timestamp
+  // and do nothing.
+  if (self.shiftTileStartTime == -1) {
+    self.shiftTileStartTime = link.timestamp;
+    return;
+  }
+
+  CFTimeInterval timeElapsed = link.timestamp - self.shiftTileStartTime;
+  double percentComplete = timeElapsed / kShiftTilesDownAnimationDuration;
+  // Ensure that the percentage cannot be above 1.0.
+  if (percentComplete > 1.0) {
+    percentComplete = 1.0;
+  }
+
+  // Find how much the collection view should be scrolled up in the next frame.
+  CGFloat yOffset = (1.0 - percentComplete) * [self pinnedOffsetY] +
+                    percentComplete * MAX([self pinnedOffsetY] -
+                                              self.collectionShiftingOffset,
+                                          -self.additionalOffset);
+  self.collectionView.contentOffset = CGPointMake(0, yOffset);
+
+  if (percentComplete == 1.0) {
+    [link invalidate];
+    self.collectionShiftingOffset = 0;
+    // Reset `shiftTileStartTime` to its sentinel value.
+    self.shiftTileStartTime = -1;
+  }
+}
+
+- (void)shiftTilesUpToFocusOmnibox {
+  // Add gesture recognizer to collection view when the omnibox is focused.
+  [self.view addGestureRecognizer:self.tapGestureRecognizer];
+
+  if (self.collectionView.decelerating) {
+    // Stop the scrolling if the scroll view is decelerating to prevent the
+    // focus to be immediately lost.
+    [self.collectionView setContentOffset:self.collectionView.contentOffset
+                                 animated:NO];
+  }
+
+  if (self.scrolledToMinimumHeight) {
+    self.shouldAnimateHeader = NO;
+    self.disableScrollAnimation = NO;
+    [self.headerController
+        completeHeaderFakeOmniboxFocusAnimationWithFinalPosition:
+            UIViewAnimatingPositionEnd];
+    return;
+  }
+
+  if (CGSizeEqualToSize(self.collectionView.contentSize, CGSizeZero)) {
+    [self.collectionView layoutIfNeeded];
+  }
+
+  CGFloat headerPinnedOffsetY = [self.headerController pinnedOffsetY];
+  self.collectionShiftingOffset = MAX(
+      -self.additionalOffset, headerPinnedOffsetY - [self adjustedOffset].y);
+  self.shouldAnimateHeader = YES;
+
+  CGFloat pinnedOffsetBeforeAnimation = [self pinnedOffsetY];
+  __weak __typeof(self) weakSelf = self;
+
+  ProceduralBlock shiftOmniboxToTop = ^{
+    __typeof(weakSelf) strongSelf = weakSelf;
+    // Changing the contentOffset of the collection results in a
+    // scroll and a change in the constraints of the header.
+    strongSelf.collectionView.contentOffset =
+        CGPointMake(0, [strongSelf pinnedOffsetY]);
+    // Layout the header for the constraints to be animated.
+    [strongSelf.headerController layoutHeader];
+    //    [strongSelf.collectionView.collectionViewLayout invalidateLayout];
+  };
+
+  self.animator = [[UIViewPropertyAnimator alloc]
+      initWithDuration:kShiftTilesUpAnimationDuration
+                 curve:UIViewAnimationCurveEaseInOut
+            animations:^{
+              NewTabPageViewController* strongSelf = weakSelf;
+              if (!strongSelf) {
+                return;
+              }
+
+              if (strongSelf.collectionView.contentOffset.y <
+                  [strongSelf pinnedOffsetY]) {
+                self.disableScrollAnimation = YES;
+                [strongSelf.headerController expandHeaderForFocus];
+                shiftOmniboxToTop();
+              }
+            }];
+
+  [self.animator addCompletion:^(UIViewAnimatingPosition finalPosition) {
+    NewTabPageViewController* strongSelf = weakSelf;
+    if (!strongSelf) {
+      return;
+    }
+
+    if (finalPosition == UIViewAnimatingPositionEnd) {
+      // Content suggestion headers can be updated during the scroll, causing
+      // `pinnedOffsetY` to be invalid. When this happens during the animation,
+      // the tiles are not scrolled to the top causing the omnibox to be hidden
+      // by the `PrimaryToolbarView`. In that state, the omnibox's popup and the
+      // keyboard are still visible.
+      // If the animation is not interrupted and `pinnedOffsetY` changed
+      // during the animation, shift the omnibox to the top at the end of the
+      // animation.
+      if ([strongSelf pinnedOffsetY] != pinnedOffsetBeforeAnimation &&
+          strongSelf.collectionView.contentOffset.y <
+              [strongSelf pinnedOffsetY]) {
+        shiftOmniboxToTop();
+      }
+      strongSelf.shouldAnimateHeader = NO;
+    }
+
+    strongSelf.scrolledToMinimumHeight = YES;
+    strongSelf.disableScrollAnimation = NO;
+    [strongSelf.headerController
+        completeHeaderFakeOmniboxFocusAnimationWithFinalPosition:finalPosition];
+  }];
+
+  self.animator.interruptible = YES;
+  [self.animator startAnimation];
+}
+
 #pragma mark - Private
 
+- (UICollectionView*)collectionView {
+  return self.feedWrapperViewController.contentCollectionView;
+}
+
 // Configures overscroll actions controller.
 - (void)configureOverscrollActionsController {
   // Ensure the feed's scroll view exists to prevent crashing the overscroll
@@ -678,6 +890,16 @@
   }
 }
 
+// Either signals to the omnibox to cancel its focused state or just update the
+// NTP state for an unfocused state.
+- (void)unfocusOmnibox {
+  if (self.headerController.omniboxFocused) {
+    [self.ntpContentDelegate cancelOmniboxEdit];
+  } else {
+    [self omniboxDidResignFirstResponder];
+  }
+}
+
 // Pins the fake omnibox to the top of the NTP.
 - (void)pinFakeOmniboxToTop {
   self.fakeOmniboxPinnedToTop = YES;
@@ -731,6 +953,48 @@
   [NSLayoutConstraint activateConstraints:self.fakeOmniboxConstraints];
 }
 
+// Update the header for a new width size depending on if the change needs to be
+// animated.
+- (void)updateFakeOmniboxOnNewWidth:(CGFloat)width {
+  if (self.shouldAnimateHeader) {
+    // We check -superview here because in certain scenarios (such as when the
+    // VC is rotated underneath another presented VC), in a
+    // UICollectionViewController -viewSafeAreaInsetsDidChange the VC.view has
+    // updated safeAreaInsets, but VC.collectionView does not until a layer
+    // -viewDidLayoutSubviews.  Since self.collectionView and it's superview
+    // should always have the same safeArea, this should be safe.
+    UIEdgeInsets insets = self.collectionView.superview.safeAreaInsets;
+    [self.headerController
+        updateFakeOmniboxForOffset:[self adjustedOffset].y
+                       screenWidth:width
+                    safeAreaInsets:insets
+            animateScrollAnimation:!self.disableScrollAnimation];
+  } else {
+    [self.headerController updateFakeOmniboxForWidth:width];
+  }
+}
+
+// Update the header state for a change in scroll position. This could mean
+// unfocusing the omnibox and/or updating its shape if `shouldAnimateHeader` is
+// YES.
+- (void)updateFakeOmniboxForScrollPosition {
+  // Unfocus the omnibox when the scroll view is scrolled by the user (but not
+  // when a scroll is triggered by layout/UIKit).
+  if (self.headerController.omniboxFocused && !self.shouldAnimateHeader &&
+      self.collectionView.dragging) {
+    [self unfocusOmnibox];
+  }
+
+  if (self.shouldAnimateHeader) {
+    UIEdgeInsets insets = self.collectionView.safeAreaInsets;
+    [self.headerController
+        updateFakeOmniboxForOffset:[self adjustedOffset].y
+                       screenWidth:self.collectionView.frame.size.width
+                    safeAreaInsets:insets
+            animateScrollAnimation:!self.disableScrollAnimation];
+  }
+}
+
 // Pins feed header to top of the NTP when scrolled into the feed, below the
 // omnibox.
 - (void)stickFeedHeaderToTop {
@@ -795,13 +1059,12 @@
 - (void)updateFeedInsetsForContentAbove {
   self.collectionView.contentInset = UIEdgeInsetsMake(
       [self heightAboveFeed], 0, self.collectionView.contentInset.bottom, 0);
-  [self updateHeaderSynchronizerOffset];
+  [self updateAdditionalOffset];
 }
 
-// Updates headerSynchronizer's additionalOffset using the content above the
-// feed.
-- (void)updateHeaderSynchronizerOffset {
-  self.headerSynchronizer.additionalOffset = [self heightAboveFeed];
+// Updates additionalOffset using the content above the feed.
+- (void)updateAdditionalOffset {
+  self.additionalOffset = [self heightAboveFeed];
 }
 
 // Checks whether the feed top section is visible and updates the
@@ -823,13 +1086,13 @@
       (visibleContentStartingPoint > -([self feedTopSectionHeight] * 2) / 3 &&
        ([self scrollPosition] <
         -([self stickyContentHeight] + [self feedTopSectionHeight] / 3))) &&
-      ![self.headerController isOmniboxFocused];
+      !self.headerController.omniboxFocused;
 
   [self.ntpContentDelegate
       signinPromoHasChangedVisibility:isFeedSigninPromoVisible];
 }
 
-// TODO(crbug.com/1170995): Remove once the Feed header properly supports
+// TODO(crbug.com/1403612): Remove once the Feed header properly supports
 // ContentSuggestions.
 - (void)handleSingleTapInView:(UITapGestureRecognizer*)recognizer {
   CGPoint location = [recognizer locationInView:[recognizer.view superview]];
@@ -840,7 +1103,7 @@
     [self.identityDiscButton
         sendActionsForControlEvents:UIControlEventTouchUpInside];
   } else {
-    [self.headerSynchronizer unfocusOmnibox];
+    [self unfocusOmnibox];
   }
 }
 
@@ -1008,6 +1271,17 @@
   return stickyContentHeight;
 }
 
+// Returns y-offset compensated for any additionalOffset that might be set.
+- (CGPoint)adjustedOffset {
+  CGPoint adjustedOffset = self.collectionView.contentOffset;
+  adjustedOffset.y += self.additionalOffset;
+  return adjustedOffset;
+}
+
+- (CGFloat)pinnedOffsetY {
+  return [self.headerController pinnedOffsetY] - self.additionalOffset;
+}
+
 #pragma mark - Helpers
 
 - (UIViewController*)contentSuggestionsViewController {
@@ -1181,8 +1455,7 @@
 // Checks if the collection view is scrolled at least to the minimum height and
 // updates property.
 - (void)updateScrolledToMinimumHeight {
-  CGFloat pinnedOffsetY = [self.headerSynchronizer pinnedOffsetY];
-  self.scrolledToMinimumHeight = [self scrollPosition] >= pinnedOffsetY;
+  self.scrolledToMinimumHeight = [self scrollPosition] >= [self pinnedOffsetY];
 }
 
 // Adds `viewController` as a child of `parentViewController` and adds
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_mediator_unittest.mm b/ios/chrome/browser/ui/reading_list/reading_list_mediator_unittest.mm
index 8c63780d..8f4388a 100644
--- a/ios/chrome/browser/ui/reading_list/reading_list_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/reading_list/reading_list_mediator_unittest.mm
@@ -8,6 +8,7 @@
 
 #import "base/strings/sys_string_conversions.h"
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/test/simple_test_clock.h"
 #import "components/favicon/core/large_icon_service_impl.h"
 #import "components/favicon/core/test/mock_favicon_service.h"
diff --git a/ios/chrome/browser/ui/settings/voice_search_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/voice_search_table_view_controller_unittest.mm
index 310a0b6..4c2a50a 100644
--- a/ios/chrome/browser/ui/settings/voice_search_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/voice_search_table_view_controller_unittest.mm
@@ -10,7 +10,6 @@
 #import "base/files/file_path.h"
 #import "base/mac/foundation_util.h"
 #import "base/test/task_environment.h"
-#import "base/threading/thread_task_runner_handle.h"
 #import "components/prefs/pref_member.h"
 #import "components/prefs/pref_registry_simple.h"
 #import "components/prefs/testing_pref_service.h"
diff --git a/ios/chrome/browser/web/certificate_policy_app_agent.mm b/ios/chrome/browser/web/certificate_policy_app_agent.mm
index b1fadb30..6fae504 100644
--- a/ios/chrome/browser/web/certificate_policy_app_agent.mm
+++ b/ios/chrome/browser/web/certificate_policy_app_agent.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/browser/web/certificate_policy_app_agent.h"
 
 #import "base/task/cancelable_task_tracker.h"
+#import "base/task/single_thread_task_runner.h"
 #import "ios/chrome/app/application_delegate/app_state.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/main/browser.h"
diff --git a/ios/chrome/browser/web/chrome_main_parts.mm b/ios/chrome/browser/web/chrome_main_parts.mm
index 2cd6079..439c1c1 100644
--- a/ios/chrome/browser/web/chrome_main_parts.mm
+++ b/ios/chrome/browser/web/chrome_main_parts.mm
@@ -16,6 +16,7 @@
 #import "base/path_service.h"
 #import "base/strings/sys_string_conversions.h"
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/task/thread_pool.h"
 #import "base/time/default_tick_clock.h"
 #import "components/content_settings/core/browser/cookie_settings.h"
diff --git a/ios/chrome/test/providers/lens/test_lens.mm b/ios/chrome/test/providers/lens/test_lens.mm
index 8995ba5f..6be4dbc 100644
--- a/ios/chrome/test/providers/lens/test_lens.mm
+++ b/ios/chrome/test/providers/lens/test_lens.mm
@@ -8,7 +8,6 @@
 
 #import "base/bind.h"
 #import "base/notreached.h"
-#import "base/threading/sequenced_task_runner_handle.h"
 
 #import <UIKit/UIKit.h>
 
diff --git a/ios/net/cookies/cookie_store_ios_client.mm b/ios/net/cookies/cookie_store_ios_client.mm
index 9e4c847..5b9f4e0 100644
--- a/ios/net/cookies/cookie_store_ios_client.mm
+++ b/ios/net/cookies/cookie_store_ios_client.mm
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "ios/net/cookies/cookie_store_ios_client.h"
+#import "base/task/sequenced_task_runner.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/net/cookies/cookie_store_ios_test_util.mm b/ios/net/cookies/cookie_store_ios_test_util.mm
index 7b29355..1aed152 100644
--- a/ios/net/cookies/cookie_store_ios_test_util.mm
+++ b/ios/net/cookies/cookie_store_ios_test_util.mm
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
+#import "base/task/sequenced_task_runner.h"
 #import "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #import "ios/net/cookies/cookie_store_ios.h"
diff --git a/ios/net/crn_http_protocol_handler.mm b/ios/net/crn_http_protocol_handler.mm
index 58fdad5..14e2a5d 100644
--- a/ios/net/crn_http_protocol_handler.mm
+++ b/ios/net/crn_http_protocol_handler.mm
@@ -19,6 +19,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "ios/net/chunked_data_stream_uploader.h"
 #import "ios/net/clients/crn_network_client_protocol.h"
diff --git a/ios/public/provider/chrome/browser/find_in_page/BUILD.gn b/ios/public/provider/chrome/browser/find_in_page/BUILD.gn
new file mode 100644
index 0000000..3f70a24
--- /dev/null
+++ b/ios/public/provider/chrome/browser/find_in_page/BUILD.gn
@@ -0,0 +1,8 @@
+# Copyright 2022 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("find_in_page_api") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [ "find_in_page_api.h" ]
+}
diff --git a/ios/public/provider/chrome/browser/find_in_page/find_in_page_api.h b/ios/public/provider/chrome/browser/find_in_page/find_in_page_api.h
new file mode 100644
index 0000000..f223547
--- /dev/null
+++ b/ios/public/provider/chrome/browser/find_in_page/find_in_page_api.h
@@ -0,0 +1,44 @@
+// Copyright 2023 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_PUBLIC_PROVIDER_CHROME_BROWSER_FIND_IN_PAGE_FIND_IN_PAGE_API_H_
+#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_FIND_IN_PAGE_FIND_IN_PAGE_API_H_
+
+#import <os/availability.h>
+
+namespace web {
+class WebState;
+}  // namespace web
+
+@protocol UITextSearching;
+
+namespace ios {
+namespace provider {
+
+// Convenience method for determining when Native Find in Page with System Find
+// Panel is enabled.
+bool IsNativeFindInPageWithSystemFindPanel();
+
+// Convenience method for determining when Native Find in Page with Chrome Find
+// Bar is enabled.
+bool IsNativeFindInPageWithChromeFindBar();
+
+// Convenience method for determining when Native Find in Page experiment is
+// enabled.
+bool IsNativeFindInPageEnabled();
+
+// Provides a searchable object for a given `web_state`.
+id<UITextSearching> GetSearchableObjectForWebState(web::WebState* web_state)
+    API_AVAILABLE(ios(16));
+
+// Initiates a Find in Page session on the given `web_state`.
+void StartTextSearchInWebState(web::WebState* web_state);
+
+// Terminates a Find in Page session on the given `web_state`.
+void StopTextSearchInWebState(web::WebState* web_state);
+
+}  // namespace provider
+}  // namespace ios
+
+#endif  // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_FIND_IN_PAGE_FIND_IN_PAGE_API_H_
diff --git a/ios/testing/embedded_test_server_handlers.cc b/ios/testing/embedded_test_server_handlers.cc
index 7bf9c67..cceb9df0 100644
--- a/ios/testing/embedded_test_server_handlers.cc
+++ b/ios/testing/embedded_test_server_handlers.cc
@@ -11,6 +11,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
diff --git a/ios/web/download/data_url_download_task.h b/ios/web/download/data_url_download_task.h
index 849d15e0..9908271 100644
--- a/ios/web/download/data_url_download_task.h
+++ b/ios/web/download/data_url_download_task.h
@@ -5,6 +5,7 @@
 #ifndef IOS_WEB_DOWNLOAD_DATA_URL_DOWNLOAD_TASK_H_
 #define IOS_WEB_DOWNLOAD_DATA_URL_DOWNLOAD_TASK_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "ios/web/download/download_task_impl.h"
 
 namespace web {
diff --git a/ios/web/download/download_native_task_impl.h b/ios/web/download/download_native_task_impl.h
index 1a71d524..af02e794 100644
--- a/ios/web/download/download_native_task_impl.h
+++ b/ios/web/download/download_native_task_impl.h
@@ -7,6 +7,7 @@
 
 #import <WebKit/WebKit.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "ios/web/download/download_task_impl.h"
 
 @class DownloadNativeTaskBridge;
diff --git a/ios/web/download/download_session_task_impl.h b/ios/web/download/download_session_task_impl.h
index c1c5abc..3babd3d 100644
--- a/ios/web/download/download_session_task_impl.h
+++ b/ios/web/download/download_session_task_impl.h
@@ -7,6 +7,7 @@
 
 #include "base/callback.h"
 #include "base/files/file.h"
+#include "base/task/sequenced_task_runner.h"
 #include "ios/web/download/download_task_impl.h"
 
 namespace web {
diff --git a/ios/web/download/download_task_impl_unittest.mm b/ios/web/download/download_task_impl_unittest.mm
index 6a56715..d8724413 100644
--- a/ios/web/download/download_task_impl_unittest.mm
+++ b/ios/web/download/download_task_impl_unittest.mm
@@ -9,6 +9,7 @@
 
 #import <memory>
 
+#import "base/task/sequenced_task_runner.h"
 #import "base/task/task_traits.h"
 #import "base/task/thread_pool.h"
 #import "base/test/task_environment.h"
diff --git a/ios/web/public/test/fakes/fake_web_client.h b/ios/web/public/test/fakes/fake_web_client.h
index 7f7652f..54e69b5 100644
--- a/ios/web/public/test/fakes/fake_web_client.h
+++ b/ios/web/public/test/fakes/fake_web_client.h
@@ -41,8 +41,6 @@
 
   NSString* GetDocumentStartScriptForMainFrame(
       BrowserState* browser_state) const override;
-  NSString* GetDocumentStartScriptForAllFrames(
-      BrowserState* browser_state) const override;
   void PrepareErrorPage(WebState* web_state,
                         const GURL& url,
                         NSError* error,
diff --git a/ios/web/public/test/fakes/fake_web_client.mm b/ios/web/public/test/fakes/fake_web_client.mm
index 93cbfb4e..d469153 100644
--- a/ios/web/public/test/fakes/fake_web_client.mm
+++ b/ios/web/public/test/fakes/fake_web_client.mm
@@ -9,7 +9,6 @@
 #import "base/strings/sys_string_conversions.h"
 #import "ios/web/common/uikit_ui_util.h"
 #import "ios/web/public/test/error_test_util.h"
-#import "ios/web/public/test/js_test_util.h"
 #import "ios/web/public/thread/web_task_traits.h"
 #import "ios/web/test/test_url_constants.h"
 #import "ui/base/resource/resource_bundle.h"
@@ -62,11 +61,6 @@
   return early_page_script_ ? early_page_script_ : @"";
 }
 
-NSString* FakeWebClient::GetDocumentStartScriptForAllFrames(
-    BrowserState* browser_state) const {
-  return web::test::GetPageScript(@"cookie_test");
-}
-
 void FakeWebClient::SetPluginNotSupportedText(const std::u16string& text) {
   plugin_not_supported_text_ = text;
 }
diff --git a/ios/web/public/test/fakes/fake_web_state.mm b/ios/web/public/test/fakes/fake_web_state.mm
index 83b81cbb..ee6be28 100644
--- a/ios/web/public/test/fakes/fake_web_state.mm
+++ b/ios/web/public/test/fakes/fake_web_state.mm
@@ -10,7 +10,6 @@
 #import "base/bind.h"
 #import "base/callback.h"
 #import "base/strings/sys_string_conversions.h"
-#import "base/threading/sequenced_task_runner_handle.h"
 #import "ios/web/common/crw_content_view.h"
 #import "ios/web/js_messaging/web_frames_manager_impl.h"
 #import "ios/web/public/js_messaging/web_frame.h"
diff --git a/ios/web/public/test/http_server/delayed_response_provider.mm b/ios/web/public/test/http_server/delayed_response_provider.mm
index 150db38c..69e8efc 100644
--- a/ios/web/public/test/http_server/delayed_response_provider.mm
+++ b/ios/web/public/test/http_server/delayed_response_provider.mm
@@ -8,7 +8,6 @@
 
 #import "base/bind.h"
 #import "base/mac/foundation_util.h"
-#import "base/threading/thread_task_runner_handle.h"
 #import "net/test/embedded_test_server/http_response.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/web/public/test/test_web_thread.h b/ios/web/public/test/test_web_thread.h
index 55de2af..21fe4ec 100644
--- a/ios/web/public/test/test_web_thread.h
+++ b/ios/web/public/test/test_web_thread.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "ios/web/public/thread/web_thread.h"
 
 namespace base {
diff --git a/ios/web/shell/shell_url_request_context_getter.mm b/ios/web/shell/shell_url_request_context_getter.mm
index f73adc5de..6350b7a 100644
--- a/ios/web/shell/shell_url_request_context_getter.mm
+++ b/ios/web/shell/shell_url_request_context_getter.mm
@@ -11,6 +11,7 @@
 #import "base/check.h"
 #import "base/memory/ptr_util.h"
 #import "base/memory/ref_counted.h"
+#import "base/task/single_thread_task_runner.h"
 #import "ios/net/cookies/cookie_store_ios.h"
 #import "ios/web/public/browsing_data/system_cookie_store_util.h"
 #import "ios/web/public/web_client.h"
diff --git a/ios/web/test/BUILD.gn b/ios/web/test/BUILD.gn
index adf9506..3a8803fc 100644
--- a/ios/web/test/BUILD.gn
+++ b/ios/web/test/BUILD.gn
@@ -48,7 +48,6 @@
   public_deps = [ "//testing/gtest" ]
 
   deps = [
-    ":all_frames_web_test_bundle",
     ":java_script_feature_test_inject_once_js",
     ":java_script_feature_test_reinject_js",
     ":test_constants",
@@ -108,13 +107,6 @@
   ]
 }
 
-optimize_js("all_frames_web_test_bundle") {
-  testonly = true
-
-  primary_script = "resources/cookie_test.js"
-  sources = [ "resources/cookie_test.js" ]
-}
-
 optimize_js("java_script_feature_test_inject_once_js") {
   testonly = true
 
diff --git a/ios/web/test/resources/cookie_test.js b/ios/web/test/resources/cookie_test.js
deleted file mode 100644
index 774c04a..0000000
--- a/ios/web/test/resources/cookie_test.js
+++ /dev/null
@@ -1,187 +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.
-/**
- * @fileoverview Add functionality used in tests.
- */
-
-/**
- * Namespace for this file. It depends on |__gCrWeb| having already been
- * injected.
- */
-__gCrWeb.cookieTest = {};
-
-// Store namespace object in a global __gCrWeb object referenced by a
-// string, so it does not get renamed by closure compiler during the
-// minification.
-__gCrWeb['cookieTest'] = __gCrWeb.cookieTest;
-
-__gCrWeb.cookieTest.getCookies = function() {
-  return document.cookie;
-};
-
-__gCrWeb.cookieTest.setCookie = function(newCookie) {
-  document.cookie = newCookie;
-};
-
-// Returns the localStorage entry for key. If there is an DOMException,
-// returns a dictionary { message: message }.
-__gCrWeb.cookieTest.getLocalStorage = function(key) {
-  try {
-    if (localStorage.getItem(key) == null) {
-      return 'a';
-    }
-    return localStorage.getItem(key);
-  } catch (error) {
-    if (error instanceof DOMException) {
-      return {'message': error.message};
-    }
-    return null;
-  }
-};
-
-__gCrWeb.cookieTest.setLocalStorage = function(key, value) {
-  try {
-    localStorage.setItem(key, value);
-    return true;
-  } catch (error) {
-    if (error instanceof DOMException) {
-      return {'message': error.message};
-    }
-    return {'message': error.message};
-  }
-};
-
-// Returns the sessionStorage entry for key. If there is an DOMException,
-// returns a dictionary { message: message }.
-__gCrWeb.cookieTest.getSessionStorage = function(key) {
-  try {
-    return sessionStorage.getItem(key);
-  } catch (error) {
-    if (error instanceof DOMException) {
-      return {'message': error.message};
-    }
-    return null;
-  }
-};
-
-__gCrWeb.cookieTest.setSessionStorage = function(key, value) {
-  try {
-    sessionStorage.setItem(key, value);
-    return true;
-  } catch (error) {
-    if (error instanceof DOMException) {
-      return {'message': error.message};
-    }
-    return false;
-  }
-};
-
-function onError(error) {
-  if (error instanceof DOMException || error instanceof ReferenceError) {
-    __gCrWeb.message.invokeOnHost({
-      command: 'cookieTest.result',
-      result: {message: error.message}
-    });
-    return;
-  }
-  __gCrWeb.message.invokeOnHost(
-      {command: 'cookieTest.result', result: false});
-}
-
-async function asyncGetWrapper(key, getter) {
-  try {
-    const value = await getter(key);
-    __gCrWeb.message.invokeOnHost(
-        {command: 'cookieTest.result', result: value})
-  } catch (error) {
-    onError(error);
-  }
-}
-
-async function asyncSetWrapper(key, value, setter) {
-  try {
-    await setter(key, value);
-    __gCrWeb.message.invokeOnHost(
-        {command: 'cookieTest.result', result: true})
-  } catch (error) {
-    onError(error);
-  }
-}
-
-async function setCache(key, value) {
-  const cache = await caches.open('cache');
-  return cache.put(`/${key}`, new Response(value));
-}
-
-async function getCache(key) {
-  const cache = await caches.open('cache');
-  const result = await cache.match(new Request(`/${key}`));
-  return result && result.text();
-}
-
-__gCrWeb.cookieTest.setCache = function(key, value) {
-  asyncSetWrapper(key, value, setCache);
-  return true;
-};
-
-__gCrWeb.cookieTest.getCache = function(key) {
-  asyncGetWrapper(key, getCache);
-  return 'This is an async function.';
-};
-
-function setIndexedDB(key, value) {
-  return new Promise((resolve, reject) => {
-    let open = indexedDB.open('db', 1);
-    open.onupgradeneeded = () => {
-      open.result.createObjectStore('store', {keyPath: 'id'});
-    };
-    open.onsuccess = () => {
-      let db = open.result;
-      var tx = db.transaction('store', 'readwrite');
-      var store = tx.objectStore('store');
-      store.put({id: key, value: value});
-      tx.oncomplete = () => {
-        db.close();
-        resolve();
-      };
-    };
-    open.onerror = reject;
-  });
-}
-
-function getIndexedDB(key) {
-  return new Promise((resolve, reject) => {
-    let open = indexedDB.open('db');
-    open.onsuccess = () => {
-      let db = open.result;
-      var hasStore = open.result.objectStoreNames.contains('store');
-      if (!hasStore) {
-        db.close();
-        resolve();
-        return;
-      }
-      var tx = db.transaction('store', 'readwrite');
-      var store = tx.objectStore('store');
-
-      var getResult = store.get(key);
-      getResult.onsuccess = () =>
-          resolve(getResult.result && getResult.result.value);
-
-      tx.oncomplete = () => {
-        db.close();
-      };
-    };
-    open.onerror = reject;
-  });
-}
-
-__gCrWeb.cookieTest.getIndexedDB = function(key) {
-  asyncGetWrapper(key, getIndexedDB);
-  return 'This is an async function.';
-};
-
-__gCrWeb.cookieTest.setIndexedDB = function(key, value) {
-  asyncSetWrapper(key, value, setIndexedDB);
-  return true;
-};
diff --git a/ios/web/test/test_web_thread.cc b/ios/web/test/test_web_thread.cc
index c74bb246..88d52cf 100644
--- a/ios/web/test/test_web_thread.cc
+++ b/ios/web/test/test_web_thread.cc
@@ -5,6 +5,7 @@
 #include "ios/web/public/test/test_web_thread.h"
 
 #include "base/message_loop/message_pump_type.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ios/web/web_sub_thread.h"
 #include "ios/web/web_thread_impl.h"
 
diff --git a/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm b/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm
index 7a8ebd2..985c2ae 100644
--- a/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm
+++ b/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm
@@ -211,7 +211,7 @@
 
   std::vector<const web::JavaScriptFeature::FeatureScript> feature_scripts = {
       web::JavaScriptFeature::FeatureScript::CreateWithFilename(
-          "cookie_test",
+          "java_script_feature_test_inject_once",
           web::JavaScriptFeature::FeatureScript::InjectionTime::kDocumentStart,
           web::JavaScriptFeature::FeatureScript::TargetFrames::kAllFrames)};
 
diff --git a/ios/web/web_state/web_state_observer_inttest.mm b/ios/web/web_state/web_state_observer_inttest.mm
index 2d0d6f0b..cd8a6d9b 100644
--- a/ios/web/web_state/web_state_observer_inttest.mm
+++ b/ios/web/web_state/web_state_observer_inttest.mm
@@ -17,6 +17,7 @@
 #import "base/strings/sys_string_conversions.h"
 #import "base/strings/utf_string_conversions.h"
 #import "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #import "base/test/gmock_callback_support.h"
 #import "base/test/ios/wait_util.h"
 #import "ios/net/protocol_handler_util.h"
diff --git a/ios/web/web_thread_impl.cc b/ios/web/web_thread_impl.cc
index 6fa4c821f..8d9d98d 100644
--- a/ios/web/web_thread_impl.cc
+++ b/ios/web/web_thread_impl.cc
@@ -13,6 +13,7 @@
 #include "base/compiler_specific.h"
 #include "base/lazy_instance.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_executor.h"
 #include "base/time/time.h"
diff --git a/ios/web/web_thread_impl.h b/ios/web/web_thread_impl.h
index 41cd2aaa..33f47f26 100644
--- a/ios/web/web_thread_impl.h
+++ b/ios/web/web_thread_impl.h
@@ -7,6 +7,7 @@
 
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "ios/web/public/thread/web_thread.h"
 
diff --git a/ios/web/web_thread_unittest.cc b/ios/web/web_thread_unittest.cc
index b98b99e0..1b4f78c 100644
--- a/ios/web/web_thread_unittest.cc
+++ b/ios/web/web_thread_unittest.cc
@@ -5,6 +5,8 @@
 #include "ios/web/public/thread/web_thread.h"
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ios/web/public/test/web_task_environment.h"
 #include "ios/web/public/thread/web_task_traits.h"
 #include "ios/web/public/thread/web_thread.h"
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 b64726e..950935c 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
@@ -99,11 +99,12 @@
       AddressProfileSavePromptCallback callback) override;
   bool HasCreditCardScanFeature() override;
   void ScanCreditCard(CreditCardScanCallback callback) override;
+  bool TryToShowFastCheckout(const FormData& form,
+                             const FormFieldData& field,
+                             AutofillDriver* driver) override;
+  void HideFastCheckout(bool allow_further_runs) override;
   bool IsFastCheckoutSupported() override;
-  bool IsFastCheckoutTriggerForm(const FormData& form,
-                                 const FormFieldData& field) override;
-  bool ShowFastCheckout(base::WeakPtr<FastCheckoutDelegate> delegate) override;
-  void HideFastCheckout() override;
+  bool IsShowingFastCheckoutUI() override;
   bool IsTouchToFillCreditCardSupported() override;
   bool ShowTouchToFillCreditCard(
       base::WeakPtr<TouchToFillDelegate> delegate,
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 fa35c93..1337d43 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
@@ -261,20 +261,16 @@
   return false;
 }
 
-bool WebViewAutofillClientIOS::IsFastCheckoutTriggerForm(
-    const FormData& form,
-    const FormFieldData& field) {
+bool WebViewAutofillClientIOS::TryToShowFastCheckout(const FormData& form,
+                                                     const FormFieldData& field,
+                                                     AutofillDriver* driver) {
   return false;
 }
 
-bool WebViewAutofillClientIOS::ShowFastCheckout(
-    base::WeakPtr<FastCheckoutDelegate> delegate) {
-  NOTREACHED();
-  return false;
-}
+void WebViewAutofillClientIOS::HideFastCheckout(bool allow_further_runs) {}
 
-void WebViewAutofillClientIOS::HideFastCheckout() {
-  NOTREACHED();
+bool WebViewAutofillClientIOS::IsShowingFastCheckoutUI() {
+  return false;
 }
 
 bool WebViewAutofillClientIOS::IsTouchToFillCreditCardSupported() {
diff --git a/ios/web_view/internal/ios_global_state_web_view_configuration.mm b/ios/web_view/internal/ios_global_state_web_view_configuration.mm
index 770d3d0..e01f21dd 100644
--- a/ios/web_view/internal/ios_global_state_web_view_configuration.mm
+++ b/ios/web_view/internal/ios_global_state_web_view_configuration.mm
@@ -6,6 +6,7 @@
 
 #include <dispatch/dispatch.h>
 
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "ios/web/public/thread/web_task_traits.h"
 #include "ios/web/public/thread/web_thread.h"
diff --git a/ios/web_view/internal/passwords/web_view_password_store_factory.mm b/ios/web_view/internal/passwords/web_view_password_store_factory.mm
index c234c08..8de065b 100644
--- a/ios/web_view/internal/passwords/web_view_password_store_factory.mm
+++ b/ios/web_view/internal/passwords/web_view_password_store_factory.mm
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/command_line.h"
 #include "base/no_destructor.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #import "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
diff --git a/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm b/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm
index a1b65cd..307a07c5 100644
--- a/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm
+++ b/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm
@@ -8,6 +8,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/no_destructor.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/gcm_driver/gcm_client_factory.h"
diff --git a/ios/web_view/internal/web_view_url_request_context_getter.mm b/ios/web_view/internal/web_view_url_request_context_getter.mm
index b7e356ac..0f97df5b 100644
--- a/ios/web_view/internal/web_view_url_request_context_getter.mm
+++ b/ios/web_view/internal/web_view_url_request_context_getter.mm
@@ -11,6 +11,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/path_service.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "ios/components/webui/web_ui_url_constants.h"
 #import "ios/net/cookies/cookie_store_ios.h"
diff --git a/ipc/ipc_channel.h b/ipc/ipc_channel.h
index 0c84e68..74a21b8 100644
--- a/ipc/ipc_channel.h
+++ b/ipc/ipc_channel.h
@@ -17,7 +17,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/process/process.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "ipc/ipc.mojom-forward.h"
 #include "ipc/ipc_channel_handle.h"
diff --git a/ipc/ipc_channel_mojo.cc b/ipc/ipc_channel_mojo.cc
index 974b96fc..2638fa0 100644
--- a/ipc/ipc_channel_mojo.cc
+++ b/ipc/ipc_channel_mojo.cc
@@ -17,7 +17,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ref.h"
 #include "base/process/process_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_logging.h"
diff --git a/ipc/ipc_channel_mojo.h b/ipc/ipc_channel_mojo.h
index 4eb44e0..06605c1b 100644
--- a/ipc/ipc_channel_mojo.h
+++ b/ipc/ipc_channel_mojo.h
@@ -19,7 +19,6 @@
 #include "base/synchronization/lock.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "ipc/ipc.mojom.h"
 #include "ipc/ipc_channel.h"
diff --git a/ipc/ipc_channel_proxy.cc b/ipc/ipc_channel_proxy.cc
index 6073ff6..e0d642c 100644
--- a/ipc/ipc_channel_proxy.cc
+++ b/ipc/ipc_channel_proxy.cc
@@ -16,7 +16,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel_factory.h"
 #include "ipc/ipc_listener.h"
diff --git a/ipc/ipc_channel_proxy_unittest.cc b/ipc/ipc_channel_proxy_unittest.cc
index 0a9ccfb..3e9e8ad4 100644
--- a/ipc/ipc_channel_proxy_unittest.cc
+++ b/ipc/ipc_channel_proxy_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/pickle.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_test_base.h"
diff --git a/ipc/ipc_channel_reader.cc b/ipc/ipc_channel_reader.cc
index aca1ad58..3add0caa 100644
--- a/ipc/ipc_channel_reader.cc
+++ b/ipc/ipc_channel_reader.cc
@@ -9,7 +9,6 @@
 #include <algorithm>
 
 #include "base/logging.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_logging.h"
 #include "ipc/ipc_message.h"
diff --git a/ipc/ipc_cpu_perftest.cc b/ipc/ipc_cpu_perftest.cc
index 0158195..c183ec03 100644
--- a/ipc/ipc_cpu_perftest.cc
+++ b/ipc/ipc_cpu_perftest.cc
@@ -12,6 +12,7 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/perf_log.h"
 #include "base/test/task_environment.h"
 #include "base/timer/timer.h"
diff --git a/ipc/ipc_logging.h b/ipc/ipc_logging.h
index 15253cdf..6c1f913 100644
--- a/ipc/ipc_logging.h
+++ b/ipc/ipc_logging.h
@@ -5,6 +5,7 @@
 #ifndef IPC_IPC_LOGGING_H_
 #define IPC_IPC_LOGGING_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "ipc/ipc_buildflags.h"
 
 #if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED)
diff --git a/ipc/ipc_message_pipe_reader.cc b/ipc/ipc_message_pipe_reader.cc
index 8f89060..12f3c39 100644
--- a/ipc/ipc_message_pipe_reader.cc
+++ b/ipc/ipc_message_pipe_reader.cc
@@ -14,8 +14,8 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/memory/raw_ref.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "ipc/ipc_channel_mojo.h"
 #include "mojo/public/cpp/bindings/message.h"
diff --git a/ipc/ipc_message_pipe_reader.h b/ipc/ipc_message_pipe_reader.h
index 4bea811..37b58c9 100644
--- a/ipc/ipc_message_pipe_reader.h
+++ b/ipc/ipc_message_pipe_reader.h
@@ -16,6 +16,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/process/process_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "ipc/ipc.mojom.h"
 #include "ipc/ipc_message.h"
diff --git a/ipc/ipc_mojo_bootstrap.cc b/ipc/ipc_mojo_bootstrap.cc
index d9ade42..dda36d8 100644
--- a/ipc/ipc_mojo_bootstrap.cc
+++ b/ipc/ipc_mojo_bootstrap.cc
@@ -30,7 +30,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/threading/thread_local.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/memory_dump_provider.h"
diff --git a/ipc/ipc_perftest_util.cc b/ipc/ipc_perftest_util.cc
index 18cd9d72..4a5915a3 100644
--- a/ipc/ipc_perftest_util.cc
+++ b/ipc/ipc_perftest_util.cc
@@ -8,6 +8,7 @@
 
 #include "base/logging.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel_proxy.h"
 #include "ipc/ipc_perftest_messages.h"
diff --git a/ipc/ipc_perftest_util.h b/ipc/ipc_perftest_util.h
index ae96a70..a6f8e43 100644
--- a/ipc/ipc_perftest_util.h
+++ b/ipc/ipc_perftest_util.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_WIN)
diff --git a/ipc/ipc_send_fds_test.cc b/ipc/ipc_send_fds_test.cc
index 53fc5f0..4ce6f980 100644
--- a/ipc/ipc_send_fds_test.cc
+++ b/ipc/ipc_send_fds_test.cc
@@ -26,7 +26,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ipc/ipc_message_attachment_set.h"
 #include "ipc/ipc_message_utils.h"
 #include "ipc/ipc_test_base.h"
diff --git a/ipc/ipc_sync_channel.h b/ipc/ipc_sync_channel.h
index ca8e53f..ea82e84 100644
--- a/ipc/ipc_sync_channel.h
+++ b/ipc/ipc_sync_channel.h
@@ -15,6 +15,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event_watcher.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ipc/ipc_channel_handle.h"
 #include "ipc/ipc_channel_proxy.h"
 #include "ipc/ipc_sync_message.h"
diff --git a/media/audio/alsa/alsa_output_unittest.cc b/media/audio/alsa/alsa_output_unittest.cc
index 925d260..46fcbf60 100644
--- a/media/audio/alsa/alsa_output_unittest.cc
+++ b/media/audio/alsa/alsa_output_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/test_message_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "media/audio/alsa/alsa_output.h"
 #include "media/audio/alsa/alsa_wrapper.h"
diff --git a/media/audio/audio_low_latency_input_output_unittest.cc b/media/audio/audio_low_latency_input_output_unittest.cc
index 5752d7a7..3addbf7 100644
--- a/media/audio/audio_low_latency_input_output_unittest.cc
+++ b/media/audio/audio_low_latency_input_output_unittest.cc
@@ -19,7 +19,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "media/audio/audio_device_description.h"
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index c7e11c89..24d8678 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -16,7 +16,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
 #include "media/audio/audio_device_description.h"
diff --git a/media/audio/audio_manager_unittest.cc b/media/audio/audio_manager_unittest.cc
index fd6c75b..83248d8 100644
--- a/media/audio/audio_manager_unittest.cc
+++ b/media/audio/audio_manager_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/system/sys_info.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_message_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/audio/audio_device_description.h"
diff --git a/media/audio/audio_output_device_unittest.cc b/media/audio/audio_output_device_unittest.cc
index 220c3ef..7e008a8 100644
--- a/media/audio/audio_output_device_unittest.cc
+++ b/media/audio/audio_output_device_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc
index b767382f..9ba7511 100644
--- a/media/audio/audio_output_proxy_unittest.cc
+++ b/media/audio/audio_output_proxy_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "media/audio/audio_manager.h"
 #include "media/audio/audio_manager_base.h"
diff --git a/media/audio/audio_thread_hang_monitor.cc b/media/audio/audio_thread_hang_monitor.cc
index 7008083..4dfa368 100644
--- a/media/audio/audio_thread_hang_monitor.cc
+++ b/media/audio/audio_thread_hang_monitor.cc
@@ -15,6 +15,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/power_monitor/power_monitor.h"
 #include "base/process/process.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
diff --git a/media/audio/audio_thread_impl.h b/media/audio/audio_thread_impl.h
index 1fbbda61..bd0a7e2 100644
--- a/media/audio/audio_thread_impl.h
+++ b/media/audio/audio_thread_impl.h
@@ -6,6 +6,7 @@
 #define MEDIA_AUDIO_AUDIO_THREAD_IMPL_H_
 
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
 #include "media/audio/audio_thread.h"
diff --git a/media/audio/cras/audio_manager_cras.h b/media/audio/cras/audio_manager_cras.h
index 45fe8de..8fe2f77d 100644
--- a/media/audio/cras/audio_manager_cras.h
+++ b/media/audio/cras/audio_manager_cras.h
@@ -13,6 +13,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/audio/cras/audio_manager_cras_base.h"
 #include "media/audio/cras/cras_util.h"
 
diff --git a/media/audio/cras/audio_manager_cras_base.cc b/media/audio/cras/audio_manager_cras_base.cc
index 4ca6c17..2fa24da 100644
--- a/media/audio/cras/audio_manager_cras_base.cc
+++ b/media/audio/cras/audio_manager_cras_base.cc
@@ -20,7 +20,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/system/sys_info.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/audio/audio_device_description.h"
 #include "media/audio/audio_features.h"
 #include "media/audio/cras/cras_input.h"
diff --git a/media/audio/cras/cras_input_unittest.cc b/media/audio/cras/cras_input_unittest.cc
index c9228d42..7a18719 100644
--- a/media/audio/cras/cras_input_unittest.cc
+++ b/media/audio/cras/cras_input_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/test/test_message_loop.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "media/audio/audio_device_description.h"
 #include "media/audio/cras/audio_manager_cras.h"
diff --git a/media/audio/cras/cras_unified_unittest.cc b/media/audio/cras/cras_unified_unittest.cc
index 930f4eb..9a7dfe8d 100644
--- a/media/audio/cras/cras_unified_unittest.cc
+++ b/media/audio/cras/cras_unified_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/test/test_message_loop.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "media/audio/audio_device_description.h"
 #include "media/audio/cras/audio_manager_cras.h"
diff --git a/media/audio/mac/audio_auhal_mac_unittest.cc b/media/audio/mac/audio_auhal_mac_unittest.cc
index 1fa433a..ba90bd34 100644
--- a/media/audio/mac/audio_auhal_mac_unittest.cc
+++ b/media/audio/mac/audio_auhal_mac_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/test/test_message_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/audio/audio_device_info_accessor_for_tests.h"
 #include "media/audio/audio_io.h"
 #include "media/audio/audio_manager.h"
diff --git a/media/audio/mock_aecdump_recording_manager.cc b/media/audio/mock_aecdump_recording_manager.cc
index 64c2384..2c94f2c3 100644
--- a/media/audio/mock_aecdump_recording_manager.cc
+++ b/media/audio/mock_aecdump_recording_manager.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "media/audio/mock_aecdump_recording_manager.h"
+#include "base/task/single_thread_task_runner.h"
 
 #include <utility>
 
diff --git a/media/audio/power_observer_helper.cc b/media/audio/power_observer_helper.cc
index 16c9e98..b1efe8cf5 100644
--- a/media/audio/power_observer_helper.cc
+++ b/media/audio/power_observer_helper.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/power_monitor/power_monitor.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace media {
 
diff --git a/media/audio/scoped_task_runner_observer.cc b/media/audio/scoped_task_runner_observer.cc
index 03cb7653..ecfa4c6 100644
--- a/media/audio/scoped_task_runner_observer.cc
+++ b/media/audio/scoped_task_runner_observer.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace media {
 
diff --git a/media/audio/test_audio_thread.h b/media/audio/test_audio_thread.h
index 1bdfd7e..53dbcc3 100644
--- a/media/audio/test_audio_thread.h
+++ b/media/audio/test_audio_thread.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
 #include "media/audio/audio_thread.h"
diff --git a/media/base/android/media_server_crash_listener.cc b/media/base/android/media_server_crash_listener.cc
index ed37491..5481004 100644
--- a/media/base/android/media_server_crash_listener.cc
+++ b/media/base/android/media_server_crash_listener.cc
@@ -6,6 +6,7 @@
 
 #include "base/android/jni_android.h"
 #include "base/memory/singleton.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/android/media_jni_headers/MediaServerCrashListener_jni.h"
 
 namespace media {
diff --git a/media/base/decoder_factory.cc b/media/base/decoder_factory.cc
index acc29c3..5879acb 100644
--- a/media/base/decoder_factory.cc
+++ b/media/base/decoder_factory.cc
@@ -4,6 +4,7 @@
 
 #include "media/base/decoder_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 
 namespace media {
diff --git a/media/base/media_url_demuxer.cc b/media/base/media_url_demuxer.cc
index ecab4a69..cdb46e1 100644
--- a/media/base/media_url_demuxer.cc
+++ b/media/base/media_url_demuxer.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "media/base/demuxer.h"
 
diff --git a/media/base/media_url_demuxer.h b/media/base/media_url_demuxer.h
index 3e7cc51..8a7b0f4 100644
--- a/media/base/media_url_demuxer.h
+++ b/media/base/media_url_demuxer.h
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/demuxer.h"
 #include "url/gurl.h"
 
diff --git a/media/base/memory_dump_provider_proxy.cc b/media/base/memory_dump_provider_proxy.cc
index e8b3b2b..b172acf 100644
--- a/media/base/memory_dump_provider_proxy.cc
+++ b/media/base/memory_dump_provider_proxy.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/memory_dump_manager.h"
 
 namespace media {
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index f48ebf30..04afce8 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "base/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/base/audio_decoder.h"
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index eb26417..8d8b6e95 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -20,7 +20,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/cdm_context.h"
diff --git a/media/base/renderer_factory_selector_unittest.cc b/media/base/renderer_factory_selector_unittest.cc
index 5c06c35..719c836 100644
--- a/media/base/renderer_factory_selector_unittest.cc
+++ b/media/base/renderer_factory_selector_unittest.cc
@@ -5,6 +5,7 @@
 #include <memory>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/overlay_info.h"
 #include "media/base/renderer_factory_selector.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/media/base/serial_runner.cc b/media/base/serial_runner.cc
index c6cee8db..80106a8 100644
--- a/media/base/serial_runner.cc
+++ b/media/base/serial_runner.cc
@@ -9,7 +9,6 @@
 #include "base/location.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace media {
 
diff --git a/media/base/serial_runner.h b/media/base/serial_runner.h
index 96a7ed1..d1c9487 100644
--- a/media/base/serial_runner.h
+++ b/media/base/serial_runner.h
@@ -11,6 +11,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_export.h"
 #include "media/base/pipeline_status.h"
 
diff --git a/media/capture/video/chromeos/camera_3a_controller.cc b/media/capture/video/chromeos/camera_3a_controller.cc
index 3b807f3c..b497c42 100644
--- a/media/capture/video/chromeos/camera_3a_controller.cc
+++ b/media/capture/video/chromeos/camera_3a_controller.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/cxx17_backports.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "media/capture/video/chromeos/camera_metadata_utils.h"
 #include "media/capture/video/chromeos/camera_trace_utils.h"
diff --git a/media/capture/video/chromeos/camera_3a_controller.h b/media/capture/video/chromeos/camera_3a_controller.h
index af5848b53..1512930d 100644
--- a/media/capture/video/chromeos/camera_3a_controller.h
+++ b/media/capture/video/chromeos/camera_3a_controller.h
@@ -8,6 +8,7 @@
 #include <unordered_set>
 
 #include "base/cancelable_callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "media/base/media_export.h"
 #include "media/capture/video/chromeos/mojom/camera3.mojom.h"
diff --git a/media/capture/video/chromeos/camera_app_device_bridge_impl.cc b/media/capture/video/chromeos/camera_app_device_bridge_impl.cc
index b544626..90e6035f 100644
--- a/media/capture/video/chromeos/camera_app_device_bridge_impl.cc
+++ b/media/capture/video/chromeos/camera_app_device_bridge_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/media_switches.h"
 #include "media/capture/video/chromeos/public/cros_features.h"
diff --git a/media/capture/video/chromeos/camera_app_device_bridge_impl.h b/media/capture/video/chromeos/camera_app_device_bridge_impl.h
index a11df37..d178d00 100644
--- a/media/capture/video/chromeos/camera_app_device_bridge_impl.h
+++ b/media/capture/video/chromeos/camera_app_device_bridge_impl.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/memory/singleton.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/capture/capture_export.h"
 #include "media/capture/video/chromeos/camera_app_device_impl.h"
 #include "media/capture/video/chromeos/mojom/camera_app.mojom.h"
diff --git a/media/capture/video/chromeos/camera_app_device_impl.cc b/media/capture/video/chromeos/camera_app_device_impl.cc
index cc7aef8..e4c43c8 100644
--- a/media/capture/video/chromeos/camera_app_device_impl.cc
+++ b/media/capture/video/chromeos/camera_app_device_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/cxx17_backports.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "gpu/ipc/common/gpu_memory_buffer_impl.h"
 #include "media/base/bind_to_current_loop.h"
diff --git a/media/capture/video/chromeos/camera_device_delegate.cc b/media/capture/video/chromeos/camera_device_delegate.cc
index 4b489106..826d00a 100644
--- a/media/capture/video/chromeos/camera_device_delegate.cc
+++ b/media/capture/video/chromeos/camera_device_delegate.cc
@@ -20,6 +20,7 @@
 #include "base/no_destructor.h"
 #include "base/posix/safe_strerror.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/capture/mojom/image_capture_types.h"
diff --git a/media/capture/video/chromeos/camera_hal_delegate.cc b/media/capture/video/chromeos/camera_hal_delegate.cc
index 8907c04..a017e90e 100644
--- a/media/capture/video/chromeos/camera_hal_delegate.cc
+++ b/media/capture/video/chromeos/camera_hal_delegate.cc
@@ -21,6 +21,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/system/system_monitor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/device_event_log/device_event_log.h"
diff --git a/media/capture/video/chromeos/camera_hal_dispatcher_impl.h b/media/capture/video/chromeos/camera_hal_dispatcher_impl.h
index cb3a998..81fafcaa 100644
--- a/media/capture/video/chromeos/camera_hal_dispatcher_impl.h
+++ b/media/capture/video/chromeos/camera_hal_dispatcher_impl.h
@@ -19,6 +19,7 @@
 #include "base/observer_list_types.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/threading/thread.h"
 #include "base/unguessable_token.h"
diff --git a/media/capture/video/chromeos/request_manager.cc b/media/capture/video/chromeos/request_manager.cc
index 6ef0b07..e56ba96 100644
--- a/media/capture/video/chromeos/request_manager.cc
+++ b/media/capture/video/chromeos/request_manager.cc
@@ -18,6 +18,7 @@
 #include "base/functional/callback_helpers.h"
 #include "base/posix/safe_strerror.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "gpu/ipc/common/gpu_memory_buffer_impl.h"
 #include "media/capture/video/chromeos/camera_app_device_bridge_impl.h"
diff --git a/media/capture/video/chromeos/request_manager.h b/media/capture/video/chromeos/request_manager.h
index ff9f0fe..34c0ec02 100644
--- a/media/capture/video/chromeos/request_manager.h
+++ b/media/capture/video/chromeos/request_manager.h
@@ -14,6 +14,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "media/capture/mojom/image_capture.mojom.h"
 #include "media/capture/video/chromeos/camera_app_device_impl.h"
diff --git a/media/capture/video/chromeos/scoped_video_capture_jpeg_decoder.cc b/media/capture/video/chromeos/scoped_video_capture_jpeg_decoder.cc
index 1c0164a..66e5ba2 100644
--- a/media/capture/video/chromeos/scoped_video_capture_jpeg_decoder.cc
+++ b/media/capture/video/chromeos/scoped_video_capture_jpeg_decoder.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "media/capture/video/chromeos/scoped_video_capture_jpeg_decoder.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace media {
 
diff --git a/media/capture/video/chromeos/vendor_tag_ops_delegate.cc b/media/capture/video/chromeos/vendor_tag_ops_delegate.cc
index 4a586f5..1bc025c 100644
--- a/media/capture/video/chromeos/vendor_tag_ops_delegate.cc
+++ b/media/capture/video/chromeos/vendor_tag_ops_delegate.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/strings/strcat.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace media {
 
diff --git a/media/capture/video/chromeos/vendor_tag_ops_delegate.h b/media/capture/video/chromeos/vendor_tag_ops_delegate.h
index 1d49b2d5..ced8f8cd 100644
--- a/media/capture/video/chromeos/vendor_tag_ops_delegate.h
+++ b/media/capture/video/chromeos/vendor_tag_ops_delegate.h
@@ -11,6 +11,8 @@
 
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/capture/video/chromeos/mojom/camera_common.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/media/capture/video/chromeos/video_capture_device_chromeos_delegate.cc b/media/capture/video/chromeos/video_capture_device_chromeos_delegate.cc
index 2dc28b48..356ab28 100644
--- a/media/capture/video/chromeos/video_capture_device_chromeos_delegate.cc
+++ b/media/capture/video/chromeos/video_capture_device_chromeos_delegate.cc
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "media/capture/video/chromeos/camera_app_device_bridge_impl.h"
 #include "media/capture/video/chromeos/camera_device_delegate.h"
diff --git a/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc b/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc
index e62f4d5..f2748ee3 100644
--- a/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc
+++ b/media/capture/video/chromeos/video_capture_device_factory_chromeos.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/capture/video/chromeos/camera_app_device_bridge_impl.h"
 #include "media/capture/video/chromeos/camera_hal_dispatcher_impl.h"
diff --git a/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.cc b/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.cc
index 094f497..17a4700 100644
--- a/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.cc
+++ b/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "components/chromeos_camera/mojo_mjpeg_decode_accelerator.h"
 #include "media/base/media_switches.h"
diff --git a/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.h b/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.h
index bbd0e41..82659238 100644
--- a/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.h
+++ b/media/capture/video/chromeos/video_capture_jpeg_decoder_impl.h
@@ -15,6 +15,7 @@
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/chromeos_camera/mojo_mjpeg_decode_accelerator.h"
 #include "gpu/config/gpu_info.h"
 #include "media/capture/capture_export.h"
diff --git a/media/capture/video/create_video_capture_device_factory.cc b/media/capture/video/create_video_capture_device_factory.cc
index b4abd2b..651cfdfa 100644
--- a/media/capture/video/create_video_capture_device_factory.cc
+++ b/media/capture/video/create_video_capture_device_factory.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/base/media_switches.h"
diff --git a/media/capture/video/fuchsia/video_capture_device_factory_fuchsia.cc b/media/capture/video/fuchsia/video_capture_device_factory_fuchsia.cc
index 0d863e1..78e4b02a 100644
--- a/media/capture/video/fuchsia/video_capture_device_factory_fuchsia.cc
+++ b/media/capture/video/fuchsia/video_capture_device_factory_fuchsia.cc
@@ -13,7 +13,6 @@
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/system/system_monitor.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "media/capture/video/fuchsia/video_capture_device_fuchsia.h"
 
diff --git a/media/capture/video/linux/v4l2_capture_delegate.cc b/media/capture/video/linux/v4l2_capture_delegate.cc
index 8ee347e4..5c23595be 100644
--- a/media/capture/video/linux/v4l2_capture_delegate.cc
+++ b/media/capture/video/linux/v4l2_capture_delegate.cc
@@ -17,6 +17,7 @@
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/posix/eintr_wrapper.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "media/base/bind_to_current_loop.h"
diff --git a/media/capture/video/linux/v4l2_capture_delegate.h b/media/capture/video/linux/v4l2_capture_delegate.h
index 7e4ea1d..a237df51 100644
--- a/media/capture/video/linux/v4l2_capture_delegate.h
+++ b/media/capture/video/linux/v4l2_capture_delegate.h
@@ -15,6 +15,7 @@
 #include "base/containers/queue.h"
 #include "base/files/scoped_file.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "media/capture/video/linux/scoped_v4l2_device_fd.h"
diff --git a/media/capture/video/linux/video_capture_device_factory_linux.cc b/media/capture/video/linux/video_capture_device_factory_linux.cc
index bca3352..a726e2f 100644
--- a/media/capture/video/linux/video_capture_device_factory_linux.cc
+++ b/media/capture/video/linux/video_capture_device_factory_linux.cc
@@ -18,6 +18,7 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/capture/video/linux/scoped_v4l2_device_fd.h"
 #include "media/capture/video/linux/video_capture_device_linux.h"
diff --git a/media/capture/video/linux/video_capture_device_factory_linux_unittest.cc b/media/capture/video/linux/video_capture_device_factory_linux_unittest.cc
index 93248c1..d8d4a869 100644
--- a/media/capture/video/linux/video_capture_device_factory_linux_unittest.cc
+++ b/media/capture/video/linux/video_capture_device_factory_linux_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "media/capture/video/linux/fake_device_provider.h"
diff --git a/media/capture/video/linux/video_capture_device_linux.h b/media/capture/video/linux/video_capture_device_linux.h
index 8b31476..383ad54b 100644
--- a/media/capture/video/linux/video_capture_device_linux.h
+++ b/media/capture/video/linux/video_capture_device_linux.h
@@ -14,6 +14,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/capture/video/linux/v4l2_capture_device_impl.h"
 #include "media/capture/video/video_capture_device.h"
 #include "media/capture/video_capture_types.h"
diff --git a/media/capture/video/mac/test/video_capture_test_utils_mac.mm b/media/capture/video/mac/test/video_capture_test_utils_mac.mm
index eda5edb6..18f7999 100644
--- a/media/capture/video/mac/test/video_capture_test_utils_mac.mm
+++ b/media/capture/video/mac/test/video_capture_test_utils_mac.mm
@@ -9,6 +9,7 @@
 
 #include "base/run_loop.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac.h b/media/capture/video/mac/video_capture_device_avfoundation_mac.h
index d9d2217..e631435 100644
--- a/media/capture/video/mac/video_capture_device_avfoundation_mac.h
+++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.h
@@ -10,6 +10,7 @@
 #import <AVFoundation/AVFoundation.h>
 #import <Foundation/Foundation.h>
 #include "base/callback_forward.h"
+#include "base/task/single_thread_task_runner.h"
 
 #include "base/mac/scoped_dispatch_object.h"
 #include "base/mac/scoped_nsobject.h"
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
index fa936dc..cf4b1a9 100644
--- a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
+++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
@@ -19,6 +19,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #include "components/crash/core/common/crash_key.h"
 #include "media/base/mac/color_space_util_mac.h"
 #include "media/base/media_switches.h"
diff --git a/media/capture/video/mac/video_capture_device_mac.mm b/media/capture/video/mac/video_capture_device_mac.mm
index 7a0b6de..5c9a17c4 100644
--- a/media/capture/video/mac/video_capture_device_mac.mm
+++ b/media/capture/video/mac/video_capture_device_mac.mm
@@ -22,6 +22,7 @@
 #include "base/mac/scoped_ioplugininterface.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
diff --git a/media/capture/video/win/video_capture_device_factory_win.h b/media/capture/video/win/video_capture_device_factory_win.h
index 1b52665..48e6c9b 100644
--- a/media/capture/video/win/video_capture_device_factory_win.h
+++ b/media/capture/video/win/video_capture_device_factory_win.h
@@ -15,6 +15,7 @@
 #include <windows.devices.enumeration.h>
 #include <wrl.h>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "media/base/win/dxgi_device_manager.h"
 #include "media/capture/video/video_capture_device_factory.h"
diff --git a/media/capture/video/win/video_capture_device_mf_win.cc b/media/capture/video/win/video_capture_device_mf_win.cc
index fb20257..c35686dc 100644
--- a/media/capture/video/win/video_capture_device_mf_win.cc
+++ b/media/capture/video/win/video_capture_device_mf_win.cc
@@ -25,6 +25,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/platform_thread.h"
 #include "base/win/scoped_co_mem.h"
 #include "base/win/windows_version.h"
diff --git a/media/capture/video/win/video_capture_device_mf_win_unittest.cc b/media/capture/video/win/video_capture_device_mf_win_unittest.cc
index caa5c301..fef60fa0 100644
--- a/media/capture/video/win/video_capture_device_mf_win_unittest.cc
+++ b/media/capture/video/win/video_capture_device_mf_win_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/media/cast/cast_environment.cc b/media/cast/cast_environment.cc
index ce6d55e7..cb9b04e 100644
--- a/media/cast/cast_environment.cc
+++ b/media/cast/cast_environment.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 
 using base::SingleThreadTaskRunner;
 
diff --git a/media/cast/encoding/external_video_encoder.cc b/media/cast/encoding/external_video_encoder.cc
index 7994f36..89dd54a 100644
--- a/media/cast/encoding/external_video_encoder.cc
+++ b/media/cast/encoding/external_video_encoder.cc
@@ -20,6 +20,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
diff --git a/media/cast/encoding/external_video_encoder.h b/media/cast/encoding/external_video_encoder.h
index 19fd9b8..ec91451 100644
--- a/media/cast/encoding/external_video_encoder.h
+++ b/media/cast/encoding/external_video_encoder.h
@@ -11,6 +11,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/cast/cast_environment.h"
 #include "media/cast/encoding/size_adaptable_video_encoder_base.h"
 #include "media/cast/encoding/video_encoder.h"
diff --git a/media/cast/net/cast_transport_impl.h b/media/cast/net/cast_transport_impl.h
index fe139c24..1fd4a0b 100644
--- a/media/cast/net/cast_transport_impl.h
+++ b/media/cast/net/cast_transport_impl.h
@@ -35,6 +35,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "media/cast/common/transport_encryption_handler.h"
diff --git a/media/cast/net/pacing/paced_sender.cc b/media/cast/net/pacing/paced_sender.cc
index 63f6984..103b9bd 100644
--- a/media/cast/net/pacing/paced_sender.cc
+++ b/media/cast/net/pacing/paced_sender.cc
@@ -9,6 +9,7 @@
 #include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace media {
 namespace cast {
diff --git a/media/cast/net/rtp/rtp_sender.cc b/media/cast/net/rtp/rtp_sender.cc
index 1c599c2..a1e9f4d 100644
--- a/media/cast/net/rtp/rtp_sender.cc
+++ b/media/cast/net/rtp/rtp_sender.cc
@@ -9,6 +9,7 @@
 #include "base/big_endian.h"
 #include "base/logging.h"
 #include "base/rand_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/cast/common/encoded_frame.h"
 #include "media/cast/constants.h"
 
diff --git a/media/cast/net/rtp/rtp_sender.h b/media/cast/net/rtp/rtp_sender.h
index 2c6ed95..049f7da 100644
--- a/media/cast/net/rtp/rtp_sender.h
+++ b/media/cast/net/rtp/rtp_sender.h
@@ -16,6 +16,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "media/cast/cast_environment.h"
 #include "media/cast/net/cast_transport.h"
diff --git a/media/cast/net/udp_transport_impl.cc b/media/cast/net/udp_transport_impl.cc
index d4e406be..c400a94 100644
--- a/media/cast/net/udp_transport_impl.cc
+++ b/media/cast/net/udp_transport_impl.cc
@@ -13,6 +13,7 @@
 #include "base/callback.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/cast/net/transport_util.h"
 #include "media/cast/net/udp_packet_pipe.h"
diff --git a/media/cast/net/udp_transport_impl.h b/media/cast/net/udp_transport_impl.h
index 876ac91a..d012dc5 100644
--- a/media/cast/net/udp_transport_impl.h
+++ b/media/cast/net/udp_transport_impl.h
@@ -12,6 +12,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "media/cast/cast_environment.h"
diff --git a/media/cast/test/end2end_unittest.cc b/media/cast/test/end2end_unittest.cc
index 7a84765ed..94e80c9 100644
--- a/media/cast/test/end2end_unittest.cc
+++ b/media/cast/test/end2end_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/sys_byteorder.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/task_environment.h"
 #include "base/time/tick_clock.h"
diff --git a/media/cast/test/fake_media_source.cc b/media/cast/test/fake_media_source.cc
index 2ccd6a60..fd1eaf5 100644
--- a/media/cast/test/fake_media_source.cc
+++ b/media/cast/test/fake_media_source.cc
@@ -12,6 +12,7 @@
 #include "base/logging.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/audio_bus.h"
diff --git a/media/cast/test/fake_video_encode_accelerator_factory.cc b/media/cast/test/fake_video_encode_accelerator_factory.cc
index ad7312c..fcbb40c5 100644
--- a/media/cast/test/fake_video_encode_accelerator_factory.cc
+++ b/media/cast/test/fake_video_encode_accelerator_factory.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace media {
 namespace cast {
diff --git a/media/cdm/cdm_adapter.h b/media/cdm/cdm_adapter.h
index 55c34c3..0b4e3a40 100644
--- a/media/cdm/cdm_adapter.h
+++ b/media/cdm/cdm_adapter.h
@@ -16,6 +16,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_native_library.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "components/crash/core/common/crash_key.h"
 #include "media/base/audio_buffer.h"
diff --git a/media/device_monitors/device_monitor_mac.mm b/media/device_monitors/device_monitor_mac.mm
index b0a2e473..25cf3b4ed 100644
--- a/media/device_monitors/device_monitor_mac.mm
+++ b/media/device_monitors/device_monitor_mac.mm
@@ -16,6 +16,7 @@
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/raw_ptr.h"
 #include "base/ranges/algorithm.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 
 namespace {
diff --git a/media/filters/android/media_codec_audio_decoder.cc b/media/filters/android/media_codec_audio_decoder.cc
index f90596d..ef2ffce 100644
--- a/media/filters/android/media_codec_audio_decoder.cc
+++ b/media/filters/android/media_codec_audio_decoder.cc
@@ -13,7 +13,6 @@
 #include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/base/android/media_codec_bridge_impl.h"
 #include "media/base/android/media_codec_util.h"
 #include "media/base/audio_timestamp_helper.h"
diff --git a/media/filters/android/video_frame_extractor.cc b/media/filters/android/video_frame_extractor.cc
index 0833dc2..292981b 100644
--- a/media/filters/android/video_frame_extractor.cc
+++ b/media/filters/android/video_frame_extractor.cc
@@ -7,7 +7,6 @@
 #include "base/android/build_info.h"
 #include "base/bind.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/base/android/media_codec_bridge_impl.h"
 #include "media/base/data_source.h"
 #include "media/ffmpeg/ffmpeg_common.h"
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index ebc3e6cc..3e8ea63 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -12,7 +12,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/audio_decoder_config.h"
 #include "media/base/bind_to_current_loop.h"
diff --git a/media/filters/decrypting_media_resource.cc b/media/filters/decrypting_media_resource.cc
index 3501ea2f..4d1621ff 100644
--- a/media/filters/decrypting_media_resource.cc
+++ b/media/filters/decrypting_media_resource.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/cdm_context.h"
 #include "media/base/demuxer_stream.h"
 #include "media/base/media_log.h"
diff --git a/media/filters/demuxer_manager.cc b/media/filters/demuxer_manager.cc
index 97fff83..fd0aa6fa 100644
--- a/media/filters/demuxer_manager.cc
+++ b/media/filters/demuxer_manager.cc
@@ -9,6 +9,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/cross_origin_data_source.h"
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
index be65001..dc0b292 100644
--- a/media/filters/ffmpeg_audio_decoder.cc
+++ b/media/filters/ffmpeg_audio_decoder.cc
@@ -11,6 +11,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/audio_bus.h"
diff --git a/media/filters/passthrough_dts_audio_decoder.cc b/media/filters/passthrough_dts_audio_decoder.cc
index a1cb03ed..ea40bbd8 100644
--- a/media/filters/passthrough_dts_audio_decoder.cc
+++ b/media/filters/passthrough_dts_audio_decoder.cc
@@ -4,6 +4,7 @@
 
 #include "media/filters/passthrough_dts_audio_decoder.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/formats/dts/dts_util.h"
diff --git a/media/fuchsia/audio/fake_audio_capturer.cc b/media/fuchsia/audio/fake_audio_capturer.cc
index b4fe16a..fff595c 100644
--- a/media/fuchsia/audio/fake_audio_capturer.cc
+++ b/media/fuchsia/audio/fake_audio_capturer.cc
@@ -11,7 +11,6 @@
 #include "base/logging.h"
 #include "base/notreached.h"
 #include "base/ranges/algorithm.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace media {
diff --git a/media/fuchsia/cdm/fuchsia_decryptor.cc b/media/fuchsia/cdm/fuchsia_decryptor.cc
index 147221f..1119ab3 100644
--- a/media/fuchsia/cdm/fuchsia_decryptor.cc
+++ b/media/fuchsia/cdm/fuchsia_decryptor.cc
@@ -8,7 +8,6 @@
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/location.h"
 #include "base/notreached.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/base/decoder_buffer.h"
 #include "media/base/video_frame.h"
 #include "media/fuchsia/cdm/fuchsia_cdm_context.h"
diff --git a/media/fuchsia/mojom/fuchsia_media.mojom b/media/fuchsia/mojom/fuchsia_media.mojom
index 2434ac8..51854ca5 100644
--- a/media/fuchsia/mojom/fuchsia_media.mojom
+++ b/media/fuchsia/mojom/fuchsia_media.mojom
@@ -25,9 +25,8 @@
   // Input and output buffers must be allocated in protected memory.
   SECURE,
 
-  // Input buffers are not protected. Output buffers may be allocated in
-  // protected memory.
-  CLEAR_INPUT,
+  // Input buffers are not protected. Output buffers are protected.
+  SECURE_OUTPUT,
 };
 
 // Interface used by the renderer to connect to CDM and mediacodec resources.
diff --git a/media/fuchsia/video/fuchsia_decoder_factory.cc b/media/fuchsia/video/fuchsia_decoder_factory.cc
index 98672b497..16ba7e0 100644
--- a/media/fuchsia/video/fuchsia_decoder_factory.cc
+++ b/media/fuchsia/video/fuchsia_decoder_factory.cc
@@ -4,6 +4,7 @@
 
 #include "media/fuchsia/video/fuchsia_decoder_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "components/viz/common/gpu/raster_context_provider.h"
 #include "media/fuchsia/video/fuchsia_video_decoder.h"
 #include "media/video/gpu_video_accelerator_factories.h"
diff --git a/media/fuchsia/video/fuchsia_decoder_factory.h b/media/fuchsia/video/fuchsia_decoder_factory.h
index 7c28e9e..b418039c 100644
--- a/media/fuchsia/video/fuchsia_decoder_factory.h
+++ b/media/fuchsia/video/fuchsia_decoder_factory.h
@@ -5,6 +5,7 @@
 #ifndef MEDIA_FUCHSIA_VIDEO_FUCHSIA_DECODER_FACTORY_H_
 #define MEDIA_FUCHSIA_VIDEO_FUCHSIA_DECODER_FACTORY_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/decoder_factory.h"
 #include "media/fuchsia/mojom/fuchsia_media.mojom.h"
 #include "mojo/public/cpp/bindings/shared_remote.h"
diff --git a/media/fuchsia/video/fuchsia_video_decoder.cc b/media/fuchsia/video/fuchsia_video_decoder.cc
index 5800696..6a92fdf5 100644
--- a/media/fuchsia/video/fuchsia_video_decoder.cc
+++ b/media/fuchsia/video/fuchsia_video_decoder.cc
@@ -302,7 +302,7 @@
   }
 
   media::mojom::VideoDecoderSecureMemoryMode secure_mode =
-      media::mojom::VideoDecoderSecureMemoryMode::CLEAR_INPUT;
+      media::mojom::VideoDecoderSecureMemoryMode::CLEAR;
   if (secure_input) {
     if (!use_overlays_for_video_) {
       DLOG(ERROR) << "Protected content can be rendered only using overlays.";
@@ -312,11 +312,13 @@
       return;
     }
     secure_mode = media::mojom::VideoDecoderSecureMemoryMode::SECURE;
-  } else if (!use_overlays_for_video_) {
-    // Protected output buffers can be rendered only using overlays. If overlays
-    // are not allowed then the output buffers cannot be protected.
-    secure_mode = media::mojom::VideoDecoderSecureMemoryMode::CLEAR;
+  } else if (use_overlays_for_video_ &&
+             base::CommandLine::ForCurrentProcess()->HasSwitch(
+                 switches::kForceProtectedVideoOutputBuffers)) {
+    secure_mode = media::mojom::VideoDecoderSecureMemoryMode::SECURE_OUTPUT;
   }
+  protected_output_ =
+      secure_mode != media::mojom::VideoDecoderSecureMemoryMode::CLEAR;
 
   // Reset output buffers since we won't be able to re-use them.
   ReleaseOutputBuffers();
@@ -668,6 +670,11 @@
   // registered with an ImagePipe.
   frame->metadata().allow_overlay = use_overlays_for_video_;
 
+  if (protected_output_) {
+    frame->metadata().protected_video = true;
+    frame->metadata().hw_protected = true;
+  }
+
   output_cb_.Run(std::move(frame));
 }
 
diff --git a/media/fuchsia/video/fuchsia_video_decoder.h b/media/fuchsia/video/fuchsia_video_decoder.h
index f746da7f..e5b5d955 100644
--- a/media/fuchsia/video/fuchsia_video_decoder.h
+++ b/media/fuchsia/video/fuchsia_video_decoder.h
@@ -152,6 +152,9 @@
   zx::eventpair output_buffer_collection_handle_;
   std::vector<OutputMailbox*> output_mailboxes_;
 
+  // Set to true when the output buffers are protected.
+  bool protected_output_ = false;
+
   size_t num_used_output_buffers_ = 0;
 
   SEQUENCE_CHECKER(sequence_checker_);
diff --git a/media/gpu/android/codec_allocator.cc b/media/gpu/android/codec_allocator.cc
index a09f4ac..eb4bb5fc 100644
--- a/media/gpu/android/codec_allocator.cc
+++ b/media/gpu/android/codec_allocator.cc
@@ -12,6 +12,7 @@
 #include "base/logging.h"
 #include "base/no_destructor.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
diff --git a/media/gpu/android/codec_buffer_wait_coordinator.h b/media/gpu/android/codec_buffer_wait_coordinator.h
index c45890c..e8f7869 100644
--- a/media/gpu/android/codec_buffer_wait_coordinator.h
+++ b/media/gpu/android/codec_buffer_wait_coordinator.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "gpu/command_buffer/service/ref_counted_lock.h"
diff --git a/media/gpu/android/codec_image.cc b/media/gpu/android/codec_image.cc
index 3bc7f35..ae3a520 100644
--- a/media/gpu/android/codec_image.cc
+++ b/media/gpu/android/codec_image.cc
@@ -11,6 +11,7 @@
 #include "base/android/scoped_hardware_buffer_fence_sync.h"
 #include "base/callback_helpers.h"
 #include "base/debug/dump_without_crashing.h"
+#include "base/task/sequenced_task_runner.h"
 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
 #include "gpu/command_buffer/service/texture_manager.h"
 #include "gpu/config/gpu_finch_features.h"
diff --git a/media/gpu/android/codec_image.h b/media/gpu/android/codec_image.h
index effd7a1..79274b8 100644
--- a/media/gpu/android/codec_image.h
+++ b/media/gpu/android/codec_image.h
@@ -13,6 +13,7 @@
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted_delete_on_sequence.h"
+#include "base/task/sequenced_task_runner.h"
 #include "gpu/command_buffer/service/ref_counted_lock.h"
 #include "gpu/command_buffer/service/stream_texture_shared_image_interface.h"
 #include "media/gpu/android/codec_output_buffer_renderer.h"
diff --git a/media/gpu/android/codec_wrapper.cc b/media/gpu/android/codec_wrapper.cc
index 9d10297..a8567e64a 100644
--- a/media/gpu/android/codec_wrapper.cc
+++ b/media/gpu/android/codec_wrapper.cc
@@ -14,6 +14,7 @@
 #include "base/debug/crash_logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/android/media_codec_util.h"
 #include "media/base/bind_to_current_loop.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/media/gpu/android/codec_wrapper.h b/media/gpu/android/codec_wrapper.h
index d208a59..bb4505c 100644
--- a/media/gpu/android/codec_wrapper.h
+++ b/media/gpu/android/codec_wrapper.h
@@ -13,6 +13,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/android/media_codec_bridge.h"
 #include "media/base/decoder_buffer.h"
 #include "media/gpu/android/codec_surface_bundle.h"
diff --git a/media/gpu/android/fake_codec_allocator.cc b/media/gpu/android/fake_codec_allocator.cc
index c62baef..c8783b2 100644
--- a/media/gpu/android/fake_codec_allocator.cc
+++ b/media/gpu/android/fake_codec_allocator.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/android/mock_media_codec_bridge.h"
 #include "media/gpu/android/codec_allocator.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/media/gpu/android/frame_info_helper.cc b/media/gpu/android/frame_info_helper.cc
index 13aebe5..802c6716 100644
--- a/media/gpu/android/frame_info_helper.cc
+++ b/media/gpu/android/frame_info_helper.cc
@@ -5,6 +5,7 @@
 #include "media/gpu/android/frame_info_helper.h"
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "gpu/command_buffer/service/shared_image/android_video_image_backing.h"
 #include "gpu/ipc/service/command_buffer_stub.h"
diff --git a/media/gpu/android/frame_info_helper.h b/media/gpu/android/frame_info_helper.h
index 3473fd7..fb8ea7e 100644
--- a/media/gpu/android/frame_info_helper.h
+++ b/media/gpu/android/frame_info_helper.h
@@ -5,6 +5,7 @@
 #ifndef MEDIA_GPU_ANDROID_FRAME_INFO_HELPER_H_
 #define MEDIA_GPU_ANDROID_FRAME_INFO_HELPER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/gpu/android/shared_image_video_provider.h"
 #include "media/gpu/media_gpu_export.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/media/gpu/android/maybe_render_early_manager.cc b/media/gpu/android/maybe_render_early_manager.cc
index a5223254..f3ea9b7 100644
--- a/media/gpu/android/maybe_render_early_manager.cc
+++ b/media/gpu/android/maybe_render_early_manager.cc
@@ -7,6 +7,7 @@
 #include "base/containers/contains.h"
 #include "base/containers/cxx20_erase.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "media/gpu/android/codec_image_group.h"
 #include "media/gpu/android/codec_surface_bundle.h"
diff --git a/media/gpu/android/ndk_video_encode_accelerator.cc b/media/gpu/android/ndk_video_encode_accelerator.cc
index e82fd9ec..9afcdf63c 100644
--- a/media/gpu/android/ndk_video_encode_accelerator.cc
+++ b/media/gpu/android/ndk_video_encode_accelerator.cc
@@ -14,6 +14,7 @@
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/no_destructor.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/android/media_codec_util.h"
 #include "media/base/android/media_jni_headers/VideoEncodeAcceleratorUtil_jni.h"
diff --git a/media/gpu/android/pooled_shared_image_video_provider.cc b/media/gpu/android/pooled_shared_image_video_provider.cc
index 1d97773d..50857ca 100644
--- a/media/gpu/android/pooled_shared_image_video_provider.cc
+++ b/media/gpu/android/pooled_shared_image_video_provider.cc
@@ -5,6 +5,7 @@
 #include "media/gpu/android/pooled_shared_image_video_provider.h"
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/common/sync_token.h"
 #include "media/base/bind_to_current_loop.h"
 #include "mojo/public/cpp/bindings/callback_helpers.h"
diff --git a/media/gpu/android/pooled_shared_image_video_provider.h b/media/gpu/android/pooled_shared_image_video_provider.h
index f940484..fda048c4 100644
--- a/media/gpu/android/pooled_shared_image_video_provider.h
+++ b/media/gpu/android/pooled_shared_image_video_provider.h
@@ -6,6 +6,7 @@
 #define MEDIA_GPU_ANDROID_POOLED_SHARED_IMAGE_VIDEO_PROVIDER_H_
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "gpu/ipc/service/command_buffer_stub.h"
 #include "media/gpu/android/shared_image_video_provider.h"
diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc
index b5345a1..aae3389 100644
--- a/media/gpu/android/video_frame_factory_impl.cc
+++ b/media/gpu/android/video_frame_factory_impl.cc
@@ -13,6 +13,7 @@
 #include "base/check_op.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/service/abstract_texture.h"
diff --git a/media/gpu/android/video_frame_factory_impl.h b/media/gpu/android/video_frame_factory_impl.h
index 8a16485d..5d8fbb6 100644
--- a/media/gpu/android/video_frame_factory_impl.h
+++ b/media/gpu/android/video_frame_factory_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "gpu/config/gpu_preferences.h"
 #include "media/base/video_frame.h"
diff --git a/media/gpu/chromeos/dmabuf_video_frame_pool.cc b/media/gpu/chromeos/dmabuf_video_frame_pool.cc
index 1a4bc69e..a2ee924c 100644
--- a/media/gpu/chromeos/dmabuf_video_frame_pool.cc
+++ b/media/gpu/chromeos/dmabuf_video_frame_pool.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "media/gpu/chromeos/dmabuf_video_frame_pool.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace media {
 
diff --git a/media/gpu/chromeos/gl_image_processor_backend.cc b/media/gpu/chromeos/gl_image_processor_backend.cc
index 347c6ff..c83e9094 100644
--- a/media/gpu/chromeos/gl_image_processor_backend.cc
+++ b/media/gpu/chromeos/gl_image_processor_backend.cc
@@ -8,6 +8,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/format_utils.h"
 #include "media/base/video_frame.h"
diff --git a/media/gpu/chromeos/gl_image_processor_backend.h b/media/gpu/chromeos/gl_image_processor_backend.h
index 94c94fc..d82e6471 100644
--- a/media/gpu/chromeos/gl_image_processor_backend.h
+++ b/media/gpu/chromeos/gl_image_processor_backend.h
@@ -12,6 +12,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "gpu/command_buffer/common/gl2_types.h"
 #include "media/gpu/chromeos/image_processor_backend.h"
 #include "media/gpu/media_gpu_export.h"
diff --git a/media/gpu/chromeos/image_processor.cc b/media/gpu/chromeos/image_processor.cc
index 907314147..5fdfc425 100644
--- a/media/gpu/chromeos/image_processor.cc
+++ b/media/gpu/chromeos/image_processor.cc
@@ -10,6 +10,7 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "media/base/video_types.h"
diff --git a/media/gpu/chromeos/image_processor_backend.cc b/media/gpu/chromeos/image_processor_backend.cc
index 441de7cc..3e8f3dac 100644
--- a/media/gpu/chromeos/image_processor_backend.cc
+++ b/media/gpu/chromeos/image_processor_backend.cc
@@ -10,6 +10,7 @@
 
 #include "base/bind.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "media/gpu/macros.h"
 
diff --git a/media/gpu/chromeos/image_processor_factory.cc b/media/gpu/chromeos/image_processor_factory.cc
index afd526b..1b0dd67 100644
--- a/media/gpu/chromeos/image_processor_factory.cc
+++ b/media/gpu/chromeos/image_processor_factory.cc
@@ -11,6 +11,7 @@
 #include "base/containers/contains.h"
 #include "base/feature_list.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_switches.h"
 #include "media/base/video_types.h"
 #include "media/gpu/buildflags.h"
diff --git a/media/gpu/chromeos/image_processor_factory.h b/media/gpu/chromeos/image_processor_factory.h
index 7bcb841..994cc51 100644
--- a/media/gpu/chromeos/image_processor_factory.h
+++ b/media/gpu/chromeos/image_processor_factory.h
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/callback_forward.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/gpu/chromeos/fourcc.h"
 #include "media/gpu/chromeos/image_processor.h"
 #include "media/gpu/media_gpu_export.h"
diff --git a/media/gpu/chromeos/image_processor_with_pool.cc b/media/gpu/chromeos/image_processor_with_pool.cc
index a0a7813..d9270fd5 100644
--- a/media/gpu/chromeos/image_processor_with_pool.cc
+++ b/media/gpu/chromeos/image_processor_with_pool.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_serializers.h"
 #include "media/gpu/chromeos/gpu_buffer_layout.h"
 #include "media/gpu/macros.h"
diff --git a/media/gpu/chromeos/libyuv_image_processor_backend.cc b/media/gpu/chromeos/libyuv_image_processor_backend.cc
index 4ce4f2e..2a58fbd 100644
--- a/media/gpu/chromeos/libyuv_image_processor_backend.cc
+++ b/media/gpu/chromeos/libyuv_image_processor_backend.cc
@@ -10,6 +10,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/checked_math.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/gpu/chromeos/fourcc.h"
 #include "media/gpu/macros.h"
diff --git a/media/gpu/chromeos/libyuv_image_processor_backend.h b/media/gpu/chromeos/libyuv_image_processor_backend.h
index 7a4de18..c97f38f 100644
--- a/media/gpu/chromeos/libyuv_image_processor_backend.h
+++ b/media/gpu/chromeos/libyuv_image_processor_backend.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/gpu/chromeos/fourcc.h"
 #include "media/gpu/chromeos/image_processor_backend.h"
 #include "media/gpu/media_gpu_export.h"
diff --git a/media/gpu/chromeos/mailbox_video_frame_converter.cc b/media/gpu/chromeos/mailbox_video_frame_converter.cc
index 8b10c13..5d63f0f 100644
--- a/media/gpu/chromeos/mailbox_video_frame_converter.cc
+++ b/media/gpu/chromeos/mailbox_video_frame_converter.cc
@@ -9,6 +9,7 @@
 #include "base/containers/contains.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/shared_image_usage.h"
diff --git a/media/gpu/chromeos/oop_video_decoder.cc b/media/gpu/chromeos/oop_video_decoder.cc
index 87e339b5..f5b78d1 100644
--- a/media/gpu/chromeos/oop_video_decoder.cc
+++ b/media/gpu/chromeos/oop_video_decoder.cc
@@ -5,6 +5,7 @@
 #include "media/gpu/chromeos/oop_video_decoder.h"
 
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/chromeos_buildflags.h"
 #include "chromeos/components/cdm_factory_daemon/stable_cdm_context_impl.h"
 #include "media/base/bind_to_current_loop.h"
diff --git a/media/gpu/chromeos/oop_video_decoder.h b/media/gpu/chromeos/oop_video_decoder.h
index e85d28a7..59f51e32 100644
--- a/media/gpu/chromeos/oop_video_decoder.h
+++ b/media/gpu/chromeos/oop_video_decoder.h
@@ -8,6 +8,7 @@
 #include "base/containers/lru_cache.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "media/base/media_log.h"
 #include "media/gpu/chromeos/video_decoder_pipeline.h"
diff --git a/media/gpu/chromeos/platform_video_frame_pool.cc b/media/gpu/chromeos/platform_video_frame_pool.cc
index 86132db..ff1b1da 100644
--- a/media/gpu/chromeos/platform_video_frame_pool.cc
+++ b/media/gpu/chromeos/platform_video_frame_pool.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/video_util.h"
 #include "media/gpu/chromeos/gpu_buffer_layout.h"
 #include "media/gpu/chromeos/platform_video_frame_utils.h"
diff --git a/media/gpu/chromeos/vd_video_decode_accelerator.cc b/media/gpu/chromeos/vd_video_decode_accelerator.cc
index 5bc2cfc0..35b3eeb4 100644
--- a/media/gpu/chromeos/vd_video_decode_accelerator.cc
+++ b/media/gpu/chromeos/vd_video_decode_accelerator.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/location.h"
 #include "base/memory/unsafe_shared_memory_region.h"
+#include "base/task/sequenced_task_runner.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
 #include "media/base/format_utils.h"
diff --git a/media/gpu/chromeos/vda_video_frame_pool.cc b/media/gpu/chromeos/vda_video_frame_pool.cc
index 0b289a7..facf27e 100644
--- a/media/gpu/chromeos/vda_video_frame_pool.cc
+++ b/media/gpu/chromeos/vda_video_frame_pool.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/gpu/chromeos/gpu_buffer_layout.h"
 #include "media/gpu/macros.h"
 #include "media/media_buildflags.h"
diff --git a/media/gpu/chromeos/video_decoder_pipeline.cc b/media/gpu/chromeos/video_decoder_pipeline.cc
index 7d54cc1..b9db1ef9 100644
--- a/media/gpu/chromeos/video_decoder_pipeline.cc
+++ b/media/gpu/chromeos/video_decoder_pipeline.cc
@@ -14,6 +14,7 @@
 #include "base/no_destructor.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
diff --git a/media/gpu/chromeos/video_decoder_pipeline_unittest.cc b/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
index 501235c..31fdc98 100644
--- a/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
+++ b/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/gmock_callback_support.h"
diff --git a/media/gpu/chromeos/video_frame_converter.cc b/media/gpu/chromeos/video_frame_converter.cc
index 6f19171..c2fee61 100644
--- a/media/gpu/chromeos/video_frame_converter.cc
+++ b/media/gpu/chromeos/video_frame_converter.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "media/gpu/chromeos/video_frame_converter.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace media {
 
diff --git a/media/gpu/command_buffer_helper.cc b/media/gpu/command_buffer_helper.cc
index 349ef62..17301a2 100644
--- a/media/gpu/command_buffer_helper.cc
+++ b/media/gpu/command_buffer_helper.cc
@@ -9,6 +9,7 @@
 
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "build/build_config.h"
diff --git a/media/gpu/gpu_video_decode_accelerator_factory.cc b/media/gpu/gpu_video_decode_accelerator_factory.cc
index 4fa5962..2db7d44 100644
--- a/media/gpu/gpu_video_decode_accelerator_factory.cc
+++ b/media/gpu/gpu_video_decode_accelerator_factory.cc
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "gpu/config/gpu_preferences.h"
 #include "media/base/media_switches.h"
diff --git a/media/gpu/ipc/service/gpu_video_decode_accelerator.cc b/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
index 6daa0df..81b5e85f 100644
--- a/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
+++ b/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
@@ -14,6 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "gpu/command_buffer/common/command_buffer.h"
diff --git a/media/gpu/ipc/service/gpu_video_decode_accelerator.h b/media/gpu/ipc/service/gpu_video_decode_accelerator.h
index ab5669ad..069c990c 100644
--- a/media/gpu/ipc/service/gpu_video_decode_accelerator.h
+++ b/media/gpu/ipc/service/gpu_video_decode_accelerator.h
@@ -16,6 +16,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/service/texture_manager.h"
 #include "gpu/config/gpu_info.h"
 #include "gpu/ipc/service/command_buffer_stub.h"
diff --git a/media/gpu/ipc/service/picture_buffer_manager.cc b/media/gpu/ipc/service/picture_buffer_manager.cc
index 632cf0d..ef1af80e 100644
--- a/media/gpu/ipc/service/picture_buffer_manager.cc
+++ b/media/gpu/ipc/service/picture_buffer_manager.cc
@@ -12,6 +12,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "gpu/command_buffer/common/mailbox_holder.h"
diff --git a/media/gpu/ipc/service/vda_video_decoder.cc b/media/gpu/ipc/service/vda_video_decoder.cc
index 6f1a45b6..93edff3 100644
--- a/media/gpu/ipc/service/vda_video_decoder.cc
+++ b/media/gpu/ipc/service/vda_video_decoder.cc
@@ -14,6 +14,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
diff --git a/media/gpu/mac/vt_video_decode_accelerator_mac.h b/media/gpu/mac/vt_video_decode_accelerator_mac.h
index 8d58117..50ad137 100644
--- a/media/gpu/mac/vt_video_decode_accelerator_mac.h
+++ b/media/gpu/mac/vt_video_decode_accelerator_mac.h
@@ -19,6 +19,8 @@
 #include "base/mac/scoped_cftyperef.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
diff --git a/media/gpu/mac/vt_video_encode_accelerator_mac.cc b/media/gpu/mac/vt_video_encode_accelerator_mac.cc
index 5106b8c..61b0283 100644
--- a/media/gpu/mac/vt_video_encode_accelerator_mac.cc
+++ b/media/gpu/mac/vt_video_encode_accelerator_mac.cc
@@ -17,7 +17,6 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "media/base/bitrate.h"
diff --git a/media/gpu/mac/vt_video_encode_accelerator_mac.h b/media/gpu/mac/vt_video_encode_accelerator_mac.h
index 5cf8b322..76757f2 100644
--- a/media/gpu/mac/vt_video_encode_accelerator_mac.h
+++ b/media/gpu/mac/vt_video_encode_accelerator_mac.h
@@ -11,6 +11,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
diff --git a/media/gpu/test/fake_command_buffer_helper.cc b/media/gpu/test/fake_command_buffer_helper.cc
index 09529e93..73d44f6 100644
--- a/media/gpu/test/fake_command_buffer_helper.cc
+++ b/media/gpu/test/fake_command_buffer_helper.cc
@@ -5,6 +5,7 @@
 #include "media/gpu/test/fake_command_buffer_helper.h"
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "gpu/command_buffer/service/shared_image/shared_image_backing.h"
 #include "gpu/command_buffer/service/shared_image/shared_image_representation.h"
diff --git a/media/gpu/test/video_encoder/video_encoder_client.cc b/media/gpu/test/video_encoder/video_encoder_client.cc
index 4a0f67b5..69db78f 100644
--- a/media/gpu/test/video_encoder/video_encoder_client.cc
+++ b/media/gpu/test/video_encoder/video_encoder_client.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
 #include "gpu/config/gpu_preferences.h"
 #include "media/base/bind_to_current_loop.h"
diff --git a/media/gpu/test/video_encoder/video_encoder_client.h b/media/gpu/test/video_encoder/video_encoder_client.h
index 6d92457..56c098a 100644
--- a/media/gpu/test/video_encoder/video_encoder_client.h
+++ b/media/gpu/test/video_encoder/video_encoder_client.h
@@ -15,6 +15,7 @@
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "media/base/bitstream_buffer.h"
diff --git a/media/gpu/test/video_player/decoder_wrapper.cc b/media/gpu/test/video_player/decoder_wrapper.cc
index 22276660..8eb2e29 100644
--- a/media/gpu/test/video_player/decoder_wrapper.cc
+++ b/media/gpu/test/video_player/decoder_wrapper.cc
@@ -9,6 +9,8 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner_thread_mode.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
diff --git a/media/gpu/test/video_player/test_vda_video_decoder.h b/media/gpu/test/video_player/test_vda_video_decoder.h
index 8b2bc800..4a89e09 100644
--- a/media/gpu/test/video_player/test_vda_video_decoder.h
+++ b/media/gpu/test/video_player/test_vda_video_decoder.h
@@ -12,6 +12,7 @@
 #include "base/containers/lru_cache.h"
 #include "base/memory/raw_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "media/base/video_decoder.h"
 #include "media/gpu/test/video_player/decoder_wrapper.h"
diff --git a/media/gpu/v4l2/v4l2_framerate_control.cc b/media/gpu/v4l2/v4l2_framerate_control.cc
index bc417961..c2c5b5cc 100644
--- a/media/gpu/v4l2/v4l2_framerate_control.cc
+++ b/media/gpu/v4l2/v4l2_framerate_control.cc
@@ -7,6 +7,7 @@
 #include "base/command_line.h"
 #include "base/sequence_checker.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/media_switches.h"
 
diff --git a/media/gpu/v4l2/v4l2_image_processor_backend.cc b/media/gpu/v4l2/v4l2_image_processor_backend.cc
index bbf7959..090fddf 100644
--- a/media/gpu/v4l2/v4l2_image_processor_backend.cc
+++ b/media/gpu/v4l2/v4l2_image_processor_backend.cc
@@ -19,6 +19,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
index 8667a78..6ffc6c5 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
@@ -578,9 +578,9 @@
 
   image_processor_ = v4l2_vda_helpers::CreateImageProcessor(
       *output_format_fourcc_, *gl_image_format_fourcc_, coded_size_,
-      coded_size_, decoder_->GetVisibleRect(),
-      VideoFrame::StorageType::STORAGE_DMABUFS, output_buffer_map_.size(),
-      image_processor_device_, image_processor_output_mode,
+      coded_size_, visible_rect_, VideoFrame::StorageType::STORAGE_DMABUFS,
+      output_buffer_map_.size(), image_processor_device_,
+      image_processor_output_mode,
       // Unretained(this) is safe for ErrorCB because |decoder_thread_| is owned
       // by this V4L2VideoDecodeAccelerator and |this| must be valid when
       // ErrorCB is executed.
@@ -661,7 +661,7 @@
   DCHECK_EQ(coded_size_.width() % 16, 0);
   DCHECK_EQ(coded_size_.height() % 16, 0);
 
-  if (!gfx::Rect(coded_size_).Contains(decoder_->GetVisibleRect())) {
+  if (!gfx::Rect(coded_size_).Contains(visible_rect_)) {
     VLOGF(1) << "The visible rectangle is not contained in the coded size";
     NOTIFY_ERROR(UNREADABLE_INPUT);
     return false;
@@ -707,8 +707,8 @@
       FROM_HERE,
       base::BindOnce(
           &VideoDecodeAccelerator::Client::ProvidePictureBuffersWithVisibleRect,
-          client_, num_pictures, pixel_format, 1, gl_image_size_,
-          decoder_->GetVisibleRect(), device_->GetTextureTarget()));
+          client_, num_pictures, pixel_format, 1, gl_image_size_, visible_rect_,
+          device_->GetTextureTarget()));
 
   // Go into kAwaitingPictureBuffers to prevent us from doing any more decoding
   // or event handling while we are waiting for AssignPictureBuffers(). Not
@@ -1145,6 +1145,9 @@
 
   image_processor_ = nullptr;
 
+  // Update the visible rect.
+  visible_rect_ = decoder_->GetVisibleRect();
+
   // Dequeued decoded surfaces may be pended in pending_picture_ready_ if they
   // are waiting for some pictures to be cleared. We should post them right away
   // because they are about to be dismissed and destroyed for surface set
@@ -1273,7 +1276,7 @@
   const gfx::Size pic_size_received_from_client = buffers[0].size();
   const gfx::Size pic_size_expected_from_client =
       output_mode_ == Config::OutputMode::ALLOCATE
-          ? GetRectSizeFromOrigin(decoder_->GetVisibleRect())
+          ? GetRectSizeFromOrigin(visible_rect_)
           : coded_size_;
   if (output_mode_ == Config::OutputMode::ALLOCATE &&
       pic_size_expected_from_client != pic_size_received_from_client) {
@@ -1608,9 +1611,8 @@
       NOTIFY_ERROR(INVALID_ARGUMENT);
       return;
     }
-    const gfx::Rect visible_rect = decoder_->GetVisibleRect();
     iter->output_frame = VideoFrame::WrapExternalDmabufs(
-        *layout, visible_rect, visible_rect.size(), std::move(duped_fds),
+        *layout, visible_rect_, visible_rect_.size(), std::move(duped_fds),
         base::TimeDelta());
   }
 
@@ -1627,8 +1629,7 @@
         base::BindOnce(&V4L2SliceVideoDecodeAccelerator::CreateGLImageFor,
                        weak_this_, device_, index, picture_buffer_id,
                        std::move(handle), iter->client_texture_id,
-                       iter->texture_id,
-                       GetRectSizeFromOrigin(decoder_->GetVisibleRect()),
+                       iter->texture_id, GetRectSizeFromOrigin(visible_rect_),
                        *gl_image_format_fourcc_));
   }
 
@@ -2314,8 +2315,7 @@
             ip_output_record.picture_id,
             CreateGpuMemoryBufferHandle(frame.get()).native_pixmap_handle,
             ip_output_record.client_texture_id, ip_output_record.texture_id,
-            GetRectSizeFromOrigin(decoder_->GetVisibleRect()),
-            *gl_image_format_fourcc_));
+            GetRectSizeFromOrigin(visible_rect_), *gl_image_format_fourcc_));
   }
 
   DCHECK(!surfaces_at_ip_.empty());
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h
index efc51572..f09c232 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h
+++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h
@@ -18,6 +18,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "media/gpu/chromeos/fourcc.h"
@@ -455,6 +456,9 @@
   // Codec-specific software decoder in use.
   std::unique_ptr<AcceleratedVideoDecoder> decoder_;
 
+  // The visible rect of the frames in the output queue.
+  gfx::Rect visible_rect_;
+
   // Surfaces queued to device to keep references to them while decoded.
   std::queue<scoped_refptr<V4L2DecodeSurface>> surfaces_at_device_;
 
diff --git a/media/gpu/v4l2/v4l2_vda_helpers.cc b/media/gpu/v4l2/v4l2_vda_helpers.cc
index 1ff5025..60001b3 100644
--- a/media/gpu/v4l2/v4l2_vda_helpers.cc
+++ b/media/gpu/v4l2/v4l2_vda_helpers.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/color_plane_layout.h"
 #include "media/base/video_codecs.h"
 #include "media/gpu/chromeos/fourcc.h"
diff --git a/media/gpu/v4l2/v4l2_vda_helpers.h b/media/gpu/v4l2/v4l2_vda_helpers.h
index 2b20135..4e399594 100644
--- a/media/gpu/v4l2/v4l2_vda_helpers.h
+++ b/media/gpu/v4l2/v4l2_vda_helpers.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/video_codecs.h"
 #include "media/gpu/chromeos/fourcc.h"
 #include "media/gpu/chromeos/image_processor.h"
diff --git a/media/gpu/v4l2/v4l2_video_decode_accelerator.h b/media/gpu/v4l2/v4l2_video_decode_accelerator.h
index dc54564..9edb4cd5 100644
--- a/media/gpu/v4l2/v4l2_video_decode_accelerator.h
+++ b/media/gpu/v4l2/v4l2_video_decode_accelerator.h
@@ -23,6 +23,7 @@
 #include "base/containers/queue.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "media/base/limits.h"
diff --git a/media/gpu/v4l2/v4l2_video_decoder.cc b/media/gpu/v4l2/v4l2_video_decoder.cc
index 99a6b1e..839034c 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder.cc
@@ -680,6 +680,24 @@
   }
 }
 
+void V4L2VideoDecoder::RestartStream() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
+  DVLOGF(3);
+
+  if (!StopStreamV4L2Queue(true)) {
+    VLOGF(1) << "Failed to stop streaming.";
+    return;
+  }
+
+  if (!StartStreamV4L2Queue(true)) {
+    VLOGF(1) << "Failed to start streaming.";
+    return;
+  }
+
+  if (state_ != State::kDecoding)
+    SetState(State::kDecoding);
+}
+
 void V4L2VideoDecoder::ChangeResolution(gfx::Size pic_size,
                                         gfx::Rect visible_rect,
                                         size_t num_codec_reference_frames) {
diff --git a/media/gpu/v4l2/v4l2_video_decoder.h b/media/gpu/v4l2/v4l2_video_decoder.h
index 0acc819..98bb71f 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.h
+++ b/media/gpu/v4l2/v4l2_video_decoder.h
@@ -75,6 +75,7 @@
   bool IsDecoding() const override;
   void InitiateFlush() override;
   void CompleteFlush() override;
+  void RestartStream() override;
   void ChangeResolution(gfx::Size pic_size,
                         gfx::Rect visible_rect,
                         size_t num_codec_reference_frames) override;
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend.h b/media/gpu/v4l2/v4l2_video_decoder_backend.h
index 52285f8..dfdaf468 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend.h
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend.h
@@ -50,6 +50,9 @@
     virtual void InitiateFlush() = 0;
     // Inform the flushing is complete.
     virtual void CompleteFlush() = 0;
+    // Perform streamoff - streamon sequence to start capture queue when
+    // it is stopped after LAST buffer dequeue.
+    virtual void RestartStream() = 0;
     // Stop the stream to reallocate the CAPTURE buffers. Can only be done
     // between calls to |InitiateFlush| and |CompleteFlush|.
     virtual void ChangeResolution(gfx::Size pic_size,
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
index ac0f799..a29af02 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
@@ -574,7 +574,10 @@
   }
 
   client_->CompleteFlush();
-
+  // Qualcomm venus stops capture queue after LAST buffer is dequeued and needs
+  // restarting to be ready for resume operation in case it was left in EOS
+  // state
+  client_->RestartStream();
   // Resume decoding if data is available.
   ScheduleDecodeWork();
 
diff --git a/media/gpu/vaapi/vaapi_image_processor_backend.cc b/media/gpu/vaapi/vaapi_image_processor_backend.cc
index 030c032..a557ff1 100644
--- a/media/gpu/vaapi/vaapi_image_processor_backend.cc
+++ b/media/gpu/vaapi/vaapi_image_processor_backend.cc
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/stl_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/gpu/chromeos/fourcc.h"
diff --git a/media/gpu/vaapi/vaapi_image_processor_backend.h b/media/gpu/vaapi/vaapi_image_processor_backend.h
index a8f0decb..5947960 100644
--- a/media/gpu/vaapi/vaapi_image_processor_backend.h
+++ b/media/gpu/vaapi/vaapi_image_processor_backend.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/containers/small_map.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/gpu/chromeos/image_processor_backend.h"
 #include "media/gpu/media_gpu_export.h"
 #include "ui/gfx/gpu_memory_buffer.h"
diff --git a/media/gpu/vaapi/vaapi_video_decoder.h b/media/gpu/vaapi/vaapi_video_decoder.h
index 26f279a..6c4b36e 100644
--- a/media/gpu/vaapi/vaapi_video_decoder.h
+++ b/media/gpu/vaapi/vaapi_video_decoder.h
@@ -19,6 +19,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "build/chromeos_buildflags.h"
 #include "media/base/callback_registry.h"
diff --git a/media/gpu/video_decode_accelerator_perf_tests.cc b/media/gpu/video_decode_accelerator_perf_tests.cc
index e81d6c7..15c6732a 100644
--- a/media/gpu/video_decode_accelerator_perf_tests.cc
+++ b/media/gpu/video_decode_accelerator_perf_tests.cc
@@ -265,54 +265,46 @@
   output_folder_path = base::MakeAbsoluteFilePath(output_folder_path);
 
   // Write performance metrics to json.
-  base::Value metrics(base::Value::Type::DICT);
-  metrics.SetKey(
-      "FramesDecoded",
-      base::Value(base::checked_cast<int>(perf_metrics_.frames_decoded_)));
-  metrics.SetKey("TotalDurationMs",
-                 base::Value(perf_metrics_.total_duration_.InMillisecondsF()));
-  metrics.SetKey("FPS", base::Value(perf_metrics_.frames_per_second_));
-  metrics.SetKey(
-      "FramesDropped",
-      base::Value(base::checked_cast<int>(perf_metrics_.frames_dropped_)));
-  metrics.SetKey("DroppedFramePercentage",
-                 base::Value(perf_metrics_.dropped_frame_percentage_));
-  metrics.SetKey("FrameDeliveryTimeAverage",
-                 base::Value(perf_metrics_.delivery_time_stats_.avg_ms_));
-  metrics.SetKey(
-      "FrameDeliveryTimePercentile25",
-      base::Value(perf_metrics_.delivery_time_stats_.percentile_25_ms_));
-  metrics.SetKey(
-      "FrameDeliveryTimePercentile50",
-      base::Value(perf_metrics_.delivery_time_stats_.percentile_50_ms_));
-  metrics.SetKey(
-      "FrameDeliveryTimePercentile75",
-      base::Value(perf_metrics_.delivery_time_stats_.percentile_75_ms_));
-  metrics.SetKey("FrameDecodeTimeAverage",
-                 base::Value(perf_metrics_.decode_time_stats_.avg_ms_));
-  metrics.SetKey(
-      "FrameDecodeTimePercentile25",
-      base::Value(perf_metrics_.decode_time_stats_.percentile_25_ms_));
-  metrics.SetKey(
-      "FrameDecodeTimePercentile50",
-      base::Value(perf_metrics_.decode_time_stats_.percentile_50_ms_));
-  metrics.SetKey(
-      "FrameDecodeTimePercentile75",
-      base::Value(perf_metrics_.decode_time_stats_.percentile_75_ms_));
+  base::Value::Dict metrics;
+  metrics.Set("FramesDecoded",
+              base::checked_cast<int>(perf_metrics_.frames_decoded_));
+  metrics.Set("TotalDurationMs",
+              perf_metrics_.total_duration_.InMillisecondsF());
+  metrics.Set("FPS", perf_metrics_.frames_per_second_);
+  metrics.Set("FramesDropped",
+              base::checked_cast<int>(perf_metrics_.frames_dropped_));
+  metrics.Set("DroppedFramePercentage",
+              perf_metrics_.dropped_frame_percentage_);
+  metrics.Set("FrameDeliveryTimeAverage",
+              perf_metrics_.delivery_time_stats_.avg_ms_);
+  metrics.Set("FrameDeliveryTimePercentile25",
+              perf_metrics_.delivery_time_stats_.percentile_25_ms_);
+  metrics.Set("FrameDeliveryTimePercentile50",
+              perf_metrics_.delivery_time_stats_.percentile_50_ms_);
+  metrics.Set("FrameDeliveryTimePercentile75",
+              perf_metrics_.delivery_time_stats_.percentile_75_ms_);
+  metrics.Set("FrameDecodeTimeAverage",
+              perf_metrics_.decode_time_stats_.avg_ms_);
+  metrics.Set("FrameDecodeTimePercentile25",
+              perf_metrics_.decode_time_stats_.percentile_25_ms_);
+  metrics.Set("FrameDecodeTimePercentile50",
+              perf_metrics_.decode_time_stats_.percentile_50_ms_);
+  metrics.Set("FrameDecodeTimePercentile75",
+              perf_metrics_.decode_time_stats_.percentile_75_ms_);
 
   // Write frame delivery times to json.
-  base::Value delivery_times(base::Value::Type::LIST);
+  base::Value::List delivery_times;
   for (double frame_delivery_time : frame_delivery_times_) {
     delivery_times.Append(frame_delivery_time);
   }
-  metrics.SetKey("FrameDeliveryTimes", std::move(delivery_times));
+  metrics.Set("FrameDeliveryTimes", std::move(delivery_times));
 
   // Write frame decodes times to json.
-  base::Value decode_times(base::Value::Type::LIST);
+  base::Value::List decode_times;
   for (double frame_decode_time : frame_decode_times_) {
     decode_times.Append(frame_decode_time);
   }
-  metrics.SetKey("FrameDecodeTimes", std::move(decode_times));
+  metrics.Set("FrameDecodeTimes", std::move(decode_times));
 
   // Write json to file.
   std::string metrics_str;
diff --git a/media/gpu/video_encode_accelerator_perf_tests.cc b/media/gpu/video_encode_accelerator_perf_tests.cc
index 223bcb9..b8ca24d 100644
--- a/media/gpu/video_encode_accelerator_perf_tests.cc
+++ b/media/gpu/video_encode_accelerator_perf_tests.cc
@@ -264,42 +264,40 @@
   output_folder_path = base::MakeAbsoluteFilePath(output_folder_path);
 
   // Write performance metrics to json.
-  base::Value metrics(base::Value::Type::DICT);
-  metrics.SetKey("BitstreamsEncoded",
-                 base::Value(base::checked_cast<int>(bitstreams_encoded_)));
-  metrics.SetKey("TotalDurationMs",
-                 base::Value(total_duration_.InMillisecondsF()));
-  metrics.SetKey("FPS", base::Value(bitstreams_per_second_));
-  metrics.SetKey("BitstreamDeliveryTimeAverage",
-                 base::Value(bitstream_delivery_stats_.avg_ms_));
-  metrics.SetKey("BitstreamDeliveryTimePercentile25",
-                 base::Value(bitstream_delivery_stats_.percentile_25_ms_));
-  metrics.SetKey("BitstreamDeliveryTimePercentile50",
-                 base::Value(bitstream_delivery_stats_.percentile_50_ms_));
-  metrics.SetKey("BitstreamDeliveryTimePercentile75",
-                 base::Value(bitstream_delivery_stats_.percentile_75_ms_));
-  metrics.SetKey("BitstreamEncodeTimeAverage",
-                 base::Value(bitstream_encode_stats_.avg_ms_));
-  metrics.SetKey("BitstreamEncodeTimePercentile25",
-                 base::Value(bitstream_encode_stats_.percentile_25_ms_));
-  metrics.SetKey("BitstreamEncodeTimePercentile50",
-                 base::Value(bitstream_encode_stats_.percentile_50_ms_));
-  metrics.SetKey("BitstreamEncodeTimePercentile75",
-                 base::Value(bitstream_encode_stats_.percentile_75_ms_));
+  base::Value::Dict metrics;
+  metrics.Set("BitstreamsEncoded",
+              base::checked_cast<int>(bitstreams_encoded_));
+  metrics.Set("TotalDurationMs", total_duration_.InMillisecondsF());
+  metrics.Set("FPS", bitstreams_per_second_);
+  metrics.Set("BitstreamDeliveryTimeAverage",
+              bitstream_delivery_stats_.avg_ms_);
+  metrics.Set("BitstreamDeliveryTimePercentile25",
+              bitstream_delivery_stats_.percentile_25_ms_);
+  metrics.Set("BitstreamDeliveryTimePercentile50",
+              bitstream_delivery_stats_.percentile_50_ms_);
+  metrics.Set("BitstreamDeliveryTimePercentile75",
+              bitstream_delivery_stats_.percentile_75_ms_);
+  metrics.Set("BitstreamEncodeTimeAverage", bitstream_encode_stats_.avg_ms_);
+  metrics.Set("BitstreamEncodeTimePercentile25",
+              bitstream_encode_stats_.percentile_25_ms_);
+  metrics.Set("BitstreamEncodeTimePercentile50",
+              bitstream_encode_stats_.percentile_50_ms_);
+  metrics.Set("BitstreamEncodeTimePercentile75",
+              bitstream_encode_stats_.percentile_75_ms_);
 
   // Write bitstream delivery times to json.
-  base::Value delivery_times(base::Value::Type::LIST);
+  base::Value::List delivery_times;
   for (double bitstream_delivery_time : bitstream_delivery_times_) {
     delivery_times.Append(bitstream_delivery_time);
   }
-  metrics.SetKey("BitstreamDeliveryTimes", std::move(delivery_times));
+  metrics.Set("BitstreamDeliveryTimes", std::move(delivery_times));
 
   // Write bitstream encodes times to json.
-  base::Value encode_times(base::Value::Type::LIST);
+  base::Value::List encode_times;
   for (double bitstream_encode_time : bitstream_encode_times_) {
     encode_times.Append(bitstream_encode_time);
   }
-  metrics.SetKey("BitstreamEncodeTimes", std::move(encode_times));
+  metrics.Set("BitstreamEncodeTimes", std::move(encode_times));
 
   // Write json to file.
   std::string metrics_str;
@@ -499,44 +497,40 @@
     base::CreateDirectory(output_folder_path);
   output_folder_path = base::MakeAbsoluteFilePath(output_folder_path);
   // Write quality metrics to json.
-  base::Value metrics(base::Value::Type::DICT);
+  base::Value::Dict metrics;
   if (!svc_text.empty())
-    metrics.SetKey("SVC", base::Value(svc_text));
-  metrics.SetKey("Bitrate",
-                 base::Value(base::checked_cast<int>(actual_bitrate)));
-  metrics.SetKey(
-      "BitrateDeviation",
-      base::Value((actual_bitrate * 100.0 / target_bitrate) - 100.0));
-  metrics.SetKey("SSIMAverage", base::Value(ssim_stats.avg));
-  metrics.SetKey("PSNRAverage", base::Value(psnr_stats.avg));
-  metrics.SetKey("BottomRowPSNRAverage",
-                 base::Value(bottom_row_psnr_stats.avg));
-  metrics.SetKey("LogLikelihoodRatioAverage",
-                 base::Value(log_likelihood_stats.avg));
+    metrics.Set("SVC", svc_text);
+  metrics.Set("Bitrate", base::checked_cast<int>(actual_bitrate));
+  metrics.Set("BitrateDeviation",
+              (actual_bitrate * 100.0 / target_bitrate) - 100.0);
+  metrics.Set("SSIMAverage", ssim_stats.avg);
+  metrics.Set("PSNRAverage", psnr_stats.avg);
+  metrics.Set("BottomRowPSNRAverage", bottom_row_psnr_stats.avg);
+  metrics.Set("LogLikelihoodRatioAverage", log_likelihood_stats.avg);
   // Write ssim values bitstream delivery times to json.
-  base::Value ssim_values(base::Value::Type::LIST);
+  base::Value::List ssim_values;
   for (double value : ssim_stats.values_in_order)
     ssim_values.Append(value);
-  metrics.SetKey("SSIMValues", std::move(ssim_values));
+  metrics.Set("SSIMValues", std::move(ssim_values));
 
   // Write psnr values to json.
-  base::Value psnr_values(base::Value::Type::LIST);
+  base::Value::List psnr_values;
   for (double value : psnr_stats.values_in_order)
     psnr_values.Append(value);
-  metrics.SetKey("PSNRValues", std::move(psnr_values));
+  metrics.Set("PSNRValues", std::move(psnr_values));
 
   // Write bottom row psnr values to json.
-  base::Value bottom_row_psnr_values(base::Value::Type::LIST);
+  base::Value::List bottom_row_psnr_values;
   for (double value : bottom_row_psnr_stats.values_in_order)
     bottom_row_psnr_values.Append(value);
-  metrics.SetKey("BottomRowPSNRValues", std::move(bottom_row_psnr_values));
+  metrics.Set("BottomRowPSNRValues", std::move(bottom_row_psnr_values));
 
   // Write log likelihood ratio values to json.
-  base::Value log_likelihood_values(base::Value::Type::LIST);
+  base::Value::List log_likelihood_values;
   for (double value : log_likelihood_stats.values_in_order) {
     log_likelihood_values.Append(value);
   }
-  metrics.SetKey("LogLikelihoodRatioValues", std::move(log_likelihood_values));
+  metrics.Set("LogLikelihoodRatioValues", std::move(log_likelihood_values));
 
   // Write json to file.
   std::string metrics_str;
diff --git a/media/gpu/windows/d3d11_copying_texture_wrapper.cc b/media/gpu/windows/d3d11_copying_texture_wrapper.cc
index 15162d0..aa63345c 100644
--- a/media/gpu/windows/d3d11_copying_texture_wrapper.cc
+++ b/media/gpu/windows/d3d11_copying_texture_wrapper.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/service/mailbox_manager.h"
 #include "media/gpu/windows/d3d11_com_defs.h"
 #include "ui/gl/hdr_metadata_helper_win.h"
diff --git a/media/gpu/windows/d3d11_copying_texture_wrapper.h b/media/gpu/windows/d3d11_copying_texture_wrapper.h
index 47a5f21..cccc8a9 100644
--- a/media/gpu/windows/d3d11_copying_texture_wrapper.h
+++ b/media/gpu/windows/d3d11_copying_texture_wrapper.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <vector>
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/gpu/media_gpu_export.h"
 #include "media/gpu/windows/d3d11_picture_buffer.h"
 #include "media/gpu/windows/d3d11_status.h"
diff --git a/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc b/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc
index c066ea2c..24924c0 100644
--- a/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc
+++ b/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "media/gpu/windows/d3d11_copying_texture_wrapper.h"
 #include "media/gpu/windows/d3d11_texture_wrapper.h"
diff --git a/media/gpu/windows/d3d11_picture_buffer.cc b/media/gpu/windows/d3d11_picture_buffer.cc
index e0929db..6a976d2 100644
--- a/media/gpu/windows/d3d11_picture_buffer.cc
+++ b/media/gpu/windows/d3d11_picture_buffer.cc
@@ -12,6 +12,8 @@
 #include <memory>
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/service/mailbox_manager.h"
 #include "gpu/command_buffer/service/texture_manager.h"
 #include "media/base/media_log.h"
diff --git a/media/gpu/windows/d3d11_picture_buffer.h b/media/gpu/windows/d3d11_picture_buffer.h
index 266840f..bbce970 100644
--- a/media/gpu/windows/d3d11_picture_buffer.h
+++ b/media/gpu/windows/d3d11_picture_buffer.h
@@ -12,6 +12,8 @@
 #include <vector>
 
 #include "base/memory/ref_counted_delete_on_sequence.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "gpu/command_buffer/service/mailbox_manager.h"
 #include "gpu/command_buffer/service/texture_manager.h"
diff --git a/media/gpu/windows/d3d11_texture_wrapper.cc b/media/gpu/windows/d3d11_texture_wrapper.cc
index 263fdd3..2088bcd 100644
--- a/media/gpu/windows/d3d11_texture_wrapper.cc
+++ b/media/gpu/windows/d3d11_texture_wrapper.cc
@@ -9,6 +9,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/task/single_thread_task_runner.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "gpu/command_buffer/common/constants.h"
 #include "gpu/command_buffer/common/shared_image_usage.h"
diff --git a/media/gpu/windows/d3d11_texture_wrapper.h b/media/gpu/windows/d3d11_texture_wrapper.h
index 1e0fde475..5f88d60 100644
--- a/media/gpu/windows/d3d11_texture_wrapper.h
+++ b/media/gpu/windows/d3d11_texture_wrapper.h
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "gpu/command_buffer/service/mailbox_manager.h"
 #include "gpu/command_buffer/service/texture_manager.h"
diff --git a/media/gpu/windows/d3d11_video_decoder.cc b/media/gpu/windows/d3d11_video_decoder.cc
index 75d90cf..1f04bdf 100644
--- a/media/gpu/windows/d3d11_video_decoder.cc
+++ b/media/gpu/windows/d3d11_video_decoder.cc
@@ -19,6 +19,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/decoder_buffer.h"
diff --git a/media/gpu/windows/d3d11_video_decoder_unittest.cc b/media/gpu/windows/d3d11_video_decoder_unittest.cc
index 4a50aa78..25ae66f 100644
--- a/media/gpu/windows/d3d11_video_decoder_unittest.cc
+++ b/media/gpu/windows/d3d11_video_decoder_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/win/scoped_com_initializer.h"
 #include "base/win/windows_version.h"
 #include "media/base/decoder_buffer.h"
diff --git a/media/gpu/windows/dxva_video_decode_accelerator_win.h b/media/gpu/windows/dxva_video_decode_accelerator_win.h
index 3c6ea509..073fe987 100644
--- a/media/gpu/windows/dxva_video_decode_accelerator_win.h
+++ b/media/gpu/windows/dxva_video_decode_accelerator_win.h
@@ -22,6 +22,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "gpu/config/gpu_preferences.h"
 #include "media/base/video_color_space.h"
diff --git a/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc b/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
index a6d566c..6b41c135 100644
--- a/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
+++ b/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
@@ -23,7 +23,6 @@
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "base/win/scoped_co_mem.h"
diff --git a/media/gpu/windows/media_foundation_video_encode_accelerator_win.h b/media/gpu/windows/media_foundation_video_encode_accelerator_win.h
index c046180..4b1f67a 100644
--- a/media/gpu/windows/media_foundation_video_encode_accelerator_win.h
+++ b/media/gpu/windows/media_foundation_video_encode_accelerator_win.h
@@ -16,6 +16,7 @@
 #include "base/bind.h"
 #include "base/containers/circular_deque.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/win/windows_types.h"
diff --git a/media/gpu/windows/mf_audio_encoder.cc b/media/gpu/windows/mf_audio_encoder.cc
index d679de3a0..8eddd14 100644
--- a/media/gpu/windows/mf_audio_encoder.cc
+++ b/media/gpu/windows/mf_audio_encoder.cc
@@ -19,6 +19,7 @@
 #include "base/containers/contains.h"
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
diff --git a/media/learning/impl/learning_session_impl.cc b/media/learning/impl/learning_session_impl.cc
index 4f69021..987d631 100644
--- a/media/learning/impl/learning_session_impl.cc
+++ b/media/learning/impl/learning_session_impl.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/check.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/learning/impl/distribution_reporter.h"
 #include "media/learning/impl/learning_task_controller_impl.h"
 
diff --git a/media/midi/task_service_unittest.cc b/media/midi/task_service_unittest.cc
index d8dee857..7ca32dd 100644
--- a/media/midi/task_service_unittest.cc
+++ b/media/midi/task_service_unittest.cc
@@ -13,8 +13,8 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/media/mojo/clients/mojo_audio_decoder.cc b/media/mojo/clients/mojo_audio_decoder.cc
index 7cd077df6..118c947 100644
--- a/media/mojo/clients/mojo_audio_decoder.cc
+++ b/media/mojo/clients/mojo_audio_decoder.cc
@@ -9,7 +9,6 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/cdm_context.h"
diff --git a/media/mojo/clients/mojo_audio_encoder.cc b/media/mojo/clients/mojo_audio_encoder.cc
index 857d4989..7324292 100644
--- a/media/mojo/clients/mojo_audio_encoder.cc
+++ b/media/mojo/clients/mojo_audio_encoder.cc
@@ -8,7 +8,6 @@
 #include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "media/base/audio_buffer.h"
 #include "media/mojo/common/media_type_converters.h"
diff --git a/media/mojo/clients/mojo_decoder_factory.h b/media/mojo/clients/mojo_decoder_factory.h
index af40ae2..cb890cfd 100644
--- a/media/mojo/clients/mojo_decoder_factory.h
+++ b/media/mojo/clients/mojo_decoder_factory.h
@@ -6,6 +6,7 @@
 #define MEDIA_MOJO_CLIENTS_MOJO_DECODER_FACTORY_H_
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "media/base/decoder_factory.h"
 
diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc
index 06b70b17..a44a39b 100644
--- a/media/mojo/clients/mojo_renderer.cc
+++ b/media/mojo/clients/mojo_renderer.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "media/base/cdm_context.h"
 #include "media/base/media_resource.h"
diff --git a/media/mojo/clients/mojo_renderer.h b/media/mojo/clients/mojo_renderer.h
index c0e7c7e9..5d849a8 100644
--- a/media/mojo/clients/mojo_renderer.h
+++ b/media/mojo/clients/mojo_renderer.h
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/unguessable_token.h"
 #include "media/base/demuxer_stream.h"
diff --git a/media/mojo/clients/mojo_renderer_factory.cc b/media/mojo/clients/mojo_renderer_factory.cc
index cafc8ef..703e147 100644
--- a/media/mojo/clients/mojo_renderer_factory.cc
+++ b/media/mojo/clients/mojo_renderer_factory.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/mojo/clients/mojo_renderer.h"
diff --git a/media/mojo/clients/mojo_renderer_factory.h b/media/mojo/clients/mojo_renderer_factory.h
index 7a52cbd..9b8a5e3 100644
--- a/media/mojo/clients/mojo_renderer_factory.h
+++ b/media/mojo/clients/mojo_renderer_factory.h
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/renderer_factory.h"
 #include "media/mojo/buildflags.h"
diff --git a/media/mojo/clients/win/media_foundation_renderer_client.cc b/media/mojo/clients/win/media_foundation_renderer_client.cc
index be97084..c2abff2 100644
--- a/media/mojo/clients/win/media_foundation_renderer_client.cc
+++ b/media/mojo/clients/win/media_foundation_renderer_client.cc
@@ -8,6 +8,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_log.h"
 #include "media/base/win/mf_feature_checks.h"
 #include "media/base/win/mf_helpers.h"
diff --git a/media/mojo/clients/win/media_foundation_renderer_client.h b/media/mojo/clients/win/media_foundation_renderer_client.h
index 08cab88..1eb8a7d 100644
--- a/media/mojo/clients/win/media_foundation_renderer_client.h
+++ b/media/mojo/clients/win/media_foundation_renderer_client.h
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "gpu/ipc/common/gpu_channel.mojom.h"
diff --git a/media/mojo/clients/win/media_foundation_renderer_client_factory.cc b/media/mojo/clients/win/media_foundation_renderer_client_factory.cc
index 49edef5..df5d55a 100644
--- a/media/mojo/clients/win/media_foundation_renderer_client_factory.cc
+++ b/media/mojo/clients/win/media_foundation_renderer_client_factory.cc
@@ -4,6 +4,7 @@
 
 #include "media/mojo/clients/win/media_foundation_renderer_client_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/win/dcomp_texture_wrapper.h"
 #include "media/base/win/mf_feature_checks.h"
 #include "media/base/win/mf_helpers.h"
diff --git a/media/mojo/common/mojo_decoder_buffer_converter.cc b/media/mojo/common/mojo_decoder_buffer_converter.cc
index e5f534a..0da8239 100644
--- a/media/mojo/common/mojo_decoder_buffer_converter.cc
+++ b/media/mojo/common/mojo_decoder_buffer_converter.cc
@@ -12,7 +12,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/cdm_context.h"
 #include "media/base/decoder_buffer.h"
diff --git a/media/mojo/services/android_mojo_media_client.cc b/media/mojo/services/android_mojo_media_client.cc
index 82f5ca73..4870c763 100644
--- a/media/mojo/services/android_mojo_media_client.cc
+++ b/media/mojo/services/android_mojo_media_client.cc
@@ -9,6 +9,7 @@
 #include <memory>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/android/android_cdm_factory.h"
 #include "media/base/audio_decoder.h"
 #include "media/base/cdm_factory.h"
diff --git a/media/mojo/services/gpu_mojo_media_client.cc b/media/mojo/services/gpu_mojo_media_client.cc
index b652bfa..9638640 100644
--- a/media/mojo/services/gpu_mojo_media_client.cc
+++ b/media/mojo/services/gpu_mojo_media_client.cc
@@ -10,6 +10,8 @@
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "gpu/ipc/service/gpu_channel.h"
diff --git a/media/mojo/services/gpu_mojo_media_client.h b/media/mojo/services/gpu_mojo_media_client.h
index 3d5276b..afc02d6 100644
--- a/media/mojo/services/gpu_mojo_media_client.h
+++ b/media/mojo/services/gpu_mojo_media_client.h
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
diff --git a/media/mojo/services/gpu_mojo_media_client_android.cc b/media/mojo/services/gpu_mojo_media_client_android.cc
index 781adfb4..7080dbe 100644
--- a/media/mojo/services/gpu_mojo_media_client_android.cc
+++ b/media/mojo/services/gpu_mojo_media_client_android.cc
@@ -5,6 +5,8 @@
 #include "media/mojo/services/gpu_mojo_media_client.h"
 
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/service/ref_counted_lock.h"
 #include "gpu/config/gpu_finch_features.h"
 #include "media/base/android/android_cdm_factory.h"
diff --git a/media/mojo/services/gpu_mojo_media_client_cros.cc b/media/mojo/services/gpu_mojo_media_client_cros.cc
index f1d7c63..7cc7e9d 100644
--- a/media/mojo/services/gpu_mojo_media_client_cros.cc
+++ b/media/mojo/services/gpu_mojo_media_client_cros.cc
@@ -5,6 +5,8 @@
 #include "media/mojo/services/gpu_mojo_media_client.h"
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/audio_decoder.h"
 #include "media/base/audio_encoder.h"
diff --git a/media/mojo/services/gpu_mojo_media_client_mac.cc b/media/mojo/services/gpu_mojo_media_client_mac.cc
index ea9341c4..7ddaadc 100644
--- a/media/mojo/services/gpu_mojo_media_client_mac.cc
+++ b/media/mojo/services/gpu_mojo_media_client_mac.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "media/base/audio_decoder.h"
 #include "media/base/offloading_audio_encoder.h"
diff --git a/media/mojo/services/gpu_mojo_media_client_stubs.cc b/media/mojo/services/gpu_mojo_media_client_stubs.cc
index df0dde6d..99022616 100644
--- a/media/mojo/services/gpu_mojo_media_client_stubs.cc
+++ b/media/mojo/services/gpu_mojo_media_client_stubs.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_decoder.h"
 #include "media/base/audio_encoder.h"
 #include "media/base/video_decoder.h"
diff --git a/media/mojo/services/gpu_mojo_media_client_win.cc b/media/mojo/services/gpu_mojo_media_client_win.cc
index d8bb56b..c0cadd4 100644
--- a/media/mojo/services/gpu_mojo_media_client_win.cc
+++ b/media/mojo/services/gpu_mojo_media_client_win.cc
@@ -4,6 +4,8 @@
 
 #include "media/mojo/services/gpu_mojo_media_client.h"
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/win/windows_version.h"
 #include "media/base/audio_decoder.h"
diff --git a/media/mojo/services/media_foundation_mojo_media_client.cc b/media/mojo/services/media_foundation_mojo_media_client.cc
index 2279639..bee38432 100644
--- a/media/mojo/services/media_foundation_mojo_media_client.cc
+++ b/media/mojo/services/media_foundation_mojo_media_client.cc
@@ -4,6 +4,7 @@
 
 #include "media/mojo/services/media_foundation_mojo_media_client.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/win/mf_helpers.h"
 #include "media/cdm/win/media_foundation_cdm_factory.h"
 #include "media/mojo/services/media_foundation_renderer_wrapper.h"
diff --git a/media/mojo/services/media_foundation_renderer_wrapper.cc b/media/mojo/services/media_foundation_renderer_wrapper.cc
index 19dd478..7e2d15b 100644
--- a/media/mojo/services/media_foundation_renderer_wrapper.cc
+++ b/media/mojo/services/media_foundation_renderer_wrapper.cc
@@ -5,6 +5,7 @@
 #include "media/mojo/services/media_foundation_renderer_wrapper.h"
 
 #include "base/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/win/mf_helpers.h"
 #include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "media/mojo/services/media_foundation_gpu_info_monitor.h"
diff --git a/media/mojo/services/media_foundation_renderer_wrapper.h b/media/mojo/services/media_foundation_renderer_wrapper.h
index 358117a..3e000ed 100644
--- a/media/mojo/services/media_foundation_renderer_wrapper.h
+++ b/media/mojo/services/media_foundation_renderer_wrapper.h
@@ -9,6 +9,7 @@
 #include "base/callback_list.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_resource.h"
 #include "media/base/pipeline_status.h"
 #include "media/base/renderer.h"
diff --git a/media/mojo/services/media_service_factory.cc b/media/mojo/services/media_service_factory.cc
index f6341e8..72f264a6 100644
--- a/media/mojo/services/media_service_factory.cc
+++ b/media/mojo/services/media_service_factory.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/mojo/buildflags.h"
 #include "media/mojo/services/gpu_mojo_media_client.h"
diff --git a/media/mojo/services/mojo_demuxer_stream_adapter_unittest.cc b/media/mojo/services/mojo_demuxer_stream_adapter_unittest.cc
index 6ff5ac65..3eef121 100644
--- a/media/mojo/services/mojo_demuxer_stream_adapter_unittest.cc
+++ b/media/mojo/services/mojo_demuxer_stream_adapter_unittest.cc
@@ -5,6 +5,7 @@
 #include <memory>
 
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
diff --git a/media/mojo/services/mojo_media_client.cc b/media/mojo/services/mojo_media_client.cc
index 8951578..aa6a5893 100644
--- a/media/mojo/services/mojo_media_client.cc
+++ b/media/mojo/services/mojo_media_client.cc
@@ -4,6 +4,7 @@
 
 #include "media/mojo/services/mojo_media_client.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/audio_decoder.h"
diff --git a/media/mojo/services/mojo_media_client.h b/media/mojo/services/mojo_media_client.h
index d30216f..ef854b1 100644
--- a/media/mojo/services/mojo_media_client.h
+++ b/media/mojo/services/mojo_media_client.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
 #include "media/base/overlay_info.h"
diff --git a/media/mojo/services/mojo_media_log.cc b/media/mojo/services/mojo_media_log.cc
index f7c7339..b8c54dfc 100644
--- a/media/mojo/services/mojo_media_log.cc
+++ b/media/mojo/services/mojo_media_log.cc
@@ -6,7 +6,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace media {
 
diff --git a/media/mojo/services/mojo_video_encode_accelerator_provider.cc b/media/mojo/services/mojo_video_encode_accelerator_provider.cc
index 7a4d036..325a5ff 100644
--- a/media/mojo/services/mojo_video_encode_accelerator_provider.cc
+++ b/media/mojo/services/mojo_video_encode_accelerator_provider.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/limits.h"
 #include "media/gpu/gpu_video_encode_accelerator_factory.h"
diff --git a/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc b/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc
index 17deabc..530a69f8 100644
--- a/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc
+++ b/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
 #include "gpu/config/gpu_info.h"
diff --git a/media/mojo/services/stable_video_decoder_factory_service.cc b/media/mojo/services/stable_video_decoder_factory_service.cc
index 030f2a44..85ae9091 100644
--- a/media/mojo/services/stable_video_decoder_factory_service.cc
+++ b/media/mojo/services/stable_video_decoder_factory_service.cc
@@ -5,6 +5,7 @@
 #include "media/mojo/services/stable_video_decoder_factory_service.h"
 
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "components/viz/common/switches.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
diff --git a/media/mojo/services/test_mojo_media_client.cc b/media/mojo/services/test_mojo_media_client.cc
index 7cb2fa8..1c019e8 100644
--- a/media/mojo/services/test_mojo_media_client.cc
+++ b/media/mojo/services/test_mojo_media_client.cc
@@ -8,7 +8,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/audio/audio_device_description.h"
 #include "media/audio/audio_manager.h"
diff --git a/media/mojo/services/test_mojo_media_client.h b/media/mojo/services/test_mojo_media_client.h
index 51b3b2bb..7b24029 100644
--- a/media/mojo/services/test_mojo_media_client.h
+++ b/media/mojo/services/test_mojo_media_client.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/media_buildflags.h"
 #include "media/mojo/services/mojo_media_client.h"
 
diff --git a/media/mojo/services/watch_time_recorder_unittest.cc b/media/mojo/services/watch_time_recorder_unittest.cc
index d0388c6e..56eaaebc1 100644
--- a/media/mojo/services/watch_time_recorder_unittest.cc
+++ b/media/mojo/services/watch_time_recorder_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_message_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "media/base/video_codecs.h"
diff --git a/media/mojo/services/webrtc_video_perf_mojolpm_fuzzer.cc b/media/mojo/services/webrtc_video_perf_mojolpm_fuzzer.cc
index 4ed160b2..22b893a 100644
--- a/media/mojo/services/webrtc_video_perf_mojolpm_fuzzer.cc
+++ b/media/mojo/services/webrtc_video_perf_mojolpm_fuzzer.cc
@@ -8,6 +8,7 @@
 #include "base/command_line.h"
 #include "base/logging.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
 #include "components/leveldb_proto/testing/fake_db.h"
@@ -223,4 +224,4 @@
   main_run_loop.Run();
 }
 
-}  // namespace media
\ No newline at end of file
+}  // namespace media
diff --git a/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc b/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc
index 46d07e7..886731f 100644
--- a/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc
+++ b/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc
@@ -10,6 +10,7 @@
 #include "base/memory/read_only_shared_memory_region.h"
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gtest_util.h"
 #include "base/test/task_environment.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
diff --git a/media/remoting/courier_renderer.cc b/media/remoting/courier_renderer.cc
index a608ea32..8f750dc 100644
--- a/media/remoting/courier_renderer.cc
+++ b/media/remoting/courier_renderer.cc
@@ -13,6 +13,7 @@
 #include "base/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/numerics/safe_math.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
diff --git a/media/remoting/courier_renderer.h b/media/remoting/courier_renderer.h
index ab1ce7a..b7c2231 100644
--- a/media/remoting/courier_renderer.h
+++ b/media/remoting/courier_renderer.h
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/media/remoting/courier_renderer_factory.cc b/media/remoting/courier_renderer_factory.cc
index 7d497701..2bda8801 100644
--- a/media/remoting/courier_renderer_factory.cc
+++ b/media/remoting/courier_renderer_factory.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/check.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
 #include "media/base/overlay_info.h"
diff --git a/media/remoting/courier_renderer_factory.h b/media/remoting/courier_renderer_factory.h
index 8d6c391..bdfcf408 100644
--- a/media/remoting/courier_renderer_factory.h
+++ b/media/remoting/courier_renderer_factory.h
@@ -5,6 +5,7 @@
 #ifndef MEDIA_REMOTING_COURIER_RENDERER_FACTORY_H_
 #define MEDIA_REMOTING_COURIER_RENDERER_FACTORY_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/renderer_factory.h"
 #include "media/remoting/renderer_controller.h"
 
diff --git a/media/remoting/receiver.cc b/media/remoting/receiver.cc
index 51f38ca..cf5da36a 100644
--- a/media/remoting/receiver.cc
+++ b/media/remoting/receiver.cc
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/notreached.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/cast_streaming/public/remoting_message_factories.h"
 #include "components/cast_streaming/public/remoting_proto_enum_utils.h"
diff --git a/media/remoting/receiver.h b/media/remoting/receiver.h
index 9eba259..de03679 100644
--- a/media/remoting/receiver.h
+++ b/media/remoting/receiver.h
@@ -11,6 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/timer/timer.h"
 #include "components/cast_streaming/public/rpc_call_message_handler.h"
diff --git a/media/remoting/receiver_controller.h b/media/remoting/receiver_controller.h
index 105727d..f847467 100644
--- a/media/remoting/receiver_controller.h
+++ b/media/remoting/receiver_controller.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/media/remoting/receiver_unittest.cc b/media/remoting/receiver_unittest.cc
index 4a85732..8ddfcde8 100644
--- a/media/remoting/receiver_unittest.cc
+++ b/media/remoting/receiver_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/check.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
 #include "components/cast_streaming/public/remoting_proto_enum_utils.h"
diff --git a/media/remoting/remoting_renderer_factory.cc b/media/remoting/remoting_renderer_factory.cc
index c3d5489..e937034 100644
--- a/media/remoting/remoting_renderer_factory.cc
+++ b/media/remoting/remoting_renderer_factory.cc
@@ -5,6 +5,7 @@
 #include "media/remoting/remoting_renderer_factory.h"
 
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/cast_streaming/public/remoting_message_factories.h"
 #include "media/base/demuxer.h"
 #include "media/remoting/receiver.h"
diff --git a/media/remoting/stream_provider.cc b/media/remoting/stream_provider.cc
index b77fca4..7f3dd65 100644
--- a/media/remoting/stream_provider.cc
+++ b/media/remoting/stream_provider.cc
@@ -11,6 +11,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/logging.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "components/cast_streaming/public/remoting_proto_enum_utils.h"
 #include "components/cast_streaming/public/remoting_proto_utils.h"
diff --git a/media/remoting/stream_provider_unittest.cc b/media/remoting/stream_provider_unittest.cc
index 34ae1da..ba8dd993 100644
--- a/media/remoting/stream_provider_unittest.cc
+++ b/media/remoting/stream_provider_unittest.cc
@@ -5,6 +5,7 @@
 #include "media/remoting/stream_provider.h"
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "components/cast_streaming/public/remoting_proto_enum_utils.h"
 #include "components/cast_streaming/public/remoting_proto_utils.h"
diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc
index 6c80abe..301f77f 100644
--- a/media/renderers/audio_renderer_impl.cc
+++ b/media/renderers/audio_renderer_impl.cc
@@ -18,6 +18,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/power_monitor/power_monitor.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
diff --git a/media/renderers/decrypting_renderer.cc b/media/renderers/decrypting_renderer.cc
index 27f87970..df26ad7 100644
--- a/media/renderers/decrypting_renderer.cc
+++ b/media/renderers/decrypting_renderer.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/cdm_context.h"
 #include "media/base/demuxer_stream.h"
 #include "media/base/media_log.h"
diff --git a/media/renderers/decrypting_renderer.h b/media/renderers/decrypting_renderer.h
index 92a566a..9efa1960 100644
--- a/media/renderers/decrypting_renderer.h
+++ b/media/renderers/decrypting_renderer.h
@@ -11,6 +11,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "media/base/pipeline.h"
 #include "media/base/renderer.h"
diff --git a/media/renderers/decrypting_renderer_factory.cc b/media/renderers/decrypting_renderer_factory.cc
index e235efbd4..4826de2 100644
--- a/media/renderers/decrypting_renderer_factory.cc
+++ b/media/renderers/decrypting_renderer_factory.cc
@@ -4,6 +4,7 @@
 
 #include "media/renderers/decrypting_renderer_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_log.h"
 #include "media/renderers/decrypting_renderer.h"
 
diff --git a/media/renderers/decrypting_renderer_factory.h b/media/renderers/decrypting_renderer_factory.h
index 9b44894..4be8a770 100644
--- a/media/renderers/decrypting_renderer_factory.h
+++ b/media/renderers/decrypting_renderer_factory.h
@@ -7,6 +7,7 @@
 
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/media_export.h"
 #include "media/base/renderer_factory.h"
 
diff --git a/media/renderers/default_decoder_factory.h b/media/renderers/default_decoder_factory.h
index ad55a60..6989dc8 100644
--- a/media/renderers/default_decoder_factory.h
+++ b/media/renderers/default_decoder_factory.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/decoder_factory.h"
 #include "media/base/media_export.h"
 
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index 3ea93c0..200bcf3 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -15,6 +15,7 @@
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/audio_decoder_config.h"
diff --git a/media/renderers/renderer_impl_factory.cc b/media/renderers/renderer_impl_factory.cc
index 0bba715d..3340f3a 100644
--- a/media/renderers/renderer_impl_factory.cc
+++ b/media/renderers/renderer_impl_factory.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/decoder_factory.h"
diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc
index f37ff81..3600ee9 100644
--- a/media/renderers/video_renderer_impl.cc
+++ b/media/renderers/video_renderer_impl.cc
@@ -16,6 +16,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/trace_event.h"
diff --git a/media/renderers/win/media_foundation_protection_manager.cc b/media/renderers/win/media_foundation_protection_manager.cc
index d426f0d..cd27c6f 100644
--- a/media/renderers/win/media_foundation_protection_manager.cc
+++ b/media/renderers/win/media_foundation_protection_manager.cc
@@ -9,7 +9,7 @@
 
 #include "base/logging.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/win/core_winrt_util.h"
 #include "base/win/scoped_hstring.h"
@@ -227,4 +227,4 @@
   waiting_cb_.Run(WaitingReason::kNoDecryptionKey);
 }
 
-}  // namespace media
\ No newline at end of file
+}  // namespace media
diff --git a/media/renderers/win/media_foundation_renderer.cc b/media/renderers/win/media_foundation_renderer.cc
index 3328e3254..ff88f37 100644
--- a/media/renderers/win/media_foundation_renderer.cc
+++ b/media/renderers/win/media_foundation_renderer.cc
@@ -19,6 +19,7 @@
 #include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/win/scoped_bstr.h"
 #include "base/win/scoped_hdc.h"
 #include "base/win/scoped_propvariant.h"
diff --git a/media/renderers/win/media_foundation_source_wrapper.cc b/media/renderers/win/media_foundation_source_wrapper.cc
index 7f5c7d6..9284541 100644
--- a/media/renderers/win/media_foundation_source_wrapper.cc
+++ b/media/renderers/win/media_foundation_source_wrapper.cc
@@ -6,6 +6,7 @@
 
 #include <mferror.h>
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/audio_decoder_config.h"
 #include "media/base/demuxer_stream.h"
 #include "media/base/media_log.h"
diff --git a/media/renderers/win/media_foundation_stream_wrapper.cc b/media/renderers/win/media_foundation_stream_wrapper.cc
index 75d763e..0410f55 100644
--- a/media/renderers/win/media_foundation_stream_wrapper.cc
+++ b/media/renderers/win/media_foundation_stream_wrapper.cc
@@ -7,6 +7,7 @@
 #include <mferror.h>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/video_codecs.h"
 #include "media/base/win/mf_helpers.h"
 #include "media/renderers/win/media_foundation_audio_stream.h"
diff --git a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
index 6a7e499..d6bd66ba 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
+++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
@@ -7,9 +7,9 @@
 
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/viz/test/test_context_provider.h"
 #include "media/base/media_switches.h"
diff --git a/media/video/mock_video_decode_accelerator.h b/media/video/mock_video_decode_accelerator.h
index a8a3988..5e7153e 100644
--- a/media/video/mock_video_decode_accelerator.h
+++ b/media/video/mock_video_decode_accelerator.h
@@ -11,6 +11,7 @@
 
 #include <vector>
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/bitstream_buffer.h"
 #include "media/base/video_decoder_config.h"
 #include "media/video/picture.h"
diff --git a/media/video/software_video_encoder_test.cc b/media/video/software_video_encoder_test.cc
index 4a026cbc..72b3850 100644
--- a/media/video/software_video_encoder_test.cc
+++ b/media/video/software_video_encoder_test.cc
@@ -16,7 +16,6 @@
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "media/base/decoder_buffer.h"
diff --git a/media/video/video_decode_accelerator.cc b/media/video/video_decode_accelerator.cc
index dfc7f70..8e2aa3eef 100644
--- a/media/video/video_decode_accelerator.cc
+++ b/media/video/video_decode_accelerator.cc
@@ -8,6 +8,7 @@
 #include <GLES2/gl2ext.h>
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/video_util.h"
 
 namespace media {
diff --git a/mojo/core/channel.cc b/mojo/core/channel.cc
index 85667cc..fe5e6a8 100644
--- a/mojo/core/channel.cc
+++ b/mojo/core/channel.cc
@@ -21,6 +21,7 @@
 #include "base/process/current_process.h"
 #include "base/process/process_handle.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "build/build_config.h"
 #include "mojo/core/configuration.h"
diff --git a/mojo/core/channel_fuchsia.cc b/mojo/core/channel_fuchsia.cc
index 898e164..2ecc2c3 100644
--- a/mojo/core/channel_fuchsia.cc
+++ b/mojo/core/channel_fuchsia.cc
@@ -25,6 +25,7 @@
 #include "base/message_loop/message_pump_for_io.h"
 #include "base/synchronization/lock.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "mojo/core/platform_handle_in_transit.h"
 
diff --git a/mojo/core/channel_linux.cc b/mojo/core/channel_linux.cc
index 23aa9aa..71b50ca 100644
--- a/mojo/core/channel_linux.cc
+++ b/mojo/core/channel_linux.cc
@@ -34,6 +34,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/mojo/core/channel_linux.h b/mojo/core/channel_linux.h
index 5360832..c7218e2 100644
--- a/mojo/core/channel_linux.h
+++ b/mojo/core/channel_linux.h
@@ -8,6 +8,7 @@
 #include <atomic>
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/core/channel_posix.h"
 
diff --git a/mojo/core/channel_mac.cc b/mojo/core/channel_mac.cc
index adbcdc6..818cba1 100644
--- a/mojo/core/channel_mac.cc
+++ b/mojo/core/channel_mac.cc
@@ -25,6 +25,7 @@
 #include "base/mac/scoped_mach_vm.h"
 #include "base/message_loop/message_pump_for_io.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/trace_event/typed_macros.h"
 
diff --git a/mojo/core/channel_mac_fuzzer.cc b/mojo/core/channel_mac_fuzzer.cc
index ace2823..7f5f35d5 100644
--- a/mojo/core/channel_mac_fuzzer.cc
+++ b/mojo/core/channel_mac_fuzzer.cc
@@ -9,6 +9,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
 #include "base/task/single_thread_task_executor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/core/channel.h"
 #include "mojo/core/entrypoints.h"
 #include "mojo/core/test/data/channel_mac/channel_mac.pb.h"
diff --git a/mojo/core/channel_posix.cc b/mojo/core/channel_posix.cc
index 68a9e322..f57c9b3 100644
--- a/mojo/core/channel_posix.cc
+++ b/mojo/core/channel_posix.cc
@@ -20,6 +20,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/lock.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/mojo/core/channel_posix.h b/mojo/core/channel_posix.h
index 3c0b192f..695be6d 100644
--- a/mojo/core/channel_posix.h
+++ b/mojo/core/channel_posix.h
@@ -12,6 +12,7 @@
 #include "base/message_loop/message_pump_for_io.h"
 #include "base/synchronization/lock.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 
 namespace mojo {
diff --git a/mojo/core/channel_win.cc b/mojo/core/channel_win.cc
index 7061667..0f56608d 100644
--- a/mojo/core/channel_win.cc
+++ b/mojo/core/channel_win.cc
@@ -23,6 +23,7 @@
 #include "base/process/process_handle.h"
 #include "base/synchronization/lock.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/win/scoped_handle.h"
 #include "base/win/win_util.h"
diff --git a/mojo/core/core.cc b/mojo/core/core.cc
index f501058..2bc2aea 100644
--- a/mojo/core/core.cc
+++ b/mojo/core/core.cc
@@ -19,7 +19,7 @@
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/trace_id_helper.h"
diff --git a/mojo/core/embedder/embedder.cc b/mojo/core/embedder/embedder.cc
index 234f788f..4885801 100644
--- a/mojo/core/embedder/embedder.cc
+++ b/mojo/core/embedder/embedder.cc
@@ -11,6 +11,7 @@
 #include "base/check.h"
 #include "base/feature_list.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "build/build_config.h"
 #include "mojo/core/channel.h"
diff --git a/mojo/core/embedder/scoped_ipc_support.cc b/mojo/core/embedder/scoped_ipc_support.cc
index 204d0e27..28a501e 100644
--- a/mojo/core/embedder/scoped_ipc_support.cc
+++ b/mojo/core/embedder/scoped_ipc_support.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "mojo/core/core.h"
 #include "mojo/core/embedder/embedder.h"
diff --git a/mojo/core/ipcz_driver/transport.cc b/mojo/core/ipcz_driver/transport.cc
index 9eefdc42..e2d5856e4 100644
--- a/mojo/core/ipcz_driver/transport.cc
+++ b/mojo/core/ipcz_driver/transport.cc
@@ -13,6 +13,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/process/process.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/core/core.h"
 #include "mojo/core/ipcz_driver/data_pipe.h"
diff --git a/mojo/core/node_channel.cc b/mojo/core/node_channel.cc
index 692c754..34730504 100644
--- a/mojo/core/node_channel.cc
+++ b/mojo/core/node_channel.cc
@@ -12,6 +12,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/core/broker_host.h"
 #include "mojo/core/channel.h"
diff --git a/mojo/core/node_controller.cc b/mojo/core/node_controller.cc
index e055d64..5f32225fd 100644
--- a/mojo/core/node_controller.cc
+++ b/mojo/core/node_controller.cc
@@ -16,6 +16,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_piece.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/core/broker.h"
 #include "mojo/core/broker_host.h"
diff --git a/mojo/core/test/multiprocess_test_helper.cc b/mojo/core/test/multiprocess_test_helper.cc
index ec0f6f8..326932e6 100644
--- a/mojo/core/test/multiprocess_test_helper.cc
+++ b/mojo/core/test/multiprocess_test_helper.cc
@@ -26,7 +26,6 @@
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
 #include "mojo/public/cpp/platform/platform_channel_endpoint.h"
diff --git a/mojo/public/cpp/bindings/connection_group.cc b/mojo/public/cpp/bindings/connection_group.cc
index 9dc5ed3..3403568 100644
--- a/mojo/public/cpp/bindings/connection_group.cc
+++ b/mojo/public/cpp/bindings/connection_group.cc
@@ -5,6 +5,7 @@
 #include "mojo/public/cpp/bindings/connection_group.h"
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace mojo {
 
diff --git a/mojo/public/cpp/bindings/lib/associated_interface_ptr_state.cc b/mojo/public/cpp/bindings/lib/associated_interface_ptr_state.cc
index 87519129..4e4ffb1 100644
--- a/mojo/public/cpp/bindings/lib/associated_interface_ptr_state.cc
+++ b/mojo/public/cpp/bindings/lib/associated_interface_ptr_state.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/containers/span.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/lib/task_runner_helper.h"
 
 namespace mojo {
diff --git a/mojo/public/cpp/bindings/lib/binder_map_internal.h b/mojo/public/cpp/bindings/lib/binder_map_internal.h
index 330976a..e377c429 100644
--- a/mojo/public/cpp/bindings/lib/binder_map_internal.h
+++ b/mojo/public/cpp/bindings/lib/binder_map_internal.h
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 
 namespace mojo {
diff --git a/mojo/public/cpp/bindings/lib/connector.cc b/mojo/public/cpp/bindings/lib/connector.cc
index 5835675..937cd8b 100644
--- a/mojo/public/cpp/bindings/lib/connector.cc
+++ b/mojo/public/cpp/bindings/lib/connector.cc
@@ -22,6 +22,7 @@
 #include "base/strings/string_util.h"
 #include "base/synchronization/lock.h"
 #include "base/task/current_thread.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_local_storage_slot.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/typed_macros.h"
diff --git a/mojo/public/cpp/bindings/lib/interface_ptr_state.cc b/mojo/public/cpp/bindings/lib/interface_ptr_state.cc
index 843685fb1..0fe1e671 100644
--- a/mojo/public/cpp/bindings/lib/interface_ptr_state.cc
+++ b/mojo/public/cpp/bindings/lib/interface_ptr_state.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/containers/span.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/lib/task_runner_helper.h"
 
 namespace mojo {
diff --git a/mojo/public/cpp/bindings/lib/sequence_local_sync_event_watcher.cc b/mojo/public/cpp/bindings/lib/sequence_local_sync_event_watcher.cc
index 94230d1..f41248c6 100644
--- a/mojo/public/cpp/bindings/lib/sequence_local_sync_event_watcher.cc
+++ b/mojo/public/cpp/bindings/lib/sequence_local_sync_event_watcher.cc
@@ -17,7 +17,6 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/sequence_local_storage_slot.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/sync_event_watcher.h"
 
 namespace mojo {
diff --git a/mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h b/mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h
index 60b82ca..a406941 100644
--- a/mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h
+++ b/mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h
@@ -9,7 +9,6 @@
 #include "base/component_export.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/disconnect_reason.h"
 #include "mojo/public/cpp/bindings/interface_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
index 8d5f6ce..9ce05bd 100644
--- a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
@@ -17,11 +17,11 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
diff --git a/mojo/public/cpp/bindings/tests/flush_async_unittest.cc b/mojo/public/cpp/bindings/tests/flush_async_unittest.cc
index dd9098f7..3f77e67 100644
--- a/mojo/public/cpp/bindings/tests/flush_async_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/flush_async_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "mojo/public/cpp/bindings/async_flusher.h"
diff --git a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
index 813ff6f..0c434ab9 100644
--- a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
@@ -41,6 +41,8 @@
 // This needs to be included last, since it forward declares a bunch of classes
 // but depends on those definitions to be included by headers that sort
 // lexicographically after.
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/tests/sync_method_unittest.test-mojom-params-data.h"
 
 namespace mojo {
diff --git a/mojo/public/cpp/system/handle_signal_tracker.cc b/mojo/public/cpp/system/handle_signal_tracker.cc
index d9443fc1..41354c7 100644
--- a/mojo/public/cpp/system/handle_signal_tracker.cc
+++ b/mojo/public/cpp/system/handle_signal_tracker.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/system/handle_signals_state.h"
 
 namespace mojo {
diff --git a/mojo/public/tools/fuzzers/mojolpm.h b/mojo/public/tools/fuzzers/mojolpm.h
index d8d7479c..3c2c391 100644
--- a/mojo/public/tools/fuzzers/mojolpm.h
+++ b/mojo/public/tools/fuzzers/mojolpm.h
@@ -12,6 +12,7 @@
 
 #include "base/check.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/net/base/network_notification_thread_mac.cc b/net/base/network_notification_thread_mac.cc
index 3fccae8..d90e394 100644
--- a/net/base/network_notification_thread_mac.cc
+++ b/net/base/network_notification_thread_mac.cc
@@ -6,6 +6,7 @@
 
 #include "base/message_loop/message_pump_type.h"
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 
 namespace net {
diff --git a/net/base/prioritized_task_runner.h b/net/base/prioritized_task_runner.h
index 31a845e5..f11633120 100644
--- a/net/base/prioritized_task_runner.h
+++ b/net/base/prioritized_task_runner.h
@@ -16,7 +16,6 @@
 #include "base/synchronization/lock.h"
 #include "base/task/post_task_and_reply_with_result_internal.h"
 #include "base/task/task_traits.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/net_export.h"
 
 namespace base {
diff --git a/net/cert/cert_verify_proc_win.cc b/net/cert/cert_verify_proc_win.cc
index e9f034c4..08ded6f 100644
--- a/net/cert/cert_verify_proc_win.cc
+++ b/net/cert/cert_verify_proc_win.cc
@@ -17,7 +17,6 @@
 #include "base/synchronization/lock.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_local.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/win/registry.h"
 #include "base/win/windows_version.h"
 #include "crypto/capi_util.h"
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index d1c6bd7..e62271f 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -36,7 +36,6 @@
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_future.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "net/base/features.h"
 #include "net/cookies/canonical_cookie.h"
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h
index ee89777f..96f8dbe6 100644
--- a/net/cookies/cookie_store_unittest.h
+++ b/net/cookies/cookie_store_unittest.h
@@ -19,7 +19,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "net/cookies/canonical_cookie.h"
diff --git a/net/disk_cache/cache_util.cc b/net/disk_cache/cache_util.cc
index f4f59fcf..a4bebc13 100644
--- a/net/disk_cache/cache_util.cc
+++ b/net/disk_cache/cache_util.cc
@@ -20,7 +20,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 
diff --git a/net/disk_cache/disk_cache.h b/net/disk_cache/disk_cache.h
index 84a0a79..d0a487e7 100644
--- a/net/disk_cache/disk_cache.h
+++ b/net/disk_cache/disk_cache.h
@@ -17,6 +17,7 @@
 #include "base/files/file.h"
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_split.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "net/base/cache_type.h"
diff --git a/net/disk_cache/simple/simple_index.cc b/net/disk_cache/simple/simple_index.cc
index 03fbbad..9a4d400e 100644
--- a/net/disk_cache/simple/simple_index.cc
+++ b/net/disk_cache/simple/simple_index.cc
@@ -16,6 +16,7 @@
 #include "base/pickle.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_tokenizer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_usage_estimator.h"
diff --git a/net/disk_cache/simple/simple_index_file.cc b/net/disk_cache/simple/simple_index_file.cc
index 73ef905f..4dd24d04 100644
--- a/net/disk_cache/simple/simple_index_file.cc
+++ b/net/disk_cache/simple/simple_index_file.cc
@@ -14,6 +14,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/pickle.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
diff --git a/net/dns/dns_config_service_unittest.cc b/net/dns/dns_config_service_unittest.cc
index 7593959..6b926d8 100644
--- a/net/dns/dns_config_service_unittest.cc
+++ b/net/dns/dns_config_service_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_timeouts.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/address_family.h"
 #include "net/base/ip_address.h"
 #include "net/dns/dns_hosts.h"
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index 5511b45f..9f4a1ab 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -55,7 +55,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
diff --git a/net/dns/public/win_dns_system_settings.cc b/net/dns/public/win_dns_system_settings.cc
index 59f6f2bc9..49d4486 100644
--- a/net/dns/public/win_dns_system_settings.cc
+++ b/net/dns/public/win_dns_system_settings.cc
@@ -23,7 +23,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/win/registry.h"
 #include "base/win/scoped_handle.h"
 #include "base/win/windows_types.h"
diff --git a/net/dns/serial_worker.cc b/net/dns/serial_worker.cc
index 878f2bb..e1506c7 100644
--- a/net/dns/serial_worker.cc
+++ b/net/dns/serial_worker.cc
@@ -13,8 +13,6 @@
 #include "base/location.h"
 #include "base/notreached.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/timer.h"
 #include "net/base/backoff_entry.h"
 
diff --git a/net/dns/system_dns_config_change_notifier_unittest.cc b/net/dns/system_dns_config_change_notifier_unittest.cc
index 4698054..d18422dc 100644
--- a/net/dns/system_dns_config_change_notifier_unittest.cc
+++ b/net/dns/system_dns_config_change_notifier_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "net/base/ip_address.h"
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index e3a6523..8701120 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -4,6 +4,7 @@
 
 #include "net/http/http_cache_transaction.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"  // For IS_POSIX
 
 #if BUILDFLAG(IS_POSIX)
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc
index 06c12ec..4c5c7f2d 100644
--- a/net/http/http_server_properties_manager_unittest.cc
+++ b/net/http/http_server_properties_manager_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/values_test_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "base/values.h"
diff --git a/net/http/transport_security_persister_unittest.cc b/net/http/transport_security_persister_unittest.cc
index 5216e1a..d84e624a 100644
--- a/net/http/transport_security_persister_unittest.cc
+++ b/net/http/transport_security_persister_unittest.cc
@@ -16,9 +16,9 @@
 #include "base/run_loop.h"
 #include "base/strings/string_util.h"
 #include "base/task/current_thread.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/features.h"
 #include "net/base/network_anonymization_key.h"
 #include "net/base/schemeful_site.h"
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index c1a2a9f1..e7cd846 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2023-01-08 12:54 UTC
+# Last updated: 2023-01-09 12:55 UTC
 PinsListTimestamp
-1673182480
+1673268930
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/nqe/network_qualities_prefs_manager.cc b/net/nqe/network_qualities_prefs_manager.cc
index a5da9235..d01d951 100644
--- a/net/nqe/network_qualities_prefs_manager.cc
+++ b/net/nqe/network_qualities_prefs_manager.cc
@@ -11,7 +11,6 @@
 #include "base/metrics/histogram_macros_local.h"
 #include "base/rand_util.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/nqe/network_quality_estimator.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
diff --git a/net/nqe/socket_watcher_factory.cc b/net/nqe/socket_watcher_factory.cc
index 95d85c4..801c99c 100644
--- a/net/nqe/socket_watcher_factory.cc
+++ b/net/nqe/socket_watcher_factory.cc
@@ -4,6 +4,7 @@
 
 #include "net/nqe/socket_watcher_factory.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "net/nqe/socket_watcher.h"
 
diff --git a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
index 3f7b229..e96d294 100644
--- a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
+++ b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
@@ -18,7 +18,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/features.h"
 #include "net/base/filename_util.h"
 #include "net/base/load_flags.h"
diff --git a/net/proxy_resolution/proxy_config_service.cc b/net/proxy_resolution/proxy_config_service.cc
index f18c1f70..85ed8e1d 100644
--- a/net/proxy_resolution/proxy_config_service.cc
+++ b/net/proxy_resolution/proxy_config_service.cc
@@ -8,6 +8,7 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "net/proxy_resolution/proxy_config_with_annotation.h"
diff --git a/net/proxy_resolution/proxy_config_service_linux_unittest.cc b/net/proxy_resolution/proxy_config_service_linux_unittest.cc
index ef183cc5..094ce51e 100644
--- a/net/proxy_resolution/proxy_config_service_linux_unittest.cc
+++ b/net/proxy_resolution/proxy_config_service_linux_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/thread.h"
diff --git a/net/quic/dedicated_web_transport_http3_client.h b/net/quic/dedicated_web_transport_http3_client.h
index 2c60ea6..f7526d4 100644
--- a/net/quic/dedicated_web_transport_http3_client.h
+++ b/net/quic/dedicated_web_transport_http3_client.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "net/base/network_anonymization_key.h"
 #include "net/dns/host_resolver.h"
 #include "net/log/net_log_with_source.h"
diff --git a/net/quic/dedicated_web_transport_http3_client_test.cc b/net/quic/dedicated_web_transport_http3_client_test.cc
index 0681bc412..e90470f 100644
--- a/net/quic/dedicated_web_transport_http3_client_test.cc
+++ b/net/quic/dedicated_web_transport_http3_client_test.cc
@@ -8,7 +8,6 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/strings/strcat.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "net/base/schemeful_site.h"
 #include "net/cert/mock_cert_verifier.h"
diff --git a/net/quic/quic_chromium_alarm_factory.cc b/net/quic/quic_chromium_alarm_factory.cc
index a5261420..4c82eef 100644
--- a/net/quic/quic_chromium_alarm_factory.cc
+++ b/net/quic/quic_chromium_alarm_factory.cc
@@ -8,6 +8,7 @@
 #include "base/check.h"
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index d15d74e..ace51b2 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -22,6 +22,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "base/trace_event/memory_usage_estimator.h"
@@ -835,7 +836,7 @@
     OnPathValidationFailure(
         std::unique_ptr<quic::QuicPathValidationContext> context) {
   session_->connection()->OnPathValidationFailureAtClient(
-      /*is_multi_port=*/false);
+      /*is_multi_port=*/false, *context);
   // Note that socket, packet writer, and packet reader in |context| will be
   // discarded.
   auto* chrome_context =
@@ -864,7 +865,7 @@
     OnPathValidationFailure(
         std::unique_ptr<quic::QuicPathValidationContext> context) {
   session_->connection()->OnPathValidationFailureAtClient(
-      /*is_multi_port=*/false);
+      /*is_multi_port=*/false, *context);
   // Note that socket, packet writer, and packet reader in |context| will be
   // discarded.
   auto* chrome_context =
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h
index ef0876d..fd2803f 100644
--- a/net/quic/quic_chromium_client_session.h
+++ b/net/quic/quic_chromium_client_session.h
@@ -24,6 +24,7 @@
 #include "base/observer_list.h"
 #include "base/observer_list_types.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "net/base/completion_once_callback.h"
diff --git a/net/quic/quic_chromium_packet_writer.cc b/net/quic/quic_chromium_packet_writer.cc
index af60e5a8..7732c9d 100644
--- a/net/quic/quic_chromium_packet_writer.cc
+++ b/net/quic/quic_chromium_packet_writer.cc
@@ -12,6 +12,7 @@
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/sparse_histogram.h"
+#include "base/task/sequenced_task_runner.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 #include "net/quic/quic_chromium_client_session.h"
diff --git a/net/quic/quic_chromium_packet_writer.h b/net/quic/quic_chromium_packet_writer.h
index 84b329c8..f7c7e477 100644
--- a/net/quic/quic_chromium_packet_writer.h
+++ b/net/quic/quic_chromium_packet_writer.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "net/base/completion_repeating_callback.h"
 #include "net/base/io_buffer.h"
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index b25879d..f8da5142 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -24,6 +24,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index 6693adb..c9a6003 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -18,6 +18,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
 #include "net/base/address_list.h"
diff --git a/net/quic/quic_stream_factory_peer.cc b/net/quic/quic_stream_factory_peer.cc
index fda8892..3eed4e0 100644
--- a/net/quic/quic_stream_factory_peer.cc
+++ b/net/quic/quic_stream_factory_peer.cc
@@ -7,6 +7,7 @@
 #include <string>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
 #include "net/cert/x509_certificate.h"
 #include "net/cert/x509_util.h"
 #include "net/dns/public/secure_dns_policy.h"
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc
index 8717513a..7c6d1ee 100644
--- a/net/server/http_server_unittest.cc
+++ b/net/server/http_server_unittest.cc
@@ -30,7 +30,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/repeating_test_future.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "net/base/address_list.h"
 #include "net/base/io_buffer.h"
diff --git a/net/socket/udp_client_socket.cc b/net/socket/udp_client_socket.cc
index 161e32cd..5203b05 100644
--- a/net/socket/udp_client_socket.cc
+++ b/net/socket/udp_client_socket.cc
@@ -5,7 +5,6 @@
 #include "net/socket/udp_client_socket.h"
 
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "net/base/net_errors.h"
 #include "net/base/network_change_notifier.h"
diff --git a/net/ssl/ssl_platform_key_util.cc b/net/ssl/ssl_platform_key_util.cc
index 59611c9e..7c86967 100644
--- a/net/ssl/ssl_platform_key_util.cc
+++ b/net/ssl/ssl_platform_key_util.cc
@@ -7,6 +7,7 @@
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "crypto/openssl_util.h"
 #include "net/cert/asn1_util.h"
diff --git a/net/ssl/threaded_ssl_private_key.cc b/net/ssl/threaded_ssl_private_key.cc
index e0d5e5e8..197f803 100644
--- a/net/ssl/threaded_ssl_private_key.cc
+++ b/net/ssl/threaded_ssl_private_key.cc
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace net {
 
diff --git a/net/test/embedded_test_server/connection_tracker.cc b/net/test/embedded_test_server/connection_tracker.cc
index a754a992..bd76029 100644
--- a/net/test/embedded_test_server/connection_tracker.cc
+++ b/net/test/embedded_test_server/connection_tracker.cc
@@ -6,6 +6,7 @@
 
 #include "base/containers/contains.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/net/test/embedded_test_server/connection_tracker.h b/net/test/embedded_test_server/connection_tracker.h
index c31a132..62734e6 100644
--- a/net/test/embedded_test_server/connection_tracker.h
+++ b/net/test/embedded_test_server/connection_tracker.h
@@ -11,7 +11,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/base/net_errors.h"
 #include "net/socket/stream_socket.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
diff --git a/net/test/spawned_test_server/remote_test_server_spawner_request.cc b/net/test/spawned_test_server/remote_test_server_spawner_request.cc
index e3f19243..26a19d1 100644
--- a/net/test/spawned_test_server/remote_test_server_spawner_request.cc
+++ b/net/test/spawned_test_server/remote_test_server_spawner_request.cc
@@ -12,7 +12,6 @@
 #include "base/logging.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "net/base/elements_upload_data_stream.h"
 #include "net/base/io_buffer.h"
diff --git a/net/third_party/quiche/BUILD.gn b/net/third_party/quiche/BUILD.gn
index 75cbbc37..3b8e35e 100644
--- a/net/third_party/quiche/BUILD.gn
+++ b/net/third_party/quiche/BUILD.gn
@@ -1172,7 +1172,7 @@
     "src/quiche/spdy/test_tools/mock_spdy_framer_visitor.h",
     "src/quiche/spdy/test_tools/spdy_test_utils.cc",
     "src/quiche/spdy/test_tools/spdy_test_utils.h",
-    "src/quiche/web_transport/mock_web_transport.h",
+    "src/quiche/web_transport/test_tools/mock_web_transport.h",
   ]
 
   configs += [ ":quiche_internal_config" ]
diff --git a/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc b/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc
index a1e7d48..1d52d67b 100644
--- a/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc
+++ b/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc
@@ -25,7 +25,6 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_executor.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/cache_type.h"
 #include "net/base/net_errors.h"
 #include "net/disk_cache/disk_cache.h"
diff --git a/net/tools/quic/synchronous_host_resolver.cc b/net/tools/quic/synchronous_host_resolver.cc
index 722d466..a14d98e 100644
--- a/net/tools/quic/synchronous_host_resolver.cc
+++ b/net/tools/quic/synchronous_host_resolver.cc
@@ -16,7 +16,6 @@
 #include "base/task/single_thread_task_executor.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/simple_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/net_errors.h"
 #include "net/base/network_isolation_key.h"
diff --git a/net/url_request/report_sender_unittest.cc b/net/url_request/report_sender_unittest.cc
index e93081f4..4d244f3 100644
--- a/net/url_request/report_sender_unittest.cc
+++ b/net/url_request/report_sender_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/load_flags.h"
 #include "net/base/network_delegate_impl.h"
 #include "net/base/upload_bytes_element_reader.h"
diff --git a/net/url_request/url_request_context.cc b/net/url_request/url_request_context.cc
index f2ed6d6a..c81e111 100644
--- a/net/url_request/url_request_context.cc
+++ b/net/url_request/url_request_context.cc
@@ -13,7 +13,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "net/base/http_user_agent_settings.h"
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index c30667e..55a32f7 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -13,6 +13,7 @@
 #include "base/compiler_specific.h"
 #include "base/notreached.h"
 #include "base/strings/string_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/types/pass_key.h"
diff --git a/net/websockets/websocket_basic_stream_adapters_test.cc b/net/websockets/websocket_basic_stream_adapters_test.cc
index 2fb0122..0c2168a 100644
--- a/net/websockets/websocket_basic_stream_adapters_test.cc
+++ b/net/websockets/websocket_basic_stream_adapters_test.cc
@@ -12,7 +12,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
@@ -1153,7 +1153,7 @@
         std::make_unique<QuicChromiumAlarmFactory>(runner_.get(), &clock_);
     // Ownership of 'writer' is passed to 'QuicConnection'.
     QuicChromiumPacketWriter* writer = new QuicChromiumPacketWriter(
-        socket.get(), base::ThreadTaskRunnerHandle::Get().get());
+        socket.get(), base::SingleThreadTaskRunner::GetCurrentDefault().get());
     quic::QuicConnection* connection = new quic::QuicConnection(
         connection_id_, quic::QuicSocketAddress(),
         net::ToQuicSocketAddress(peer_addr_), helper_.get(),
@@ -1202,7 +1202,7 @@
         "CONNECTION_UNKNOWN", dns_start, dns_end,
         std::make_unique<quic::QuicClientPushPromiseIndex>(), nullptr,
         base::DefaultTickClock::GetInstance(),
-        base::ThreadTaskRunnerHandle::Get().get(),
+        base::SingleThreadTaskRunner::GetCurrentDefault().get(),
         /*socket_performance_watcher=*/nullptr, NetLog::Get());
 
     session_->Initialize();
diff --git a/net/websockets/websocket_channel.cc b/net/websockets/websocket_channel.cc
index 835b7d0..a75fc25 100644
--- a/net/websockets/websocket_channel.cc
+++ b/net/websockets/websocket_channel.cc
@@ -21,7 +21,6 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "net/base/auth.h"
 #include "net/base/io_buffer.h"
diff --git a/pdf/pdf_view_web_plugin_unittest.cc b/pdf/pdf_view_web_plugin_unittest.cc
index 4e788c86..add7d60 100644
--- a/pdf/pdf_view_web_plugin_unittest.cc
+++ b/pdf/pdf_view_web_plugin_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/values_test_util.h"
 #include "base/time/time.h"
diff --git a/pdf/test/mock_web_associated_url_loader.h b/pdf/test/mock_web_associated_url_loader.h
index bf66a7cd..997c354 100644
--- a/pdf/test/mock_web_associated_url_loader.h
+++ b/pdf/test/mock_web_associated_url_loader.h
@@ -5,6 +5,7 @@
 #ifndef PDF_TEST_MOCK_WEB_ASSOCIATED_URL_LOADER_H_
 #define PDF_TEST_MOCK_WEB_ASSOCIATED_URL_LOADER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/blink/public/web/web_associated_url_loader.h"
 
diff --git a/ppapi/host/resource_message_filter_unittest.cc b/ppapi/host/resource_message_filter_unittest.cc
index 52f42af7..90472fde 100644
--- a/ppapi/host/resource_message_filter_unittest.cc
+++ b/ppapi/host/resource_message_filter_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/location.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
diff --git a/ppapi/proxy/host_dispatcher.cc b/ppapi/proxy/host_dispatcher.cc
index 8494dccc..e7d8239 100644
--- a/ppapi/proxy/host_dispatcher.cc
+++ b/ppapi/proxy/host_dispatcher.cc
@@ -10,6 +10,7 @@
 #include "base/check.h"
 #include "base/notreached.h"
 #include "base/observer_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "ppapi/c/ppb_var.h"
 #include "ppapi/c/private/ppb_proxy_private.h"
diff --git a/ppapi/proxy/host_dispatcher.h b/ppapi/proxy/host_dispatcher.h
index 49b3a50..17b27fd 100644
--- a/ppapi/proxy/host_dispatcher.h
+++ b/ppapi/proxy/host_dispatcher.h
@@ -14,6 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/process/process.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ipc/message_filter.h"
 #include "ppapi/c/pp_instance.h"
 #include "ppapi/proxy/dispatcher.h"
diff --git a/ppapi/proxy/plugin_globals.cc b/ppapi/proxy/plugin_globals.cc
index 283b22e..3eda1804 100644
--- a/ppapi/proxy/plugin_globals.cc
+++ b/ppapi/proxy/plugin_globals.cc
@@ -10,7 +10,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_sender.h"
 #include "ppapi/proxy/plugin_dispatcher.h"
diff --git a/ppapi/proxy/proxy_channel.cc b/ppapi/proxy/proxy_channel.cc
index 5b904a0..23b7b0a 100644
--- a/ppapi/proxy/proxy_channel.cc
+++ b/ppapi/proxy/proxy_channel.cc
@@ -5,6 +5,7 @@
 #include "ppapi/proxy/proxy_channel.h"
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "ipc/ipc_platform_file.h"
 #include "ipc/ipc_sender.h"
diff --git a/remoting/base/auto_thread_task_runner.cc b/remoting/base/auto_thread_task_runner.cc
index 9e8fd001..569dd57 100644
--- a/remoting/base/auto_thread_task_runner.cc
+++ b/remoting/base/auto_thread_task_runner.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 
 namespace remoting {
diff --git a/remoting/base/oauth_token_getter_proxy_unittest.cc b/remoting/base/oauth_token_getter_proxy_unittest.cc
index cdf6fb5..61a88a3 100644
--- a/remoting/base/oauth_token_getter_proxy_unittest.cc
+++ b/remoting/base/oauth_token_getter_proxy_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace remoting {
diff --git a/remoting/client/audio/audio_playback_stream.cc b/remoting/client/audio/audio_playback_stream.cc
index f6b54ba1..9fe3d4c 100644
--- a/remoting/client/audio/audio_playback_stream.cc
+++ b/remoting/client/audio/audio_playback_stream.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/client/audio/audio_jitter_buffer.h"
 #include "remoting/client/audio/audio_playback_sink.h"
 
diff --git a/remoting/client/cursor_shape_stub_proxy.cc b/remoting/client/cursor_shape_stub_proxy.cc
index 6b6bd4f..c060bdcf 100644
--- a/remoting/client/cursor_shape_stub_proxy.cc
+++ b/remoting/client/cursor_shape_stub_proxy.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/proto/control.pb.h"
 
 namespace remoting {
diff --git a/remoting/client/display/gl_renderer_unittest.cc b/remoting/client/display/gl_renderer_unittest.cc
index 24ab6dae..6b90cc612 100644
--- a/remoting/client/display/gl_renderer_unittest.cc
+++ b/remoting/client/display/gl_renderer_unittest.cc
@@ -10,7 +10,6 @@
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "remoting/client/display/fake_canvas.h"
 #include "remoting/client/display/gl_renderer_delegate.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/remoting/client/display/renderer_proxy.cc b/remoting/client/display/renderer_proxy.cc
index d5c3304..4914ebf 100644
--- a/remoting/client/display/renderer_proxy.cc
+++ b/remoting/client/display/renderer_proxy.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/check_op.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/base/queued_task_poster.h"
 #include "remoting/client/display/gl_renderer.h"
 #include "remoting/client/ui/view_matrix.h"
diff --git a/remoting/client/notification/gstatic_json_fetcher.cc b/remoting/client/notification/gstatic_json_fetcher.cc
index 71be850..5213dd31 100644
--- a/remoting/client/notification/gstatic_json_fetcher.cc
+++ b/remoting/client/notification/gstatic_json_fetcher.cc
@@ -7,6 +7,7 @@
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/http/http_status_code.h"
 #include "remoting/base/url_request_context_getter.h"
 #include "services/network/public/cpp/resource_request.h"
diff --git a/remoting/client/notification/notification_client.cc b/remoting/client/notification/notification_client.cc
index b340052c..9fcb498 100644
--- a/remoting/client/notification/notification_client.cc
+++ b/remoting/client/notification/notification_client.cc
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/stringize_macros.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
diff --git a/remoting/host/audio_capturer_linux.cc b/remoting/host/audio_capturer_linux.cc
index 55b95b9..0361304 100644
--- a/remoting/host/audio_capturer_linux.cc
+++ b/remoting/host/audio_capturer_linux.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/lazy_instance.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/proto/audio.pb.h"
 
 namespace remoting {
diff --git a/remoting/host/desktop_capturer_checker.cc b/remoting/host/desktop_capturer_checker.cc
index 320211bc..1073e67 100644
--- a/remoting/host/desktop_capturer_checker.cc
+++ b/remoting/host/desktop_capturer_checker.cc
@@ -13,7 +13,6 @@
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "remoting/host/client_session_control.h"
 #include "remoting/proto/control.pb.h"
diff --git a/remoting/host/desktop_process.cc b/remoting/host/desktop_process.cc
index d7cb921..813680c 100644
--- a/remoting/host/desktop_process.cc
+++ b/remoting/host/desktop_process.cc
@@ -16,6 +16,7 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/notreached.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel_proxy.h"
 #include "remoting/base/auto_thread.h"
diff --git a/remoting/host/desktop_session_agent.cc b/remoting/host/desktop_session_agent.cc
index a004f753..2be9f7ac 100644
--- a/remoting/host/desktop_session_agent.cc
+++ b/remoting/host/desktop_session_agent.cc
@@ -18,6 +18,7 @@
 #include "base/notreached.h"
 #include "base/process/process_handle.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel_proxy.h"
 #include "ipc/ipc_message.h"
diff --git a/remoting/host/fake_desktop_environment.cc b/remoting/host/fake_desktop_environment.cc
index a00e7ae..847afde 100644
--- a/remoting/host/fake_desktop_environment.cc
+++ b/remoting/host/fake_desktop_environment.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/host/audio_capturer.h"
 #include "remoting/host/desktop_capturer_proxy.h"
 #include "remoting/host/desktop_display_info_monitor.h"
diff --git a/remoting/host/file_transfer/buffered_file_writer_unittest.cc b/remoting/host/file_transfer/buffered_file_writer_unittest.cc
index be1ae8d..20efc246 100644
--- a/remoting/host/file_transfer/buffered_file_writer_unittest.cc
+++ b/remoting/host/file_transfer/buffered_file_writer_unittest.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "remoting/host/file_transfer/fake_file_operations.h"
 #include "remoting/host/file_transfer/test_byte_vector_utils.h"
 #include "remoting/protocol/file_transfer_helpers.h"
diff --git a/remoting/host/file_transfer/file_chooser.h b/remoting/host/file_transfer/file_chooser.h
index 1747da3..69872f055 100644
--- a/remoting/host/file_transfer/file_chooser.h
+++ b/remoting/host/file_transfer/file_chooser.h
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/task/sequenced_task_runner.h"
 #include "remoting/protocol/file_transfer_helpers.h"
 
 namespace remoting {
diff --git a/remoting/host/file_transfer/file_chooser_mac.mm b/remoting/host/file_transfer/file_chooser_mac.mm
index ae46f1a..c1d1174 100644
--- a/remoting/host/file_transfer/file_chooser_mac.mm
+++ b/remoting/host/file_transfer/file_chooser_mac.mm
@@ -12,6 +12,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/weak_ptr.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "remoting/base/string_resources.h"
diff --git a/remoting/host/file_transfer/file_transfer_message_handler_unittest.cc b/remoting/host/file_transfer/file_transfer_message_handler_unittest.cc
index fc723b76..be50720f 100644
--- a/remoting/host/file_transfer/file_transfer_message_handler_unittest.cc
+++ b/remoting/host/file_transfer/file_transfer_message_handler_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/containers/queue.h"
 #include "base/memory/ptr_util.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "net/base/io_buffer.h"
 #include "remoting/base/compound_buffer.h"
 #include "remoting/host/file_transfer/fake_file_operations.h"
diff --git a/remoting/host/file_transfer/ipc_file_operations_unittest.cc b/remoting/host/file_transfer/ipc_file_operations_unittest.cc
index 362a1df..15d0ced 100644
--- a/remoting/host/file_transfer/ipc_file_operations_unittest.cc
+++ b/remoting/host/file_transfer/ipc_file_operations_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/callback_list.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_path_override.h"
 #include "base/test/task_environment.h"
diff --git a/remoting/host/file_transfer/local_file_operations.cc b/remoting/host/file_transfer/local_file_operations.cc
index d343a7b..f54167f3 100644
--- a/remoting/host/file_transfer/local_file_operations.cc
+++ b/remoting/host/file_transfer/local_file_operations.cc
@@ -15,7 +15,6 @@
 #include "base/sequence_checker.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "remoting/base/result.h"
 #include "remoting/host/file_transfer/ensure_user.h"
diff --git a/remoting/host/ftl_echo_message_listener_unittest.cc b/remoting/host/ftl_echo_message_listener_unittest.cc
index 2c80d77c..20b39b8 100644
--- a/remoting/host/ftl_echo_message_listener_unittest.cc
+++ b/remoting/host/ftl_echo_message_listener_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "remoting/proto/ftl/v1/chromoting_message.pb.h"
 #include "remoting/proto/ftl/v1/ftl_messages.pb.h"
 #include "remoting/signaling/mock_signal_strategy.h"
diff --git a/remoting/host/heartbeat_sender_unittest.cc b/remoting/host/heartbeat_sender_unittest.cc
index 7e8ba01..608d965 100644
--- a/remoting/host/heartbeat_sender_unittest.cc
+++ b/remoting/host/heartbeat_sender_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/test/bind.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/remoting/host/host_power_save_blocker.h b/remoting/host/host_power_save_blocker.h
index 58882c52..c5f2b56 100644
--- a/remoting/host/host_power_save_blocker.h
+++ b/remoting/host/host_power_save_blocker.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "remoting/host/host_status_observer.h"
 #include "services/device/wake_lock/power_save_blocker/power_save_blocker.h"
 
diff --git a/remoting/host/input_injector_chromeos.cc b/remoting/host/input_injector_chromeos.cc
index d66ad2e..fafbce4 100644
--- a/remoting/host/input_injector_chromeos.cc
+++ b/remoting/host/input_injector_chromeos.cc
@@ -17,6 +17,7 @@
 #include "base/location.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/host/chromeos/point_transformer.h"
 #include "remoting/host/clipboard.h"
 #include "remoting/proto/internal.pb.h"
diff --git a/remoting/host/input_monitor/local_hotkey_input_monitor_mac.mm b/remoting/host/input_monitor/local_hotkey_input_monitor_mac.mm
index 6e151a5..d0aefaff 100644
--- a/remoting/host/input_monitor/local_hotkey_input_monitor_mac.mm
+++ b/remoting/host/input_monitor/local_hotkey_input_monitor_mac.mm
@@ -5,6 +5,7 @@
 #include "remoting/host/input_monitor/local_hotkey_input_monitor.h"
 
 #include "base/memory/raw_ptr.h"
+#import "base/task/single_thread_task_runner.h"
 
 #import <AppKit/AppKit.h>
 
diff --git a/remoting/host/input_monitor/local_keyboard_input_monitor_mac.mm b/remoting/host/input_monitor/local_keyboard_input_monitor_mac.mm
index 0beed499..38ad971 100644
--- a/remoting/host/input_monitor/local_keyboard_input_monitor_mac.mm
+++ b/remoting/host/input_monitor/local_keyboard_input_monitor_mac.mm
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/callback.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 
 namespace remoting {
diff --git a/remoting/host/input_monitor/local_mouse_input_monitor_mac.mm b/remoting/host/input_monitor/local_mouse_input_monitor_mac.mm
index 5799b40f..91d8255 100644
--- a/remoting/host/input_monitor/local_mouse_input_monitor_mac.mm
+++ b/remoting/host/input_monitor/local_mouse_input_monitor_mac.mm
@@ -17,6 +17,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
 
diff --git a/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc b/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc
index 78e4984..ff7f336 100644
--- a/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc
+++ b/remoting/host/it2me/it2me_native_messaging_host_chromeos.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/lazy_instance.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "remoting/base/auto_thread_task_runner.h"
diff --git a/remoting/host/it2me_desktop_environment_unittest.cc b/remoting/host/it2me_desktop_environment_unittest.cc
index 1704f3e..c0c17949f 100644
--- a/remoting/host/it2me_desktop_environment_unittest.cc
+++ b/remoting/host/it2me_desktop_environment_unittest.cc
@@ -9,6 +9,7 @@
 #include "ash/curtain/security_curtain_controller.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "remoting/host/base/desktop_environment_options.h"
diff --git a/remoting/host/keyboard_layout_monitor_linux.cc b/remoting/host/keyboard_layout_monitor_linux.cc
index aee90bf2..81f3d05 100644
--- a/remoting/host/keyboard_layout_monitor_linux.cc
+++ b/remoting/host/keyboard_layout_monitor_linux.cc
@@ -14,6 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/utf_string_conversion_utils.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/host/linux/keyboard_layout_monitor_utils.h"
 #include "remoting/proto/control.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/remoting/host/linux/audio_pipe_reader.cc b/remoting/host/linux/audio_pipe_reader.cc
index 8a4c7ac..15dcc7a9 100644
--- a/remoting/host/linux/audio_pipe_reader.cc
+++ b/remoting/host/linux/audio_pipe_reader.cc
@@ -15,6 +15,7 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace remoting {
 
diff --git a/remoting/host/linux/x11_character_injector_unittest.cc b/remoting/host/linux/x11_character_injector_unittest.cc
index 42c2d83e..4916d80 100644
--- a/remoting/host/linux/x11_character_injector_unittest.cc
+++ b/remoting/host/linux/x11_character_injector_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "remoting/host/linux/x11_keyboard.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/remoting/host/mac/permission_checker.cc b/remoting/host/mac/permission_checker.cc
index 05efbaa1..e8d8239b 100644
--- a/remoting/host/mac/permission_checker.cc
+++ b/remoting/host/mac/permission_checker.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/host/mac/permission_process_utils.h"
 #include "remoting/host/version.h"
 
diff --git a/remoting/host/mac/permission_utils.mm b/remoting/host/mac/permission_utils.mm
index 4a48a32..a39235c 100644
--- a/remoting/host/mac/permission_utils.mm
+++ b/remoting/host/mac/permission_utils.mm
@@ -16,7 +16,9 @@
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "remoting/base/string_resources.h"
 #include "ui/base/cocoa/permissions_utils.h"
diff --git a/remoting/host/mac/permission_wizard.mm b/remoting/host/mac/permission_wizard.mm
index 1764ab5..b08b51f3 100644
--- a/remoting/host/mac/permission_wizard.mm
+++ b/remoting/host/mac/permission_wizard.mm
@@ -5,6 +5,7 @@
 #include "remoting/host/mac/permission_wizard.h"
 
 #include "base/memory/raw_ptr.h"
+#import "base/task/single_thread_task_runner.h"
 
 #import <Cocoa/Cocoa.h>
 
diff --git a/remoting/host/security_key/fake_security_key_ipc_server.cc b/remoting/host/security_key/fake_security_key_ipc_server.cc
index c8b8526b..43d625a7 100644
--- a/remoting/host/security_key/fake_security_key_ipc_server.cc
+++ b/remoting/host/security_key/fake_security_key_ipc_server.cc
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "ipc/ipc_channel.h"
 #include "mojo/public/cpp/platform/named_platform_channel.h"
diff --git a/remoting/host/security_key/security_key_auth_handler_win.cc b/remoting/host/security_key/security_key_auth_handler_win.cc
index ed18679..9322dba 100644
--- a/remoting/host/security_key/security_key_auth_handler_win.cc
+++ b/remoting/host/security_key/security_key_auth_handler_win.cc
@@ -15,8 +15,8 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "base/win/win_util.h"
diff --git a/remoting/host/setup/daemon_controller_delegate_linux.cc b/remoting/host/setup/daemon_controller_delegate_linux.cc
index baff327..a36311c 100644
--- a/remoting/host/setup/daemon_controller_delegate_linux.cc
+++ b/remoting/host/setup/daemon_controller_delegate_linux.cc
@@ -22,7 +22,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "remoting/base/file_path_util_linux.h"
diff --git a/remoting/host/setup/daemon_controller_delegate_mac.mm b/remoting/host/setup/daemon_controller_delegate_mac.mm
index 5ecb371..c64fc08 100644
--- a/remoting/host/setup/daemon_controller_delegate_mac.mm
+++ b/remoting/host/setup/daemon_controller_delegate_mac.mm
@@ -22,6 +22,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/posix/eintr_wrapper.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "remoting/base/string_resources.h"
diff --git a/remoting/host/setup/daemon_controller_delegate_win.cc b/remoting/host/setup/daemon_controller_delegate_win.cc
index 3b85cd2..6807575 100644
--- a/remoting/host/setup/daemon_controller_delegate_win.cc
+++ b/remoting/host/setup/daemon_controller_delegate_win.cc
@@ -15,7 +15,6 @@
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
 #include "base/win/scoped_bstr.h"
 #include "remoting/base/scoped_sc_handle_win.h"
diff --git a/remoting/host/setup/host_starter.h b/remoting/host/setup/host_starter.h
index 29fcda4..4dc1f08 100644
--- a/remoting/host/setup/host_starter.h
+++ b/remoting/host/setup/host_starter.h
@@ -10,6 +10,7 @@
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "google_apis/gaia/gaia_oauth_client.h"
 #include "remoting/base/rsa_key_pair.h"
 #include "remoting/host/setup/daemon_controller.h"
diff --git a/remoting/host/webauthn/remote_webauthn_native_messaging_host.cc b/remoting/host/webauthn/remote_webauthn_native_messaging_host.cc
index fa7e9e2..1f2e453 100644
--- a/remoting/host/webauthn/remote_webauthn_native_messaging_host.cc
+++ b/remoting/host/webauthn/remote_webauthn_native_messaging_host.cc
@@ -10,6 +10,7 @@
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/remoting/host/webauthn/remote_webauthn_native_messaging_host.h b/remoting/host/webauthn/remote_webauthn_native_messaging_host.h
index 9e9b13a0..9dd86126 100644
--- a/remoting/host/webauthn/remote_webauthn_native_messaging_host.h
+++ b/remoting/host/webauthn/remote_webauthn_native_messaging_host.h
@@ -11,6 +11,7 @@
 #include "base/containers/flat_map.h"
 #include "base/containers/queue.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "extensions/browser/api/messaging/native_message_host.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/remoting/ios/app/notification_presenter.mm b/remoting/ios/app/notification_presenter.mm
index 42da0fe..b57e9b30 100644
--- a/remoting/ios/app/notification_presenter.mm
+++ b/remoting/ios/app/notification_presenter.mm
@@ -6,18 +6,17 @@
 
 #import <MaterialComponents/MaterialDialogs.h>
 
-#import "remoting/ios/app/notification_dialog_view_controller.h"
-#import "remoting/ios/facade/remoting_authentication.h"
-#import "remoting/ios/facade/remoting_service.h"
-#import "remoting/ios/persistence/remoting_preferences.h"
 #include "base/bind.h"
 #include "base/check_op.h"
 #include "base/no_destructor.h"
 #include "base/strings/sys_string_conversions.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "remoting/base/string_resources.h"
 #include "remoting/client/chromoting_client_runtime.h"
+#import "remoting/ios/app/notification_dialog_view_controller.h"
 #include "remoting/ios/app/view_utils.h"
+#import "remoting/ios/facade/remoting_authentication.h"
+#import "remoting/ios/facade/remoting_service.h"
+#import "remoting/ios/persistence/remoting_preferences.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/remoting/ios/display/eagl_view.mm b/remoting/ios/display/eagl_view.mm
index f9744c0b..cad01fad 100644
--- a/remoting/ios/display/eagl_view.mm
+++ b/remoting/ios/display/eagl_view.mm
@@ -12,12 +12,11 @@
 
 #import <OpenGLES/ES2/gl.h>
 
-
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
 
 namespace {
 
diff --git a/remoting/ios/facade/host_list_service_unittest.mm b/remoting/ios/facade/host_list_service_unittest.mm
index 3be6f02..dd62745 100644
--- a/remoting/ios/facade/host_list_service_unittest.mm
+++ b/remoting/ios/facade/host_list_service_unittest.mm
@@ -17,7 +17,6 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "net/http/http_status_code.h"
 #include "remoting/base/directory_service_client.h"
 #include "remoting/base/fake_oauth_token_getter.h"
diff --git a/remoting/protocol/fake_connection_to_host.cc b/remoting/protocol/fake_connection_to_host.cc
index 6feaeaa5..03bbe61 100644
--- a/remoting/protocol/fake_connection_to_host.cc
+++ b/remoting/protocol/fake_connection_to_host.cc
@@ -4,6 +4,7 @@
 
 #include "remoting/protocol/fake_connection_to_host.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/protocol/authenticator.h"
 #include "remoting/protocol/transport_context.h"
 
diff --git a/remoting/protocol/ice_connection_to_client.cc b/remoting/protocol/ice_connection_to_client.cc
index 2b01db6f..3d15299c 100644
--- a/remoting/protocol/ice_connection_to_client.cc
+++ b/remoting/protocol/ice_connection_to_client.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "net/base/io_buffer.h"
 #include "remoting/codec/audio_encoder.h"
diff --git a/remoting/protocol/ice_connection_to_host.cc b/remoting/protocol/ice_connection_to_host.cc
index f676530..e04084d 100644
--- a/remoting/protocol/ice_connection_to_host.cc
+++ b/remoting/protocol/ice_connection_to_host.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/base/constants.h"
 #include "remoting/protocol/audio_decode_scheduler.h"
 #include "remoting/protocol/audio_reader.h"
diff --git a/remoting/protocol/named_message_pipe_handler.cc b/remoting/protocol/named_message_pipe_handler.cc
index 79d134f9..2e7d21e 100644
--- a/remoting/protocol/named_message_pipe_handler.cc
+++ b/remoting/protocol/named_message_pipe_handler.cc
@@ -8,7 +8,6 @@
 
 #include "base/check.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "remoting/base/compound_buffer.h"
 
 namespace remoting::protocol {
diff --git a/remoting/protocol/transport_context.cc b/remoting/protocol/transport_context.cc
index 9699975..b5ebdc158 100644
--- a/remoting/protocol/transport_context.cc
+++ b/remoting/protocol/transport_context.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/webrtc/thread_wrapper.h"
 #include "net/url_request/url_request_context_getter.h"
diff --git a/remoting/protocol/webrtc_audio_module.cc b/remoting/protocol/webrtc_audio_module.cc
index 6576709..f00c95c85 100644
--- a/remoting/protocol/webrtc_audio_module.cc
+++ b/remoting/protocol/webrtc_audio_module.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/timer.h"
 
 namespace remoting::protocol {
diff --git a/remoting/protocol/webrtc_audio_sink_adapter.cc b/remoting/protocol/webrtc_audio_sink_adapter.cc
index 7c17ed18..0325d26 100644
--- a/remoting/protocol/webrtc_audio_sink_adapter.cc
+++ b/remoting/protocol/webrtc_audio_sink_adapter.cc
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/callback_helpers.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/proto/audio.pb.h"
 #include "remoting/protocol/audio_stub.h"
 
diff --git a/remoting/protocol/webrtc_audio_sink_adapter.h b/remoting/protocol/webrtc_audio_sink_adapter.h
index 4719aee..2d0207f 100644
--- a/remoting/protocol/webrtc_audio_sink_adapter.h
+++ b/remoting/protocol/webrtc_audio_sink_adapter.h
@@ -7,7 +7,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "third_party/webrtc/api/media_stream_interface.h"
 
 namespace base {
diff --git a/remoting/protocol/webrtc_audio_source_adapter.cc b/remoting/protocol/webrtc_audio_source_adapter.cc
index 398fb815..1d3be1f 100644
--- a/remoting/protocol/webrtc_audio_source_adapter.cc
+++ b/remoting/protocol/webrtc_audio_source_adapter.cc
@@ -10,6 +10,7 @@
 #include "base/check_op.h"
 #include "base/observer_list.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "remoting/proto/audio.pb.h"
diff --git a/remoting/protocol/webrtc_connection_to_client.cc b/remoting/protocol/webrtc_connection_to_client.cc
index a81467b6..03cfc76 100644
--- a/remoting/protocol/webrtc_connection_to_client.cc
+++ b/remoting/protocol/webrtc_connection_to_client.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/webrtc/thread_wrapper.h"
 #include "net/base/io_buffer.h"
 #include "remoting/codec/video_encoder.h"
diff --git a/remoting/protocol/webrtc_connection_to_host.cc b/remoting/protocol/webrtc_connection_to_host.cc
index cc098d4..a8b5b6d9 100644
--- a/remoting/protocol/webrtc_connection_to_host.cc
+++ b/remoting/protocol/webrtc_connection_to_host.cc
@@ -9,6 +9,7 @@
 
 #include "base/logging.h"
 #include "base/strings/string_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/webrtc/thread_wrapper.h"
 #include "remoting/base/constants.h"
 #include "remoting/protocol/client_control_dispatcher.h"
diff --git a/remoting/protocol/webrtc_video_encoder_wrapper.cc b/remoting/protocol/webrtc_video_encoder_wrapper.cc
index 102c3bc..a7079c9 100644
--- a/remoting/protocol/webrtc_video_encoder_wrapper.cc
+++ b/remoting/protocol/webrtc_video_encoder_wrapper.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "remoting/base/constants.h"
diff --git a/remoting/signaling/xmpp_log_to_server.cc b/remoting/signaling/xmpp_log_to_server.cc
index 734cfe7..1f94c1c 100644
--- a/remoting/signaling/xmpp_log_to_server.cc
+++ b/remoting/signaling/xmpp_log_to_server.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "remoting/base/constants.h"
 #include "remoting/signaling/iq_sender.h"
 #include "remoting/signaling/signal_strategy.h"
diff --git a/remoting/test/fake_socket_factory.h b/remoting/test/fake_socket_factory.h
index f742d0b..b7db8156 100644
--- a/remoting/test/fake_socket_factory.h
+++ b/remoting/test/fake_socket_factory.h
@@ -13,6 +13,7 @@
 #include "base/callback_forward.h"
 #include "base/compiler_specific.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "remoting/test/fake_network_dispatcher.h"
 #include "third_party/webrtc/api/packet_socket_factory.h"
diff --git a/remoting/test/ftl_services_playground.cc b/remoting/test/ftl_services_playground.cc
index 5c6c72c8..95505b0b 100644
--- a/remoting/test/ftl_services_playground.cc
+++ b/remoting/test/ftl_services_playground.cc
@@ -18,6 +18,7 @@
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "remoting/base/oauth_token_getter_impl.h"
 #include "remoting/base/protobuf_http_status.h"
 #include "remoting/base/url_request_context_getter.h"
diff --git a/remoting/test/ftl_signaling_playground.cc b/remoting/test/ftl_signaling_playground.cc
index 5ccbb23..e6c176a 100644
--- a/remoting/test/ftl_signaling_playground.cc
+++ b/remoting/test/ftl_signaling_playground.cc
@@ -19,6 +19,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/webrtc/thread_wrapper.h"
 #include "remoting/base/logging.h"
diff --git a/rlz/lib/financial_ping.cc b/rlz/lib/financial_ping.cc
index c189b5f..0f2d3b87 100644
--- a/rlz/lib/financial_ping.cc
+++ b/rlz/lib/financial_ping.cc
@@ -19,9 +19,9 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "rlz/lib/assert.h"
 #include "rlz/lib/lib_values.h"
diff --git a/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc b/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc
index ad7b8ad..3fec49fc 100644
--- a/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc
+++ b/sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc
@@ -45,6 +45,7 @@
 #include "base/path_service.h"
 #include "base/process/launch.h"
 #include "base/process/process.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread.h"
 #include "printing/buildflags/buildflags.h"
 #include "sandbox/policy/mojom/sandbox.mojom.h"
diff --git a/sandbox/policy/win/sandbox_diagnostics.cc b/sandbox/policy/win/sandbox_diagnostics.cc
index 964ec323..eb24fa99 100644
--- a/sandbox/policy/win/sandbox_diagnostics.cc
+++ b/sandbox/policy/win/sandbox_diagnostics.cc
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/json/json_reader.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/values.h"
 
 namespace sandbox {
diff --git a/sandbox/win/src/interception_agent.h b/sandbox/win/src/interception_agent.h
index c9d07385..07c3f82c 100644
--- a/sandbox/win/src/interception_agent.h
+++ b/sandbox/win/src/interception_agent.h
@@ -9,8 +9,10 @@
 #ifndef SANDBOX_WIN_SRC_INTERCEPTION_AGENT_H_
 #define SANDBOX_WIN_SRC_INTERCEPTION_AGENT_H_
 
+#include <windows.h>
+#include <winternl.h>
+
 #include "base/memory/raw_ptr_exclusion.h"
-#include "sandbox/win/src/nt_internals.h"
 #include "sandbox/win/src/sandbox_types.h"
 
 namespace sandbox {
diff --git a/sandbox/win/src/interceptors_64.cc b/sandbox/win/src/interceptors_64.cc
index f1e7c0c3..7d5078c 100644
--- a/sandbox/win/src/interceptors_64.cc
+++ b/sandbox/win/src/interceptors_64.cc
@@ -49,7 +49,7 @@
 
 NTSTATUS WINAPI
 TargetNtSetInformationThread64(HANDLE thread,
-                               NT_THREAD_INFORMATION_CLASS thread_info_class,
+                               THREADINFOCLASS thread_info_class,
                                PVOID thread_information,
                                ULONG thread_information_bytes) {
   NtSetInformationThreadFunction orig_fn =
diff --git a/sandbox/win/src/interceptors_64.h b/sandbox/win/src/interceptors_64.h
index cdfd9c6..8cb62d5 100644
--- a/sandbox/win/src/interceptors_64.h
+++ b/sandbox/win/src/interceptors_64.h
@@ -39,7 +39,7 @@
 // Interception of NtSetInformationThread on the child process.
 SANDBOX_INTERCEPT NTSTATUS WINAPI
 TargetNtSetInformationThread64(HANDLE thread,
-                               NT_THREAD_INFORMATION_CLASS thread_info_class,
+                               THREADINFOCLASS thread_info_class,
                                PVOID thread_information,
                                ULONG thread_information_bytes);
 
diff --git a/sandbox/win/src/nt_internals.h b/sandbox/win/src/nt_internals.h
index 7e933e8..d14282d 100644
--- a/sandbox/win/src/nt_internals.h
+++ b/sandbox/win/src/nt_internals.h
@@ -2,7 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// This file holds definitions related to the ntdll API.
+// This file holds definitions related to the ntdll API that are missing
+// from <winternl.h>.
 
 #ifndef SANDBOX_WIN_SRC_NT_INTERNALS_H__
 #define SANDBOX_WIN_SRC_NT_INTERNALS_H__
@@ -10,118 +11,12 @@
 #include <windows.h>
 
 #include <stddef.h>
-
-typedef LONG NTSTATUS;
-#define NT_SUCCESS(st) (st >= 0)
-#define NT_ERROR(st) ((((ULONG)(st)) >> 30) == 3)
+#include <winternl.h>
 
 #define CURRENT_PROCESS ((HANDLE)-1)
 #define CURRENT_THREAD ((HANDLE)-2)
 #define NtCurrentProcess CURRENT_PROCESS
 
-typedef struct _UNICODE_STRING {
-  USHORT Length;
-  USHORT MaximumLength;
-  PWSTR Buffer;
-} UNICODE_STRING;
-typedef UNICODE_STRING* PUNICODE_STRING;
-typedef const UNICODE_STRING* PCUNICODE_STRING;
-
-typedef struct _STRING {
-  USHORT Length;
-  USHORT MaximumLength;
-  PCHAR Buffer;
-} STRING;
-typedef STRING* PSTRING;
-
-typedef STRING ANSI_STRING;
-typedef PSTRING PANSI_STRING;
-typedef CONST PSTRING PCANSI_STRING;
-
-typedef STRING OEM_STRING;
-typedef PSTRING POEM_STRING;
-typedef CONST STRING* PCOEM_STRING;
-
-#define OBJ_CASE_INSENSITIVE 0x00000040L
-#define OBJ_OPENIF 0x00000080L
-
-typedef struct _OBJECT_ATTRIBUTES {
-  ULONG Length;
-  HANDLE RootDirectory;
-  PUNICODE_STRING ObjectName;
-  ULONG Attributes;
-  PVOID SecurityDescriptor;
-  PVOID SecurityQualityOfService;
-} OBJECT_ATTRIBUTES;
-typedef OBJECT_ATTRIBUTES* POBJECT_ATTRIBUTES;
-
-#define InitializeObjectAttributes(p, n, a, r, s) \
-  {                                               \
-    (p)->Length = sizeof(OBJECT_ATTRIBUTES);      \
-    (p)->RootDirectory = r;                       \
-    (p)->Attributes = a;                          \
-    (p)->ObjectName = n;                          \
-    (p)->SecurityDescriptor = s;                  \
-    (p)->SecurityQualityOfService = nullptr;      \
-  }
-
-typedef struct _IO_STATUS_BLOCK {
-  union {
-    NTSTATUS Status;
-    PVOID Pointer;
-  };
-  ULONG_PTR Information;
-} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
-
-// -----------------------------------------------------------------------
-// File IO
-
-// Create disposition values.
-
-#define FILE_SUPERSEDE                          0x00000000
-#define FILE_OPEN                               0x00000001
-#define FILE_CREATE                             0x00000002
-#define FILE_OPEN_IF                            0x00000003
-#define FILE_OVERWRITE                          0x00000004
-#define FILE_OVERWRITE_IF                       0x00000005
-#define FILE_MAXIMUM_DISPOSITION                0x00000005
-
-// Create/open option flags.
-
-#define FILE_DIRECTORY_FILE                     0x00000001
-#define FILE_WRITE_THROUGH                      0x00000002
-#define FILE_SEQUENTIAL_ONLY                    0x00000004
-#define FILE_NO_INTERMEDIATE_BUFFERING          0x00000008
-
-#define FILE_SYNCHRONOUS_IO_ALERT               0x00000010
-#define FILE_SYNCHRONOUS_IO_NONALERT            0x00000020
-#define FILE_NON_DIRECTORY_FILE                 0x00000040
-#define FILE_CREATE_TREE_CONNECTION             0x00000080
-
-#define FILE_COMPLETE_IF_OPLOCKED               0x00000100
-#define FILE_NO_EA_KNOWLEDGE                    0x00000200
-#define FILE_OPEN_REMOTE_INSTANCE               0x00000400
-#define FILE_RANDOM_ACCESS                      0x00000800
-
-#define FILE_DELETE_ON_CLOSE                    0x00001000
-#define FILE_OPEN_BY_FILE_ID                    0x00002000
-#define FILE_OPEN_FOR_BACKUP_INTENT             0x00004000
-#define FILE_NO_COMPRESSION                     0x00008000
-
-#define FILE_RESERVE_OPFILTER                   0x00100000
-#define FILE_OPEN_REPARSE_POINT                 0x00200000
-#define FILE_OPEN_NO_RECALL                     0x00400000
-#define FILE_OPEN_FOR_FREE_SPACE_QUERY          0x00800000
-
-// Create/open result values. These are the disposition values returned on the
-// io status information.
-#define FILE_SUPERSEDED                         0x00000000
-#define FILE_OPENED                             0x00000001
-#define FILE_CREATED                            0x00000002
-#define FILE_OVERWRITTEN                        0x00000003
-#define FILE_EXISTS                             0x00000004
-#define FILE_DOES_NOT_EXIST                     0x00000005
-
 typedef NTSTATUS(WINAPI* NtCreateFileFunction)(
     OUT PHANDLE FileHandle,
     IN ACCESS_MASK DesiredAccess,
@@ -145,10 +40,11 @@
 
 typedef NTSTATUS(WINAPI* NtCloseFunction)(IN HANDLE Handle);
 
-typedef enum _FILE_INFORMATION_CLASS {
-  FileRenameInformation = 10
-} FILE_INFORMATION_CLASS,
-    *PFILE_INFORMATION_CLASS;
+// Uses undocumented value not in FILE_INFORMATION_CLASS.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wenum-constexpr-conversion"
+constexpr auto FileRenameInformation = static_cast<FILE_INFORMATION_CLASS>(10);
+#pragma clang diagnostic push
 
 typedef struct _FILE_RENAME_INFORMATION {
   BOOLEAN ReplaceIfExists;
@@ -242,10 +138,8 @@
 // -----------------------------------------------------------------------
 // Process and Thread
 
-typedef struct _CLIENT_ID {
-  PVOID UniqueProcess;
-  PVOID UniqueThread;
-} CLIENT_ID, *PCLIENT_ID;
+// PCLIENT_ID not in winternl.h.
+typedef CLIENT_ID* PCLIENT_ID;
 
 typedef NTSTATUS(WINAPI* NtOpenThreadFunction)(OUT PHANDLE ThreadHandle,
                                                IN ACCESS_MASK DesiredAccess,
@@ -259,53 +153,33 @@
                                                     ObjectAttributes,
                                                 IN PCLIENT_ID ClientId);
 
-typedef enum _NT_THREAD_INFORMATION_CLASS {
-  ThreadBasicInformation,
-  ThreadTimes,
-  ThreadPriority,
-  ThreadBasePriority,
-  ThreadAffinityMask,
-  ThreadImpersonationToken,
-  ThreadDescriptorTableEntry,
-  ThreadEnableAlignmentFaultFixup,
-  ThreadEventPair,
-  ThreadQuerySetWin32StartAddress,
-  ThreadZeroTlsCell,
-  ThreadPerformanceCount,
-  ThreadAmILastThread,
-  ThreadIdealProcessor,
-  ThreadPriorityBoost,
-  ThreadSetTlsArrayAddress,
-  ThreadIsIoPending,
-  ThreadHideFromDebugger
-} NT_THREAD_INFORMATION_CLASS,
-    *PNT_THREAD_INFORMATION_CLASS;
+// Provide ThreadImpersonationToken which is not in THREADINFOCLASS.
+constexpr auto ThreadImpersonationToken = static_cast<THREADINFOCLASS>(5);
 
 typedef NTSTATUS(WINAPI* NtSetInformationThreadFunction)(
     IN HANDLE ThreadHandle,
-    IN NT_THREAD_INFORMATION_CLASS ThreadInformationClass,
+    IN THREADINFOCLASS ThreadInformationClass,
     IN PVOID ThreadInformation,
     IN ULONG ThreadInformationLength);
 
-// Partial definition only:
-typedef enum _PROCESSINFOCLASS {
-  ProcessBasicInformation = 0,
-  ProcessExecuteFlags = 0x22,
-  ProcessHandleTable = 0x3A
-} PROCESSINFOCLASS;
+typedef struct _PROCESS_ACCESS_TOKEN {
+  HANDLE token;
+  HANDLE thread;
+} PROCESS_ACCESS_TOKEN;
 
-// For the structure documentation, see
-// https://msdn.microsoft.com/en-us/library/windows/desktop/aa813741(v=vs.85).aspx
-typedef struct _RTL_USER_PROCESS_PARAMETERS {
-  BYTE Reserved1[16];
-  PVOID Reserved2[10];
-  UNICODE_STRING ImagePathName;
-  UNICODE_STRING CommandLine;
-} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+// Partial definition only for values not in PROCESS_INFO_CLASS.
+constexpr auto ProcessInformationAccessToken = static_cast<PROCESSINFOCLASS>(9);
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wenum-constexpr-conversion"
+// constexpr auto ProcessExecuteFlags = static_cast<PROCESSINFOCLASS>(34);
+constexpr auto ProcessHandleTable = static_cast<PROCESSINFOCLASS>(58);
+constexpr auto ProcessCommandLineInformation =
+    static_cast<PROCESSINFOCLASS>(60);
+#pragma clang diagnostic pop
 
-// Partial definition only, from
+// Partial definition only adding fields not in winternl.h, from
 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa813706(v=vs.85).aspx
-typedef struct _PEB {
+typedef struct _NT_PEB {
   BYTE InheritedAddressSpace;
   BYTE ReadImageFileExecOptions;
   BYTE BeingDebugged;
@@ -314,30 +188,12 @@
   PVOID ImageBaseAddress;
   PVOID Ldr;
   PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
-} PEB, *PPEB;
+} NT_PEB, *PNT_PEB;
 
-typedef LONG KPRIORITY;
-
-typedef struct _PROCESS_BASIC_INFORMATION {
-  union {
-    NTSTATUS ExitStatus;
-    PVOID padding_for_x64_0;
-  };
-  PPEB PebBaseAddress;
-  KAFFINITY AffinityMask;
-  union {
-    KPRIORITY BasePriority;
-    PVOID padding_for_x64_1;
-  };
-  union {
-    DWORD UniqueProcessId;
-    PVOID padding_for_x64_2;
-  };
-  union {
-    DWORD InheritedFromUniqueProcessId;
-    PVOID padding_for_x64_3;
-  };
-} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
+// Validate shared fields for NT_PEB:
+static_assert(offsetof(NT_PEB, Ldr) == offsetof(PEB, Ldr));
+static_assert(offsetof(NT_PEB, ProcessParameters) ==
+              offsetof(PEB, ProcessParameters));
 
 typedef NTSTATUS(WINAPI* NtQueryInformationProcessFunction)(
     IN HANDLE ProcessHandle,
@@ -376,13 +232,6 @@
     IN ULONG HandleAttributes,
     OUT PHANDLE TokenHandle);
 
-typedef NTSTATUS(WINAPI* NtQueryInformationTokenFunction)(
-    IN HANDLE TokenHandle,
-    IN TOKEN_INFORMATION_CLASS TokenInformationClass,
-    OUT PVOID TokenInformation,
-    IN ULONG TokenInformationLength,
-    OUT PULONG ReturnLength);
-
 typedef NTSTATUS(WINAPI* RtlCreateUserThreadFunction)(
     IN HANDLE Process,
     IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor,
@@ -395,11 +244,6 @@
     OUT PHANDLE Thread,
     OUT PCLIENT_ID ClientId);
 
-typedef NTSTATUS(WINAPI* RtlConvertSidToUnicodeStringFunction)(
-    OUT PUNICODE_STRING UnicodeString,
-    IN PSID Sid,
-    IN BOOLEAN AllocateDestinationString);
-
 typedef VOID(WINAPI* RtlFreeUnicodeStringFunction)(
     IN OUT PUNICODE_STRING UnicodeString);
 
@@ -546,7 +390,7 @@
   MemoryBasicVlmInformation
 } MEMORY_INFORMATION_CLASS;
 
-typedef struct _MEMORY_SECTION_NAME {  // Information Class 2
+typedef struct _MEMORY_SECTION_NAME {  // Information Class 2 MemorySectionName.
   UNICODE_STRING SectionFileName;
 } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
 
@@ -568,33 +412,8 @@
 // -----------------------------------------------------------------------
 // Objects
 
-typedef enum _OBJECT_INFORMATION_CLASS {
-  ObjectBasicInformation,
-  ObjectNameInformation,
-  ObjectTypeInformation,
-  ObjectAllInformation,
-  ObjectDataInformation
-} OBJECT_INFORMATION_CLASS,
-    *POBJECT_INFORMATION_CLASS;
-
-typedef struct _OBJDIR_INFORMATION {
-  UNICODE_STRING ObjectName;
-  UNICODE_STRING ObjectTypeName;
-  BYTE Data[1];
-} OBJDIR_INFORMATION;
-
-typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
-  ULONG Attributes;
-  ACCESS_MASK GrantedAccess;
-  ULONG HandleCount;
-  ULONG PointerCount;
-  ULONG Reserved[10];  // reserved for internal use
-} PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
-
-typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION {
-  UNICODE_STRING TypeName;
-  ULONG Reserved[22];  // reserved for internal use
-} PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
+// Add some field not in OBJECT_INFORMATION_CLASS.
+constexpr auto ObjectNameInformation = static_cast<OBJECT_INFORMATION_CLASS>(1);
 
 typedef enum _POOL_TYPE {
   NonPagedPool,
@@ -645,25 +464,6 @@
   ULONG NonPagedPoolUsage;
 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
 
-typedef enum _SYSTEM_INFORMATION_CLASS {
-  SystemHandleInformation = 16
-} SYSTEM_INFORMATION_CLASS;
-
-typedef struct _SYSTEM_HANDLE_INFORMATION {
-  USHORT ProcessId;
-  USHORT CreatorBackTraceIndex;
-  UCHAR ObjectTypeNumber;
-  UCHAR Flags;
-  USHORT Handle;
-  PVOID Object;
-  ACCESS_MASK GrantedAccess;
-} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
-
-typedef struct _SYSTEM_HANDLE_INFORMATION_EX {
-  ULONG NumberOfHandles;
-  SYSTEM_HANDLE_INFORMATION Information[1];
-} SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX;
-
 typedef struct _OBJECT_NAME_INFORMATION {
   UNICODE_STRING ObjectName;
 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
@@ -695,12 +495,6 @@
     IN BOOLEAN Alertable,
     IN PLARGE_INTEGER TimeOut OPTIONAL);
 
-typedef NTSTATUS(WINAPI* NtQuerySystemInformation)(
-    IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
-    OUT PVOID SystemInformation,
-    IN ULONG SystemInformationLength,
-    OUT PULONG ReturnLength);
-
 // -----------------------------------------------------------------------
 // Strings
 
@@ -732,21 +526,4 @@
 
 typedef ULONG(WINAPI* RtlNtStatusToDosErrorFunction)(NTSTATUS status);
 
-typedef NTSTATUS(WINAPI* NtSetInformationProcess)(IN HANDLE process_handle,
-                                                  IN ULONG info_class,
-                                                  IN PVOID process_information,
-                                                  IN ULONG information_length);
-
-struct PROCESS_ACCESS_TOKEN {
-  HANDLE token;
-  HANDLE thread;
-};
-
-const unsigned int NtProcessInformationAccessToken = 9;
-
-typedef NTSTATUS(WINAPI* RtlDeriveCapabilitySidsFromNameFunction)(
-    PCUNICODE_STRING SourceString,
-    PSID CapabilityGroupSid,
-    PSID CapabilitySid);
-
 #endif  // SANDBOX_WIN_SRC_NT_INTERNALS_H__
diff --git a/sandbox/win/src/policy_target.cc b/sandbox/win/src/policy_target.cc
index 8c866d42..f80507d 100644
--- a/sandbox/win/src/policy_target.cc
+++ b/sandbox/win/src/policy_target.cc
@@ -72,7 +72,7 @@
 NTSTATUS WINAPI TargetNtSetInformationThread(
     NtSetInformationThreadFunction orig_SetInformationThread,
     HANDLE thread,
-    NT_THREAD_INFORMATION_CLASS thread_info_class,
+    THREADINFOCLASS thread_info_class,
     PVOID thread_information,
     ULONG thread_information_bytes) {
   do {
diff --git a/sandbox/win/src/policy_target.h b/sandbox/win/src/policy_target.h
index ca25621..165caf9b 100644
--- a/sandbox/win/src/policy_target.h
+++ b/sandbox/win/src/policy_target.h
@@ -22,8 +22,10 @@
 // Interception of NtSetInformationThread on the child process.
 // It should never be called directly.
 SANDBOX_INTERCEPT NTSTATUS WINAPI TargetNtSetInformationThread(
-    NtSetInformationThreadFunction orig_SetInformationThread, HANDLE thread,
-    NT_THREAD_INFORMATION_CLASS thread_info_class, PVOID thread_information,
+    NtSetInformationThreadFunction orig_SetInformationThread,
+    HANDLE thread,
+    THREADINFOCLASS thread_info_class,
+    PVOID thread_information,
     ULONG thread_information_bytes);
 
 // Interception of NtOpenThreadToken on the child process.
diff --git a/sandbox/win/src/resolver.cc b/sandbox/win/src/resolver.cc
index d6126ad..79fe271 100644
--- a/sandbox/win/src/resolver.cc
+++ b/sandbox/win/src/resolver.cc
@@ -4,6 +4,8 @@
 
 #include "sandbox/win/src/resolver.h"
 
+#include <windows.h>
+
 #include <ntstatus.h>
 #include <stddef.h>
 
diff --git a/sandbox/win/src/resolver.h b/sandbox/win/src/resolver.h
index 53a744ad..5dd5bbc 100644
--- a/sandbox/win/src/resolver.h
+++ b/sandbox/win/src/resolver.h
@@ -12,7 +12,7 @@
 #include <stddef.h>
 
 #include "base/memory/raw_ptr_exclusion.h"
-#include "sandbox/win/src/nt_internals.h"
+#include "base/win/windows_types.h"
 
 namespace sandbox {
 
diff --git a/sandbox/win/src/sandbox_nt_util.cc b/sandbox/win/src/sandbox_nt_util.cc
index 39b7ead..68d6839a 100644
--- a/sandbox/win/src/sandbox_nt_util.cc
+++ b/sandbox/win/src/sandbox_nt_util.cc
@@ -347,7 +347,10 @@
   if (!NT_SUCCESS(ret) || sizeof(proc_info) != bytes_returned)
     return ret;
 
-  *process_id = proc_info.UniqueProcessId;
+  // https://learn.microsoft.com/en-us/windows/win32/api/winternl/nf-winternl-ntqueryinformationprocess
+  // "UniqueProcessId Can be cast to a DWORD and contains a unique identifier
+  // for this process."
+  *process_id = static_cast<DWORD>(proc_info.UniqueProcessId);
   return STATUS_SUCCESS;
 }
 
diff --git a/sandbox/win/src/sandbox_utils.cc b/sandbox/win/src/sandbox_utils.cc
index 5bb619bd..f0312027 100644
--- a/sandbox/win/src/sandbox_utils.cc
+++ b/sandbox/win/src/sandbox_utils.cc
@@ -8,6 +8,7 @@
 
 #include "base/check.h"
 #include "sandbox/win/src/internal_types.h"
+#include "sandbox/win/src/nt_internals.h"
 
 namespace sandbox {
 
diff --git a/sandbox/win/src/sandbox_utils.h b/sandbox/win/src/sandbox_utils.h
index 87cb7fd6..6752e2e 100644
--- a/sandbox/win/src/sandbox_utils.h
+++ b/sandbox/win/src/sandbox_utils.h
@@ -6,9 +6,9 @@
 #define SANDBOX_WIN_SRC_SANDBOX_UTILS_H_
 
 #include <windows.h>
-#include <string>
+#include <winternl.h>
 
-#include "sandbox/win/src/nt_internals.h"
+#include <string>
 
 namespace sandbox {
 
diff --git a/sandbox/win/src/service_resolver.h b/sandbox/win/src/service_resolver.h
index 2cfdb409..d27739b 100644
--- a/sandbox/win/src/service_resolver.h
+++ b/sandbox/win/src/service_resolver.h
@@ -7,7 +7,7 @@
 
 #include <stddef.h>
 
-#include "sandbox/win/src/nt_internals.h"
+#include "base/win/windows_types.h"
 #include "sandbox/win/src/resolver.h"
 
 namespace sandbox {
diff --git a/sandbox/win/src/service_resolver_32.cc b/sandbox/win/src/service_resolver_32.cc
index 0f1fab9..2770225 100644
--- a/sandbox/win/src/service_resolver_32.cc
+++ b/sandbox/win/src/service_resolver_32.cc
@@ -4,8 +4,11 @@
 
 #include "sandbox/win/src/service_resolver.h"
 
+#include <windows.h>
+
 #include <ntstatus.h>
 #include <stddef.h>
+#include <winternl.h>
 
 #include <memory>
 
diff --git a/sandbox/win/src/target_process.cc b/sandbox/win/src/target_process.cc
index 5e142d4..0a524b0a 100644
--- a/sandbox/win/src/target_process.cc
+++ b/sandbox/win/src/target_process.cc
@@ -361,8 +361,7 @@
   process_access_token.token = token.Get();
 
   NTSTATUS status = GetNtExports()->SetInformationProcess(
-      sandbox_process_info_.process_handle(),
-      static_cast<PROCESSINFOCLASS>(NtProcessInformationAccessToken),
+      sandbox_process_info_.process_handle(), ProcessInformationAccessToken,
       &process_access_token, sizeof(process_access_token));
   if (!NT_SUCCESS(status)) {
     ::SetLastError(GetLastErrorFromNtStatus(status));
diff --git a/sandbox/win/src/win_utils.cc b/sandbox/win/src/win_utils.cc
index 8e66f18..adb487a 100644
--- a/sandbox/win/src/win_utils.cc
+++ b/sandbox/win/src/win_utils.cc
@@ -540,7 +540,7 @@
   if (STATUS_SUCCESS != status)
     return nullptr;
 
-  PEB peb = {};
+  NT_PEB peb = {};
   SIZE_T bytes_read = 0;
   if (!::ReadProcessMemory(process, process_basic_info.PebBaseAddress, &peb,
                            sizeof(peb), &bytes_read) ||
diff --git a/services/audio/debug_recording_unittest.cc b/services/audio/debug_recording_unittest.cc
index 1f2db00..b9dcecc 100644
--- a/services/audio/debug_recording_unittest.cc
+++ b/services/audio/debug_recording_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/files/file_path.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "media/audio/aecdump_recording_manager.h"
 #include "media/audio/audio_debug_recording_test.h"
diff --git a/services/audio/device_listener_output_stream.h b/services/audio/device_listener_output_stream.h
index 1db3cab..8f67ba07 100644
--- a/services/audio/device_listener_output_stream.h
+++ b/services/audio/device_listener_output_stream.h
@@ -7,6 +7,7 @@
 
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/audio/audio_io.h"
 #include "media/audio/audio_manager.h"
 
diff --git a/services/audio/input_controller.h b/services/audio/input_controller.h
index caf9e9a3..538f794f 100644
--- a/services/audio/input_controller.h
+++ b/services/audio/input_controller.h
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/services/audio/output_controller.h b/services/audio/output_controller.h
index 273b056..3f9016ae 100644
--- a/services/audio/output_controller.h
+++ b/services/audio/output_controller.h
@@ -15,6 +15,7 @@
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "base/unguessable_token.h"
diff --git a/services/audio/output_device_mixer.cc b/services/audio/output_device_mixer.cc
index 18ebe4d..39697d5 100644
--- a/services/audio/output_device_mixer.cc
+++ b/services/audio/output_device_mixer.cc
@@ -4,6 +4,7 @@
 
 #include "services/audio/output_device_mixer.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/audio/mixing_graph.h"
 #include "services/audio/output_device_mixer_impl.h"
 
diff --git a/services/audio/output_device_mixer_manager_unittest.cc b/services/audio/output_device_mixer_manager_unittest.cc
index 1ff44344..ba31234 100644
--- a/services/audio/output_device_mixer_manager_unittest.cc
+++ b/services/audio/output_device_mixer_manager_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "services/audio/output_device_mixer_manager.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
diff --git a/services/audio/public/cpp/sounds/audio_stream_handler.h b/services/audio/public/cpp/sounds/audio_stream_handler.h
index e3b2534..50f536b 100644
--- a/services/audio/public/cpp/sounds/audio_stream_handler.h
+++ b/services/audio/public/cpp/sounds/audio_stream_handler.h
@@ -13,6 +13,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/sequence_checker.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "media/audio/audio_io.h"
 #include "media/base/audio_parameters.h"
diff --git a/services/audio/public/cpp/sounds/sounds_manager_unittest.cc b/services/audio/public/cpp/sounds/sounds_manager_unittest.cc
index d13dc55..9fa870e5 100644
--- a/services/audio/public/cpp/sounds/sounds_manager_unittest.cc
+++ b/services/audio/public/cpp/sounds/sounds_manager_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/run_loop.h"
 #include "base/strings/string_piece.h"
 #include "base/test/test_message_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "media/audio/simple_sources.h"
 #include "media/audio/test_audio_thread.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/services/audio/test/audio_system_to_service_adapter_test.cc b/services/audio/test/audio_system_to_service_adapter_test.cc
index 1717adf..57013f3 100644
--- a/services/audio/test/audio_system_to_service_adapter_test.cc
+++ b/services/audio/test/audio_system_to_service_adapter_test.cc
@@ -5,6 +5,7 @@
 #include "services/audio/public/cpp/audio_system_to_service_adapter.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
diff --git a/services/data_decoder/data_decoder_service.cc b/services/data_decoder/data_decoder_service.cc
index 8aa712e..7f8f247 100644
--- a/services/data_decoder/data_decoder_service.cc
+++ b/services/data_decoder/data_decoder_service.cc
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/services/data_decoder/public/cpp/data_decoder.cc b/services/data_decoder/public/cpp/data_decoder.cc
index 812aff9b..35d52cd 100644
--- a/services/data_decoder/public/cpp/data_decoder.cc
+++ b/services/data_decoder/public/cpp/data_decoder.cc
@@ -9,6 +9,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/no_destructor.h"
 #include "base/parsing_buildflags.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/services/data_decoder/public/cpp/safe_xml_parser.cc b/services/data_decoder/public/cpp/safe_xml_parser.cc
index 454077b..ba72779b 100644
--- a/services/data_decoder/public/cpp/safe_xml_parser.cc
+++ b/services/data_decoder/public/cpp/safe_xml_parser.cc
@@ -13,11 +13,10 @@
 
 namespace data_decoder {
 
-const base::Value* GetXmlElementChildren(const base::Value& element) {
+const base::Value::List* GetXmlElementChildren(const base::Value& element) {
   if (!element.is_dict())
     return nullptr;
-  return element.FindKeyOfType(mojom::XmlParser::kChildrenKey,
-                               base::Value::Type::LIST);
+  return element.GetDict().FindList(mojom::XmlParser::kChildrenKey);
 }
 
 std::string GetXmlQualifiedName(const std::string& name_space,
@@ -28,67 +27,71 @@
 bool IsXmlElementNamed(const base::Value& element, const std::string& name) {
   if (!element.is_dict())
     return false;
-  const base::Value* tag_text = element.FindKeyOfType(
-      mojom::XmlParser::kTagKey, base::Value::Type::STRING);
-  return tag_text ? tag_text->GetString() == name : false;
+  const std::string* tag_text =
+      element.GetDict().FindString(mojom::XmlParser::kTagKey);
+  return tag_text ? *tag_text == name : false;
 }
 
 bool IsXmlElementOfType(const base::Value& element, const std::string& type) {
   if (!element.is_dict())
     return false;
-  const base::Value* type_text = element.FindKeyOfType(
-      mojom::XmlParser::kTypeKey, base::Value::Type::STRING);
-  return type_text ? type_text->GetString() == type : false;
+  const std::string* type_text =
+      element.GetDict().FindString(mojom::XmlParser::kTypeKey);
+  return type_text ? *type_text == type : false;
 }
 
 bool GetXmlElementTagName(const base::Value& element, std::string* tag_name) {
   DCHECK(tag_name);
   if (!element.is_dict())
     return false;
-  const base::Value* tag_text = element.FindKeyOfType(
-      mojom::XmlParser::kTagKey, base::Value::Type::STRING);
+  const std::string* tag_text =
+      element.GetDict().FindString(mojom::XmlParser::kTagKey);
   if (!tag_text)
     return false;
-  *tag_name = tag_text->GetString();
+  *tag_name = *tag_text;
   return true;
 }
 
 bool GetXmlElementText(const base::Value& element, std::string* text) {
   DCHECK(text);
-  const base::Value* children = GetXmlElementChildren(element);
+  const base::Value::List* children = GetXmlElementChildren(element);
   if (!children)
     return false;
 
   const base::Value* text_node = nullptr;
-  for (const base::Value& value : children->GetList()) {
+  for (const base::Value& value : *children) {
     if (IsXmlElementOfType(value, mojom::XmlParser::kTextNodeType) ||
         IsXmlElementOfType(value, mojom::XmlParser::kCDataNodeType)) {
       text_node = &value;
       break;
     }
   }
-  if (!text_node)
+  if (!text_node || !text_node->is_dict()) {
     return false;
+  }
 
-  const base::Value* text_value = text_node->FindKeyOfType(
-      mojom::XmlParser::kTextKey, base::Value::Type::STRING);
-  ;
-  *text = text_value ? text_value->GetString() : "";
+  const std::string* text_value =
+      text_node->GetDict().FindString(mojom::XmlParser::kTextKey);
+  *text = text_value ? *text_value : "";
   return true;
 }
 
 bool GetXmlElementNamespacePrefix(const base::Value& element,
                                   const std::string& namespace_uri,
                                   std::string* prefix) {
+  if (!element.is_dict()) {
+    return false;
+  }
+
   prefix->clear();
-  const base::Value* namespaces = element.FindKeyOfType(
-      mojom::XmlParser::kNamespacesKey, base::Value::Type::DICTIONARY);
+  const base::Value::Dict* namespaces =
+      element.GetDict().FindDict(mojom::XmlParser::kNamespacesKey);
   if (!namespaces)
     return false;
 
   // The namespaces dictionary is prefix -> URI, so we have to do a reverse
   // lookup.
-  for (auto item : namespaces->DictItems()) {
+  for (auto item : *namespaces) {
     if (item.second.GetString() == namespace_uri) {
       *prefix = item.first;
       return true;
@@ -99,11 +102,11 @@
 
 int GetXmlElementChildrenCount(const base::Value& element,
                                const std::string& name) {
-  const base::Value* children = GetXmlElementChildren(element);
+  const base::Value::List* children = GetXmlElementChildren(element);
   if (!children)
     return 0;
   int child_count = 0;
-  for (const base::Value& value : children->GetList()) {
+  for (const base::Value& value : *children) {
     DCHECK(value.is_dict());
     std::string tag_name;
     bool success = GetXmlElementTagName(value, &tag_name);
@@ -115,10 +118,10 @@
 
 const base::Value* GetXmlElementChildWithType(const base::Value& element,
                                               const std::string& type) {
-  const base::Value* children = GetXmlElementChildren(element);
+  const base::Value::List* children = GetXmlElementChildren(element);
   if (!children)
     return nullptr;
-  for (const base::Value& value : children->GetList()) {
+  for (const base::Value& value : *children) {
     DCHECK(value.is_dict());
     if (IsXmlElementOfType(value, type)) {
       return &value;
@@ -129,10 +132,10 @@
 
 const base::Value* GetXmlElementChildWithTag(const base::Value& element,
                                              const std::string& tag) {
-  const base::Value* children = GetXmlElementChildren(element);
+  const base::Value::List* children = GetXmlElementChildren(element);
   if (!children)
     return nullptr;
-  for (const base::Value& value : children->GetList()) {
+  for (const base::Value& value : *children) {
     DCHECK(value.is_dict());
     if (IsXmlElementNamed(value, tag))
       return &value;
@@ -144,11 +147,11 @@
     const base::Value& element,
     const std::string& tag,
     std::vector<const base::Value*>* children_out) {
-  const base::Value* children = GetXmlElementChildren(element);
+  const base::Value::List* children = GetXmlElementChildren(element);
   if (!children)
     return false;
   bool found = false;
-  for (const base::Value& child : children->GetList()) {
+  for (const base::Value& child : *children) {
     DCHECK(child.is_dict());
     if (IsXmlElementNamed(child, tag)) {
       found = true;
@@ -194,14 +197,13 @@
   if (!element.is_dict())
     return "";
 
-  const base::Value* attributes = element.FindKeyOfType(
-      mojom::XmlParser::kAttributesKey, base::Value::Type::DICTIONARY);
+  const base::Value::Dict* attributes =
+      element.GetDict().FindDict(mojom::XmlParser::kAttributesKey);
   if (!attributes)
     return "";
 
-  const base::Value* value =
-      attributes->FindKeyOfType(element_name, base::Value::Type::STRING);
-  return value ? value->GetString() : "";
+  const std::string* value = attributes->FindString(element_name);
+  return value ? *value : "";
 }
 
 }  // namespace data_decoder
diff --git a/services/data_decoder/public/cpp/safe_xml_parser.h b/services/data_decoder/public/cpp/safe_xml_parser.h
index 61be136..e3b554a 100644
--- a/services/data_decoder/public/cpp/safe_xml_parser.h
+++ b/services/data_decoder/public/cpp/safe_xml_parser.h
@@ -12,15 +12,12 @@
 
 #include "base/callback.h"
 #include "base/token.h"
-
-namespace base {
-class Value;
-}
+#include "base/values.h"
 
 namespace data_decoder {
 
 // Returns all the children of |element|.
-const base::Value* GetXmlElementChildren(const base::Value& element);
+const base::Value::List* GetXmlElementChildren(const base::Value& element);
 
 // Returns the qualified name |name_space|:|name| or simply |name| if
 // |name_space| is empty.
diff --git a/services/device/compute_pressure/platform_collector.cc b/services/device/compute_pressure/platform_collector.cc
index a0b6e73..03f33b8 100644
--- a/services/device/compute_pressure/platform_collector.cc
+++ b/services/device/compute_pressure/platform_collector.cc
@@ -14,7 +14,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "services/device/compute_pressure/cpu_probe.h"
 #include "services/device/compute_pressure/pressure_sample.h"
diff --git a/services/device/device_service.h b/services/device/device_service.h
index 4ef2591..3ee5d67 100644
--- a/services/device/device_service.h
+++ b/services/device/device_service.h
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/services/device/device_service_test_base.h b/services/device/device_service_test_base.h
index 0a9e76f4..4273272 100644
--- a/services/device/device_service_test_base.h
+++ b/services/device/device_service_test_base.h
@@ -5,6 +5,7 @@
 #ifndef SERVICES_DEVICE_DEVICE_SERVICE_TEST_BASE_H_
 #define SERVICES_DEVICE_DEVICE_SERVICE_TEST_BASE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc b/services/device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc
index ef3673b..2ac4ba3 100644
--- a/services/device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc
+++ b/services/device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc
@@ -19,7 +19,6 @@
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "services/device/generic_sensor/generic_sensor_consts.h"
 #include "services/device/generic_sensor/linux/sensor_data_linux.h"
diff --git a/services/device/generic_sensor/platform_sensor_android.h b/services/device/generic_sensor/platform_sensor_android.h
index 1e416ad1..01712eb 100644
--- a/services/device/generic_sensor/platform_sensor_android.h
+++ b/services/device/generic_sensor/platform_sensor_android.h
@@ -7,6 +7,7 @@
 
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "services/device/generic_sensor/platform_sensor.h"
 
diff --git a/services/device/generic_sensor/platform_sensor_provider_win.cc b/services/device/generic_sensor/platform_sensor_provider_win.cc
index 5b83ac8..6cfa095 100644
--- a/services/device/generic_sensor/platform_sensor_provider_win.cc
+++ b/services/device/generic_sensor/platform_sensor_provider_win.cc
@@ -10,6 +10,7 @@
 #include <iomanip>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread.h"
diff --git a/services/device/generic_sensor/platform_sensor_provider_win.h b/services/device/generic_sensor/platform_sensor_provider_win.h
index bb519d7..b67d7a58 100644
--- a/services/device/generic_sensor/platform_sensor_provider_win.h
+++ b/services/device/generic_sensor/platform_sensor_provider_win.h
@@ -8,6 +8,7 @@
 #include <SensorsApi.h>
 #include <wrl/client.h>
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/device/generic_sensor/platform_sensor_provider.h"
 
 namespace device {
diff --git a/services/device/generic_sensor/platform_sensor_provider_winrt.h b/services/device/generic_sensor/platform_sensor_provider_winrt.h
index f2c0e06..d987d6d 100644
--- a/services/device/generic_sensor/platform_sensor_provider_winrt.h
+++ b/services/device/generic_sensor/platform_sensor_provider_winrt.h
@@ -5,6 +5,7 @@
 #ifndef SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_WINRT_H_
 #define SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_WINRT_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/device/generic_sensor/platform_sensor_provider.h"
 
 namespace device {
diff --git a/services/device/generic_sensor/platform_sensor_reader_win.h b/services/device/generic_sensor/platform_sensor_reader_win.h
index 526fb25..9df5be0 100644
--- a/services/device/generic_sensor/platform_sensor_reader_win.h
+++ b/services/device/generic_sensor/platform_sensor_reader_win.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "services/device/generic_sensor/platform_sensor_reader_win_base.h"
 #include "services/device/public/mojom/sensor.mojom.h"
diff --git a/services/device/geolocation/core_location_provider.cc b/services/device/geolocation/core_location_provider.cc
index 4c01670..90216aa7 100644
--- a/services/device/geolocation/core_location_provider.cc
+++ b/services/device/geolocation/core_location_provider.cc
@@ -7,6 +7,7 @@
 #include "services/device/geolocation/core_location_provider.h"
 
 #include "base/mac/scoped_cftyperef.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/device/public/cpp/device_features.h"
 #include "services/device/public/cpp/geolocation/location_system_permission_status.h"
 
diff --git a/services/device/geolocation/core_location_provider.h b/services/device/geolocation/core_location_provider.h
index 7fcfabc..e1cd9d9 100644
--- a/services/device/geolocation/core_location_provider.h
+++ b/services/device/geolocation/core_location_provider.h
@@ -6,6 +6,7 @@
 #define SERVICES_DEVICE_GEOLOCATION_CORE_LOCATION_PROVIDER_H_
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/device/public/cpp/geolocation/geolocation_manager.h"
 #include "services/device/public/cpp/geolocation/location_provider.h"
 #include "services/device/public/mojom/geoposition.mojom.h"
diff --git a/services/device/geolocation/core_location_provider_unittest.mm b/services/device/geolocation/core_location_provider_unittest.mm
index 00d2961..7210667 100644
--- a/services/device/geolocation/core_location_provider_unittest.mm
+++ b/services/device/geolocation/core_location_provider_unittest.mm
@@ -5,6 +5,7 @@
 #include "services/device/geolocation/core_location_provider.h"
 
 #include "base/run_loop.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
diff --git a/services/device/geolocation/location_arbitrator.cc b/services/device/geolocation/location_arbitrator.cc
index 5335e0e..0c48a3e 100644
--- a/services/device/geolocation/location_arbitrator.cc
+++ b/services/device/geolocation/location_arbitrator.cc
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "services/device/geolocation/network_location_provider.h"
 #include "services/device/geolocation/wifi_polling_policy.h"
diff --git a/services/device/geolocation/location_provider_android.cc b/services/device/geolocation/location_provider_android.cc
index c7c45e16..893354de 100644
--- a/services/device/geolocation/location_provider_android.cc
+++ b/services/device/geolocation/location_provider_android.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/device/geolocation/location_api_adapter_android.h"
 
 namespace device {
diff --git a/services/device/geolocation/network_location_provider.h b/services/device/geolocation/network_location_provider.h
index 294a4085..5c40a59e 100644
--- a/services/device/geolocation/network_location_provider.h
+++ b/services/device/geolocation/network_location_provider.h
@@ -15,6 +15,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
diff --git a/services/device/geolocation/wifi_data_provider_common_unittest.cc b/services/device/geolocation/wifi_data_provider_common_unittest.cc
index b5ed73c..53c4a20 100644
--- a/services/device/geolocation/wifi_data_provider_common_unittest.cc
+++ b/services/device/geolocation/wifi_data_provider_common_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "services/device/geolocation/wifi_data_provider_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/services/device/geolocation/win/location_provider_winrt.cc b/services/device/geolocation/win/location_provider_winrt.cc
index 71118db7..cd392c9e 100644
--- a/services/device/geolocation/win/location_provider_winrt.cc
+++ b/services/device/geolocation/win/location_provider_winrt.cc
@@ -12,6 +12,7 @@
 #include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/win/core_winrt_util.h"
 #include "services/device/public/cpp/device_features.h"
 #include "services/device/public/cpp/geolocation/geoposition.h"
diff --git a/services/device/public/cpp/test/fake_usb_device_manager.cc b/services/device/public/cpp/test/fake_usb_device_manager.cc
index d19d3e1..72abb709 100644
--- a/services/device/public/cpp/test/fake_usb_device_manager.cc
+++ b/services/device/public/cpp/test/fake_usb_device_manager.cc
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/containers/contains.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "services/device/public/cpp/test/fake_usb_device.h"
diff --git a/services/device/serial/bluetooth_serial_device_enumerator.cc b/services/device/serial/bluetooth_serial_device_enumerator.cc
index bd723397..234d8fd 100644
--- a/services/device/serial/bluetooth_serial_device_enumerator.cc
+++ b/services/device/serial/bluetooth_serial_device_enumerator.cc
@@ -10,6 +10,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
 #include "services/device/public/cpp/bluetooth/bluetooth_utils.h"
diff --git a/services/device/serial/bluetooth_serial_device_enumerator.h b/services/device/serial/bluetooth_serial_device_enumerator.h
index 4e99566..c7c9e90 100644
--- a/services/device/serial/bluetooth_serial_device_enumerator.h
+++ b/services/device/serial/bluetooth_serial_device_enumerator.h
@@ -13,6 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "services/device/public/mojom/serial.mojom-forward.h"
diff --git a/services/device/serial/bluetooth_serial_device_enumerator_unittests.cc b/services/device/serial/bluetooth_serial_device_enumerator_unittests.cc
index 2521a43c..a7b2c015 100644
--- a/services/device/serial/bluetooth_serial_device_enumerator_unittests.cc
+++ b/services/device/serial/bluetooth_serial_device_enumerator_unittests.cc
@@ -9,6 +9,7 @@
 #include "base/command_line.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
diff --git a/services/device/serial/bluetooth_serial_port_impl.h b/services/device/serial/bluetooth_serial_port_impl.h
index b04dc22..011e317b 100644
--- a/services/device/serial/bluetooth_serial_port_impl.h
+++ b/services/device/serial/bluetooth_serial_port_impl.h
@@ -8,7 +8,6 @@
 #include "base/containers/span.h"
 #include "base/sequence_checker.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_socket.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/services/device/serial/serial_device_enumerator.cc b/services/device/serial/serial_device_enumerator.cc
index 8488e7df..30c7f69 100644
--- a/services/device/serial/serial_device_enumerator.cc
+++ b/services/device/serial/serial_device_enumerator.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/observer_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
 #include "components/device_event_log/device_event_log.h"
diff --git a/services/device/serial/serial_device_enumerator.h b/services/device/serial/serial_device_enumerator.h
index 9a769ee5..a659f8e 100644
--- a/services/device/serial/serial_device_enumerator.h
+++ b/services/device/serial/serial_device_enumerator.h
@@ -11,6 +11,7 @@
 
 #include "base/observer_list.h"
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "services/device/public/mojom/serial.mojom.h"
 #include "services/device/serial/serial_io_handler.h"
diff --git a/services/device/serial/serial_device_enumerator_win.cc b/services/device/serial/serial_device_enumerator_win.cc
index 3be2c26..1f8a3871 100644
--- a/services/device/serial/serial_device_enumerator_win.cc
+++ b/services/device/serial/serial_device_enumerator_win.cc
@@ -30,6 +30,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/win/registry.h"
 #include "base/win/scoped_devinfo.h"
diff --git a/services/device/serial/serial_device_enumerator_win.h b/services/device/serial/serial_device_enumerator_win.h
index 7be73a5..3499e16e 100644
--- a/services/device/serial/serial_device_enumerator_win.h
+++ b/services/device/serial/serial_device_enumerator_win.h
@@ -5,6 +5,7 @@
 #ifndef SERVICES_DEVICE_SERIAL_SERIAL_DEVICE_ENUMERATOR_WIN_H_
 #define SERVICES_DEVICE_SERIAL_SERIAL_DEVICE_ENUMERATOR_WIN_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/win/windows_types.h"
 #include "device/base/device_monitor_win.h"
 #include "services/device/serial/serial_device_enumerator.h"
diff --git a/services/device/serial/serial_io_handler.h b/services/device/serial/serial_io_handler.h
index 6d441c8..c1463b9 100644
--- a/services/device/serial/serial_io_handler.h
+++ b/services/device/serial/serial_io_handler.h
@@ -15,7 +15,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "services/device/public/mojom/serial.mojom.h"
 
diff --git a/services/device/serial/serial_io_handler_posix.cc b/services/device/serial/serial_io_handler_posix.cc
index 26125c4..21535df 100644
--- a/services/device/serial/serial_io_handler_posix.cc
+++ b/services/device/serial/serial_io_handler_posix.cc
@@ -13,6 +13,7 @@
 #include "base/bind.h"
 #include "base/files/file_util.h"
 #include "base/posix/eintr_wrapper.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "components/device_event_log/device_event_log.h"
 
diff --git a/services/device/serial/serial_io_handler_posix.h b/services/device/serial/serial_io_handler_posix.h
index e88a620d..40e781fb 100644
--- a/services/device/serial/serial_io_handler_posix.h
+++ b/services/device/serial/serial_io_handler_posix.h
@@ -9,7 +9,6 @@
 
 #include "base/files/file_descriptor_watcher_posix.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "services/device/serial/serial_io_handler.h"
 
 namespace device {
diff --git a/services/device/serial/serial_io_handler_win.cc b/services/device/serial/serial_io_handler_win.cc
index d91df41..c3134b59 100644
--- a/services/device/serial/serial_io_handler_win.cc
+++ b/services/device/serial/serial_io_handler_win.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/sequence_checker.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/device_event_log/device_event_log.h"
 
diff --git a/services/device/serial/serial_io_handler_win.h b/services/device/serial/serial_io_handler_win.h
index 3e3a33a..1283611 100644
--- a/services/device/serial/serial_io_handler_win.h
+++ b/services/device/serial/serial_io_handler_win.h
@@ -11,7 +11,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/message_loop/message_pump_for_io.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "services/device/serial/serial_io_handler.h"
 
 namespace device {
diff --git a/services/device/serial/serial_port_manager_impl.cc b/services/device/serial/serial_port_manager_impl.cc
index 9e6b336..68196c6a 100644
--- a/services/device/serial/serial_port_manager_impl.cc
+++ b/services/device/serial/serial_port_manager_impl.cc
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
 #include "services/device/public/cpp/serial/serial_switches.h"
 #include "services/device/serial/bluetooth_serial_device_enumerator.h"
diff --git a/services/device/serial/serial_port_manager_impl_unittest.cc b/services/device/serial/serial_port_manager_impl_unittest.cc
index 90f6047..8722fc4 100644
--- a/services/device/serial/serial_port_manager_impl_unittest.cc
+++ b/services/device/serial/serial_port_manager_impl_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/threading/thread.h"
diff --git a/services/device/time_zone_monitor/time_zone_monitor_ash.cc b/services/device/time_zone_monitor/time_zone_monitor_ash.cc
index 3cadb1d..66ed448 100644
--- a/services/device/time_zone_monitor/time_zone_monitor_ash.cc
+++ b/services/device/time_zone_monitor/time_zone_monitor_ash.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "chromeos/ash/components/settings/timezone_settings.h"
 #include "third_party/icu/source/i18n/unicode/timezone.h"
 
diff --git a/services/device/time_zone_monitor/time_zone_monitor_fuchsia.cc b/services/device/time_zone_monitor/time_zone_monitor_fuchsia.cc
index 741bc752..b731545 100644
--- a/services/device/time_zone_monitor/time_zone_monitor_fuchsia.cc
+++ b/services/device/time_zone_monitor/time_zone_monitor_fuchsia.cc
@@ -12,6 +12,7 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/icu/source/common/unicode/unistr.h"
 #include "third_party/icu/source/i18n/unicode/timezone.h"
 
diff --git a/services/device/time_zone_monitor/time_zone_monitor_mac.mm b/services/device/time_zone_monitor/time_zone_monitor_mac.mm
index f9c5462..c3ae435 100644
--- a/services/device/time_zone_monitor/time_zone_monitor_mac.mm
+++ b/services/device/time_zone_monitor/time_zone_monitor_mac.mm
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#import "base/task/sequenced_task_runner.h"
 #include "services/device/time_zone_monitor/time_zone_monitor.h"
 #include "third_party/icu/source/i18n/unicode/timezone.h"
 
diff --git a/services/device/usb/mock_usb_service.cc b/services/device/usb/mock_usb_service.cc
index 4502b9c..30a6865 100644
--- a/services/device/usb/mock_usb_service.cc
+++ b/services/device/usb/mock_usb_service.cc
@@ -7,7 +7,6 @@
 #include <string>
 #include <vector>
 
-#include "base/threading/thread_task_runner_handle.h"
 #include "services/device/usb/usb_device.h"
 
 namespace device {
diff --git a/services/device/usb/mojo/device_manager_impl_unittest.cc b/services/device/usb/mojo/device_manager_impl_unittest.cc
index 5a9a7ceb..ef29edef 100644
--- a/services/device/usb/mojo/device_manager_impl_unittest.cc
+++ b/services/device/usb/mojo/device_manager_impl_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/device/usb/usb_device_handle_impl.cc b/services/device/usb/usb_device_handle_impl.cc
index 3d705a9..c9241de 100644
--- a/services/device/usb/usb_device_handle_impl.cc
+++ b/services/device/usb/usb_device_handle_impl.cc
@@ -20,7 +20,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/device_event_log/device_event_log.h"
 #include "services/device/public/cpp/usb/usb_utils.h"
 #include "services/device/usb/usb_context.h"
diff --git a/services/device/usb/usb_device_handle_usbfs.cc b/services/device/usb/usb_device_handle_usbfs.cc
index 325e18d62..843bdaf1 100644
--- a/services/device/usb/usb_device_handle_usbfs.cc
+++ b/services/device/usb/usb_device_handle_usbfs.cc
@@ -23,6 +23,7 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/ranges/algorithm.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "components/device_event_log/device_event_log.h"
diff --git a/services/device/usb/usb_device_win.h b/services/device/usb/usb_device_win.h
index 987f86f2..7b35fb8 100644
--- a/services/device/usb/usb_device_win.h
+++ b/services/device/usb/usb_device_win.h
@@ -11,6 +11,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "services/device/usb/usb_device.h"
 
 namespace device {
diff --git a/services/device/usb/usb_service_impl.h b/services/device/usb/usb_service_impl.h
index 314c37e..03c76401 100644
--- a/services/device/usb/usb_service_impl.h
+++ b/services/device/usb/usb_service_impl.h
@@ -16,6 +16,7 @@
 
 #include "base/containers/queue.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "services/device/usb/scoped_libusb_device_ref.h"
 #include "services/device/usb/usb_context.h"
diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_android.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_android.cc
index 39d3d88..9ab636c 100644
--- a/services/device/wake_lock/power_save_blocker/power_save_blocker_android.cc
+++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_android.cc
@@ -9,6 +9,7 @@
 #include "base/check.h"
 #include "base/location.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/device/wake_lock/power_save_blocker/jni_headers/PowerSaveBlocker_jni.h"
 #include "ui/android/view_android.h"
 
diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_ash.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_ash.cc
index 554aca0..1c87df7 100644
--- a/services/device/wake_lock/power_save_blocker/power_save_blocker_ash.cc
+++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_ash.cc
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/notreached.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/dbus/power/power_policy_controller.h"
 
 namespace device {
diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_lacros.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_lacros.cc
index f1cc5b2..1fe29a3 100644
--- a/services/device/wake_lock/power_save_blocker/power_save_blocker_lacros.cc
+++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_lacros.cc
@@ -7,6 +7,8 @@
 #include <string>
 
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "chromeos/crosapi/mojom/power.mojom.h"
 #include "chromeos/lacros/lacros_service.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_linux.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_linux.cc
index 70174d4..4ebbba6 100644
--- a/services/device/wake_lock/power_save_blocker/power_save_blocker_linux.cc
+++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_linux.cc
@@ -17,6 +17,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_mac.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_mac.cc
index a49e9136..aeda6e5 100644
--- a/services/device/wake_lock/power_save_blocker/power_save_blocker_mac.cc
+++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_mac.cc
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread.h"
diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_stub.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_stub.cc
index 6406949..e7e0f55 100644
--- a/services/device/wake_lock/power_save_blocker/power_save_blocker_stub.cc
+++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_stub.cc
@@ -5,6 +5,8 @@
 #include "services/device/wake_lock/power_save_blocker/power_save_blocker.h"
 
 #include "base/memory/ref_counted.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace device {
 
diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_win.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_win.cc
index 061ba077..c5bd5aa2 100644
--- a/services/device/wake_lock/power_save_blocker/power_save_blocker_win.cc
+++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_win.cc
@@ -10,6 +10,7 @@
 #include "base/check.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/win/scoped_handle.h"
 #include "base/win/windows_version.h"
 
diff --git a/services/device/wake_lock/wake_lock.h b/services/device/wake_lock/wake_lock.h
index c466393..7d9296c 100644
--- a/services/device/wake_lock/wake_lock.h
+++ b/services/device/wake_lock/wake_lock.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/services/device/wake_lock/wake_lock_context.cc b/services/device/wake_lock/wake_lock_context.cc
index 88991b3c..43a3107 100644
--- a/services/device/wake_lock/wake_lock_context.cc
+++ b/services/device/wake_lock/wake_lock_context.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/containers/cxx20_erase_vector.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/device/wake_lock/wake_lock.h"
 
diff --git a/services/device/wake_lock/wake_lock_provider.cc b/services/device/wake_lock/wake_lock_provider.cc
index 8996a32..661bae8 100644
--- a/services/device/wake_lock/wake_lock_provider.cc
+++ b/services/device/wake_lock/wake_lock_provider.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "services/device/wake_lock/wake_lock.h"
diff --git a/services/media_session/audio_focus_manager.cc b/services/media_session/audio_focus_manager.cc
index 31110039..01360fb2 100644
--- a/services/media_session/audio_focus_manager.cc
+++ b/services/media_session/audio_focus_manager.cc
@@ -12,7 +12,6 @@
 #include "base/containers/cxx20_erase.h"
 #include "base/power_monitor/power_monitor.h"
 #include "base/power_monitor/power_observer.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/unguessable_token.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/media_session/audio_focus_request.h"
diff --git a/services/network/broker_helper_win.cc b/services/network/broker_helper_win.cc
index dbbdd20..805b94c1f4 100644
--- a/services/network/broker_helper_win.cc
+++ b/services/network/broker_helper_win.cc
@@ -5,7 +5,6 @@
 #include "services/network/broker_helper_win.h"
 
 #include "base/no_destructor.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_local.h"
 #include "net/base/ip_address.h"
 #include "net/base/network_change_notifier.h"
diff --git a/services/network/cert_verifier_with_trust_anchors_unittest.cc b/services/network/cert_verifier_with_trust_anchors_unittest.cc
index ac482cd0..6cf524a 100644
--- a/services/network/cert_verifier_with_trust_anchors_unittest.cc
+++ b/services/network/cert_verifier_with_trust_anchors_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "crypto/nss_util_internal.h"
 #include "net/base/test_completion_callback.h"
 #include "net/cert/caching_cert_verifier.h"
diff --git a/services/network/cookie_manager_unittest.cc b/services/network/cookie_manager_unittest.cc
index 01b1b9c0..3238387 100644
--- a/services/network/cookie_manager_unittest.cc
+++ b/services/network/cookie_manager_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/test/bind.h"
diff --git a/services/network/cookie_settings.cc b/services/network/cookie_settings.cc
index fd7e3d7d..87feee6 100644
--- a/services/network/cookie_settings.cc
+++ b/services/network/cookie_settings.cc
@@ -53,6 +53,46 @@
 
 }  // namespace
 
+CookieSettings::CookieSettingWithMetadata::CookieSettingWithMetadata(
+    ContentSetting cookie_setting,
+    absl::optional<ThirdPartyBlockingScope> third_party_blocking_scope)
+    : cookie_setting_(cookie_setting),
+      third_party_blocking_scope_(third_party_blocking_scope) {
+  DCHECK(!third_party_blocking_scope_.has_value() ||
+         !IsAllowed(cookie_setting_));
+}
+
+bool CookieSettings::CookieSettingWithMetadata::
+    BlockedByThirdPartyCookieBlocking() const {
+  return !IsAllowed(cookie_setting_) && third_party_blocking_scope_.has_value();
+}
+
+bool CookieSettings::CookieSettingWithMetadata::IsCookieAllowed(
+    const net::CanonicalCookie& cookie) const {
+  return IsAllowed(cookie_setting_) ||
+         (cookie.IsPartitioned() && IsPartitionedStateAllowed());
+}
+
+net::NetworkDelegate::PrivacySetting
+CookieSettings::CookieSettingWithMetadata::PrivacySetting() const {
+  if (IsAllowed(cookie_setting_)) {
+    return net::NetworkDelegate::PrivacySetting::kStateAllowed;
+  }
+
+  if (IsPartitionedStateAllowed()) {
+    return net::NetworkDelegate::PrivacySetting::kPartitionedStateAllowedOnly;
+  }
+
+  return net::NetworkDelegate::PrivacySetting::kStateDisallowed;
+}
+
+bool CookieSettings::CookieSettingWithMetadata::IsPartitionedStateAllowed()
+    const {
+  return IsAllowed(cookie_setting_) ||
+         third_party_blocking_scope_ ==
+             ThirdPartyBlockingScope::kUnpartitionedOnly;
+}
+
 CookieSettings::CookieSettings() = default;
 
 CookieSettings::~CookieSettings() = default;
@@ -119,14 +159,13 @@
     const net::SiteForCookies& site_for_cookies,
     const absl::optional<url::Origin>& top_frame_origin,
     net::CookieSettingOverrides overrides) const {
-  return IsHypotheticalCookieAllowed(
-      GetCookieSettingWithMetadata(
-          url,
-          GetFirstPartyURL(site_for_cookies,
-                           base::OptionalToPtr(top_frame_origin)),
-          IsThirdPartyRequest(url, site_for_cookies), overrides,
-          QueryReason::kCookies),
-      cookie.IsPartitioned());
+  return GetCookieSettingWithMetadata(
+             url,
+             GetFirstPartyURL(site_for_cookies,
+                              base::OptionalToPtr(top_frame_origin)),
+             IsThirdPartyRequest(url, site_for_cookies), overrides,
+             QueryReason::kCookies)
+      .IsCookieAllowed(cookie);
 }
 
 bool CookieSettings::ShouldAlwaysAllowCookies(
@@ -145,55 +184,22 @@
     const net::SiteForCookies& site_for_cookies,
     const absl::optional<url::Origin>& top_frame_origin,
     net::CookieSettingOverrides overrides) const {
-  // PrivacySetting should be kStateDisallowed iff no cookies should ever
-  // be sent on this request. E.g.:
-  //
-  // * if cookie settings block cookies on this site or for this URL; or
-  //
-  // * if cookie settings block 3P cookies, the context is cross-party, and
-  // content settings blocks the 1P from using cookies; or
-  //
-  // * if cookie settings block 3P cookies, and the context is same-party
-  //
-  // PrivacySetting should be kPartitionedStateAllowedOnly iff the request is
-  // cross-party, cookie settings block 3P cookies, and content settings allows
-  // the 1P to use cookies.
-  //
-  // Otherwise, the PrivacySetting should be kStateAllowed.
-  CookieSettingWithMetadata metadata = GetCookieSettingWithMetadata(
-      url, site_for_cookies, base::OptionalToPtr(top_frame_origin), overrides,
-      QueryReason::kCookies);
-  if (IsHypotheticalCookieAllowed(metadata,
-                                  /*is_partitioned*/ false)) {
-    return net::NetworkDelegate::PrivacySetting::kStateAllowed;
-  }
-
-  // No unpartitioned cookie should be sent on this request. The only other
-  // options are to block all cookies, or allow just partitioned cookies.
-
-  switch (metadata.third_party_blocking_outcome) {
-    case ThirdPartyBlockingOutcome::kIrrelevant:
-      [[fallthrough]];
-    case ThirdPartyBlockingOutcome::kAllStateDisallowed:
-      return net::NetworkDelegate::PrivacySetting::kStateDisallowed;
-
-    case ThirdPartyBlockingOutcome::kPartitionedStateAllowed:
-      return net::NetworkDelegate::PrivacySetting::kPartitionedStateAllowedOnly;
-    case ThirdPartyBlockingOutcome::kForceAllowed:
-      return net::NetworkDelegate::PrivacySetting::kStateAllowed;
-  }
+  return GetCookieSettingWithMetadata(url, site_for_cookies,
+                                      base::OptionalToPtr(top_frame_origin),
+                                      overrides, QueryReason::kCookies)
+      .PrivacySetting();
 }
 
-CookieSettings::ThirdPartyBlockingOutcome
+CookieSettings::ThirdPartyBlockingScope
 CookieSettings::GetThirdPartyBlockingScope(const GURL& first_party_url) const {
   // If cookies are allowed for the first-party URL then we allow
   // partitioned cross-site cookies.
   if (const ContentSettingPatternSource* match = FindMatchingSetting(
           first_party_url, first_party_url, content_settings_);
       !match || match->GetContentSetting() == CONTENT_SETTING_ALLOW) {
-    return ThirdPartyBlockingOutcome::kPartitionedStateAllowed;
+    return ThirdPartyBlockingScope::kUnpartitionedOnly;
   }
-  return ThirdPartyBlockingOutcome::kAllStateDisallowed;
+  return ThirdPartyBlockingScope::kUnpartitionedAndPartitioned;
 }
 
 CookieSettings::CookieSettingWithMetadata
@@ -204,19 +210,15 @@
     net::CookieSettingOverrides overrides,
     QueryReason query_reason) const {
   if (ShouldAlwaysAllowCookies(url, first_party_url)) {
-    return {
-        /*cookie_setting=*/CONTENT_SETTING_ALLOW,
-        /*third_party_blocking_outcome=*/
-        ThirdPartyBlockingOutcome::kIrrelevant,
-    };
+    return {/*cookie_setting=*/CONTENT_SETTING_ALLOW,
+            /*third_party_blocking_scope=*/absl::nullopt};
   }
 
   // Default to allowing cookies.
   ContentSetting cookie_setting = CONTENT_SETTING_ALLOW;
   net::cookie_util::StorageAccessResult storage_access_result =
       net::cookie_util::StorageAccessResult::ACCESS_ALLOWED;
-  ThirdPartyBlockingOutcome third_party_blocking_outcome =
-      ThirdPartyBlockingOutcome::kIrrelevant;
+  absl::optional<ThirdPartyBlockingScope> third_party_blocking_scope;
 
   bool found_explicit_setting = false;
   if (const ContentSettingPatternSource* match =
@@ -224,6 +226,10 @@
       match) {
     cookie_setting = match->GetContentSetting();
     found_explicit_setting = IsExplicitSetting(*match);
+    if (cookie_setting == CONTENT_SETTING_BLOCK) {
+      storage_access_result =
+          net::cookie_util::StorageAccessResult::ACCESS_BLOCKED;
+    }
   }
 
   if (cookie_setting != CONTENT_SETTING_BLOCK && !found_explicit_setting) {
@@ -232,8 +238,9 @@
         !base::Contains(third_party_cookies_allowed_schemes_,
                         first_party_url.scheme())) {
       cookie_setting = CONTENT_SETTING_BLOCK;
-      third_party_blocking_outcome =
-          GetThirdPartyBlockingScope(first_party_url);
+      storage_access_result =
+          net::cookie_util::StorageAccessResult::ACCESS_BLOCKED;
+      third_party_blocking_scope = GetThirdPartyBlockingScope(first_party_url);
 
       // See if a Storage Access permission grant can unblock.
       if (ShouldConsiderStorageAccessGrants(query_reason) &&
@@ -241,7 +248,7 @@
         cookie_setting = CONTENT_SETTING_ALLOW;
         storage_access_result = net::cookie_util::StorageAccessResult::
             ACCESS_ALLOWED_STORAGE_ACCESS_GRANT;
-        third_party_blocking_outcome = ThirdPartyBlockingOutcome::kIrrelevant;
+        third_party_blocking_scope = absl::nullopt;
       } else if (ShouldConsiderTopLevelStorageAccessGrants(query_reason) &&
                  IsAllowedByTopLevelStorageAccessGrant(url, first_party_url)) {
         // TODO(crbug.com/1385156): Separate metrics between StorageAccessAPI
@@ -249,25 +256,21 @@
         cookie_setting = CONTENT_SETTING_ALLOW;
         storage_access_result = net::cookie_util::StorageAccessResult::
             ACCESS_ALLOWED_STORAGE_ACCESS_GRANT;
-        third_party_blocking_outcome = ThirdPartyBlockingOutcome::kIrrelevant;
+        third_party_blocking_scope = absl::nullopt;
       } else if (overrides.Has(
                      net::CookieSettingOverride::kForceThirdPartyByUser)) {
         // See if a user bypass can unblock.
         cookie_setting = CONTENT_SETTING_ALLOW;
-        third_party_blocking_outcome = ThirdPartyBlockingOutcome::kForceAllowed;
+        third_party_blocking_scope = absl::nullopt;
         storage_access_result =
             net::cookie_util::StorageAccessResult::ACCESS_ALLOWED_FORCED;
       }
     }
   }
 
-  if (cookie_setting == CONTENT_SETTING_BLOCK) {
-    storage_access_result =
-        net::cookie_util::StorageAccessResult::ACCESS_BLOCKED;
-  }
   FireStorageAccessHistogram(storage_access_result);
 
-  return {cookie_setting, third_party_blocking_outcome};
+  return {cookie_setting, third_party_blocking_scope};
 }
 
 CookieSettings::CookieSettingWithMetadata
@@ -292,7 +295,7 @@
   return GetCookieSettingWithMetadata(url, first_party_url,
                                       is_third_party_request, overrides,
                                       query_reason)
-      .cookie_setting;
+      .cookie_setting();
 }
 
 bool CookieSettings::AnnotateAndMoveUserBlockedCookies(
@@ -307,21 +310,21 @@
       GetCookieSettingWithMetadata(url, site_for_cookies, top_frame_origin,
                                    overrides, QueryReason::kCookies);
 
-  if (IsAllowed(setting_with_metadata.cookie_setting))
+  if (IsAllowed(setting_with_metadata.cookie_setting())) {
     return true;
+  }
 
   // Add the `EXCLUDE_USER_PREFERENCES` `ExclusionReason` for cookies that ought
   // to be blocked, and find any cookies that should still be allowed.
   bool is_any_allowed = false;
   for (net::CookieWithAccessResult& cookie : maybe_included_cookies) {
-    if (IsCookieAllowed(setting_with_metadata, cookie)) {
+    if (setting_with_metadata.IsCookieAllowed(cookie.cookie)) {
       is_any_allowed = true;
     } else {
       cookie.access_result.status.AddExclusionReason(
           net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES);
-      if (IsThirdPartyCookieBlockedInSamePartySites(
-              setting_with_metadata.third_party_blocking_outcome,
-              first_party_set_metadata)) {
+      if (setting_with_metadata.BlockedByThirdPartyCookieBlocking() &&
+          first_party_set_metadata.AreSitesInSameFirstPartySet()) {
         cookie.access_result.status.AddExclusionReason(
             net::CookieInclusionStatus::
                 EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET);
@@ -329,7 +332,7 @@
     }
   }
   for (net::CookieWithAccessResult& cookie : excluded_cookies) {
-    if (!IsCookieAllowed(setting_with_metadata, cookie)) {
+    if (!setting_with_metadata.IsCookieAllowed(cookie.cookie)) {
       cookie.access_result.status.AddExclusionReason(
           net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES);
     }
@@ -349,42 +352,6 @@
   return is_any_allowed;
 }
 
-bool CookieSettings::IsCookieAllowed(
-    const CookieSettingWithMetadata& setting_with_metadata,
-    const net::CookieWithAccessResult& cookie) const {
-  return IsHypotheticalCookieAllowed(setting_with_metadata,
-                                     cookie.cookie.IsPartitioned());
-}
-
-// static
-bool CookieSettings::IsAllowedPartitionedCookie(
-    bool is_partitioned,
-    ThirdPartyBlockingOutcome third_party_blocking_outcome) {
-  return is_partitioned &&
-         third_party_blocking_outcome ==
-             ThirdPartyBlockingOutcome::kPartitionedStateAllowed;
-}
-
-// static
-bool CookieSettings::IsThirdPartyCookieBlockedInSamePartySites(
-    ThirdPartyBlockingOutcome third_party_blocking_outcome,
-    const net::FirstPartySetMetadata& first_party_set_metadata) {
-  // If third_party_blocking_outcome isn't kIrrelevant, it means the cookie was
-  // excluded due to the third-party cookie blocking setting.
-  return third_party_blocking_outcome !=
-             ThirdPartyBlockingOutcome::kIrrelevant &&
-         first_party_set_metadata.AreSitesInSameFirstPartySet();
-}
-
-bool CookieSettings::IsHypotheticalCookieAllowed(
-    const CookieSettingWithMetadata& setting_with_metadata,
-    bool is_partitioned) const {
-  return IsAllowed(setting_with_metadata.cookie_setting) ||
-         IsAllowedPartitionedCookie(
-             is_partitioned,
-             setting_with_metadata.third_party_blocking_outcome);
-}
-
 bool CookieSettings::HasSessionOnlyOrigins() const {
   return base::ranges::any_of(content_settings_, [](const auto& entry) {
     return entry.GetContentSetting() == CONTENT_SETTING_SESSION_ONLY;
diff --git a/services/network/cookie_settings.h b/services/network/cookie_settings.h
index 8391857..81db41d 100644
--- a/services/network/cookie_settings.h
+++ b/services/network/cookie_settings.h
@@ -166,36 +166,57 @@
       content_settings::SettingSource* source,
       QueryReason query_reason) const override;
 
-  // An enum that represents the result of applying the user's
-  // third-party-cookie-blocking setting in a given context.
-  enum class ThirdPartyBlockingOutcome {
-    // Access is not blocked due to the third-party-cookie-blocking setting,
-    // either because there's a more specific reason to block access, or because
-    // the context isn't "third-party", or because the access isn't blocked at
-    // all.
-    kIrrelevant = 1,
+  // An enum that represents the scope of cookies to which the user's
+  // third-party-cookie-blocking setting applies, in a given context.
+  enum class ThirdPartyBlockingScope {
     // Access to all cookies (partitioned or unpartitioned) is blocked in this
     // context.
-    kAllStateDisallowed,
+    kUnpartitionedAndPartitioned,
     // Access to unpartitioned cookies is blocked in this context, but access to
     // partitioned cookies is allowed.
-    kPartitionedStateAllowed,
-    // Access to cookies is blocked in this context, but they are forced to
-    // allowed by some mechanism, eg. user bypass.
-    kForceAllowed,
+    kUnpartitionedOnly,
   };
 
-  struct CookieSettingWithMetadata {
-    ContentSetting cookie_setting;
-    // Only relevant if access to the cookie is blocked for some reason (i.e. if
-    // `IsAllow(cookie_setting)` is false).
-    ThirdPartyBlockingOutcome third_party_blocking_outcome;
+  class CookieSettingWithMetadata {
+   public:
+    CookieSettingWithMetadata(
+        ContentSetting cookie_setting,
+        absl::optional<ThirdPartyBlockingScope> third_party_blocking_scope);
+
+    // Returns true iff the setting is "block" due to the user's
+    // third-party-cookie-blocking setting.
+    bool BlockedByThirdPartyCookieBlocking() const;
+
+    // Returns whether the given cookie should be allowed to be sent, according
+    // to the user's settings. Assumes that the `cookie.access_result` has been
+    // correctly filled in by the cookie store. Note that the cookie may be
+    // "excluded" for other reasons, even if this method returns true.
+    bool IsCookieAllowed(const net::CanonicalCookie& cookie) const;
+
+    // Computes the PrivacySetting that should be used in this context.
+    net::NetworkDelegate::PrivacySetting PrivacySetting() const;
+
+    ContentSetting cookie_setting() const { return cookie_setting_; }
+
+   private:
+    // Returns true iff a Partitioned cookie could be allowed to be sent in this
+    // context.
+    bool IsPartitionedStateAllowed() const;
+
+    // The setting itself.
+    ContentSetting cookie_setting_;
+
+    // The scope of cookies blocked by third-party-cookie-blocking.  The scope
+    // must only be nullopt if `cookie_setting_` is not "allow", and if the
+    // reason for blocking cookies is the third-party cookie blocking setting
+    // (rather than a site-specific setting).
+    absl::optional<ThirdPartyBlockingScope> third_party_blocking_scope_;
   };
 
   // Determines the scope of third-party-cookie-blocking, i.e. whether it
   // applies to all cookies or just unpartitioned cookies. Assumes that
   // checks have already determined to block third-party cookies.
-  ThirdPartyBlockingOutcome GetThirdPartyBlockingScope(
+  ThirdPartyBlockingScope GetThirdPartyBlockingScope(
       const GURL& first_party_url) const;
 
   // Returns the cookie setting for the given request, along with metadata
@@ -217,34 +238,6 @@
       net::CookieSettingOverrides overrides,
       QueryReason query_reason) const;
 
-  // Returns whether the given cookie should be allowed to be sent, according to
-  // the user's settings. Assumes that the `cookie.access_result` has been
-  // correctly filled in by the cookie store. Note that the cookie may be
-  // "excluded" for other reasons, even if this method returns true.
-  bool IsCookieAllowed(
-      const CookieSettings::CookieSettingWithMetadata& setting_with_metadata,
-      const net::CookieWithAccessResult& cookie) const;
-
-  // Returns true iff a cookie with the given `is_partitioned` property should
-  // be accessible in a context with the given
-  // `third_party_blocking_outcome`.
-  static bool IsAllowedPartitionedCookie(
-      bool is_partitioned,
-      ThirdPartyBlockingOutcome third_party_blocking_outcome);
-
-  // Checks if a cookie was blocked by third-party cookie blocking but the
-  // cookie belongs to a site in the same First-Party Set as the top-level site.
-  static bool IsThirdPartyCookieBlockedInSamePartySites(
-      ThirdPartyBlockingOutcome third_party_blocking_outcome,
-      const net::FirstPartySetMetadata& first_party_set_metadata);
-
-  // Returns whether *some* cookie would be allowed to be sent in this context,
-  // according to the user's settings. Note that cookies may still be "excluded"
-  // for other reasons, even if this method returns true.
-  bool IsHypotheticalCookieAllowed(
-      const CookieSettings::CookieSettingWithMetadata& setting_with_metadata,
-      bool is_partitioned) const;
-
   // Returns true if at least one content settings is session only.
   bool HasSessionOnlyOrigins() const;
 
diff --git a/services/network/disk_cache/mojo_backend_file_operations_factory.cc b/services/network/disk_cache/mojo_backend_file_operations_factory.cc
index 3d03c9d..0188552e 100644
--- a/services/network/disk_cache/mojo_backend_file_operations_factory.cc
+++ b/services/network/disk_cache/mojo_backend_file_operations_factory.cc
@@ -4,6 +4,7 @@
 
 #include "services/network/disk_cache/mojo_backend_file_operations_factory.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "services/network/disk_cache/mojo_backend_file_operations.h"
 
 using disk_cache::BackendFileOperations;
diff --git a/services/network/http_cache_data_counter_unittest.cc b/services/network/http_cache_data_counter_unittest.cc
index 8de4a04e..1ae220ab 100644
--- a/services/network/http_cache_data_counter_unittest.cc
+++ b/services/network/http_cache_data_counter_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/run_loop.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/cache_type.h"
diff --git a/services/network/http_cache_data_remover_unittest.cc b/services/network/http_cache_data_remover_unittest.cc
index 7097740..8f6a030 100644
--- a/services/network/http_cache_data_remover_unittest.cc
+++ b/services/network/http_cache_data_remover_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/cache_type.h"
diff --git a/services/network/mdns_responder.cc b/services/network/mdns_responder.cc
index 336c29d..bcf34c3 100644
--- a/services/network/mdns_responder.cc
+++ b/services/network/mdns_responder.cc
@@ -21,7 +21,6 @@
 #include "base/rand_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/sys_byteorder.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
diff --git a/services/network/mdns_responder_unittest.cc b/services/network/mdns_responder_unittest.cc
index 578c898..f0b0b40 100644
--- a/services/network/mdns_responder_unittest.cc
+++ b/services/network/mdns_responder_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc
index a258058..2fe79f6 100644
--- a/services/network/network_context_unittest.cc
+++ b/services/network/network_context_unittest.cc
@@ -41,7 +41,6 @@
 #include "base/test/simple_test_clock.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
diff --git a/services/network/network_service_unittest.cc b/services/network/network_service_unittest.cc
index aef7f8c..cc34e2ee 100644
--- a/services/network/network_service_unittest.cc
+++ b/services/network/network_service_unittest.cc
@@ -23,7 +23,6 @@
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "net/base/ip_address.h"
diff --git a/services/network/p2p/socket_manager.h b/services/network/p2p/socket_manager.h
index 7a427ba..9d3eaeff 100644
--- a/services/network/p2p/socket_manager.h
+++ b/services/network/p2p/socket_manager.h
@@ -19,6 +19,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/services/network/p2p/socket_tcp.cc b/services/network/p2p/socket_tcp.cc
index 6222fa3..40faf5a 100644
--- a/services/network/p2p/socket_tcp.cc
+++ b/services/network/p2p/socket_tcp.cc
@@ -9,7 +9,6 @@
 
 #include "base/bind.h"
 #include "base/sys_byteorder.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/webrtc/fake_ssl_client_socket.h"
 #include "net/base/io_buffer.h"
diff --git a/services/network/proxy_auto_config_library.cc b/services/network/proxy_auto_config_library.cc
index 3fa4faee..d6c8403 100644
--- a/services/network/proxy_auto_config_library.cc
+++ b/services/network/proxy_auto_config_library.cc
@@ -11,7 +11,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "net/base/address_list.h"
diff --git a/services/network/proxy_resolving_client_socket_unittest.cc b/services/network/proxy_resolving_client_socket_unittest.cc
index d5879855..e6f7215 100644
--- a/services/network/proxy_resolving_client_socket_unittest.cc
+++ b/services/network/proxy_resolving_client_socket_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/features.h"
 #include "net/base/network_isolation_key.h"
 #include "net/base/test_completion_callback.h"
diff --git a/services/network/public/cpp/empty_url_loader_client.cc b/services/network/public/cpp/empty_url_loader_client.cc
index 15938b3..e173604 100644
--- a/services/network/public/cpp/empty_url_loader_client.cc
+++ b/services/network/public/cpp/empty_url_loader_client.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "services/network/public/cpp/record_ontransfersizeupdate_utils.h"
 #include "services/network/public/mojom/early_hints.mojom.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
diff --git a/services/network/public/cpp/network_connection_tracker.h b/services/network/public/cpp/network_connection_tracker.h
index 10b0fa5..89279ebf 100644
--- a/services/network/public/cpp/network_connection_tracker.h
+++ b/services/network/public/cpp/network_connection_tracker.h
@@ -16,6 +16,7 @@
 #include "base/scoped_observation_traits.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/network/public/mojom/network_change_manager.mojom.h"
 
diff --git a/services/network/public/cpp/server/http_server_unittest.cc b/services/network/public/cpp/server/http_server_unittest.cc
index 398fd43..d848cdc7 100644
--- a/services/network/public/cpp/server/http_server_unittest.cc
+++ b/services/network/public/cpp/server/http_server_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/system/data_pipe_utils.h"
diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc
index 710e7ec..b5a0107 100644
--- a/services/network/restricted_cookie_manager.cc
+++ b/services/network/restricted_cookie_manager.cc
@@ -17,7 +17,6 @@
 #include "base/run_loop.h"
 #include "base/strings/string_util.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/types/optional_util.h"
 #include "mojo/public/cpp/bindings/message.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/network/restricted_cookie_manager.h b/services/network/restricted_cookie_manager.h
index 90e0a88..897658c 100644
--- a/services/network/restricted_cookie_manager.h
+++ b/services/network/restricted_cookie_manager.h
@@ -15,7 +15,6 @@
 #include "base/memory/raw_ref.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/base/isolation_info.h"
 #include "net/cookies/canonical_cookie.h"
diff --git a/services/network/tcp_socket_unittest.cc b/services/network/tcp_socket_unittest.cc
index 4d13513..4965ad65 100644
--- a/services/network/tcp_socket_unittest.cc
+++ b/services/network/tcp_socket_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
diff --git a/services/network/test/test_resource_scheduler.h b/services/network/test/test_resource_scheduler.h
index e87a4ac..3a29324 100644
--- a/services/network/test/test_resource_scheduler.h
+++ b/services/network/test/test_resource_scheduler.h
@@ -5,6 +5,7 @@
 #ifndef SERVICES_NETWORK_TEST_TEST_RESOURCE_SCHEDULER_H_
 #define SERVICES_NETWORK_TEST_TEST_RESOURCE_SCHEDULER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "services/network/resource_scheduler/resource_scheduler.h"
 
 namespace network {
diff --git a/services/network/transitional_url_loader_factory_owner.cc b/services/network/transitional_url_loader_factory_owner.cc
index 03b5882..17fe9b0f 100644
--- a/services/network/transitional_url_loader_factory_owner.cc
+++ b/services/network/transitional_url_loader_factory_owner.cc
@@ -10,6 +10,7 @@
 #include "base/memory/ref_counted_delete_on_sequence.h"
 #include "base/no_destructor.h"
 #include "base/synchronization/atomic_flag.h"
+#include "base/task/sequenced_task_runner.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "services/network/network_context.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/services/network/transitional_url_loader_factory_owner_unittest.cc b/services/network/transitional_url_loader_factory_owner_unittest.cc
index ab76b6d..fb57740 100644
--- a/services/network/transitional_url_loader_factory_owner_unittest.cc
+++ b/services/network/transitional_url_loader_factory_owner_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
diff --git a/services/network/upload_progress_tracker.cc b/services/network/upload_progress_tracker.cc
index 1d9727c..c8fa1c8 100644
--- a/services/network/upload_progress_tracker.cc
+++ b/services/network/upload_progress_tracker.cc
@@ -5,6 +5,7 @@
 #include "services/network/upload_progress_tracker.h"
 
 #include "base/check.h"
+#include "base/task/sequenced_task_runner.h"
 #include "net/base/upload_progress.h"
 #include "net/url_request/url_request.h"
 
diff --git a/services/preferences/tracked/pref_hash_calculator_unittest.cc b/services/preferences/tracked/pref_hash_calculator_unittest.cc
index c2c27f5..9e33542 100644
--- a/services/preferences/tracked/pref_hash_calculator_unittest.cc
+++ b/services/preferences/tracked/pref_hash_calculator_unittest.cc
@@ -103,10 +103,11 @@
   dict_value.Set("e", std::move(nested_empty_dict));
   dict_value.Set("f", std::move(nested_empty_list));
 
-  base::Value list_value(base::Value::Type::LIST);
-  list_value.Append(true);
-  list_value.Append(100);
-  list_value.Append(1.0);
+  base::Value::List list;
+  list.Append(true);
+  list.Append(100);
+  list.Append(1.0);
+  base::Value list_value(std::move(list));
 
   ASSERT_TRUE(null_value.is_none());
   ASSERT_TRUE(bool_value.is_bool());
diff --git a/services/preferences/tracked/tracked_persistent_pref_store_factory.cc b/services/preferences/tracked/tracked_persistent_pref_store_factory.cc
index 8b8edfc1..cfaea103 100644
--- a/services/preferences/tracked/tracked_persistent_pref_store_factory.cc
+++ b/services/preferences/tracked/tracked_persistent_pref_store_factory.cc
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/prefs/json_pref_store.h"
 #include "components/prefs/pref_filter.h"
diff --git a/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc b/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc
index b90aa20..42e1c3e 100644
--- a/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc
+++ b/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
diff --git a/services/resource_coordinator/public/cpp/memory_instrumentation/tracing_observer_proto_unittest.cc b/services/resource_coordinator/public/cpp/memory_instrumentation/tracing_observer_proto_unittest.cc
index c794807..4c0999dd 100644
--- a/services/resource_coordinator/public/cpp/memory_instrumentation/tracing_observer_proto_unittest.cc
+++ b/services/resource_coordinator/public/cpp/memory_instrumentation/tracing_observer_proto_unittest.cc
@@ -12,6 +12,7 @@
 
 #include "base/files/file_path.h"
 #include "base/format_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/trace_test_utils.h"
 #include "base/trace_event/memory_dump_manager.h"
diff --git a/services/service_manager/public/cpp/binder_registry.h b/services/service_manager/public/cpp/binder_registry.h
index 08bc5f9..6be1973fc 100644
--- a/services/service_manager/public/cpp/binder_registry.h
+++ b/services/service_manager/public/cpp/binder_registry.h
@@ -13,6 +13,7 @@
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "services/service_manager/public/cpp/export.h"
diff --git a/services/service_manager/public/cpp/interface_binder.h b/services/service_manager/public/cpp/interface_binder.h
index 550f030e..8129773 100644
--- a/services/service_manager/public/cpp/interface_binder.h
+++ b/services/service_manager/public/cpp/interface_binder.h
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 
diff --git a/services/service_manager/public/cpp/interface_provider.cc b/services/service_manager/public/cpp/interface_provider.cc
index afef853..58d3d247 100644
--- a/services/service_manager/public/cpp/interface_provider.cc
+++ b/services/service_manager/public/cpp/interface_provider.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "services/service_manager/public/cpp/interface_provider.h"
+#include "base/task/sequenced_task_runner.h"
 
 namespace service_manager {
 
diff --git a/services/service_manager/public/cpp/interface_provider.h b/services/service_manager/public/cpp/interface_provider.h
index 683f357..ce9aac3 100644
--- a/services/service_manager/public/cpp/interface_provider.h
+++ b/services/service_manager/public/cpp/interface_provider.h
@@ -7,6 +7,7 @@
 
 #include "base/bind.h"
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/shape_detection/detection_utils_mac.mm b/services/shape_detection/detection_utils_mac.mm
index 8d812137..a44d289 100644
--- a/services/shape_detection/detection_utils_mac.mm
+++ b/services/shape_detection/detection_utils_mac.mm
@@ -15,6 +15,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/numerics/checked_math.h"
 #include "base/strings/sys_string_conversions.h"
+#import "base/task/sequenced_task_runner.h"
 #include "base/task/sequenced_task_runner.h"
 #include "third_party/skia/include/utils/mac/SkCGUtils.h"
 
diff --git a/services/tracing/perfetto/consumer_host_unittest.cc b/services/tracing/perfetto/consumer_host_unittest.cc
index 43add43..b4af6ed 100644
--- a/services/tracing/perfetto/consumer_host_unittest.cc
+++ b/services/tracing/perfetto/consumer_host_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
diff --git a/services/tracing/perfetto/perfetto_service.h b/services/tracing/perfetto/perfetto_service.h
index 411f865..9d1b85a66 100644
--- a/services/tracing/perfetto/perfetto_service.h
+++ b/services/tracing/perfetto/perfetto_service.h
@@ -9,6 +9,7 @@
 #include <memory>
 #include <set>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/tracing/perfetto_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "mojo/public/cpp/bindings/unique_receiver_set.h"
diff --git a/services/tracing/perfetto/test_utils.cc b/services/tracing/perfetto/test_utils.cc
index d2b17c9..32a2fd8e 100644
--- a/services/tracing/perfetto/test_utils.cc
+++ b/services/tracing/perfetto/test_utils.cc
@@ -7,6 +7,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/tracing/perfetto_platform.h"
 #include "services/tracing/public/cpp/perfetto/shared_memory.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/services/tracing/public/cpp/background_tracing/background_tracing_agent_provider_impl.cc b/services/tracing/public/cpp/background_tracing/background_tracing_agent_provider_impl.cc
index 92eb4e4..f6cf5ef 100644
--- a/services/tracing/public/cpp/background_tracing/background_tracing_agent_provider_impl.cc
+++ b/services/tracing/public/cpp/background_tracing/background_tracing_agent_provider_impl.cc
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/metrics/statistics_recorder.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/trace_event.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
diff --git a/services/tracing/public/cpp/perfetto/fuchsia_perfetto_producer_connector.cc b/services/tracing/public/cpp/perfetto/fuchsia_perfetto_producer_connector.cc
index 2c6bbdc..36ebe30 100644
--- a/services/tracing/public/cpp/perfetto/fuchsia_perfetto_producer_connector.cc
+++ b/services/tracing/public/cpp/perfetto/fuchsia_perfetto_producer_connector.cc
@@ -20,7 +20,6 @@
 #include "base/message_loop/message_pump_type.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "services/tracing/public/cpp/perfetto/shared_memory.h"
 
 namespace tracing {
diff --git a/services/tracing/public/cpp/perfetto/perfetto_session.cc b/services/tracing/public/cpp/perfetto/perfetto_session.cc
index 096b424..5fb8f1b 100644
--- a/services/tracing/public/cpp/perfetto/perfetto_session.cc
+++ b/services/tracing/public/cpp/perfetto/perfetto_session.cc
@@ -4,6 +4,7 @@
 
 #include "base/callback.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "services/tracing/public/cpp/perfetto/perfetto_session.h"
 #include "services/tracing/public/cpp/perfetto/trace_packet_tokenizer.h"
 
diff --git a/services/tracing/public/cpp/perfetto/perfetto_session.h b/services/tracing/public/cpp/perfetto/perfetto_session.h
index f8502397..f707db0f 100644
--- a/services/tracing/public/cpp/perfetto/perfetto_session.h
+++ b/services/tracing/public/cpp/perfetto/perfetto_session.h
@@ -12,6 +12,7 @@
 #include "base/component_export.h"
 #include "base/task/sequenced_task_runner.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/perfetto/include/perfetto/tracing/tracing.h"
 
 namespace perfetto {
@@ -53,4 +54,4 @@
 
 }  // namespace tracing
 
-#endif  // SERVICES_TRACING_PUBLIC_CPP_PERFETTO_PERFETTO_SESSION_H_
\ No newline at end of file
+#endif  // SERVICES_TRACING_PUBLIC_CPP_PERFETTO_PERFETTO_SESSION_H_
diff --git a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
index 204cda1f..03e8155a 100644
--- a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
+++ b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
@@ -9,6 +9,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/tracing/tracing_tls.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h
index 71d754da..473ec80 100644
--- a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h
+++ b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/perfetto/include/perfetto/tracing/tracing_backend.h"
 
diff --git a/services/tracing/public/cpp/perfetto/producer_test_utils.cc b/services/tracing/public/cpp/perfetto/producer_test_utils.cc
index 508cc9a..63cc6803 100644
--- a/services/tracing/public/cpp/perfetto/producer_test_utils.cc
+++ b/services/tracing/public/cpp/perfetto/producer_test_utils.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/tracing/public/cpp/tracing_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source.h b/services/tracing/public/cpp/perfetto/trace_event_data_source.h
index d72823b..cc1c234 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source.h
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source.h
@@ -18,6 +18,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/no_destructor.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/threading/thread_local.h"
 #include "base/time/time.h"
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
index f921195..64f277a 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
@@ -23,8 +23,8 @@
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/common/task_annotator.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_id_name_manager.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
diff --git a/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler_unittest.cc b/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler_unittest.cc
index efe26d5..45629ff0 100644
--- a/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler_unittest.cc
+++ b/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/profiler/stack_sampling_profiler_test_util.h"
 #include "base/profiler/unwinder.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/trace_event/trace_buffer.h"
diff --git a/services/tracing/public/cpp/system_tracing_service_unittest.cc b/services/tracing/public/cpp/system_tracing_service_unittest.cc
index b43ed50..e175169d 100644
--- a/services/tracing/public/cpp/system_tracing_service_unittest.cc
+++ b/services/tracing/public/cpp/system_tracing_service_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/test/task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/tracing/perfetto/system_test_utils.h"
 #include "services/tracing/public/cpp/perfetto/perfetto_traced_process.h"
 #include "services/tracing/public/cpp/system_tracing_service.h"
diff --git a/services/tracing/public/cpp/traced_process_impl.cc b/services/tracing/public/cpp/traced_process_impl.cc
index 3137e24..3f7aee8 100644
--- a/services/tracing/public/cpp/traced_process_impl.cc
+++ b/services/tracing/public/cpp/traced_process_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/no_destructor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "services/tracing/public/cpp/base_agent.h"
 #include "services/tracing/public/cpp/perfetto/producer_client.h"
diff --git a/services/tracing/public/cpp/traced_process_impl.h b/services/tracing/public/cpp/traced_process_impl.h
index 8b0cf08..50612ee0 100644
--- a/services/tracing/public/cpp/traced_process_impl.h
+++ b/services/tracing/public/cpp/traced_process_impl.h
@@ -12,6 +12,7 @@
 #include "base/no_destructor.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/tracing/public/mojom/system_tracing_service.mojom.h"
diff --git a/services/video_capture/device_factory_media_to_mojo_adapter.cc b/services/video_capture/device_factory_media_to_mojo_adapter.cc
index 403f9e5a..7375db73 100644
--- a/services/video_capture/device_factory_media_to_mojo_adapter.cc
+++ b/services/video_capture/device_factory_media_to_mojo_adapter.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/containers/contains.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/capture/video/fake_video_capture_device.h"
diff --git a/services/video_capture/device_factory_media_to_mojo_adapter.h b/services/video_capture/device_factory_media_to_mojo_adapter.h
index 0d375e9f..b961bc37c 100644
--- a/services/video_capture/device_factory_media_to_mojo_adapter.h
+++ b/services/video_capture/device_factory_media_to_mojo_adapter.h
@@ -7,6 +7,7 @@
 
 #include <map>
 
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/capture/video/video_capture_device_client.h"
diff --git a/services/video_capture/device_media_to_mojo_adapter.cc b/services/video_capture/device_media_to_mojo_adapter.cc
index 642e50e..f3ff3408 100644
--- a/services/video_capture/device_media_to_mojo_adapter.cc
+++ b/services/video_capture/device_media_to_mojo_adapter.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/check.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
diff --git a/services/video_capture/device_media_to_mojo_adapter.h b/services/video_capture/device_media_to_mojo_adapter.h
index 420b5c0d..153d62c4 100644
--- a/services/video_capture/device_media_to_mojo_adapter.h
+++ b/services/video_capture/device_media_to_mojo_adapter.h
@@ -5,6 +5,7 @@
 #ifndef SERVICES_VIDEO_CAPTURE_DEVICE_MEDIA_TO_MOJO_ADAPTER_H_
 #define SERVICES_VIDEO_CAPTURE_DEVICE_MEDIA_TO_MOJO_ADAPTER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/services/video_capture/device_media_to_mojo_adapter_unittest.cc b/services/video_capture/device_media_to_mojo_adapter_unittest.cc
index b4f4f78..06dfa90 100644
--- a/services/video_capture/device_media_to_mojo_adapter_unittest.cc
+++ b/services/video_capture/device_media_to_mojo_adapter_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "build/chromeos_buildflags.h"
 #include "media/capture/video/mock_device.h"
diff --git a/services/video_capture/test/mock_device_shared_access_unittest.cc b/services/video_capture/test/mock_device_shared_access_unittest.cc
index 5070761a..92e8ee769 100644
--- a/services/video_capture/test/mock_device_shared_access_unittest.cc
+++ b/services/video_capture/test/mock_device_shared_access_unittest.cc
@@ -6,6 +6,7 @@
 #include "base/callback_helpers.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
 #include "build/chromeos_buildflags.h"
diff --git a/services/video_capture/test/mock_device_test.cc b/services/video_capture/test/mock_device_test.cc
index 7491ac2..ffcb439 100644
--- a/services/video_capture/test/mock_device_test.cc
+++ b/services/video_capture/test/mock_device_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "build/chromeos_buildflags.h"
 #include "media/capture/video/video_capture_system_impl.h"
diff --git a/services/video_capture/video_capture_service_impl.cc b/services/video_capture/video_capture_service_impl.cc
index 00d803d..bcea0e5 100644
--- a/services/video_capture/video_capture_service_impl.cc
+++ b/services/video_capture/video_capture_service_impl.cc
@@ -8,6 +8,8 @@
 
 #include "base/bind.h"
 #include "base/feature_list.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/services/video_capture/video_capture_service_impl.h b/services/video_capture/video_capture_service_impl.h
index ecaca02..2af926db 100644
--- a/services/video_capture/video_capture_service_impl.h
+++ b/services/video_capture/video_capture_service_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
index acc8a99..32004fd 100644
--- a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
+++ b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
@@ -164,7 +164,8 @@
     case cc::FilterOperation::REFERENCE: {
       ASSERT_EQ(!!input.image_filter(), !!output.image_filter());
       if (input.image_filter()) {
-        EXPECT_EQ(*input.image_filter(), *output.image_filter());
+        EXPECT_TRUE(
+            input.image_filter()->EqualsForTesting(*output.image_filter()));
       }
       break;
     }
diff --git a/services/viz/public/cpp/gpu/context_provider_command_buffer.cc b/services/viz/public/cpp/gpu/context_provider_command_buffer.cc
index 97f7eef..c04ff2f9 100644
--- a/services/viz/public/cpp/gpu/context_provider_command_buffer.cc
+++ b/services/viz/public/cpp/gpu/context_provider_command_buffer.cc
@@ -20,7 +20,7 @@
 #include "base/observer_list.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "build/build_config.h"
diff --git a/storage/browser/blob/blob_memory_controller_unittest.cc b/storage/browser/blob/blob_memory_controller_unittest.cc
index 9c696a2f..b70d96a 100644
--- a/storage/browser/blob/blob_memory_controller_unittest.cc
+++ b/storage/browser/blob/blob_memory_controller_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "storage/browser/blob/blob_data_builder.h"
 #include "storage/browser/blob/blob_data_item.h"
 #include "storage/browser/blob/shareable_blob_data_item.h"
diff --git a/storage/browser/blob/blob_storage_context_mojo_unittest.cc b/storage/browser/blob/blob_storage_context_mojo_unittest.cc
index f13ca4a..315eaaab 100644
--- a/storage/browser/blob/blob_storage_context_mojo_unittest.cc
+++ b/storage/browser/blob/blob_storage_context_mojo_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/containers/span.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
diff --git a/storage/browser/blob/blob_storage_context_unittest.cc b/storage/browser/blob/blob_storage_context_unittest.cc
index f1564a9..5f111a7d 100644
--- a/storage/browser/blob/blob_storage_context_unittest.cc
+++ b/storage/browser/blob/blob_storage_context_unittest.cc
@@ -22,7 +22,6 @@
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "net/base/io_buffer.h"
 #include "net/base/test_completion_callback.h"
diff --git a/storage/browser/blob/blob_transport_strategy_unittest.cc b/storage/browser/blob/blob_transport_strategy_unittest.cc
index 533f4889..9b2352c 100644
--- a/storage/browser/blob/blob_transport_strategy_unittest.cc
+++ b/storage/browser/blob/blob_transport_strategy_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/rand_util.h"
 #include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/storage/browser/blob/blob_url_loader.cc b/storage/browser/blob/blob_url_loader.cc
index 87d52e8..c8b76b9 100644
--- a/storage/browser/blob/blob_url_loader.cc
+++ b/storage/browser/blob/blob_url_loader.cc
@@ -15,7 +15,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/io_buffer.h"
 #include "net/http/http_byte_range.h"
 #include "net/http/http_request_headers.h"
diff --git a/storage/browser/blob/view_blob_internals_job.cc b/storage/browser/blob/view_blob_internals_job.cc
index 79b8896e..5b93c199 100644
--- a/storage/browser/blob/view_blob_internals_job.cc
+++ b/storage/browser/blob/view_blob_internals_job.cc
@@ -20,7 +20,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "net/base/net_errors.h"
 #include "storage/browser/blob/blob_data_item.h"
 #include "storage/browser/blob/blob_entry.h"
diff --git a/storage/browser/database/database_quota_client.cc b/storage/browser/database/database_quota_client.cc
index d67f60e..e3376cf4 100644
--- a/storage/browser/database/database_quota_client.cc
+++ b/storage/browser/database/database_quota_client.cc
@@ -16,7 +16,6 @@
 #include "base/location.h"
 #include "base/sequence_checker.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
 #include "net/base/completion_once_callback.h"
 #include "net/base/net_errors.h"
diff --git a/storage/browser/file_system/dragged_file_util_unittest.cc b/storage/browser/file_system/dragged_file_util_unittest.cc
index f277faa..27187d7 100644
--- a/storage/browser/file_system/dragged_file_util_unittest.cc
+++ b/storage/browser/file_system/dragged_file_util_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
diff --git a/storage/browser/file_system/file_system_context.cc b/storage/browser/file_system/file_system_context.cc
index 1ed1bbe6..261891a 100644
--- a/storage/browser/file_system/file_system_context.cc
+++ b/storage/browser/file_system/file_system_context.cc
@@ -16,6 +16,7 @@
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/types/pass_key.h"
 #include "components/services/storage/public/cpp/buckets/bucket_info.h"
diff --git a/storage/browser/file_system/file_system_quota_client_unittest.cc b/storage/browser/file_system/file_system_quota_client_unittest.cc
index fb71f60..a4d54ac 100644
--- a/storage/browser/file_system/file_system_quota_client_unittest.cc
+++ b/storage/browser/file_system/file_system_quota_client_unittest.cc
@@ -12,9 +12,9 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
 #include "components/services/storage/public/mojom/quota_client.mojom.h"
 #include "storage/browser/file_system/file_system_context.h"
diff --git a/storage/browser/file_system/local_file_stream_writer_unittest.cc b/storage/browser/file_system/local_file_stream_writer_unittest.cc
index 07d0f8c8..0713abd 100644
--- a/storage/browser/file_system/local_file_stream_writer_unittest.cc
+++ b/storage/browser/file_system/local_file_stream_writer_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "storage/browser/file_system/file_stream_writer.h"
 #include "storage/browser/file_system/file_stream_writer_test.h"
 
diff --git a/storage/browser/file_system/memory_file_stream_reader_unittest.cc b/storage/browser/file_system/memory_file_stream_reader_unittest.cc
index edf8a312d..98f06b0 100644
--- a/storage/browser/file_system/memory_file_stream_reader_unittest.cc
+++ b/storage/browser/file_system/memory_file_stream_reader_unittest.cc
@@ -16,6 +16,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
diff --git a/storage/browser/file_system/memory_file_stream_writer_unittest.cc b/storage/browser/file_system/memory_file_stream_writer_unittest.cc
index e71a207..ba04d13 100644
--- a/storage/browser/file_system/memory_file_stream_writer_unittest.cc
+++ b/storage/browser/file_system/memory_file_stream_writer_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/callback_helpers.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 #include "storage/browser/file_system/file_stream_test_utils.h"
diff --git a/storage/browser/file_system/sandbox_file_stream_reader_unittest.cc b/storage/browser/file_system/sandbox_file_stream_reader_unittest.cc
index 7c36c9f..bfd361d 100644
--- a/storage/browser/file_system/sandbox_file_stream_reader_unittest.cc
+++ b/storage/browser/file_system/sandbox_file_stream_reader_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
diff --git a/storage/browser/file_system/sandbox_file_stream_writer_unittest.cc b/storage/browser/file_system/sandbox_file_stream_writer_unittest.cc
index 6bc9f06..bef00c2 100644
--- a/storage/browser/file_system/sandbox_file_stream_writer_unittest.cc
+++ b/storage/browser/file_system/sandbox_file_stream_writer_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/callback_helpers.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/services/storage/public/cpp/buckets/bucket_info.h"
 #include "components/services/storage/public/cpp/buckets/constants.h"
diff --git a/storage/browser/quota/quota_manager.cc b/storage/browser/quota/quota_manager.cc
index 3e6a58d..60eb91fa 100644
--- a/storage/browser/quota/quota_manager.cc
+++ b/storage/browser/quota/quota_manager.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "storage/browser/quota/quota_manager.h"
+#include "base/task/single_thread_task_runner.h"
 
 #include <utility>
 
diff --git a/storage/browser/quota/quota_manager.h b/storage/browser/quota/quota_manager.h
index 1247ad5..98fa108e 100644
--- a/storage/browser/quota/quota_manager.h
+++ b/storage/browser/quota/quota_manager.h
@@ -5,6 +5,7 @@
 #ifndef STORAGE_BROWSER_QUOTA_QUOTA_MANAGER_H_
 #define STORAGE_BROWSER_QUOTA_QUOTA_MANAGER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "storage/browser/quota/quota_manager_impl.h"
 
 namespace storage {
diff --git a/storage/browser/quota/quota_manager_proxy.cc b/storage/browser/quota/quota_manager_proxy.cc
index 45e70f5a3..6a46f30a 100644
--- a/storage/browser/quota/quota_manager_proxy.cc
+++ b/storage/browser/quota/quota_manager_proxy.cc
@@ -20,7 +20,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
 #include "components/services/storage/public/cpp/constants.h"
diff --git a/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc b/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc
index febc778..ab7bfd6 100644
--- a/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc
+++ b/storage/browser/quota/quota_temporary_storage_evictor_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/containers/contains.h"
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
 #include "components/services/storage/public/cpp/buckets/bucket_id.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
diff --git a/storage/browser/quota/storage_policy_observer.h b/storage/browser/quota/storage_policy_observer.h
index eb71d79..ce0e5ffc 100644
--- a/storage/browser/quota/storage_policy_observer.h
+++ b/storage/browser/quota/storage_policy_observer.h
@@ -13,6 +13,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "components/services/storage/public/mojom/storage_policy_update.mojom.h"
 #include "storage/browser/quota/special_storage_policy.h"
diff --git a/storage/browser/test/mock_blob_util.cc b/storage/browser/test/mock_blob_util.cc
index 0e8544d..13b6d7ae 100644
--- a/storage/browser/test/mock_blob_util.cc
+++ b/storage/browser/test/mock_blob_util.cc
@@ -6,7 +6,6 @@
 
 #include <memory>
 
-#include "base/threading/thread_task_runner_handle.h"
 #include "storage/browser/blob/blob_data_builder.h"
 #include "storage/browser/blob/blob_storage_context.h"
 
diff --git a/storage/browser/test/mock_quota_manager.h b/storage/browser/test/mock_quota_manager.h
index 4c82625..653e093 100644
--- a/storage/browser/test/mock_quota_manager.h
+++ b/storage/browser/test/mock_quota_manager.h
@@ -13,6 +13,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/services/storage/public/mojom/quota_client.mojom.h"
 #include "storage/browser/quota/quota_client_type.h"
diff --git a/storage/browser/test/mock_quota_manager_proxy.cc b/storage/browser/test/mock_quota_manager_proxy.cc
index e43176a..a0dff37 100644
--- a/storage/browser/test/mock_quota_manager_proxy.cc
+++ b/storage/browser/test/mock_quota_manager_proxy.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "components/services/storage/public/mojom/quota_client.mojom.h"
diff --git a/storage/browser/test/quota_manager_proxy_sync.cc b/storage/browser/test/quota_manager_proxy_sync.cc
index d588bcf..d5ab66d42 100644
--- a/storage/browser/test/quota_manager_proxy_sync.cc
+++ b/storage/browser/test/quota_manager_proxy_sync.cc
@@ -5,6 +5,7 @@
 #include "storage/browser/test/quota_manager_proxy_sync.h"
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "components/services/storage/public/cpp/buckets/bucket_info.h"
 #include "components/services/storage/public/cpp/buckets/constants.h"
diff --git a/storage/browser/test/test_file_system_backend.cc b/storage/browser/test/test_file_system_backend.cc
index f5415e54..fedf2cf8 100644
--- a/storage/browser/test/test_file_system_backend.cc
+++ b/storage/browser/test/test_file_system_backend.cc
@@ -13,7 +13,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "storage/browser/file_system/copy_or_move_file_validator.h"
 #include "storage/browser/file_system/file_observers.h"
 #include "storage/browser/file_system/file_system_operation.h"
diff --git a/storage/browser/test/test_file_system_context.cc b/storage/browser/test/test_file_system_context.cc
index e5e391c..2bfc3337 100644
--- a/storage/browser/test/test_file_system_context.cc
+++ b/storage/browser/test/test_file_system_context.cc
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "storage/browser/file_system/external_mount_points.h"
 #include "storage/browser/file_system/file_system_backend.h"
diff --git a/storage/browser/test/test_file_system_context.h b/storage/browser/test/test_file_system_context.h
index 598b3ac..a30cf9e 100644
--- a/storage/browser/test/test_file_system_context.h
+++ b/storage/browser/test/test_file_system_context.h
@@ -10,6 +10,7 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "storage/browser/file_system/file_system_context.h"
 
diff --git a/testing/buildbot/chromium.angle.json b/testing/buildbot/chromium.angle.json
index f3b0ef68..d8d7bb4 100644
--- a/testing/buildbot/chromium.angle.json
+++ b/testing/buildbot/chromium.angle.json
@@ -65,7 +65,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_profile_data": true,
@@ -98,7 +98,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -123,7 +123,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_profile_data": true,
@@ -156,7 +156,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index b21be6d..230d87f 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -39619,7 +39619,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -39649,7 +39649,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39671,7 +39671,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -39701,7 +39701,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39723,7 +39723,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -39753,7 +39753,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39775,7 +39775,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -39805,7 +39805,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39827,7 +39827,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -39857,7 +39857,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39879,7 +39879,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -39909,7 +39909,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39931,7 +39931,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -39961,7 +39961,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39983,7 +39983,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -40013,7 +40013,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40035,7 +40035,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -40065,7 +40065,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40087,7 +40087,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -40117,7 +40117,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40139,7 +40139,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -40169,7 +40169,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40191,7 +40191,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -40221,7 +40221,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40243,7 +40243,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -40273,7 +40273,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40295,7 +40295,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -40325,7 +40325,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40347,7 +40347,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -40377,7 +40377,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40399,7 +40399,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -40429,7 +40429,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40451,7 +40451,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -40481,7 +40481,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40503,7 +40503,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -40533,7 +40533,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40575,7 +40575,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -40607,7 +40607,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40622,7 +40622,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -40654,7 +40654,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40669,7 +40669,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -40701,7 +40701,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40716,7 +40716,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -40748,7 +40748,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40763,7 +40763,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -40795,7 +40795,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40810,7 +40810,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -40842,7 +40842,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40857,7 +40857,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -40889,7 +40889,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40904,7 +40904,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -40936,7 +40936,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40951,7 +40951,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -40983,7 +40983,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40998,7 +40998,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -41030,7 +41030,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41045,7 +41045,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -41077,7 +41077,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41092,7 +41092,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -41124,7 +41124,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41139,7 +41139,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -41171,7 +41171,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41186,7 +41186,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -41218,7 +41218,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41233,7 +41233,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -41265,7 +41265,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41280,7 +41280,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -41312,7 +41312,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41327,7 +41327,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -41359,7 +41359,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -41374,7 +41374,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -41406,7 +41406,7 @@
           "expiration": 21600,
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 77df44d..6532f526 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -19189,7 +19189,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19222,7 +19222,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19244,7 +19244,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19277,7 +19277,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19299,7 +19299,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19332,7 +19332,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19355,7 +19355,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19388,7 +19388,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19411,7 +19411,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19444,7 +19444,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19467,7 +19467,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19500,7 +19500,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19523,7 +19523,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19556,7 +19556,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19579,7 +19579,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19612,7 +19612,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19635,7 +19635,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19668,7 +19668,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19690,7 +19690,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19723,7 +19723,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19745,7 +19745,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19778,7 +19778,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19801,7 +19801,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19834,7 +19834,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19857,7 +19857,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19890,7 +19890,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19912,7 +19912,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -19945,7 +19945,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19967,7 +19967,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -20000,7 +20000,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20022,7 +20022,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -20055,7 +20055,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20077,7 +20077,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -20110,7 +20110,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20132,7 +20132,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--extra-app-args=--disable-field-trial-config"
@@ -20165,7 +20165,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20194,7 +20194,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -20224,7 +20224,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20246,7 +20246,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -20276,7 +20276,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20298,7 +20298,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -20328,7 +20328,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20350,7 +20350,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -20380,7 +20380,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20402,7 +20402,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -20432,7 +20432,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20454,7 +20454,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -20484,7 +20484,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20506,7 +20506,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -20536,7 +20536,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20558,7 +20558,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -20588,7 +20588,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20610,7 +20610,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -20640,7 +20640,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20662,7 +20662,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -20692,7 +20692,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20714,7 +20714,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -20744,7 +20744,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20766,7 +20766,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -20796,7 +20796,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20818,7 +20818,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -20848,7 +20848,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20870,7 +20870,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -20900,7 +20900,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20922,7 +20922,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -20952,7 +20952,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20974,7 +20974,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -21004,7 +21004,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21026,7 +21026,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -21056,7 +21056,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21078,7 +21078,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -21108,7 +21108,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21130,7 +21130,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21163,7 +21163,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21185,7 +21185,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21218,7 +21218,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21240,7 +21240,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21273,7 +21273,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21295,7 +21295,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21328,7 +21328,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21351,7 +21351,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21384,7 +21384,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21407,7 +21407,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21440,7 +21440,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21463,7 +21463,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21496,7 +21496,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21519,7 +21519,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21552,7 +21552,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21575,7 +21575,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21608,7 +21608,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21631,7 +21631,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21664,7 +21664,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21687,7 +21687,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21720,7 +21720,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21743,7 +21743,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21776,7 +21776,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21799,7 +21799,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21832,7 +21832,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21854,7 +21854,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21887,7 +21887,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21909,7 +21909,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21942,7 +21942,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21964,7 +21964,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -21997,7 +21997,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22020,7 +22020,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22053,7 +22053,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22076,7 +22076,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22109,7 +22109,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22132,7 +22132,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -22162,7 +22162,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22184,7 +22184,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -22214,7 +22214,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22236,7 +22236,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -22266,7 +22266,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22288,7 +22288,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -22318,7 +22318,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22340,7 +22340,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22373,7 +22373,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22395,7 +22395,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22428,7 +22428,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22450,7 +22450,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22483,7 +22483,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22505,7 +22505,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -22535,7 +22535,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22557,7 +22557,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -22587,7 +22587,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22610,7 +22610,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -22640,7 +22640,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22662,7 +22662,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22695,7 +22695,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22717,7 +22717,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22750,7 +22750,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22772,7 +22772,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22805,7 +22805,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22827,7 +22827,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -22857,7 +22857,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22879,7 +22879,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -22909,7 +22909,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22931,7 +22931,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -22961,7 +22961,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22983,7 +22983,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -23013,7 +23013,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23035,7 +23035,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -23065,7 +23065,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23087,7 +23087,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23120,7 +23120,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23142,7 +23142,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23175,7 +23175,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23197,7 +23197,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23230,7 +23230,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23252,7 +23252,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -23282,7 +23282,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23304,7 +23304,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -23334,7 +23334,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23356,7 +23356,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -23386,7 +23386,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23408,7 +23408,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -23438,7 +23438,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23460,7 +23460,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -23490,7 +23490,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23512,7 +23512,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -23542,7 +23542,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23564,7 +23564,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -23594,7 +23594,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23616,7 +23616,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -23646,7 +23646,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23668,7 +23668,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -23698,7 +23698,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23720,7 +23720,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -23750,7 +23750,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23772,7 +23772,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -23802,7 +23802,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23824,7 +23824,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -23854,7 +23854,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23876,7 +23876,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -23906,7 +23906,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23928,7 +23928,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -23958,7 +23958,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23980,7 +23980,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -24010,7 +24010,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24032,7 +24032,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -24062,7 +24062,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24084,7 +24084,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -24114,7 +24114,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24136,7 +24136,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -24166,7 +24166,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24188,7 +24188,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -24218,7 +24218,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24240,7 +24240,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -24270,7 +24270,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24292,7 +24292,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -24322,7 +24322,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24344,7 +24344,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -24374,7 +24374,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24396,7 +24396,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -24426,7 +24426,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24448,7 +24448,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -24478,7 +24478,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24504,7 +24504,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "cronet_test",
@@ -24534,7 +24534,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24561,7 +24561,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -24592,7 +24592,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24615,7 +24615,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -24646,7 +24646,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24669,7 +24669,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -24700,7 +24700,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24723,7 +24723,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -24754,7 +24754,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24777,7 +24777,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -24808,7 +24808,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24831,7 +24831,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -24862,7 +24862,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24885,7 +24885,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -24916,7 +24916,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24939,7 +24939,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -24970,7 +24970,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24993,7 +24993,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -25024,7 +25024,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25047,7 +25047,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -25078,7 +25078,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25101,7 +25101,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -25132,7 +25132,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25155,7 +25155,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -25186,7 +25186,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25209,7 +25209,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -25240,7 +25240,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25263,7 +25263,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -25294,7 +25294,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25317,7 +25317,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -25348,7 +25348,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25371,7 +25371,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -25402,7 +25402,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25425,7 +25425,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25456,7 +25456,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25479,7 +25479,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25510,7 +25510,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25533,7 +25533,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25564,7 +25564,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25587,7 +25587,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25618,7 +25618,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25641,7 +25641,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25672,7 +25672,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25695,7 +25695,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25726,7 +25726,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25749,7 +25749,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25780,7 +25780,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25803,7 +25803,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25834,7 +25834,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25857,7 +25857,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25888,7 +25888,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25911,7 +25911,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -25942,7 +25942,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25965,7 +25965,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -25996,7 +25996,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26019,7 +26019,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -26050,7 +26050,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26073,7 +26073,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -26104,7 +26104,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26127,7 +26127,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -26158,7 +26158,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26181,7 +26181,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26212,7 +26212,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26235,7 +26235,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26266,7 +26266,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26289,7 +26289,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26320,7 +26320,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26343,7 +26343,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26374,7 +26374,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26397,7 +26397,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26428,7 +26428,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26451,7 +26451,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26482,7 +26482,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26505,7 +26505,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26536,7 +26536,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26559,7 +26559,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26590,7 +26590,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26613,7 +26613,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26644,7 +26644,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26667,7 +26667,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -26698,7 +26698,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26721,7 +26721,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -26752,7 +26752,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26775,7 +26775,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -26806,7 +26806,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26829,7 +26829,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -26861,7 +26861,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26884,7 +26884,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -26916,7 +26916,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26939,7 +26939,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -26971,7 +26971,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26994,7 +26994,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27026,7 +27026,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27049,7 +27049,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27081,7 +27081,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27104,7 +27104,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27136,7 +27136,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27159,7 +27159,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27191,7 +27191,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27214,7 +27214,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27246,7 +27246,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27269,7 +27269,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27301,7 +27301,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27325,7 +27325,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27357,7 +27357,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27381,7 +27381,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27413,7 +27413,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27437,7 +27437,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27469,7 +27469,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27493,7 +27493,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27525,7 +27525,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27549,7 +27549,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27581,7 +27581,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27605,7 +27605,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27637,7 +27637,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27661,7 +27661,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27693,7 +27693,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27717,7 +27717,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27749,7 +27749,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27773,7 +27773,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27805,7 +27805,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27829,7 +27829,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27861,7 +27861,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27885,7 +27885,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27917,7 +27917,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27941,7 +27941,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -27973,7 +27973,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27997,7 +27997,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28029,7 +28029,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28053,7 +28053,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28085,7 +28085,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28109,7 +28109,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28141,7 +28141,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28165,7 +28165,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28197,7 +28197,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28221,7 +28221,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28253,7 +28253,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28277,7 +28277,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28309,7 +28309,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28333,7 +28333,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28365,7 +28365,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28389,7 +28389,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28421,7 +28421,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28445,7 +28445,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28477,7 +28477,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28501,7 +28501,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28533,7 +28533,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28557,7 +28557,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28589,7 +28589,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28613,7 +28613,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28645,7 +28645,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28668,7 +28668,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28700,7 +28700,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28723,7 +28723,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28755,7 +28755,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28778,7 +28778,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28810,7 +28810,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28833,7 +28833,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28865,7 +28865,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28888,7 +28888,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28920,7 +28920,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28943,7 +28943,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -28975,7 +28975,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -28998,7 +28998,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29030,7 +29030,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29053,7 +29053,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29085,7 +29085,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29109,7 +29109,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29141,7 +29141,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29165,7 +29165,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29197,7 +29197,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29221,7 +29221,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29253,7 +29253,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29277,7 +29277,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29309,7 +29309,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29333,7 +29333,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29365,7 +29365,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29389,7 +29389,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29421,7 +29421,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29445,7 +29445,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -29477,7 +29477,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29501,7 +29501,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29532,7 +29532,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29555,7 +29555,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29586,7 +29586,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29609,7 +29609,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29640,7 +29640,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29663,7 +29663,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29694,7 +29694,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29717,7 +29717,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29748,7 +29748,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29771,7 +29771,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29802,7 +29802,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29825,7 +29825,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29856,7 +29856,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29879,7 +29879,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29910,7 +29910,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29933,7 +29933,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -29964,7 +29964,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -29987,7 +29987,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -30018,7 +30018,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30041,7 +30041,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30073,7 +30073,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30096,7 +30096,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30128,7 +30128,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30151,7 +30151,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30183,7 +30183,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30206,7 +30206,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30238,7 +30238,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30261,7 +30261,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30293,7 +30293,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30316,7 +30316,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30348,7 +30348,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30371,7 +30371,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30403,7 +30403,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30426,7 +30426,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30458,7 +30458,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30481,7 +30481,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -30512,7 +30512,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30535,7 +30535,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -30566,7 +30566,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30589,7 +30589,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -30620,7 +30620,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30644,7 +30644,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -30675,7 +30675,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30699,7 +30699,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -30730,7 +30730,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30753,7 +30753,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -30784,7 +30784,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30807,7 +30807,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30839,7 +30839,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30862,7 +30862,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30894,7 +30894,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30917,7 +30917,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -30949,7 +30949,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -30972,7 +30972,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -31004,7 +31004,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31027,7 +31027,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -31059,7 +31059,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31082,7 +31082,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -31114,7 +31114,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31137,7 +31137,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -31169,7 +31169,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31192,7 +31192,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -31224,7 +31224,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31247,7 +31247,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -31278,7 +31278,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31301,7 +31301,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -31332,7 +31332,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31355,7 +31355,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31386,7 +31386,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31409,7 +31409,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31440,7 +31440,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31463,7 +31463,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31494,7 +31494,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31517,7 +31517,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31548,7 +31548,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31571,7 +31571,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31602,7 +31602,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31625,7 +31625,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31656,7 +31656,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31679,7 +31679,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31710,7 +31710,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31733,7 +31733,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31764,7 +31764,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31787,7 +31787,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31818,7 +31818,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31841,7 +31841,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -31872,7 +31872,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31895,7 +31895,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -31927,7 +31927,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -31950,7 +31950,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -31982,7 +31982,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32005,7 +32005,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -32037,7 +32037,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32060,7 +32060,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -32092,7 +32092,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32115,7 +32115,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -32147,7 +32147,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32170,7 +32170,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -32202,7 +32202,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32225,7 +32225,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -32257,7 +32257,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32280,7 +32280,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -32312,7 +32312,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32335,7 +32335,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32366,7 +32366,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32389,7 +32389,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32420,7 +32420,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32443,7 +32443,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32474,7 +32474,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32497,7 +32497,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32528,7 +32528,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32551,7 +32551,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32582,7 +32582,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32605,7 +32605,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32636,7 +32636,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32659,7 +32659,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32690,7 +32690,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32713,7 +32713,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32744,7 +32744,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32767,7 +32767,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32798,7 +32798,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32821,7 +32821,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -32852,7 +32852,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32875,7 +32875,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -32906,7 +32906,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32929,7 +32929,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -32960,7 +32960,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -32983,7 +32983,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33014,7 +33014,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33037,7 +33037,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33068,7 +33068,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33091,7 +33091,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33122,7 +33122,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33145,7 +33145,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33176,7 +33176,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33199,7 +33199,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33230,7 +33230,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33253,7 +33253,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33284,7 +33284,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33307,7 +33307,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33338,7 +33338,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33361,7 +33361,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -33392,7 +33392,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33415,7 +33415,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33446,7 +33446,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33469,7 +33469,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33500,7 +33500,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33523,7 +33523,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33554,7 +33554,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33577,7 +33577,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33608,7 +33608,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33631,7 +33631,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33662,7 +33662,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33685,7 +33685,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33716,7 +33716,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33739,7 +33739,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33770,7 +33770,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33793,7 +33793,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33824,7 +33824,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33847,7 +33847,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33878,7 +33878,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33901,7 +33901,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -33932,7 +33932,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -33955,7 +33955,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -33986,7 +33986,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34009,7 +34009,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -34040,7 +34040,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34063,7 +34063,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -34094,7 +34094,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34117,7 +34117,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -34148,7 +34148,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34171,7 +34171,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34202,7 +34202,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34225,7 +34225,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34256,7 +34256,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34279,7 +34279,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34310,7 +34310,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34333,7 +34333,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34364,7 +34364,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34387,7 +34387,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34418,7 +34418,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34441,7 +34441,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34472,7 +34472,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34495,7 +34495,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34526,7 +34526,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34549,7 +34549,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34580,7 +34580,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34603,7 +34603,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34634,7 +34634,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34657,7 +34657,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -34688,7 +34688,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34711,7 +34711,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -34742,7 +34742,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34765,7 +34765,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -34796,7 +34796,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34819,7 +34819,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -34850,7 +34850,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34873,7 +34873,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -34904,7 +34904,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34927,7 +34927,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -34958,7 +34958,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -34981,7 +34981,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -35012,7 +35012,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35035,7 +35035,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -35066,7 +35066,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35089,7 +35089,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -35120,7 +35120,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35143,7 +35143,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -35174,7 +35174,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35197,7 +35197,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -35228,7 +35228,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35251,7 +35251,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -35282,7 +35282,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35305,7 +35305,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -35336,7 +35336,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35359,7 +35359,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -35390,7 +35390,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35413,7 +35413,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -35444,7 +35444,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35470,7 +35470,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "cronet_test",
@@ -35500,7 +35500,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35526,7 +35526,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -35556,7 +35556,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35578,7 +35578,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -35608,7 +35608,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35630,7 +35630,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -35660,7 +35660,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35682,7 +35682,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -35712,7 +35712,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35734,7 +35734,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -35764,7 +35764,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35786,7 +35786,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -35816,7 +35816,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35838,7 +35838,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -35868,7 +35868,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35890,7 +35890,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -35920,7 +35920,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35942,7 +35942,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -35972,7 +35972,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -35994,7 +35994,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36025,7 +36025,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36047,7 +36047,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36078,7 +36078,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36101,7 +36101,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36132,7 +36132,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36155,7 +36155,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36186,7 +36186,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36209,7 +36209,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36240,7 +36240,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36262,7 +36262,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36293,7 +36293,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36316,7 +36316,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -36346,7 +36346,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36368,7 +36368,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36399,7 +36399,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36421,7 +36421,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -36451,7 +36451,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36473,7 +36473,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -36503,7 +36503,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36526,7 +36526,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -36556,7 +36556,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36578,7 +36578,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36609,7 +36609,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36631,7 +36631,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -36661,7 +36661,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36683,7 +36683,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -36713,7 +36713,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36735,7 +36735,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -36766,7 +36766,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36788,7 +36788,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -36818,7 +36818,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36840,7 +36840,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -36870,7 +36870,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36892,7 +36892,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -36922,7 +36922,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36944,7 +36944,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -36974,7 +36974,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -36996,7 +36996,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -37026,7 +37026,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37048,7 +37048,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -37078,7 +37078,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37100,7 +37100,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -37130,7 +37130,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37152,7 +37152,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -37182,7 +37182,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37204,7 +37204,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -37234,7 +37234,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37262,7 +37262,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -37292,7 +37292,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37316,7 +37316,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -37346,7 +37346,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37370,7 +37370,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -37400,7 +37400,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37424,7 +37424,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -37454,7 +37454,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37478,7 +37478,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -37508,7 +37508,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37532,7 +37532,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -37562,7 +37562,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37586,7 +37586,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -37616,7 +37616,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37640,7 +37640,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -37670,7 +37670,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37694,7 +37694,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -37724,7 +37724,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37748,7 +37748,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -37778,7 +37778,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37802,7 +37802,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -37832,7 +37832,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37856,7 +37856,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -37886,7 +37886,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37910,7 +37910,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -37940,7 +37940,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -37964,7 +37964,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -37994,7 +37994,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38018,7 +38018,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -38048,7 +38048,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38072,7 +38072,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -38102,7 +38102,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38126,7 +38126,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -38156,7 +38156,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38180,7 +38180,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -38210,7 +38210,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38234,7 +38234,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38265,7 +38265,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38289,7 +38289,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38320,7 +38320,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38344,7 +38344,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38375,7 +38375,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38400,7 +38400,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38431,7 +38431,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38456,7 +38456,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38487,7 +38487,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38512,7 +38512,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38543,7 +38543,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38568,7 +38568,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38599,7 +38599,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38624,7 +38624,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38655,7 +38655,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38680,7 +38680,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38711,7 +38711,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38735,7 +38735,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38766,7 +38766,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38790,7 +38790,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38821,7 +38821,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38846,7 +38846,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -38877,7 +38877,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38902,7 +38902,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -38932,7 +38932,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -38956,7 +38956,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -38986,7 +38986,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39010,7 +39010,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -39041,7 +39041,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39065,7 +39065,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -39096,7 +39096,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39120,7 +39120,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -39150,7 +39150,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39174,7 +39174,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -39204,7 +39204,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39228,7 +39228,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -39258,7 +39258,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39283,7 +39283,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -39313,7 +39313,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39338,7 +39338,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -39368,7 +39368,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39392,7 +39392,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -39422,7 +39422,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39446,7 +39446,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -39477,7 +39477,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39501,7 +39501,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -39532,7 +39532,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39556,7 +39556,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -39586,7 +39586,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39610,7 +39610,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -39640,7 +39640,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39664,7 +39664,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -39694,7 +39694,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39718,7 +39718,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -39748,7 +39748,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39772,7 +39772,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -39803,7 +39803,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39827,7 +39827,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -39858,7 +39858,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39882,7 +39882,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -39912,7 +39912,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39936,7 +39936,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -39966,7 +39966,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -39990,7 +39990,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -40020,7 +40020,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40044,7 +40044,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -40074,7 +40074,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40098,7 +40098,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -40128,7 +40128,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40152,7 +40152,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -40182,7 +40182,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40206,7 +40206,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -40236,7 +40236,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40260,7 +40260,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -40290,7 +40290,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40314,7 +40314,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -40344,7 +40344,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40368,7 +40368,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -40398,7 +40398,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40422,7 +40422,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -40452,7 +40452,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40476,7 +40476,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -40506,7 +40506,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40530,7 +40530,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -40560,7 +40560,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40584,7 +40584,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -40614,7 +40614,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40638,7 +40638,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -40668,7 +40668,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40692,7 +40692,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -40722,7 +40722,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40746,7 +40746,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -40776,7 +40776,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40800,7 +40800,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -40830,7 +40830,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40853,7 +40853,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "experiment_percentage": 100,
@@ -40887,7 +40887,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             }
           ],
@@ -40912,7 +40912,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -40942,7 +40942,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -40964,7 +40964,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -40994,7 +40994,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41016,7 +41016,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41046,7 +41046,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41068,7 +41068,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41098,7 +41098,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41120,7 +41120,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41150,7 +41150,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41172,7 +41172,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41202,7 +41202,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41224,7 +41224,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41254,7 +41254,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41276,7 +41276,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41306,7 +41306,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41328,7 +41328,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41358,7 +41358,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41380,7 +41380,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -41410,7 +41410,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41432,7 +41432,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -41462,7 +41462,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41484,7 +41484,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -41514,7 +41514,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41536,7 +41536,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -41566,7 +41566,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41588,7 +41588,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -41618,7 +41618,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41640,7 +41640,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -41670,7 +41670,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41692,7 +41692,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -41722,7 +41722,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41744,7 +41744,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -41774,7 +41774,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41796,7 +41796,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -41826,7 +41826,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41848,7 +41848,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -41878,7 +41878,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41900,7 +41900,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -41930,7 +41930,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -41952,7 +41952,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -41982,7 +41982,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42004,7 +42004,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -42034,7 +42034,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42056,7 +42056,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -42086,7 +42086,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42108,7 +42108,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -42138,7 +42138,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42160,7 +42160,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -42190,7 +42190,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42212,7 +42212,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -42242,7 +42242,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42264,7 +42264,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42294,7 +42294,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42316,7 +42316,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42346,7 +42346,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42368,7 +42368,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42398,7 +42398,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42420,7 +42420,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42450,7 +42450,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42472,7 +42472,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42502,7 +42502,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42524,7 +42524,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42554,7 +42554,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42576,7 +42576,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42606,7 +42606,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42628,7 +42628,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -42658,7 +42658,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42680,7 +42680,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -42710,7 +42710,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42732,7 +42732,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -42762,7 +42762,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42784,7 +42784,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -42815,7 +42815,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42837,7 +42837,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -42868,7 +42868,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42890,7 +42890,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -42921,7 +42921,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42943,7 +42943,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -42974,7 +42974,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -42996,7 +42996,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43027,7 +43027,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43049,7 +43049,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43080,7 +43080,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43102,7 +43102,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43133,7 +43133,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43156,7 +43156,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43187,7 +43187,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43210,7 +43210,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43241,7 +43241,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43264,7 +43264,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43295,7 +43295,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43318,7 +43318,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43349,7 +43349,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43372,7 +43372,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43403,7 +43403,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43426,7 +43426,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43457,7 +43457,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43480,7 +43480,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43511,7 +43511,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43534,7 +43534,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43565,7 +43565,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43588,7 +43588,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43619,7 +43619,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43642,7 +43642,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43673,7 +43673,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43696,7 +43696,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43727,7 +43727,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43750,7 +43750,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43781,7 +43781,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43804,7 +43804,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43835,7 +43835,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43858,7 +43858,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43889,7 +43889,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43912,7 +43912,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43943,7 +43943,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -43966,7 +43966,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -43997,7 +43997,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44020,7 +44020,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44051,7 +44051,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44074,7 +44074,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44105,7 +44105,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44127,7 +44127,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44158,7 +44158,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44180,7 +44180,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44211,7 +44211,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44233,7 +44233,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44264,7 +44264,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44286,7 +44286,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44317,7 +44317,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44339,7 +44339,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44370,7 +44370,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44392,7 +44392,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44423,7 +44423,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44446,7 +44446,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44477,7 +44477,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44500,7 +44500,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44531,7 +44531,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44554,7 +44554,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44585,7 +44585,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44608,7 +44608,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44639,7 +44639,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44662,7 +44662,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -44693,7 +44693,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44716,7 +44716,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -44746,7 +44746,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44768,7 +44768,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -44798,7 +44798,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44820,7 +44820,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -44850,7 +44850,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44872,7 +44872,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -44902,7 +44902,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44924,7 +44924,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -44954,7 +44954,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -44976,7 +44976,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -45006,7 +45006,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45028,7 +45028,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -45058,7 +45058,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45080,7 +45080,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -45110,7 +45110,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45132,7 +45132,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45163,7 +45163,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45185,7 +45185,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45216,7 +45216,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45238,7 +45238,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45269,7 +45269,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45291,7 +45291,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45322,7 +45322,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45344,7 +45344,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45375,7 +45375,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45397,7 +45397,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45428,7 +45428,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45450,7 +45450,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -45480,7 +45480,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45502,7 +45502,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -45532,7 +45532,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45554,7 +45554,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -45584,7 +45584,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45607,7 +45607,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -45637,7 +45637,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45660,7 +45660,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -45690,7 +45690,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45712,7 +45712,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -45742,7 +45742,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45764,7 +45764,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45795,7 +45795,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45817,7 +45817,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45848,7 +45848,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45870,7 +45870,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45901,7 +45901,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45923,7 +45923,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -45954,7 +45954,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -45976,7 +45976,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46007,7 +46007,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46029,7 +46029,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46060,7 +46060,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46082,7 +46082,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46113,7 +46113,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46135,7 +46135,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46166,7 +46166,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46188,7 +46188,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -46218,7 +46218,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46240,7 +46240,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -46270,7 +46270,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46292,7 +46292,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46322,7 +46322,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46344,7 +46344,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46374,7 +46374,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46396,7 +46396,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46426,7 +46426,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46448,7 +46448,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46478,7 +46478,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46500,7 +46500,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46530,7 +46530,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46552,7 +46552,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46582,7 +46582,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46604,7 +46604,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46634,7 +46634,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46656,7 +46656,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -46686,7 +46686,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46708,7 +46708,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46739,7 +46739,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46761,7 +46761,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46792,7 +46792,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46814,7 +46814,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46845,7 +46845,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46867,7 +46867,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46898,7 +46898,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46920,7 +46920,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -46951,7 +46951,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -46973,7 +46973,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -47004,7 +47004,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47026,7 +47026,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47056,7 +47056,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47078,7 +47078,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47108,7 +47108,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47130,7 +47130,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47160,7 +47160,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47182,7 +47182,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47212,7 +47212,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47234,7 +47234,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47264,7 +47264,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47286,7 +47286,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47316,7 +47316,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47338,7 +47338,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47368,7 +47368,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47390,7 +47390,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -47420,7 +47420,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47442,7 +47442,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47472,7 +47472,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47494,7 +47494,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47524,7 +47524,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47546,7 +47546,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47576,7 +47576,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47598,7 +47598,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47628,7 +47628,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47650,7 +47650,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47680,7 +47680,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47702,7 +47702,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47732,7 +47732,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47754,7 +47754,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47784,7 +47784,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47806,7 +47806,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -47836,7 +47836,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47858,7 +47858,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -47888,7 +47888,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47910,7 +47910,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -47940,7 +47940,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -47962,7 +47962,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -47992,7 +47992,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48014,7 +48014,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -48044,7 +48044,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48066,7 +48066,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -48096,7 +48096,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48118,7 +48118,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -48148,7 +48148,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48170,7 +48170,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -48200,7 +48200,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48222,7 +48222,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -48252,7 +48252,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48274,7 +48274,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -48304,7 +48304,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48326,7 +48326,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -48356,7 +48356,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48378,7 +48378,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -48408,7 +48408,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48430,7 +48430,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -48460,7 +48460,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48482,7 +48482,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48512,7 +48512,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48534,7 +48534,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48564,7 +48564,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48586,7 +48586,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48616,7 +48616,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48638,7 +48638,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48668,7 +48668,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48690,7 +48690,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48720,7 +48720,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48742,7 +48742,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48772,7 +48772,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48794,7 +48794,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48824,7 +48824,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48846,7 +48846,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -48876,7 +48876,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48898,7 +48898,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -48928,7 +48928,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -48950,7 +48950,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -48980,7 +48980,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49002,7 +49002,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49032,7 +49032,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49054,7 +49054,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49084,7 +49084,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49106,7 +49106,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49136,7 +49136,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49158,7 +49158,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49188,7 +49188,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49210,7 +49210,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49240,7 +49240,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49262,7 +49262,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49292,7 +49292,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49314,7 +49314,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49344,7 +49344,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49366,7 +49366,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -49396,7 +49396,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49418,7 +49418,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -49448,7 +49448,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49470,7 +49470,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -49500,7 +49500,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49529,7 +49529,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -49559,7 +49559,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49581,7 +49581,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -49611,7 +49611,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49633,7 +49633,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -49663,7 +49663,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49685,7 +49685,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -49715,7 +49715,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49737,7 +49737,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -49767,7 +49767,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49789,7 +49789,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -49819,7 +49819,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49841,7 +49841,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -49871,7 +49871,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49893,7 +49893,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -49923,7 +49923,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49945,7 +49945,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -49975,7 +49975,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -49997,7 +49997,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -50027,7 +50027,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50049,7 +50049,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -50079,7 +50079,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50101,7 +50101,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -50131,7 +50131,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50153,7 +50153,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -50183,7 +50183,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50205,7 +50205,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -50235,7 +50235,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50257,7 +50257,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50287,7 +50287,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50309,7 +50309,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50339,7 +50339,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50361,7 +50361,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50391,7 +50391,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50413,7 +50413,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50443,7 +50443,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50465,7 +50465,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50495,7 +50495,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50517,7 +50517,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50547,7 +50547,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50569,7 +50569,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50599,7 +50599,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50621,7 +50621,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -50651,7 +50651,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50673,7 +50673,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -50703,7 +50703,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50725,7 +50725,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -50755,7 +50755,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50777,7 +50777,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -50807,7 +50807,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50829,7 +50829,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -50859,7 +50859,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50881,7 +50881,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -50911,7 +50911,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50933,7 +50933,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -50963,7 +50963,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -50985,7 +50985,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -51015,7 +51015,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51037,7 +51037,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -51067,7 +51067,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51089,7 +51089,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -51119,7 +51119,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51141,7 +51141,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -51171,7 +51171,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51193,7 +51193,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -51223,7 +51223,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51245,7 +51245,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -51275,7 +51275,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51297,7 +51297,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -51327,7 +51327,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51349,7 +51349,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -51379,7 +51379,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51401,7 +51401,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51432,7 +51432,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51454,7 +51454,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51485,7 +51485,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51507,7 +51507,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51538,7 +51538,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51560,7 +51560,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51591,7 +51591,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51613,7 +51613,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51644,7 +51644,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51666,7 +51666,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51697,7 +51697,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51719,7 +51719,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51750,7 +51750,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51773,7 +51773,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51804,7 +51804,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51827,7 +51827,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51858,7 +51858,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51881,7 +51881,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51912,7 +51912,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51935,7 +51935,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -51966,7 +51966,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -51989,7 +51989,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52020,7 +52020,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52043,7 +52043,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52074,7 +52074,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52097,7 +52097,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52128,7 +52128,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52151,7 +52151,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52182,7 +52182,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52205,7 +52205,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52236,7 +52236,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52259,7 +52259,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52290,7 +52290,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52313,7 +52313,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52344,7 +52344,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52367,7 +52367,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52398,7 +52398,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52421,7 +52421,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52452,7 +52452,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52475,7 +52475,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52506,7 +52506,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52529,7 +52529,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52560,7 +52560,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52583,7 +52583,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52614,7 +52614,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52637,7 +52637,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52668,7 +52668,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52691,7 +52691,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52722,7 +52722,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52744,7 +52744,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52775,7 +52775,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52797,7 +52797,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52828,7 +52828,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52850,7 +52850,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52881,7 +52881,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52903,7 +52903,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52934,7 +52934,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -52956,7 +52956,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -52987,7 +52987,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53009,7 +53009,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53040,7 +53040,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53063,7 +53063,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53094,7 +53094,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53117,7 +53117,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53148,7 +53148,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53171,7 +53171,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53202,7 +53202,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53225,7 +53225,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53256,7 +53256,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53279,7 +53279,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53310,7 +53310,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53333,7 +53333,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53363,7 +53363,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53385,7 +53385,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53415,7 +53415,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53437,7 +53437,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53467,7 +53467,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53489,7 +53489,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53519,7 +53519,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53541,7 +53541,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53571,7 +53571,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53593,7 +53593,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53623,7 +53623,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53645,7 +53645,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53675,7 +53675,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53697,7 +53697,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -53727,7 +53727,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53749,7 +53749,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53780,7 +53780,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53802,7 +53802,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53833,7 +53833,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53855,7 +53855,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53886,7 +53886,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53908,7 +53908,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53939,7 +53939,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -53961,7 +53961,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -53992,7 +53992,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54014,7 +54014,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -54045,7 +54045,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54067,7 +54067,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -54097,7 +54097,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54119,7 +54119,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -54149,7 +54149,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54171,7 +54171,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -54201,7 +54201,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54224,7 +54224,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -54254,7 +54254,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54277,7 +54277,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -54307,7 +54307,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54329,7 +54329,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -54359,7 +54359,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54381,7 +54381,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -54412,7 +54412,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54434,7 +54434,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -54465,7 +54465,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54487,7 +54487,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -54518,7 +54518,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54540,7 +54540,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -54571,7 +54571,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54593,7 +54593,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -54624,7 +54624,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54646,7 +54646,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -54677,7 +54677,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54699,7 +54699,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -54729,7 +54729,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54751,7 +54751,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -54781,7 +54781,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54803,7 +54803,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -54833,7 +54833,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54855,7 +54855,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -54885,7 +54885,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54907,7 +54907,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -54937,7 +54937,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -54959,7 +54959,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -54989,7 +54989,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55011,7 +55011,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -55041,7 +55041,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55063,7 +55063,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -55093,7 +55093,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55115,7 +55115,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -55145,7 +55145,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55167,7 +55167,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -55197,7 +55197,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55219,7 +55219,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -55250,7 +55250,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55272,7 +55272,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -55303,7 +55303,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55325,7 +55325,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -55356,7 +55356,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55378,7 +55378,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -55409,7 +55409,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55431,7 +55431,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -55462,7 +55462,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55484,7 +55484,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -55515,7 +55515,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55537,7 +55537,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55567,7 +55567,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55589,7 +55589,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55619,7 +55619,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55641,7 +55641,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55671,7 +55671,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55693,7 +55693,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55723,7 +55723,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55745,7 +55745,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55775,7 +55775,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55797,7 +55797,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55827,7 +55827,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55849,7 +55849,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55879,7 +55879,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55901,7 +55901,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -55931,7 +55931,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -55953,7 +55953,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -55983,7 +55983,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56005,7 +56005,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -56035,7 +56035,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56057,7 +56057,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -56087,7 +56087,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56109,7 +56109,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -56139,7 +56139,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56161,7 +56161,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -56191,7 +56191,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56213,7 +56213,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -56243,7 +56243,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56265,7 +56265,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -56295,7 +56295,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56317,7 +56317,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -56347,7 +56347,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56369,7 +56369,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56399,7 +56399,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56421,7 +56421,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56451,7 +56451,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56473,7 +56473,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56503,7 +56503,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56525,7 +56525,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56555,7 +56555,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56577,7 +56577,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56607,7 +56607,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56629,7 +56629,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56659,7 +56659,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56681,7 +56681,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56711,7 +56711,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56733,7 +56733,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -56763,7 +56763,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56785,7 +56785,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -56815,7 +56815,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56837,7 +56837,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -56867,7 +56867,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56889,7 +56889,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -56919,7 +56919,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56941,7 +56941,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -56971,7 +56971,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -56993,7 +56993,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57023,7 +57023,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57045,7 +57045,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57075,7 +57075,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57097,7 +57097,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57127,7 +57127,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57149,7 +57149,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57179,7 +57179,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57201,7 +57201,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57231,7 +57231,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57253,7 +57253,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57283,7 +57283,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57305,7 +57305,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57335,7 +57335,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57357,7 +57357,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -57387,7 +57387,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57409,7 +57409,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -57439,7 +57439,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57461,7 +57461,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -57491,7 +57491,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57513,7 +57513,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57543,7 +57543,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57565,7 +57565,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57595,7 +57595,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57617,7 +57617,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57647,7 +57647,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57669,7 +57669,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57699,7 +57699,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57721,7 +57721,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57751,7 +57751,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57773,7 +57773,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57803,7 +57803,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57825,7 +57825,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57855,7 +57855,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57877,7 +57877,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -57907,7 +57907,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57929,7 +57929,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -57959,7 +57959,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -57981,7 +57981,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -58011,7 +58011,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index d31b050..b5a6d53 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -10940,7 +10940,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -10972,7 +10972,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -10994,7 +10994,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -11026,7 +11026,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11048,7 +11048,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -11080,7 +11080,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11102,7 +11102,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -11134,7 +11134,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11156,7 +11156,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -11188,7 +11188,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11210,7 +11210,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -11242,7 +11242,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11264,7 +11264,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -11296,7 +11296,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11318,7 +11318,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -11350,7 +11350,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11372,7 +11372,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -11404,7 +11404,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11426,7 +11426,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -11458,7 +11458,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11480,7 +11480,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -11512,7 +11512,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11534,7 +11534,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -11566,7 +11566,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11588,7 +11588,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -11620,7 +11620,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11642,7 +11642,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -11674,7 +11674,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11696,7 +11696,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -11728,7 +11728,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11750,7 +11750,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -11782,7 +11782,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11804,7 +11804,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -11836,7 +11836,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11858,7 +11858,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -11890,7 +11890,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11912,7 +11912,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -11944,7 +11944,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -11966,7 +11966,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -11998,7 +11998,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12020,7 +12020,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -12052,7 +12052,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12074,7 +12074,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -12107,7 +12107,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12130,7 +12130,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -12162,7 +12162,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12184,7 +12184,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -12216,7 +12216,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12238,7 +12238,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -12270,7 +12270,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12292,7 +12292,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -12324,7 +12324,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12346,7 +12346,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -12378,7 +12378,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12400,7 +12400,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -12432,7 +12432,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12454,7 +12454,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -12486,7 +12486,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12509,7 +12509,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -12541,7 +12541,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12563,7 +12563,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -12595,7 +12595,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12617,7 +12617,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -12649,7 +12649,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12671,7 +12671,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -12703,7 +12703,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12725,7 +12725,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -12757,7 +12757,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12779,7 +12779,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -12811,7 +12811,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12833,7 +12833,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -12865,7 +12865,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12887,7 +12887,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -12920,7 +12920,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12942,7 +12942,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -12974,7 +12974,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -12996,7 +12996,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -13028,7 +13028,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13050,7 +13050,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -13082,7 +13082,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13104,7 +13104,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -13136,7 +13136,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13158,7 +13158,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -13190,7 +13190,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13212,7 +13212,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -13244,7 +13244,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13266,7 +13266,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -13298,7 +13298,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13320,7 +13320,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -13352,7 +13352,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13374,7 +13374,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -13406,7 +13406,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13428,7 +13428,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -13460,7 +13460,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13482,7 +13482,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -13514,7 +13514,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13536,7 +13536,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -13568,7 +13568,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13590,7 +13590,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -13622,7 +13622,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13644,7 +13644,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -13676,7 +13676,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13698,7 +13698,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -13730,7 +13730,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13752,7 +13752,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -13784,7 +13784,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13806,7 +13806,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -13838,7 +13838,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13860,7 +13860,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -13892,7 +13892,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13914,7 +13914,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -13946,7 +13946,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -13968,7 +13968,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -14000,7 +14000,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14022,7 +14022,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -14054,7 +14054,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14076,7 +14076,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -14108,7 +14108,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14130,7 +14130,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -14162,7 +14162,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14184,7 +14184,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -14216,7 +14216,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14238,7 +14238,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -14270,7 +14270,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14292,7 +14292,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -14324,7 +14324,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14346,7 +14346,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -14378,7 +14378,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14400,7 +14400,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -14432,7 +14432,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14454,7 +14454,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -14486,7 +14486,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14515,7 +14515,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -14547,7 +14547,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14569,7 +14569,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -14601,7 +14601,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14623,7 +14623,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -14655,7 +14655,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14677,7 +14677,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -14709,7 +14709,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14731,7 +14731,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -14763,7 +14763,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14785,7 +14785,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -14817,7 +14817,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14839,7 +14839,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -14871,7 +14871,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14893,7 +14893,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -14925,7 +14925,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -14947,7 +14947,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -14979,7 +14979,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15001,7 +15001,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -15033,7 +15033,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15055,7 +15055,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -15087,7 +15087,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15109,7 +15109,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -15141,7 +15141,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15163,7 +15163,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -15195,7 +15195,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15217,7 +15217,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -15249,7 +15249,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15271,7 +15271,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -15303,7 +15303,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15325,7 +15325,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -15357,7 +15357,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15379,7 +15379,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -15411,7 +15411,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15433,7 +15433,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -15465,7 +15465,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15487,7 +15487,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -15519,7 +15519,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15541,7 +15541,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -15573,7 +15573,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15595,7 +15595,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -15627,7 +15627,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15649,7 +15649,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -15682,7 +15682,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15704,7 +15704,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -15737,7 +15737,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15759,7 +15759,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -15792,7 +15792,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15814,7 +15814,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -15847,7 +15847,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15869,7 +15869,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -15902,7 +15902,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15924,7 +15924,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -15957,7 +15957,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15979,7 +15979,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16012,7 +16012,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16034,7 +16034,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16067,7 +16067,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16089,7 +16089,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16122,7 +16122,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16145,7 +16145,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16178,7 +16178,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16201,7 +16201,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16234,7 +16234,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16257,7 +16257,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16290,7 +16290,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16313,7 +16313,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16346,7 +16346,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16369,7 +16369,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16402,7 +16402,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16425,7 +16425,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16458,7 +16458,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16481,7 +16481,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16514,7 +16514,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16537,7 +16537,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16570,7 +16570,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16593,7 +16593,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16626,7 +16626,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16649,7 +16649,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16682,7 +16682,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16705,7 +16705,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16738,7 +16738,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16761,7 +16761,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16794,7 +16794,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16817,7 +16817,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16850,7 +16850,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16873,7 +16873,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16906,7 +16906,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16929,7 +16929,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -16962,7 +16962,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16985,7 +16985,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17018,7 +17018,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17041,7 +17041,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17074,7 +17074,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17097,7 +17097,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17130,7 +17130,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17153,7 +17153,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17186,7 +17186,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17209,7 +17209,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17242,7 +17242,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17265,7 +17265,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17298,7 +17298,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17321,7 +17321,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17354,7 +17354,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17376,7 +17376,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17409,7 +17409,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17431,7 +17431,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17464,7 +17464,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17486,7 +17486,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17519,7 +17519,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17541,7 +17541,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17574,7 +17574,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17596,7 +17596,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17629,7 +17629,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17651,7 +17651,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17684,7 +17684,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17706,7 +17706,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17739,7 +17739,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17761,7 +17761,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17794,7 +17794,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17817,7 +17817,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17850,7 +17850,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17873,7 +17873,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17906,7 +17906,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17929,7 +17929,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -17962,7 +17962,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17985,7 +17985,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18018,7 +18018,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18041,7 +18041,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18074,7 +18074,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18097,7 +18097,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18130,7 +18130,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18153,7 +18153,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18186,7 +18186,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18209,7 +18209,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -18241,7 +18241,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18263,7 +18263,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -18295,7 +18295,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18317,7 +18317,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -18349,7 +18349,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18371,7 +18371,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -18403,7 +18403,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18425,7 +18425,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -18457,7 +18457,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18479,7 +18479,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18512,7 +18512,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18534,7 +18534,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18567,7 +18567,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18589,7 +18589,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18622,7 +18622,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18644,7 +18644,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18677,7 +18677,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18699,7 +18699,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18732,7 +18732,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18754,7 +18754,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18787,7 +18787,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18809,7 +18809,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18842,7 +18842,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18864,7 +18864,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -18897,7 +18897,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18919,7 +18919,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -18951,7 +18951,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -18973,7 +18973,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -19005,7 +19005,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19028,7 +19028,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -19060,7 +19060,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19082,7 +19082,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19115,7 +19115,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19137,7 +19137,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19170,7 +19170,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19192,7 +19192,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19225,7 +19225,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19247,7 +19247,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19280,7 +19280,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19302,7 +19302,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19335,7 +19335,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19357,7 +19357,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19390,7 +19390,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19412,7 +19412,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19445,7 +19445,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19467,7 +19467,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19500,7 +19500,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19522,7 +19522,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -19554,7 +19554,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19576,7 +19576,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -19608,7 +19608,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19630,7 +19630,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -19662,7 +19662,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19684,7 +19684,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -19716,7 +19716,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19738,7 +19738,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -19770,7 +19770,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19792,7 +19792,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -19824,7 +19824,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19846,7 +19846,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19879,7 +19879,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19901,7 +19901,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19934,7 +19934,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -19956,7 +19956,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -19989,7 +19989,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20011,7 +20011,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -20044,7 +20044,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20066,7 +20066,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -20099,7 +20099,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20121,7 +20121,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -20154,7 +20154,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20176,7 +20176,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -20208,7 +20208,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20230,7 +20230,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -20262,7 +20262,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20284,7 +20284,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -20316,7 +20316,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20338,7 +20338,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -20370,7 +20370,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20392,7 +20392,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -20424,7 +20424,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20446,7 +20446,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -20478,7 +20478,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20500,7 +20500,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -20532,7 +20532,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20554,7 +20554,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -20586,7 +20586,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20608,7 +20608,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -20640,7 +20640,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20662,7 +20662,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -20694,7 +20694,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20716,7 +20716,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -20748,7 +20748,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20770,7 +20770,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -20802,7 +20802,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20824,7 +20824,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -20856,7 +20856,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20878,7 +20878,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -20910,7 +20910,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20932,7 +20932,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -20964,7 +20964,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -20986,7 +20986,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -21018,7 +21018,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21040,7 +21040,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -21072,7 +21072,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21094,7 +21094,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -21126,7 +21126,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21148,7 +21148,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -21180,7 +21180,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21202,7 +21202,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -21234,7 +21234,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21256,7 +21256,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -21288,7 +21288,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21310,7 +21310,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -21342,7 +21342,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21364,7 +21364,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -21396,7 +21396,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21418,7 +21418,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -21450,7 +21450,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21472,7 +21472,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -21504,7 +21504,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21526,7 +21526,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -21558,7 +21558,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21580,7 +21580,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -21612,7 +21612,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21634,7 +21634,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -21666,7 +21666,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21688,7 +21688,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -21720,7 +21720,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21749,7 +21749,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -21779,7 +21779,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21801,7 +21801,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -21831,7 +21831,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21853,7 +21853,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -21883,7 +21883,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21905,7 +21905,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -21935,7 +21935,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -21957,7 +21957,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -21987,7 +21987,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22009,7 +22009,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -22039,7 +22039,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22061,7 +22061,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -22091,7 +22091,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22113,7 +22113,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -22143,7 +22143,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22165,7 +22165,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -22195,7 +22195,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22217,7 +22217,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -22247,7 +22247,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22269,7 +22269,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -22299,7 +22299,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22321,7 +22321,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -22351,7 +22351,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22373,7 +22373,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -22403,7 +22403,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22425,7 +22425,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -22455,7 +22455,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22477,7 +22477,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -22507,7 +22507,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22529,7 +22529,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -22559,7 +22559,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22581,7 +22581,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -22611,7 +22611,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22633,7 +22633,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -22663,7 +22663,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22685,7 +22685,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22718,7 +22718,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22740,7 +22740,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22773,7 +22773,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22795,7 +22795,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22828,7 +22828,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22850,7 +22850,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22883,7 +22883,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22905,7 +22905,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22938,7 +22938,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -22960,7 +22960,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -22993,7 +22993,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23016,7 +23016,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23049,7 +23049,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23072,7 +23072,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23105,7 +23105,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23128,7 +23128,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23161,7 +23161,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23184,7 +23184,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23217,7 +23217,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23240,7 +23240,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23273,7 +23273,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23296,7 +23296,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23329,7 +23329,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23352,7 +23352,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23385,7 +23385,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23408,7 +23408,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23441,7 +23441,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23464,7 +23464,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23497,7 +23497,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23520,7 +23520,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23553,7 +23553,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23576,7 +23576,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23609,7 +23609,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23632,7 +23632,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23665,7 +23665,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23688,7 +23688,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23721,7 +23721,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23744,7 +23744,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23777,7 +23777,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23800,7 +23800,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23833,7 +23833,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23855,7 +23855,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23888,7 +23888,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23910,7 +23910,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23943,7 +23943,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -23965,7 +23965,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -23998,7 +23998,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24020,7 +24020,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24053,7 +24053,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24075,7 +24075,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24108,7 +24108,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24131,7 +24131,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24164,7 +24164,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24187,7 +24187,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24220,7 +24220,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24243,7 +24243,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24276,7 +24276,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24299,7 +24299,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24332,7 +24332,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24355,7 +24355,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -24385,7 +24385,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24407,7 +24407,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -24437,7 +24437,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24459,7 +24459,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -24489,7 +24489,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24511,7 +24511,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -24541,7 +24541,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24563,7 +24563,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24596,7 +24596,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24618,7 +24618,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24651,7 +24651,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24673,7 +24673,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24706,7 +24706,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24728,7 +24728,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24761,7 +24761,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24783,7 +24783,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -24816,7 +24816,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24838,7 +24838,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -24868,7 +24868,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24890,7 +24890,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -24921,7 +24921,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24943,7 +24943,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization"
         ],
@@ -24974,7 +24974,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -24996,7 +24996,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -25026,7 +25026,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25049,7 +25049,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -25079,7 +25079,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25101,7 +25101,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25134,7 +25134,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25156,7 +25156,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25189,7 +25189,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25211,7 +25211,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25244,7 +25244,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25266,7 +25266,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25299,7 +25299,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25321,7 +25321,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25354,7 +25354,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25376,7 +25376,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -25406,7 +25406,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25428,7 +25428,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -25458,7 +25458,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25480,7 +25480,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -25510,7 +25510,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25532,7 +25532,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -25562,7 +25562,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25584,7 +25584,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -25614,7 +25614,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25636,7 +25636,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25669,7 +25669,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25691,7 +25691,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25724,7 +25724,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25746,7 +25746,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25779,7 +25779,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25801,7 +25801,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25834,7 +25834,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25856,7 +25856,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest",
           "--xcode-parallelization",
           "--record-video",
@@ -25889,7 +25889,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25911,7 +25911,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -25941,7 +25941,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -25963,7 +25963,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -25993,7 +25993,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26015,7 +26015,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -26045,7 +26045,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26067,7 +26067,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -26097,7 +26097,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26119,7 +26119,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -26149,7 +26149,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26171,7 +26171,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -26201,7 +26201,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26223,7 +26223,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -26253,7 +26253,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26275,7 +26275,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -26305,7 +26305,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26327,7 +26327,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -26357,7 +26357,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26379,7 +26379,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -26409,7 +26409,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26431,7 +26431,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -26461,7 +26461,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26483,7 +26483,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -26513,7 +26513,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26535,7 +26535,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -26565,7 +26565,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26587,7 +26587,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -26617,7 +26617,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26639,7 +26639,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -26669,7 +26669,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26691,7 +26691,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -26721,7 +26721,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26743,7 +26743,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -26773,7 +26773,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26795,7 +26795,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -26825,7 +26825,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26847,7 +26847,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -26877,7 +26877,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26899,7 +26899,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -26929,7 +26929,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -26951,7 +26951,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -26981,7 +26981,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27003,7 +27003,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -27033,7 +27033,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27055,7 +27055,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -27085,7 +27085,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -27107,7 +27107,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -27137,7 +27137,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index a65a19af..b95b1887 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -15167,7 +15167,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -15197,7 +15197,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15219,7 +15219,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "absl_hardening_tests",
@@ -15249,7 +15249,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15271,7 +15271,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -15301,7 +15301,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15323,7 +15323,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "base_unittests",
@@ -15353,7 +15353,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15375,7 +15375,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -15405,7 +15405,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15427,7 +15427,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_crypto_tests",
@@ -15457,7 +15457,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15479,7 +15479,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -15509,7 +15509,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15531,7 +15531,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "boringssl_ssl_tests",
@@ -15561,7 +15561,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15583,7 +15583,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -15613,7 +15613,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15635,7 +15635,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "components_unittests",
@@ -15665,7 +15665,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15687,7 +15687,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -15717,7 +15717,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15739,7 +15739,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crashpad_tests",
@@ -15769,7 +15769,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15791,7 +15791,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -15821,7 +15821,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15843,7 +15843,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "crypto_unittests",
@@ -15873,7 +15873,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15895,7 +15895,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -15925,7 +15925,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15947,7 +15947,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "gfx_unittests",
@@ -15977,7 +15977,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -15999,7 +15999,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -16029,7 +16029,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16051,7 +16051,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "google_apis_unittests",
@@ -16081,7 +16081,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16103,7 +16103,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -16133,7 +16133,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16155,7 +16155,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_chrome_unittests",
@@ -16185,7 +16185,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16207,7 +16207,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -16237,7 +16237,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16259,7 +16259,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_components_unittests",
@@ -16289,7 +16289,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16311,7 +16311,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -16341,7 +16341,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16364,7 +16364,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_net_unittests",
@@ -16394,7 +16394,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16417,7 +16417,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -16447,7 +16447,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16469,7 +16469,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -16499,7 +16499,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16521,7 +16521,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -16551,7 +16551,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16573,7 +16573,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_testing_unittests",
@@ -16603,7 +16603,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16625,7 +16625,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -16655,7 +16655,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16677,7 +16677,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_inttests",
@@ -16707,7 +16707,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16729,7 +16729,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -16759,7 +16759,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16781,7 +16781,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_unittests",
@@ -16811,7 +16811,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16833,7 +16833,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -16863,7 +16863,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16885,7 +16885,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_inttests",
@@ -16915,7 +16915,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16937,7 +16937,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -16967,7 +16967,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -16989,7 +16989,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_web_view_unittests",
@@ -17019,7 +17019,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17041,7 +17041,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -17071,7 +17071,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17093,7 +17093,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "net_unittests",
@@ -17123,7 +17123,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17145,7 +17145,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -17175,7 +17175,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17197,7 +17197,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "services_unittests",
@@ -17227,7 +17227,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17249,7 +17249,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -17279,7 +17279,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17301,7 +17301,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "skia_unittests",
@@ -17331,7 +17331,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17353,7 +17353,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -17383,7 +17383,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17405,7 +17405,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "sql_unittests",
@@ -17435,7 +17435,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17457,7 +17457,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -17487,7 +17487,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17509,7 +17509,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ui_base_unittests",
@@ -17539,7 +17539,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17561,7 +17561,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -17591,7 +17591,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -17613,7 +17613,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "url_unittests",
@@ -17643,7 +17643,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
diff --git a/testing/buildbot/chromium.updater.json b/testing/buildbot/chromium.updater.json
index 5f7174c..52c07b3 100644
--- a/testing/buildbot/chromium.updater.json
+++ b/testing/buildbot/chromium.updater.json
@@ -760,7 +760,7 @@
   },
   "win32-updater-builder-rel": {
     "additional_compile_targets": [
-      "updater_tests_all"
+      "chrome/updater:all"
     ]
   }
 }
diff --git a/testing/buildbot/chromium.webrtc.fyi.json b/testing/buildbot/chromium.webrtc.fyi.json
index 6fe046f9..1978302 100644
--- a/testing/buildbot/chromium.webrtc.fyi.json
+++ b/testing/buildbot/chromium.webrtc.fyi.json
@@ -486,7 +486,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -516,7 +516,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
@@ -538,7 +538,7 @@
           "--out-dir",
           "${ISOLATED_OUTDIR}",
           "--xcode-build-version",
-          "14b47b",
+          "14c18",
           "--xctest"
         ],
         "isolate_name": "ios_remoting_unittests",
@@ -568,7 +568,7 @@
           ],
           "named_caches": [
             {
-              "name": "xcode_ios_14b47b",
+              "name": "xcode_ios_14c18",
               "path": "Xcode.app"
             },
             {
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index dcb8334..ac5607db8 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -1913,7 +1913,7 @@
       "--ui-test-action-timeout=40000",
     ],
   },
-  "updater_tests_all": {
+  "chrome/updater:all": {
     "label": "//chrome/updater:all",
     "type": "additional_compile_target",
   },
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl
index 3e1cbe3da..76defb5 100644
--- a/testing/buildbot/mixins.pyl
+++ b/testing/buildbot/mixins.pyl
@@ -1388,13 +1388,13 @@
     '$mixin_append': {
       'args': [
         '--xcode-build-version',
-        '14b47b'
+        '14c18'
       ],
     },
     'swarming': {
       'named_caches': [
         {
-          'name': 'xcode_ios_14b47b',
+          'name': 'xcode_ios_14c18',
           'path': 'Xcode.app',
         },
       ],
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index c7c3d49..448eb4f7 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -5932,7 +5932,7 @@
         },
       },
       'win32-updater-builder-rel': {
-        'additional_compile_targets': ['updater_tests_all'],
+        'additional_compile_targets': ['chrome/updater:all'],
       },
     }
   },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 35bf96d9..cc66111 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -71,7 +71,7 @@
             ],
             "experiments": [
                 {
-                    "name": "Enabled",
+                    "name": "Enabled16ms_20221212",
                     "params": {
                         "leeway": "16ms"
                     },
@@ -79,6 +79,9 @@
                         "AddTaskLeeway",
                         "AlignWakeUps",
                         "ExplicitHighResolutionTimerWin"
+                    ],
+                    "disable_features": [
+                        "UseLessHighResTimers"
                     ]
                 }
             ]
@@ -945,6 +948,8 @@
         {
             "platforms": [
                 "android",
+                "android_weblayer",
+                "android_webview",
                 "chromeos",
                 "chromeos_lacros",
                 "fuchsia",
@@ -955,7 +960,7 @@
             ],
             "experiments": [
                 {
-                    "name": "Enabled_20210922",
+                    "name": "Enabled_20221212",
                     "enable_features": [
                         "AutofillAcrossIframes"
                     ]
@@ -1135,6 +1140,7 @@
     "AutofillImprovedLabelForInference": [
         {
             "platforms": [
+                "android_webview",
                 "android",
                 "chromeos",
                 "chromeos_lacros",
@@ -9024,6 +9030,7 @@
                         "InterestGroupStorage",
                         "NoncedPartitionedCookies",
                         "PrivacySandboxAdsAPIs",
+                        "PrivateAggregationApi",
                         "SharedStorageAPI"
                     ]
                 }
@@ -9045,6 +9052,7 @@
                         "NoncedPartitionedCookies",
                         "PrivacySandboxAdsAPIs",
                         "PrivacySandboxSettings3",
+                        "PrivateAggregationApi",
                         "SharedStorageAPI"
                     ]
                 }
@@ -10682,22 +10690,6 @@
             ]
         }
     ],
-    "StartAssistantAudioDecoderOnDemandStudy": [
-        {
-            "platforms": [
-                "chromeos",
-                "chromeos_lacros"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "StartAssistantAudioDecoderOnDemand"
-                    ]
-                }
-            ]
-        }
-    ],
     "StartupProfilePickerWithoutGuest": [
         {
             "platforms": [
@@ -11358,6 +11350,25 @@
             ]
         }
     ],
+    "TrustedVaultDegradedRecoverabilityHandler": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SyncTrustedVaultDegradedRecoverabilityHandler"
+                    ]
+                }
+            ]
+        }
+    ],
     "UIEnableSharedImageCacheForGpu": [
         {
             "platforms": [
@@ -12822,6 +12833,28 @@
             ]
         }
     ],
+    "WebRtcCombinedNetworkAndWorkerThread": [
+        {
+            "platforms": [
+                "android",
+                "android_webview",
+                "chromeos",
+                "chromeos_lacros",
+                "ios",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "WebRtcCombinedNetworkAndWorkerThread"
+                    ]
+                }
+            ]
+        }
+    ],
     "WebRtcMetronome": [
         {
             "platforms": [
diff --git a/third_party/bidimapper/README.chromium b/third_party/bidimapper/README.chromium
index 4035402..afc4842c 100644
--- a/third_party/bidimapper/README.chromium
+++ b/third_party/bidimapper/README.chromium
@@ -1,10 +1,10 @@
 Name: Implementation of WebDriver BiDi standard
 Short Name: chromium-bidi
-URL: https://github.com/GoogleChromeLabs/chromium-bidi/archive/6712eddd01c96652a0a431f28baad5e9d539a0e2.zip
+URL: https://github.com/GoogleChromeLabs/chromium-bidi/archive/5d8ea97651a6f3a4f56de48996508b9de9d96e08.zip
 Version: 0
-Date: 2022-12-22
-Revision: 6712eddd01c96652a0a431f28baad5e9d539a0e2
-SHA-512: 4a2ad1c723e997b8048ef73d3e57b3d0d48c7f0e752c680cc6464fa77f071401e4c46559eb5187c0b93b9bf7e36ff3ff511736e560cd5c6c8c46564ca3750f4d
+Date: 2023-01-05
+Revision: 5d8ea97651a6f3a4f56de48996508b9de9d96e08
+SHA-512: 7ce84eab4f76e8f15021e2887ce966a70e9a581dac82f9f89fc929e3012f3498c1ca91104316f9802f03ee1ba0977a00cb2505c3654a9c3bc0ea680a63a33973
 License: Apache 2.0
 License File: LICENSE
 Security Critical: no
diff --git a/third_party/bidimapper/mapper.js b/third_party/bidimapper/mapper.js
index 205ee35..a21c993 100644
--- a/third_party/bidimapper/mapper.js
+++ b/third_party/bidimapper/mapper.js
@@ -1,4 +1,4 @@
-!function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t={},s={},n={},r={},a=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.EventEmitter=void 0;const o=a((function(e){return{all:e=e||new Map,on:function(t,s){var n=e.get(t);n?n.push(s):e.set(t,[s])},off:function(t,s){var n=e.get(t);n&&(s?n.splice(n.indexOf(s)>>>0,1):e.set(t,[]))},emit:function(t,s){var n=e.get(t);n&&n.slice().map((function(e){e(s)})),(n=e.get("*"))&&n.slice().map((function(e){e(t,s)}))}}}));r.EventEmitter=class{#e=(0,o.default)();on(e,t){return this.#e.on(e,t),this}once(e,t){const s=n=>{t(n),this.off(e,s)};return this.on(e,s)}off(e,t){return this.#e.off(e,t),this}emit(e,t){this.#e.emit(e,t)}},Object.defineProperty(n,"__esModule",{value:!0}),n.createClient=n.CdpClient=void 0;const i=r;class d extends i.EventEmitter{_cdpConnection;_sessionId;constructor(e,t){super(),this._cdpConnection=e,this._sessionId=t}sendCommand(e,...t){const s=t[0];return this._cdpConnection.sendCommand(e,s,this._sessionId)}}n.CdpClient=d,n.createClient=function(e,t){return new d(e,t)};var c={};Object.defineProperty(c,"__esModule",{value:!0}),c.CdpConnection=void 0;const u=n;c.CdpConnection=class{#t;#s;#n=new Map;#r=new Map;#a;#o=0;constructor(e,t=(()=>{})){this.#t=e,this.#a=t,this.#t.setOnMessage(this._onMessage),this.#s=(0,u.createClient)(this,null)}close(){this.#t.close();for(const[e,{reject:t}]of this.#r)t(new Error("Disconnected"));this.#r.clear(),this.#n.clear()}browserClient(){return this.#s}getCdpClient(e){const t=this.#n.get(e);if(!t)throw new Error("Unknown CDP session ID");return t}sendCommand(e,t,s){return new Promise(((n,r)=>{const a=this.#o++;this.#r.set(a,{resolve:n,reject:r});let o={id:a,method:e,params:t};s&&(o.sessionId=s);const i=JSON.stringify(o);this.#t.sendMessage(i),this.#a("sent > "+i)}))}_onMessage=async e=>{this.#a("received < "+e);const t=JSON.parse(e);if("Target.attachedToTarget"===t.method){const{sessionId:e}=t.params;this.#n.set(e,(0,u.createClient)(this,e))}else if("Target.detachedFromTarget"===t.method){const{sessionId:e}=t.params;this.#n.get(e)&&this.#n.delete(e)}if(void 0!==t.id){const e=this.#r.get(t.id);e&&(t.result?e.resolve(t.result):t.error&&e.reject(t.error))}else if(t.method){const e=t.sessionId?this.#n.get(t.sessionId):this.#s;e&&e.emit(t.method,t.params||{})}}};var l={};Object.defineProperty(l,"__esModule",{value:!0}),l.WebSocketTransport=void 0;l.WebSocketTransport=class{_ws;_onMessage=null;constructor(e){this._ws=e,this._ws.on("message",(e=>{this._onMessage&&this._onMessage.call(null,e)}))}setOnMessage(e){this._onMessage=e}async sendMessage(e){this._ws.send(e)}close(){this._onMessage=null,this._ws.close()}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WebSocketTransport=e.CdpConnection=e.CdpClient=void 0;var t=n;Object.defineProperty(e,"CdpClient",{enumerable:!0,get:function(){return t.CdpClient}});var s=c;Object.defineProperty(e,"CdpConnection",{enumerable:!0,get:function(){return s.CdpConnection}});var r=l;Object.defineProperty(e,"WebSocketTransport",{enumerable:!0,get:function(){return r.WebSocketTransport}})}(s);var p,m,h={},g={},f={};p=f,Object.defineProperty(p,"__esModule",{value:!0}),p.log=p.LogType=void 0,(m=p.LogType||(p.LogType={})).system="System",m.bidi="BiDi Messages",m.browsingContexts="Browsing Contexts",m.cdp="CDP",m.commandParser="Command parser",p.log=function(e){return(...t)=>{console.log(e,...t),"MapperTabPage"in globalThis&&globalThis.MapperTabPage.log(e,...t)}},Object.defineProperty(g,"__esModule",{value:!0}),g.ProcessingQueue=void 0;const v=(0,f.log)(f.LogType.system);g.ProcessingQueue=class{#i=[];#d;#c;#u=!1;constructor(e,t=(()=>Promise.resolve())){this.#c=t,this.#d=e}add(e){this.#i.push(e),this.#l()}async#l(){if(!this.#u){for(this.#u=!0;this.#i.length>0;){const e=this.#i.shift();void 0!==e&&await e.then((e=>this.#d(e))).catch((e=>{v("Event was not processed:"+e),this.#c(e)})).finally()}this.#u=!1}}};var y={},x={};Object.defineProperty(x,"__esModule",{value:!0}),x.OutgoingBidiMessage=void 0;class C{#p;#m;constructor(e,t){this.#p=e,this.#m=t}static async createFromPromise(e,t){const s=await e;return new C(s,t)}static createResolved(e,t){return Promise.resolve(new C(e,t))}get message(){return this.#p}get channel(){return this.#m}}x.OutgoingBidiMessage=C;var w={},b={};!function(e){var t,s,n,r;Object.defineProperty(e,"__esModule",{value:!0}),e.CDP=e.Log=e.BrowsingContext=e.Message=void 0,function(e){class t{constructor(e,t,s){this.error=e,this.message=t,this.stacktrace=s}error;message;stacktrace;toErrorResponse(e){return{id:e,error:this.error,message:this.message,stacktrace:this.stacktrace}}}e.ErrorResponseClass=t;e.UnknownException=class extends t{constructor(e,t){super("unknown error",e,t)}};e.UnknownCommandException=class extends t{constructor(e,t){super("unknown command",e,t)}};e.InvalidArgumentException=class extends t{constructor(e,t){super("invalid argument",e,t)}};e.NoSuchFrameException=class extends t{constructor(e){super("no such frame",e)}}}(e.Message||(e.Message={})),t=e.BrowsingContext||(e.BrowsingContext={}),(s=t.EventNames||(t.EventNames={})).LoadEvent="browsingContext.load",s.DomContentLoadedEvent="browsingContext.domContentLoaded",s.ContextCreatedEvent="browsingContext.contextCreated",s.ContextDestroyedEvent="browsingContext.contextDestroyed",t.AllEvents="browsingContext",(n=e.Log||(e.Log={})).AllEvents="log",function(e){e.LogEntryAddedEvent="log.entryAdded"}(n.EventNames||(n.EventNames={})),(r=e.CDP||(e.CDP={})).AllEvents="cdp",function(e){e.EventReceivedEvent="cdp.eventReceived"}(r.EventNames||(r.EventNames={}))}(b);var _={};Object.defineProperty(_,"__esModule",{value:!0}),_.BrowsingContextStorage=void 0;const I=b;class T{static#h=new Map;static getTopLevelContexts(){return Array.from(T.#h.values()).filter((e=>null===e.parentId))}static removeContext(e){T.#h.delete(e)}static addContext(e){T.#h.set(e.contextId,e),null!==e.parentId&&T.getKnownContext(e.parentId).addChild(e)}static hasKnownContext(e){return T.#h.has(e)}static findContext(e){return T.#h.get(e)}static getKnownContext(e){const t=T.findContext(e);if(void 0===t)throw new I.Message.NoSuchFrameException(`Context ${e} not found`);return t}}_.BrowsingContextStorage=T,Object.defineProperty(w,"__esModule",{value:!0}),w.SubscriptionManager=void 0;const P=b,E=_;class Z{#g=0;#f=new Map;getChannelsSubscribedToEvent(e,t){return Array.from(this.#f.keys()).map((s=>({priority:this.#v(e,t,s),channel:s}))).filter((({priority:e})=>null!==e)).sort(((e,t)=>e.priority-t.priority)).map((({channel:e})=>e))}#v(e,t,s){const n=this.#f.get(s);if(void 0===n)return null;let r=Z.#y(t).map((t=>n.get(t)?.get(e))).filter((e=>void 0!==e));return 0===r.length?null:Math.min(...r)}static#y(e){const t=[null];for(;null!==e;){t.push(e);e=E.BrowsingContextStorage.findContext(e)?.parentId??null}return t}subscribe(e,t,s){if(e===P.BrowsingContext.AllEvents)return void Object.values(P.BrowsingContext.EventNames).map((e=>this.subscribe(e,t,s)));if(e===P.CDP.AllEvents)return void Object.values(P.CDP.EventNames).map((e=>this.subscribe(e,t,s)));if(e===P.Log.AllEvents)return void Object.values(P.Log.EventNames).map((e=>this.subscribe(e,t,s)));this.#f.has(s)||this.#f.set(s,new Map);const n=this.#f.get(s);n.has(t)||n.set(t,new Map);const r=n.get(t);r.has(e)||r.set(e,this.#g++)}unsubscribe(e,t,s){if(e===P.BrowsingContext.AllEvents)return void Object.values(P.BrowsingContext.EventNames).map((e=>this.unsubscribe(e,t,s)));if(e===P.CDP.AllEvents)return void Object.values(P.CDP.EventNames).map((e=>this.unsubscribe(e,t,s)));if(e===P.Log.AllEvents)return void Object.values(P.Log.EventNames).map((e=>this.unsubscribe(e,t,s)));if(!this.#f.has(s))return;const n=this.#f.get(s);if(!n.has(t))return;const r=n.get(t);r.delete(e),0===r.size&&n.delete(e),0===n.size&&this.#f.delete(s)}}w.SubscriptionManager=Z;var S={};Object.defineProperty(S,"__esModule",{value:!0}),S.IdWrapper=void 0;class O{static#x=0;#C;constructor(){this.#C=++O.#x}get id(){return this.#C}}S.IdWrapper=O;var M={};Object.defineProperty(M,"__esModule",{value:!0}),M.Buffer=void 0;M.Buffer=class{#w;#b=[];#_;constructor(e,t=(()=>{})){this.#w=e,this.#_=t}get(){return this.#b}add(e){for(this.#b.push(e);this.#b.length>this.#w;){const e=this.#b.shift();void 0!==e&&this.#_(e)}}},Object.defineProperty(y,"__esModule",{value:!0}),y.EventManager=void 0;const N=x,D=w,j=S,k=M,z=_;class L extends j.IdWrapper{#I;#T;constructor(e,t){super(),this.#I=t,this.#T=e}get contextId(){return this.#I}get event(){return this.#T}}class A{static#P=new Map([["log.entryAdded",100]]);#E=new Map;#Z=new Map;#S=new Map;#O;#M;constructor(e){this.#M=e,this.#O=new D.SubscriptionManager}static#N(e,t,s){return JSON.stringify({eventName:e,browsingContext:t,channel:s})}async registerEvent(e,t){await this.registerPromiseEvent(Promise.resolve(e),t,e.method)}async registerPromiseEvent(e,t,s){const n=new L(e,t),r=this.#O.getChannelsSubscribedToEvent(s,t);this.#D(n,s);for(const t of r)this.#M.emitOutgoingMessage(N.OutgoingBidiMessage.createFromPromise(e,t)),this.#j(n,t,s)}async subscribe(e,t,s){for(let n of e)for(let e of t)if(null===e||z.BrowsingContextStorage.hasKnownContext(e)){this.#O.subscribe(n,e,s);for(let t of this.#k(n,e,s))this.#M.emitOutgoingMessage(N.OutgoingBidiMessage.createFromPromise(t.event,s)),this.#j(t,s,n)}}async unsubscribe(e,t,s){for(let n of e)for(let e of t)this.#O.unsubscribe(n,e,s)}#D(e,t){if(!A.#P.has(t))return;const s=A.#N(t,e.contextId);this.#Z.has(s)||this.#Z.set(s,new k.Buffer(A.#P.get(t))),this.#Z.get(s).add(e),this.#E.has(t)||this.#E.set(t,new Set),this.#E.get(t).add(e.contextId)}#j(e,t,s){if(!A.#P.has(s))return;const n=A.#N(s,e.contextId,t);this.#S.set(n,Math.max(this.#S.get(n)??0,e.id))}#k(e,t,s){const n=A.#N(e,t),r=A.#N(e,t,s),a=this.#S.get(r)??-1/0,o=this.#Z.get(n)?.get().filter((e=>e.id>a))??[];return null===t&&Array.from(this.#E.get(e)?.keys()??[]).filter((e=>null!==e)).map((t=>this.#k(e,t,s))).forEach((e=>o.push(...e))),o.sort(((e,t)=>e.id-t.id))}}y.EventManager=A;var R={},B={},V={},U={};Object.defineProperty(U,"__esModule",{value:!0}),U.Deferred=void 0;class F{#z=()=>{};#L=()=>{};#A;#R=!1;get isFinished(){return this.#R}constructor(){this.#A=new Promise(((e,t)=>{this.#z=e,this.#L=t}))}then(e,t){return this.#A.then(e,t)}catch(e){return this.#A.catch(e)}resolve(e){this.#R=!0,this.#z(e)}reject(e){this.#R=!0,this.#L(e)}finally(e){return this.#A.finally(e)}[Symbol.toStringTag]="Promise"}U.Deferred=F;var K={},$={};Object.defineProperty($,"__esModule",{value:!0}),$.getRemoteValuesText=$.logMessageFormatter=void 0;const J=["%s","%d","%i","%f","%o","%O","%c"];function W(e){return J.some((t=>e.includes(t)))}function G(e){let t="";const s=e[0].value.toString(),n=e.slice(1,void 0),r=s.split(new RegExp(J.map((e=>"("+e+")")).join("|"),"g"));for(const s of r)if(void 0!==s&&""!=s)if(W(s)){const r=n.shift();if(void 0===r)throw new Error('Less value is provided: "'+Q(e,!1)+'"');"%s"===s?t+=H(r):"%d"===s||"%i"===s?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseInt(r.value.toString(),10):t+="NaN":"%f"===s?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseFloat(r.value.toString()):t+="NaN":t+=q(r)}else t+=s;if(n.length>0)throw new Error('More value is provided: "'+Q(e,!1)+'"');return t}function q(e){if("array"!==e.type&&"bigint"!==e.type&&"date"!==e.type&&"number"!==e.type&&"object"!==e.type&&"string"!==e.type)return H(e);if("bigint"===e.type)return e.value.toString()+"n";if("number"===e.type)return e.value.toString();if(["date","string"].includes(e.type))return JSON.stringify(e.value);if("object"===e.type)return"{"+e.value.map((e=>`${JSON.stringify(e[0])}:${q(e[1])}`)).join(",")+"}";if("array"===e.type)return"["+e.value.map((e=>q(e))).join(",")+"]";throw Error("Invalid value type: "+e.toString())}function H(e){if(!e.hasOwnProperty("value"))return e.type;switch(e.type){case"string":case"number":case"boolean":case"bigint":return String(e.value);case"regexp":return`/${e.value.pattern}/${e.value.flags}`;case"date":return new Date(e.value).toString();case"object":return`Object(${e.value?.length})`;case"array":return`Array(${e.value?.length})`;case"map":return`Map(${e.value.length})`;case"set":return`Set(${e.value.length})`;case"node":return"node";default:return e.type}}function Q(e,t){const s=e[0];return s?"string"===s.type&&W(s.value.toString())&&t?G(e):e.map((e=>H(e))).join(" "):""}$.logMessageFormatter=G,$.getRemoteValuesText=Q;var Y={},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.ScriptEvaluator=void 0;const ee=b;class te{static#B=0;static#V=1;static#U=new Map;static async serializeCdpObject(e,t,s){const n=this.#F(e),r=await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>e)),awaitPromise:!1,arguments:[n],generateWebDriverValue:!0,executionContextId:s.executionContextId});return await this.#K(r,s,t)}static#F(e){return void 0!==e.objectId?{objectId:e.objectId}:void 0!==e.unserializableValue?{unserializableValue:e.unserializableValue}:{value:e.value}}static async stringifyObject(e,t){return(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(e){return String(e)})),awaitPromise:!1,arguments:[e],returnByValue:!0,executionContextId:t.executionContextId})).result.value}static async callFunction(e,t,s,n,r,a){const o=`(...args)=>{ return _callFunction((\n${t}\n), args);\n      function _callFunction(f, args) {\n        const deserializedThis = args.shift();\n        const deserializedArgs = args;\n        return f.apply(deserializedThis, deserializedArgs);\n      }}`,i=[await this.#$(s,e)];let d;i.push(...await Promise.all(n.map((async t=>await this.#$(t,e)))));try{d=await e.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:o,awaitPromise:r,arguments:i,generateWebDriverValue:!0,executionContextId:e.executionContextId})}catch(e){if(-32e3===e.code&&["Could not find object with given id","Argument should belong to the same JavaScript world as target object"].includes(e.message))throw new ee.Message.InvalidArgumentException("Handle was not found.");throw e}return d.exceptionDetails?{exceptionDetails:await this.#J(d.exceptionDetails,this.#V,a,e),type:"exception",realm:e.realmId}:{type:"success",result:await te.#K(d,e,a),realm:e.realmId}}static realmDestroyed(e){return Array.from(this.#U.entries()).filter((([,t])=>t===e.realmId)).map((([e])=>this.#U.delete(e)))}static async disown(e,t){if(te.#U.get(t)===e.realmId){try{await e.cdpClient.sendCommand("Runtime.releaseObject",{objectId:t})}catch(e){if(-32e3!==e.code||"Invalid remote object id"!==e.message)throw e}this.#U.delete(t)}}static async#J(e,t,s,n){const r=e.stackTrace?.callFrames.map((e=>({url:e.url,functionName:e.functionName,lineNumber:e.lineNumber-t,columnNumber:e.columnNumber}))),a=await this.serializeCdpObject(e.exception,s,n),o=await this.stringifyObject(e.exception,n);return{exception:a,columnNumber:e.columnNumber,lineNumber:e.lineNumber-t,stackTrace:{callFrames:r||[]},text:o||e.text}}static async#K(e,t,s){const n=e.result.webDriverValue;if(!e.result.objectId)return n;const r=e.result.objectId,a=n;return"root"===s?(a.handle=r,this.#U.set(r,t.realmId)):await t.cdpClient.sendCommand("Runtime.releaseObject",{objectId:r}),a}static async scriptEvaluate(e,t,s,n){let r=await e.cdpClient.sendCommand("Runtime.evaluate",{contextId:e.executionContextId,expression:t,awaitPromise:s,generateWebDriverValue:!0});return r.exceptionDetails?{exceptionDetails:await this.#J(r.exceptionDetails,this.#B,n,e),type:"exception",realm:e.realmId}:{type:"success",result:await te.#K(r,e,n),realm:e.realmId}}static async#$(e,t){if("handle"in e)return{objectId:e.handle};switch(e.type){case"undefined":return{unserializableValue:"undefined"};case"null":return{unserializableValue:"null"};case"string":return{value:e.value};case"number":return"NaN"===e.value?{unserializableValue:"NaN"}:"-0"===e.value?{unserializableValue:"-0"}:"+Infinity"===e.value?{unserializableValue:"+Infinity"}:"Infinity"===e.value?{unserializableValue:"Infinity"}:"-Infinity"===e.value?{unserializableValue:"-Infinity"}:{value:e.value};case"boolean":return{value:!!e.value};case"bigint":return{unserializableValue:`BigInt(${JSON.stringify(e.value)})`};case"date":return{unserializableValue:`new Date(Date.parse(${JSON.stringify(e.value)}))`};case"regexp":return{unserializableValue:`new RegExp(${JSON.stringify(e.value.pattern)}, ${JSON.stringify(e.value.flags)})`};case"map":{const s=await this.#W(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){const t=new Map;for(let s=0;s<e.length;s+=2)t.set(e[s],e[s+1]);return t})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}case"object":{const s=await this.#W(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){const t={};for(let s=0;s<e.length;s+=2){t[e[s]]=e[s+1]}return t})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}case"array":{const s=await te.#G(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){return e})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}case"set":{const s=await this.#G(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){return new Set(e)})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}default:throw new Error(`Value ${JSON.stringify(e)} is not deserializable.`)}}static async#W(e,t){const s=[];for(let n of e){const e=n[0],r=n[1];let a,o;a="string"==typeof e?{value:e}:await this.#$(e,t),o=await this.#$(r,t),s.push(a),s.push(o)}return s}static async#G(e,t){const s=[];for(let n of e)s.push(await this.#$(n,t));return s}}X.ScriptEvaluator=te,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Realm=e.RealmType=void 0;const t=b,s=X,n=_;(e.RealmType||(e.RealmType={})).window="window";class r{static#q=new Map;static create(e,t,s,n,a,o,i,d){const c=new r(e,t,s,n,a,o,i,d);return r.#q.set(c.realmId,c),c}static findRealms(e={}){return Array.from(r.#q.values()).filter((t=>(void 0===e.realmId||e.realmId===t.realmId)&&((void 0===e.browsingContextId||e.browsingContextId===t.browsingContextId)&&((void 0===e.executionContextId||e.executionContextId===t.executionContextId)&&((void 0===e.type||e.type===t.type)&&((void 0===e.sandbox||e.sandbox===t.#H)&&(void 0===e.cdpSessionId||e.cdpSessionId===t.#Q)))))))}static findRealm(e){const t=r.findRealms(e);if(1===t.length)return t[0]}static getRealm(e){const s=r.findRealm(e);if(void 0===s)throw new t.Message.NoSuchFrameException(`Realm ${JSON.stringify(e)} not found`);return s}static clearBrowsingContext(e){r.findRealms({browsingContextId:e}).map((e=>e.delete()))}delete(){r.#q.delete(this.realmId),s.ScriptEvaluator.realmDestroyed(this)}#Y;#X;#ee;#te;#se;#H;#Q;#ne;constructor(e,t,s,n,r,a,o,i){this.#Y=e,this.#X=t,this.#ee=s,this.#H=a,this.#te=n,this.#se=r,this.#Q=o,this.#ne=i}toBiDi(){return{realm:this.realmId,origin:this.origin,type:this.type,context:this.browsingContextId,...void 0!==this.#H?{sandbox:this.#H}:{}}}get realmId(){return this.#Y}get browsingContextId(){return this.#X}get executionContextId(){return this.#ee}get origin(){return this.#te}get type(){return this.#se}get cdpClient(){return this.#ne}async callFunction(e,t,r,a,o){const i=n.BrowsingContextStorage.getKnownContext(this.browsingContextId);return await i.awaitUnblocked(),{result:await s.ScriptEvaluator.callFunction(this,e,t,r,a,o)}}async scriptEvaluate(e,t,r){const a=n.BrowsingContextStorage.getKnownContext(this.browsingContextId);return await a.awaitUnblocked(),{result:await s.ScriptEvaluator.scriptEvaluate(this,e,t,r)}}async disown(e){await s.ScriptEvaluator.disown(this,e)}async serializeCdpObject(e,t){return await s.ScriptEvaluator.serializeCdpObject(e,t,this)}async stringifyObject(e){return s.ScriptEvaluator.stringifyObject(e,this)}}e.Realm=r}(Y),Object.defineProperty(K,"__esModule",{value:!0}),K.LogManager=void 0;const se=b,ne=$,re=Y;class ae{#ne;#Q;#re;constructor(e,t,s){this.#Q=t,this.#ne=e,this.#re=s}static create(e,t,s){const n=new ae(e,t,s);return n.#ae(),n}#ae(){this.#oe()}#oe(){this.#ie()}#ie(){this.#ne.on("Runtime.consoleAPICalled",(e=>{const t=re.Realm.findRealm({cdpSessionId:this.#Q,executionContextId:e.executionContextId}),s=void 0===t?Promise.resolve(e.args):Promise.all(e.args.map((async e=>t.serializeCdpObject(e,"none"))));this.#re.registerPromiseEvent(s.then((s=>({method:se.Log.EventNames.LogEntryAddedEvent,params:{level:ae.#de(e.type),source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:(0,ne.getRemoteValuesText)(s,!0),timestamp:Math.round(e.timestamp),stackTrace:ae.#ce(e.stackTrace),type:"console",method:"warning"===e.type?"warn":e.type,args:s}}))),t?.browsingContextId??"UNKNOWN",se.Log.EventNames.LogEntryAddedEvent)})),this.#ne.on("Runtime.exceptionThrown",(e=>{const t=re.Realm.findRealm({cdpSessionId:this.#Q,executionContextId:e.exceptionDetails.executionContextId}),s=(async()=>e.exceptionDetails.exception?void 0===t?JSON.stringify(e.exceptionDetails.exception):await t.stringifyObject(e.exceptionDetails.exception):e.exceptionDetails.text)();this.#re.registerPromiseEvent(s.then((s=>({method:se.Log.EventNames.LogEntryAddedEvent,params:{level:"error",source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:s,timestamp:Math.round(e.timestamp),stackTrace:ae.#ce(e.exceptionDetails.stackTrace),type:"javascript"}}))),t?.browsingContextId??"UNKNOWN",se.Log.EventNames.LogEntryAddedEvent)}))}static#de(e){return["assert","error"].includes(e)?"error":["debug","trace"].includes(e)?"debug":["warn","warning"].includes(e)?"warn":"info"}static#ce(e){const t=e?.callFrames.map((e=>({columnNumber:e.columnNumber,functionName:e.functionName,lineNumber:e.lineNumber,url:e.url})));return t?{callFrames:t}:void 0}}K.LogManager=ae,Object.defineProperty(V,"__esModule",{value:!0}),V.BrowsingContextImpl=void 0;const oe=b,ie=U,de=K,ce=Y,ue=_;class le{#ue={documentInitialized:new ie.Deferred,targetUnblocked:new ie.Deferred,Page:{navigatedWithinDocument:new ie.Deferred,lifecycleEvent:{DOMContentLoaded:new ie.Deferred,load:new ie.Deferred}}};#I;#le;#pe;#re;#me=new Map;#he="about:blank";#ge=null;#Q;#ne;#fe;get#ve(){if(void 0===this.#fe)throw new Error(`No default realm for browsing context ${this.#I}`);return this.#fe}constructor(e,t,s,n,r,a){this.#I=e,this.#le=t,this.#ne=s,this.#pe=r,this.#re=a,this.#Q=n,this.#ye(),ue.BrowsingContextStorage.addContext(this)}static async createFrameContext(e,t,s,n,r){const a=new le(e,t,s,n,null,r);a.#ue.targetUnblocked.resolve(),await r.registerEvent({method:oe.BrowsingContext.EventNames.ContextCreatedEvent,params:a.serializeToBidiValue()},a.contextId)}static async createTargetContext(e,t,s,n,r,a){const o=new le(e,t,s,n,r,a);o.#xe(),await a.registerEvent({method:oe.BrowsingContext.EventNames.ContextCreatedEvent,params:o.serializeToBidiValue()},o.contextId)}get cdpBrowserContextId(){return this.#pe}convertFrameToTargetContext(e,t){this.#Ce(e,t),this.#xe()}async delete(){if(await this.#we(),null!==this.parentId){ue.BrowsingContextStorage.getKnownContext(this.parentId).#me.delete(this.contextId)}await this.#re.registerEvent({method:oe.BrowsingContext.EventNames.ContextDestroyedEvent,params:this.serializeToBidiValue()},this.contextId),ue.BrowsingContextStorage.removeContext(this.contextId)}async#we(){await Promise.all(this.children.map((e=>e.delete())))}#Ce(e,t){this.#ue.targetUnblocked.isFinished||this.#ue.targetUnblocked.reject("OOPiF"),this.#ue.targetUnblocked=new ie.Deferred,this.#ne=e,this.#Q=t,this.#ye()}async#xe(){de.LogManager.create(this.#ne,this.#Q,this.#re),await this.#ne.sendCommand("Runtime.enable"),await this.#ne.sendCommand("Page.enable"),await this.#ne.sendCommand("Page.setLifecycleEventsEnabled",{enabled:!0}),await this.#ne.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await this.#ne.sendCommand("Runtime.runIfWaitingForDebugger"),this.#ue.targetUnblocked.resolve()}get contextId(){return this.#I}get parentId(){return this.#le}get cdpSessionId(){return this.#Q}get children(){return Array.from(this.#me.values())}get url(){return this.#he}addChild(e){this.#me.set(e.contextId,e)}async awaitLoaded(){await this.#ue.Page.lifecycleEvent.load}async awaitUnblocked(){await this.#ue.targetUnblocked}serializeToBidiValue(e=0,t=!0){return{context:this.#I,url:this.url,children:e>0?this.children.map((t=>t.serializeToBidiValue(e-1,!1))):null,...t?{parent:this.#le}:{}}}#ye(){this.#ne.on("Target.targetInfoChanged",(e=>{this.contextId===e.targetInfo.targetId&&(this.#he=e.targetInfo.url)})),this.#ne.on("Page.frameNavigated",(async e=>{this.contextId===e.frame.id&&(this.#he=e.frame.url+(e.frame.urlFragment??""),await this.#we(),ce.Realm.clearBrowsingContext(this.contextId))})),this.#ne.on("Page.navigatedWithinDocument",(e=>{this.contextId===e.frameId&&(this.#he=e.url,this.#ue.Page.navigatedWithinDocument.resolve(e))})),this.#ne.on("Page.lifecycleEvent",(async e=>{if(this.contextId===e.frameId)if("init"===e.name&&(this.#be(e.loaderId),this.#ue.documentInitialized.resolve()),"commit"!==e.name){if(e.loaderId===this.#ge)switch(e.name){case"DOMContentLoaded":this.#ue.Page.lifecycleEvent.DOMContentLoaded.resolve(e),await this.#re.registerEvent({method:oe.BrowsingContext.EventNames.DomContentLoadedEvent,params:{context:this.contextId,navigation:this.#ge,url:this.#he}},this.contextId);break;case"load":this.#ue.Page.lifecycleEvent.load.resolve(e),await this.#re.registerEvent({method:oe.BrowsingContext.EventNames.LoadEvent,params:{context:this.contextId,navigation:this.#ge,url:this.#he}},this.contextId)}}else this.#ge=e.loaderId})),this.#ne.on("Runtime.executionContextCreated",(e=>{if(e.context.auxData.frameId!==this.contextId)return;if(!["default","isolated"].includes(e.context.auxData.type))return;const t=ce.Realm.create(e.context.uniqueId,this.contextId,e.context.id,this.#_e(e),ce.RealmType.window,"isolated"===e.context.auxData.type?e.context.name:void 0,this.#Q,this.#ne);e.context.auxData.isDefault&&(this.#fe=t)})),this.#ne.on("Runtime.executionContextDestroyed",(e=>{ce.Realm.findRealms({cdpSessionId:this.#Q,executionContextId:e.executionContextId}).map((e=>e.delete()))}))}#_e(e){return"isolated"===e.context.auxData.type?this.#ve.origin:["://",""].includes(e.context.origin)?"null":e.context.origin}#be(e){this.#ge!==e&&(this.#ue.documentInitialized.isFinished||this.#ue.documentInitialized.reject("Document changed"),this.#ue.documentInitialized=new ie.Deferred,this.#ue.Page.navigatedWithinDocument.isFinished||this.#ue.Page.navigatedWithinDocument.reject("Document changed"),this.#ue.Page.navigatedWithinDocument=new ie.Deferred,this.#ue.Page.lifecycleEvent.DOMContentLoaded.isFinished||this.#ue.Page.lifecycleEvent.DOMContentLoaded.reject("Document changed"),this.#ue.Page.lifecycleEvent.DOMContentLoaded=new ie.Deferred,this.#ue.Page.lifecycleEvent.load.isFinished||this.#ue.Page.lifecycleEvent.load.reject("Document changed"),this.#ue.Page.lifecycleEvent.load=new ie.Deferred,this.#ge=e)}async navigate(e,t){await this.#ue.targetUnblocked;const s=await this.#ne.sendCommand("Page.navigate",{url:e,frameId:this.contextId});if(s.errorText)throw new oe.Message.UnknownException(s.errorText);switch(void 0!==s.loaderId&&s.loaderId!==this.#ge&&this.#be(s.loaderId),t){case"none":break;case"interactive":void 0===s.loaderId?await this.#ue.Page.navigatedWithinDocument:await this.#ue.Page.lifecycleEvent.DOMContentLoaded;break;case"complete":void 0===s.loaderId?await this.#ue.Page.navigatedWithinDocument:await this.#ue.Page.lifecycleEvent.load;break;default:throw new Error(`Not implemented wait '${t}'`)}return{result:{navigation:s.loaderId||null,url:e}}}async getOrCreateSandbox(e){if(void 0===e||""===e)return this.#ve;let t=ce.Realm.findRealms({browsingContextId:this.contextId,sandbox:e});if(0==t.length&&(await this.#ne.sendCommand("Page.createIsolatedWorld",{frameId:this.contextId,worldName:e}),t=ce.Realm.findRealms({browsingContextId:this.contextId,sandbox:e})),1!==t.length)throw Error(`Sandbox ${e} wasn't created.`);return t[0]}}V.BrowsingContextImpl=le,Object.defineProperty(B,"__esModule",{value:!0}),B.BrowsingContextProcessor=void 0;const pe=b,me=V,he=Y,ge=_,fe=(0,f.log)(f.LogType.browsingContexts);class ve{sessions=new Set;#Ie;#Te;#re;constructor(e,t,s){this.#Ie=e,this.#Te=t,this.#re=s,this.#Pe(this.#Ie.browserClient())}#Pe(e){this.#Ee(e)}#Ee(e){e.on("Target.attachedToTarget",(async t=>{await this.#Ze(t,e)})),e.on("Target.detachedFromTarget",(async e=>{await ve.#Se(e)}))}#Oe(e){if(this.sessions.has(e))return;this.sessions.add(e);const t=this.#Ie.getCdpClient(e);this.#Ee(t),t.on("*",(async(t,s)=>{await this.#re.registerEvent({method:pe.CDP.EventNames.EventReceivedEvent,params:{cdpMethod:t,cdpParams:s||{},cdpSession:e}},null)})),t.on("Page.frameAttached",(async s=>{await me.BrowsingContextImpl.createFrameContext(s.frameId,s.parentFrameId,t,e,this.#re)}))}async#Ze(e,t){const{sessionId:s,targetInfo:n}=e;let r=this.#Ie.getCdpClient(s);if(!this.#Me(n))return await r.sendCommand("Runtime.runIfWaitingForDebugger"),void await t.sendCommand("Target.detachFromTarget",e);fe("AttachedToTarget event received: "+JSON.stringify(e)),this.#Oe(s),ge.BrowsingContextStorage.hasKnownContext(n.targetId)?ge.BrowsingContextStorage.getKnownContext(n.targetId).convertFrameToTargetContext(r,s):await me.BrowsingContextImpl.createTargetContext(n.targetId,null,r,s,e.targetInfo.browserContextId??null,this.#re)}static async#Se(e){const t=e.targetId;await(ge.BrowsingContextStorage.findContext(t)?.delete())}async process_browsingContext_getTree(e){return{result:{contexts:(void 0===e.root?ge.BrowsingContextStorage.getTopLevelContexts():[ge.BrowsingContextStorage.getKnownContext(e.root)]).map((t=>t.serializeToBidiValue(e.maxDepth??Number.MAX_VALUE)))}}}async process_browsingContext_create(e){const t=this.#Ie.browserClient();let s;if(void 0!==e.referenceContext&&(s=ge.BrowsingContextStorage.getKnownContext(e.referenceContext),null!==s.parentId))throw new pe.Message.InvalidArgumentException("referenceContext should be a top-level context");const n=(await t.sendCommand("Target.createTarget",{url:"about:blank",newWindow:"window"===e.type,...s?.cdpBrowserContextId?{browserContextId:s.cdpBrowserContextId}:{}})).targetId,r=ge.BrowsingContextStorage.getKnownContext(n);return await r.awaitLoaded(),{result:r.serializeToBidiValue(1)}}async process_browsingContext_navigate(e){const t=ge.BrowsingContextStorage.getKnownContext(e.context);return await t.navigate(e.url,void 0!==e.wait?e.wait:"none")}static async#Ne(e){if("realm"in e)return he.Realm.getRealm({realmId:e.realm});const t=ge.BrowsingContextStorage.getKnownContext(e.context);return await t.getOrCreateSandbox(e.sandbox)}async process_script_evaluate(e){const t=await ve.#Ne(e.target);return await t.scriptEvaluate(e.expression,e.awaitPromise,e.resultOwnership??"none")}process_script_getRealms(e){void 0!==e.context&&ge.BrowsingContextStorage.getKnownContext(e.context);const t=he.Realm.findRealms({browsingContextId:e.context,type:e.type}).map((e=>e.toBiDi()));return{result:{realms:t}}}async process_script_callFunction(e){const t=await ve.#Ne(e.target);return await t.callFunction(e.functionDeclaration,e.this||{type:"undefined"},e.arguments||[],e.awaitPromise,e.resultOwnership??"none")}async process_script_disown(e){const t=await ve.#Ne(e.target);return await Promise.all(e.handles.map((async e=>await t.disown(e)))),{result:{}}}async process_browsingContext_close(e){const t=this.#Ie.browserClient();if(null!==ge.BrowsingContextStorage.getKnownContext(e.context).parentId)throw new pe.Message.InvalidArgumentException("Not a top-level browsing context cannot be closed.");const s=new Promise((async s=>{const n=r=>{r.targetId===e.context&&(t.off("Target.detachedFromTarget",n),s())};t.on("Target.detachedFromTarget",n)}));return await this.#Ie.browserClient().sendCommand("Target.closeTarget",{targetId:e.context}),await s,{result:{}}}#Me(e){return e.targetId!==this.#Te&&["page","iframe"].includes(e.type)}async process_cdp_sendCommand(e){const t=e.cdpSession?this.#Ie.getCdpClient(e.cdpSession):this.#Ie.browserClient();return{result:await t.sendCommand(e.cdpMethod,e.cdpParams),cdpSession:e.cdpSession}}async process_cdp_getSession(e){const t=e.context,s=ge.BrowsingContextStorage.getKnownContext(t).cdpSessionId;return void 0===s?{result:{cdpSession:null}}:{result:{cdpSession:s}}}}B.BrowsingContextProcessor=ve,Object.defineProperty(R,"__esModule",{value:!0}),R.CommandProcessor=void 0;const ye=B,xe=b,Ce=x,we=r;class be{parseGetRealmsParams(e){return e}parseCallFunctionParams(e){return e}parseEvaluateParams(e){return e}parseDisownParams(e){return e}parseSendCommandParams(e){return e}parseGetSessionParams(e){return e}parseNavigateParams(e){return e}parseGetTreeParams(e){return e}parseSubscribeParams(e){return e}parseCreateParams(e){return e}parseCloseParams(e){return e}}class _e extends we.EventEmitter{#De;#re;#je;constructor(e,t,s,n=new be){super(),this.#re=t,this.#De=new ye.BrowsingContextProcessor(e,s,t),this.#je=n}async#ke(){return{result:{ready:!1,message:"already connected"}}}async#ze(e,t){return await this.#re.subscribe(e.events,e.contexts??[null],t),{result:{}}}async#Le(e,t){return await this.#re.unsubscribe(e.events,e.contexts??[null],t),{result:{}}}async#Ae(e){switch(e.method){case"session.status":return await this.#ke();case"session.subscribe":return await this.#ze(this.#je.parseSubscribeParams(e.params),e.channel??null);case"session.unsubscribe":return await this.#Le(this.#je.parseSubscribeParams(e.params),e.channel??null);case"browsingContext.create":return await this.#De.process_browsingContext_create(this.#je.parseCreateParams(e.params));case"browsingContext.close":return await this.#De.process_browsingContext_close(this.#je.parseCloseParams(e.params));case"browsingContext.getTree":return await this.#De.process_browsingContext_getTree(this.#je.parseGetTreeParams(e.params));case"browsingContext.navigate":return await this.#De.process_browsingContext_navigate(this.#je.parseNavigateParams(e.params));case"script.getRealms":return this.#De.process_script_getRealms(this.#je.parseGetRealmsParams(e.params));case"script.callFunction":return await this.#De.process_script_callFunction(this.#je.parseCallFunctionParams(e.params));case"script.evaluate":return await this.#De.process_script_evaluate(this.#je.parseEvaluateParams(e.params));case"script.disown":return await this.#De.process_script_disown(this.#je.parseDisownParams(e.params));case"cdp.sendCommand":return await this.#De.process_cdp_sendCommand(this.#je.parseSendCommandParams(e.params));case"cdp.getSession":return await this.#De.process_cdp_getSession(this.#je.parseGetSessionParams(e.params));default:throw new xe.Message.UnknownCommandException(`Unknown command '${e.method}'.`)}}processCommand=async e=>{try{const t=await this.#Ae(e),s={id:e.id,...t};this.emit("response",Ce.OutgoingBidiMessage.createResolved(s,e.channel??null))}catch(t){if(t instanceof xe.Message.ErrorResponseClass){const s=t;this.emit("response",Ce.OutgoingBidiMessage.createResolved(s.toErrorResponse(e.id),e.channel??null))}else{const s=t;console.error(s),this.emit("response",Ce.OutgoingBidiMessage.createResolved(new xe.Message.UnknownException(s.message).toErrorResponse(e.id),e.channel??null))}}}}R.CommandProcessor=_e,Object.defineProperty(h,"__esModule",{value:!0}),h.BidiServer=void 0;const Ie=r,Te=g,Pe=y,Ee=R,Ze=_;class Se extends Ie.EventEmitter{#Re;#t;#Be;constructor(e,t,s,n){super(),this.#Re=new Te.ProcessingQueue(this.#Ve),this.#t=e,this.#t.setOnMessage(this.#Ue),this.#Be=new Ee.CommandProcessor(t,new Pe.EventManager(this),s,n),this.#Be.on("response",(e=>{this.emitOutgoingMessage(e)}))}static async createAndStart(e,t,s,n){const r=new Se(e,t,s,n),a=t.browserClient();return await a.sendCommand("Target.setDiscoverTargets",{discover:!0}),await a.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await Promise.all(Ze.BrowsingContextStorage.getTopLevelContexts().map((e=>e.awaitLoaded()))),r}#Ve=async e=>{const t=e.message;null!==e.channel&&(t.channel=e.channel),await this.#t.sendMessage(t)};emitOutgoingMessage(e){this.#Re.add(e)}close(){this.#t.close()}#Ue=async e=>{this.#Be.processCommand(e)}}h.BidiServer=Se;var Oe={};Object.defineProperty(Oe,"__esModule",{value:!0}),Oe.MapperTabPage=void 0;class Me{static#Fe='<!DOCTYPE html><title>BiDi-CDP Mapper</title><style>body{font-family: Roboto, serif; font-size: 13px; color: #202124;}.log{padding: 12px; font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; font-size: 11px; line-height: 180%; background: #f1f3f4; border-radius: 4px;}.pre{overflow-wrap: break-word; padding: 10px;}.card{margin: 60px auto; padding: 2px 0; max-width: 900px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15), 0 1px 6px rgba(0, 0, 0, 0.2); border-radius: 8px;}.divider{height: 1px; background: #f0f0f0;}.item{padding: 16px 20px;}</style><div class="card"><div class="item"><h1>BiDi-CDP Mapper is controlling this tab</h1><p>Closing or reloading it will stop the BiDi process. <a target="_blank" title="BiDi-CDP Mapper GitHub Repository" href="https://github.com/GoogleChromeLabs/chromium-bidi">Details.</a></p></div><div class="divider"></div><details id="details"><summary class="item">Debug information</summary></details></div>';static generatePage(){globalThis.document?.documentElement&&(window.MapperTabPage=Me,window.document.documentElement.innerHTML=this.#Fe,this.#Ke("System"),this.#Ke("BiDi Messages"),this.#Ke("Browsing Contexts"),this.#Ke("CDP"))}static log(e,...t){if(!globalThis.document?.documentElement)return;const s=this.#Ke(e),n=document.createElement("div");n.className="pre",n.textContent=t.join(", "),s.appendChild(n)}static#Ke(e){const t=e+"_log",s=document.getElementById(t);if(s)return s;const n=document.getElementById("details"),r=document.createElement("div");r.className="divider",n.appendChild(r);const a=document.createElement("div");return a.className="item",a.innerHTML=`<h3>${e}</h3><div id="${t}" class="log"></div>`,n.appendChild(a),document.getElementById(t)}}Oe.MapperTabPage=Me;var Ne={},De={},je={},ke={},ze={},Le={};!function(e){var t;Object.defineProperty(e,"__esModule",{value:!0}),e.getParsedType=e.ZodParsedType=e.util=void 0,function(e){e.assertNever=function(e){throw new Error},e.arrayToEnum=e=>{const t={};for(const s of e)t[s]=s;return t},e.getValidEnumValues=t=>{const s=e.objectKeys(t).filter((e=>"number"!=typeof t[t[e]])),n={};for(const e of s)n[e]=t[e];return e.objectValues(n)},e.objectValues=t=>e.objectKeys(t).map((function(e){return t[e]})),e.objectKeys="function"==typeof Object.keys?e=>Object.keys(e):e=>{const t=[];for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.push(s);return t},e.find=(e,t)=>{for(const s of e)if(t(s))return s},e.isInteger="function"==typeof Number.isInteger?e=>Number.isInteger(e):e=>"number"==typeof e&&isFinite(e)&&Math.floor(e)===e,e.joinValues=function(e,t=" | "){return e.map((e=>"string"==typeof e?`'${e}'`:e)).join(t)}}(t=e.util||(e.util={})),e.ZodParsedType=t.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);e.getParsedType=t=>{switch(typeof t){case"undefined":return e.ZodParsedType.undefined;case"string":return e.ZodParsedType.string;case"number":return isNaN(t)?e.ZodParsedType.nan:e.ZodParsedType.number;case"boolean":return e.ZodParsedType.boolean;case"function":return e.ZodParsedType.function;case"bigint":return e.ZodParsedType.bigint;case"object":return Array.isArray(t)?e.ZodParsedType.array:null===t?e.ZodParsedType.null:t.then&&"function"==typeof t.then&&t.catch&&"function"==typeof t.catch?e.ZodParsedType.promise:"undefined"!=typeof Map&&t instanceof Map?e.ZodParsedType.map:"undefined"!=typeof Set&&t instanceof Set?e.ZodParsedType.set:"undefined"!=typeof Date&&t instanceof Date?e.ZodParsedType.date:e.ZodParsedType.object;default:return e.ZodParsedType.unknown}}}(Le),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.setErrorMap=e.overrideErrorMap=e.defaultErrorMap=e.ZodError=e.quotelessJson=e.ZodIssueCode=void 0;const t=Le;e.ZodIssueCode=t.util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of"]);e.quotelessJson=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class s extends Error{constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}get errors(){return this.issues}format(e){const t=e||function(e){return e.message},s={_errors:[]},n=e=>{for(const r of e.issues)if("invalid_union"===r.code)r.unionErrors.map(n);else if("invalid_return_type"===r.code)n(r.returnTypeError);else if("invalid_arguments"===r.code)n(r.argumentsError);else if(0===r.path.length)s._errors.push(t(r));else{let e=s,n=0;for(;n<r.path.length;){const s=r.path[n];n===r.path.length-1?(e[s]=e[s]||{_errors:[]},e[s]._errors.push(t(r))):e[s]=e[s]||{_errors:[]},e=e[s],n++}}};return n(this),s}toString(){return this.message}get message(){return JSON.stringify(this.issues,null,2)}get isEmpty(){return 0===this.issues.length}flatten(e=(e=>e.message)){const t={},s=[];for(const n of this.issues)n.path.length>0?(t[n.path[0]]=t[n.path[0]]||[],t[n.path[0]].push(e(n))):s.push(e(n));return{formErrors:s,fieldErrors:t}}get formErrors(){return this.flatten()}}e.ZodError=s,s.create=e=>new s(e);e.defaultErrorMap=(s,n)=>{let r;switch(s.code){case e.ZodIssueCode.invalid_type:r=s.received===t.ZodParsedType.undefined?"Required":`Expected ${s.expected}, received ${s.received}`;break;case e.ZodIssueCode.invalid_literal:r=`Invalid literal value, expected ${JSON.stringify(s.expected)}`;break;case e.ZodIssueCode.unrecognized_keys:r=`Unrecognized key(s) in object: ${t.util.joinValues(s.keys,", ")}`;break;case e.ZodIssueCode.invalid_union:r="Invalid input";break;case e.ZodIssueCode.invalid_union_discriminator:r=`Invalid discriminator value. Expected ${t.util.joinValues(s.options)}`;break;case e.ZodIssueCode.invalid_enum_value:r=`Invalid enum value. Expected ${t.util.joinValues(s.options)}, received '${s.received}'`;break;case e.ZodIssueCode.invalid_arguments:r="Invalid function arguments";break;case e.ZodIssueCode.invalid_return_type:r="Invalid function return type";break;case e.ZodIssueCode.invalid_date:r="Invalid date";break;case e.ZodIssueCode.invalid_string:r="regex"!==s.validation?`Invalid ${s.validation}`:"Invalid";break;case e.ZodIssueCode.too_small:r="array"===s.type?`Array must contain ${s.inclusive?"at least":"more than"} ${s.minimum} element(s)`:"string"===s.type?`String must contain ${s.inclusive?"at least":"over"} ${s.minimum} character(s)`:"number"===s.type?`Number must be greater than ${s.inclusive?"or equal to ":""}${s.minimum}`:"Invalid input";break;case e.ZodIssueCode.too_big:r="array"===s.type?`Array must contain ${s.inclusive?"at most":"less than"} ${s.maximum} element(s)`:"string"===s.type?`String must contain ${s.inclusive?"at most":"under"} ${s.maximum} character(s)`:"number"===s.type?`Number must be less than ${s.inclusive?"or equal to ":""}${s.maximum}`:"Invalid input";break;case e.ZodIssueCode.custom:r="Invalid input";break;case e.ZodIssueCode.invalid_intersection_types:r="Intersection results could not be merged";break;case e.ZodIssueCode.not_multiple_of:r=`Number must be a multiple of ${s.multipleOf}`;break;default:r=n.defaultError,t.util.assertNever(s)}return{message:r}},e.overrideErrorMap=e.defaultErrorMap;e.setErrorMap=t=>{e.overrideErrorMap=t}}(ze),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isAsync=e.isValid=e.isDirty=e.isAborted=e.OK=e.DIRTY=e.INVALID=e.ParseStatus=e.addIssueToContext=e.EMPTY_PATH=e.makeIssue=void 0;const t=ze;e.makeIssue=e=>{const{data:t,path:s,errorMaps:n,issueData:r}=e,a=[...s,...r.path||[]],o={...r,path:a};let i="";const d=n.filter((e=>!!e)).slice().reverse();for(const e of d)i=e(o,{data:t,defaultError:i}).message;return{...r,path:a,message:r.message||i}},e.EMPTY_PATH=[],e.addIssueToContext=function(s,n){const r=e.makeIssue({issueData:n,data:s.data,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,t.overrideErrorMap,t.defaultErrorMap].filter((e=>!!e))});s.common.issues.push(r)};class s{constructor(){this.value="valid"}dirty(){"valid"===this.value&&(this.value="dirty")}abort(){"aborted"!==this.value&&(this.value="aborted")}static mergeArray(t,s){const n=[];for(const r of s){if("aborted"===r.status)return e.INVALID;"dirty"===r.status&&t.dirty(),n.push(r.value)}return{status:t.value,value:n}}static async mergeObjectAsync(e,t){const n=[];for(const e of t)n.push({key:await e.key,value:await e.value});return s.mergeObjectSync(e,n)}static mergeObjectSync(t,s){const n={};for(const r of s){const{key:s,value:a}=r;if("aborted"===s.status)return e.INVALID;if("aborted"===a.status)return e.INVALID;"dirty"===s.status&&t.dirty(),"dirty"===a.status&&t.dirty(),(void 0!==a.value||r.alwaysSet)&&(n[s.value]=a.value)}return{status:t.value,value:n}}}e.ParseStatus=s,e.INVALID=Object.freeze({status:"aborted"});e.DIRTY=e=>({status:"dirty",value:e});e.OK=e=>({status:"valid",value:e});e.isAborted=e=>"aborted"===e.status;e.isDirty=e=>"dirty"===e.status;e.isValid=e=>"valid"===e.status;e.isAsync=e=>void 0!==typeof Promise&&e instanceof Promise}(ke);var Ae={};Object.defineProperty(Ae,"__esModule",{value:!0});var Re={},Be={};!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.errorUtil=void 0,function(e){e.errToObj=e=>"string"==typeof e?{message:e}:e||{},e.toString=e=>"string"==typeof e?e:null==e?void 0:e.message}(e.errorUtil||(e.errorUtil={}))}(Be),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.intersection=e.instanceof=e.function=e.enum=e.effect=e.discriminatedUnion=e.date=e.boolean=e.bigint=e.array=e.any=e.ZodFirstPartyTypeKind=e.late=e.ZodSchema=e.Schema=e.custom=e.ZodNaN=e.ZodDefault=e.ZodNullable=e.ZodOptional=e.ZodTransformer=e.ZodEffects=e.ZodPromise=e.ZodNativeEnum=e.ZodEnum=e.ZodLiteral=e.ZodLazy=e.ZodFunction=e.ZodSet=e.ZodMap=e.ZodRecord=e.ZodTuple=e.ZodIntersection=e.ZodDiscriminatedUnion=e.ZodUnion=e.ZodObject=e.objectUtil=e.ZodArray=e.ZodVoid=e.ZodNever=e.ZodUnknown=e.ZodAny=e.ZodNull=e.ZodUndefined=e.ZodDate=e.ZodBoolean=e.ZodBigInt=e.ZodNumber=e.ZodString=e.ZodType=void 0,e.void=e.unknown=e.union=e.undefined=e.tuple=e.transformer=e.string=e.strictObject=e.set=e.record=e.promise=e.preprocess=e.ostring=e.optional=e.onumber=e.oboolean=e.object=e.number=e.nullable=e.null=e.never=e.nativeEnum=e.nan=e.map=e.literal=e.lazy=void 0;const t=Be,s=ke,n=Le,r=ze;class a{constructor(e,t,s,n){this.parent=e,this.data=t,this._path=s,this._key=n}get path(){return this._path.concat(this._key)}}const o=(e,t)=>{if(s.isValid(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,error:new r.ZodError(e.common.issues)}};function i(e){if(!e)return{};const{errorMap:t,invalid_type_error:s,required_error:n,description:r}=e;if(t&&(s||n))throw new Error('Can\'t use "invalid" or "required" in conjunction with custom error map.');if(t)return{errorMap:t,description:r};return{errorMap:(t,s)=>"invalid_type"!==t.code?{message:s.defaultError}:void 0===s.data&&n?{message:n}:e.invalid_type_error?{message:e.invalid_type_error}:{message:s.defaultError},description:r}}class d{constructor(e){this.spa=this.safeParseAsync,this.superRefine=this._refinement,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.default=this.default.bind(this),this.describe=this.describe.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return n.getParsedType(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:n.getParsedType(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new s.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:n.getParsedType(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(s.isAsync(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){var s;const r={common:{issues:[],async:null!==(s=null==t?void 0:t.async)&&void 0!==s&&s,contextualErrorMap:null==t?void 0:t.errorMap},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:n.getParsedType(e)},a=this._parseSync({data:e,path:r.path,parent:r});return o(r,a)}async parseAsync(e,t){const s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){const r={common:{issues:[],contextualErrorMap:null==t?void 0:t.errorMap,async:!0},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:n.getParsedType(e)},a=this._parse({data:e,path:[],parent:r}),i=await(s.isAsync(a)?a:Promise.resolve(a));return o(r,i)}refine(e,t){const s=e=>"string"==typeof t||void 0===t?{message:t}:"function"==typeof t?t(e):t;return this._refinement(((t,n)=>{const a=e(t),o=()=>n.addIssue({code:r.ZodIssueCode.custom,...s(t)});return"undefined"!=typeof Promise&&a instanceof Promise?a.then((e=>!!e||(o(),!1))):!!a||(o(),!1)}))}refinement(e,t){return this._refinement(((s,n)=>!!e(s)||(n.addIssue("function"==typeof t?t(s,n):t),!1)))}_refinement(e){return new F({schema:this,typeName:G.ZodEffects,effect:{type:"refinement",refinement:e}})}optional(){return K.create(this)}nullable(){return $.create(this)}nullish(){return this.optional().nullable()}array(){return I.create(this)}promise(){return U.create(this)}or(e){return S.create([this,e])}and(e){return N.create(this,e)}transform(e){return new F({schema:this,typeName:G.ZodEffects,effect:{type:"transform",transform:e}})}default(e){return new J({innerType:this,defaultValue:"function"==typeof e?e:()=>e,typeName:G.ZodDefault})}describe(e){return new(0,this.constructor)({...this._def,description:e})}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}e.ZodType=d,e.Schema=d,e.ZodSchema=d;const c=/^c[^\s-]{8,}$/i,u=/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i,l=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;class p extends d{constructor(){super(...arguments),this._regex=(e,s,n)=>this.refinement((t=>e.test(t)),{validation:s,code:r.ZodIssueCode.invalid_string,...t.errorUtil.errToObj(n)}),this.nonempty=e=>this.min(1,t.errorUtil.errToObj(e)),this.trim=()=>new p({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}_parse(e){if(this._getType(e)!==n.ZodParsedType.string){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.string,received:t.parsedType}),s.INVALID}const t=new s.ParseStatus;let a;for(const o of this._def.checks)if("min"===o.kind)e.data.length<o.value&&(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{code:r.ZodIssueCode.too_small,minimum:o.value,type:"string",inclusive:!0,message:o.message}),t.dirty());else if("max"===o.kind)e.data.length>o.value&&(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{code:r.ZodIssueCode.too_big,maximum:o.value,type:"string",inclusive:!0,message:o.message}),t.dirty());else if("email"===o.kind)l.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"email",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("uuid"===o.kind)u.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"uuid",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("cuid"===o.kind)c.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"cuid",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("url"===o.kind)try{new URL(e.data)}catch(n){a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"url",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty()}else if("regex"===o.kind){o.regex.lastIndex=0;o.regex.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"regex",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty())}else"trim"===o.kind?e.data=e.data.trim():n.util.assertNever(o);return{status:t.value,value:e.data}}_addCheck(e){return new p({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...t.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...t.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...t.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...t.errorUtil.errToObj(e)})}regex(e,s){return this._addCheck({kind:"regex",regex:e,...t.errorUtil.errToObj(s)})}min(e,s){return this._addCheck({kind:"min",value:e,...t.errorUtil.errToObj(s)})}max(e,s){return this._addCheck({kind:"max",value:e,...t.errorUtil.errToObj(s)})}length(e,t){return this.min(e,t).max(e,t)}get isEmail(){return!!this._def.checks.find((e=>"email"===e.kind))}get isURL(){return!!this._def.checks.find((e=>"url"===e.kind))}get isUUID(){return!!this._def.checks.find((e=>"uuid"===e.kind))}get isCUID(){return!!this._def.checks.find((e=>"cuid"===e.kind))}get minLength(){let e=-1/0;return this._def.checks.map((t=>{"min"===t.kind&&(null===e||t.value>e)&&(e=t.value)})),e}get maxLength(){let e=null;return this._def.checks.map((t=>{"max"===t.kind&&(null===e||t.value<e)&&(e=t.value)})),e}}function m(e,t){const s=(e.toString().split(".")[1]||"").length,n=(t.toString().split(".")[1]||"").length,r=s>n?s:n;return parseInt(e.toFixed(r).replace(".",""))%parseInt(t.toFixed(r).replace(".",""))/Math.pow(10,r)}e.ZodString=p,p.create=e=>new p({checks:[],typeName:G.ZodString,...i(e)});class h extends d{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._getType(e)!==n.ZodParsedType.number){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.number,received:t.parsedType}),s.INVALID}let t;const a=new s.ParseStatus;for(const o of this._def.checks)if("int"===o.kind)n.util.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:o.message}),a.dirty());else if("min"===o.kind){(o.inclusive?e.data<o.value:e.data<=o.value)&&(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.too_small,minimum:o.value,type:"number",inclusive:o.inclusive,message:o.message}),a.dirty())}else if("max"===o.kind){(o.inclusive?e.data>o.value:e.data>=o.value)&&(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,message:o.message}),a.dirty())}else"multipleOf"===o.kind?0!==m(e.data,o.value)&&(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.not_multiple_of,multipleOf:o.value,message:o.message}),a.dirty()):n.util.assertNever(o);return{status:a.value,value:e.data}}gte(e,s){return this.setLimit("min",e,!0,t.errorUtil.toString(s))}gt(e,s){return this.setLimit("min",e,!1,t.errorUtil.toString(s))}lte(e,s){return this.setLimit("max",e,!0,t.errorUtil.toString(s))}lt(e,s){return this.setLimit("max",e,!1,t.errorUtil.toString(s))}setLimit(e,s,n,r){return new h({...this._def,checks:[...this._def.checks,{kind:e,value:s,inclusive:n,message:t.errorUtil.toString(r)}]})}_addCheck(e){return new h({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:t.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:t.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:t.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:t.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:t.errorUtil.toString(e)})}multipleOf(e,s){return this._addCheck({kind:"multipleOf",value:e,message:t.errorUtil.toString(s)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find((e=>"int"===e.kind))}}e.ZodNumber=h,h.create=e=>new h({checks:[],typeName:G.ZodNumber,...i(e)});class g extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.bigint){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.bigint,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodBigInt=g,g.create=e=>new g({typeName:G.ZodBigInt,...i(e)});class f extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.boolean){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.boolean,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodBoolean=f,f.create=e=>new f({typeName:G.ZodBoolean,...i(e)});class v extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.date){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.date,received:t.parsedType}),s.INVALID}if(isNaN(e.data.getTime())){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_date}),s.INVALID}return{status:"valid",value:new Date(e.data.getTime())}}}e.ZodDate=v,v.create=e=>new v({typeName:G.ZodDate,...i(e)});class y extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.undefined,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodUndefined=y,y.create=e=>new y({typeName:G.ZodUndefined,...i(e)});class x extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.null){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.null,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodNull=x,x.create=e=>new x({typeName:G.ZodNull,...i(e)});class C extends d{constructor(){super(...arguments),this._any=!0}_parse(e){return s.OK(e.data)}}e.ZodAny=C,C.create=e=>new C({typeName:G.ZodAny,...i(e)});class w extends d{constructor(){super(...arguments),this._unknown=!0}_parse(e){return s.OK(e.data)}}e.ZodUnknown=w,w.create=e=>new w({typeName:G.ZodUnknown,...i(e)});class b extends d{_parse(e){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.never,received:t.parsedType}),s.INVALID}}e.ZodNever=b,b.create=e=>new b({typeName:G.ZodNever,...i(e)});class _ extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.void,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodVoid=_,_.create=e=>new _({typeName:G.ZodVoid,...i(e)});class I extends d{_parse(e){const{ctx:t,status:o}=this._processInputParams(e),i=this._def;if(t.parsedType!==n.ZodParsedType.array)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.array,received:t.parsedType}),s.INVALID;if(null!==i.minLength&&t.data.length<i.minLength.value&&(s.addIssueToContext(t,{code:r.ZodIssueCode.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,message:i.minLength.message}),o.dirty()),null!==i.maxLength&&t.data.length>i.maxLength.value&&(s.addIssueToContext(t,{code:r.ZodIssueCode.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,message:i.maxLength.message}),o.dirty()),t.common.async)return Promise.all(t.data.map(((e,s)=>i.type._parseAsync(new a(t,e,t.path,s))))).then((e=>s.ParseStatus.mergeArray(o,e)));const d=t.data.map(((e,s)=>i.type._parseSync(new a(t,e,t.path,s))));return s.ParseStatus.mergeArray(o,d)}get element(){return this._def.type}min(e,s){return new I({...this._def,minLength:{value:e,message:t.errorUtil.toString(s)}})}max(e,s){return new I({...this._def,maxLength:{value:e,message:t.errorUtil.toString(s)}})}length(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}var T;e.ZodArray=I,I.create=(e,t)=>new I({type:e,minLength:null,maxLength:null,typeName:G.ZodArray,...i(t)}),function(e){e.mergeShapes=(e,t)=>({...e,...t})}(T=e.objectUtil||(e.objectUtil={}));const P=e=>t=>new Z({...e,shape:()=>({...e.shape(),...t})});function E(e){if(e instanceof Z){const t={};for(const s in e.shape){const n=e.shape[s];t[s]=K.create(E(n))}return new Z({...e._def,shape:()=>t})}return e instanceof I?I.create(E(e.element)):e instanceof K?K.create(E(e.unwrap())):e instanceof $?$.create(E(e.unwrap())):e instanceof D?D.create(e.items.map((e=>E(e)))):e}class Z extends d{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=P(this._def),this.extend=P(this._def)}_getCached(){if(null!==this._cached)return this._cached;const e=this._def.shape(),t=n.util.objectKeys(e);return this._cached={shape:e,keys:t}}_parse(e){if(this._getType(e)!==n.ZodParsedType.object){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.object,received:t.parsedType}),s.INVALID}const{status:t,ctx:o}=this._processInputParams(e),{shape:i,keys:d}=this._getCached(),c=[];for(const e in o.data)d.includes(e)||c.push(e);const u=[];for(const e of d){const t=i[e],s=o.data[e];u.push({key:{status:"valid",value:e},value:t._parse(new a(o,s,o.path,e)),alwaysSet:e in o.data})}if(this._def.catchall instanceof b){const e=this._def.unknownKeys;if("passthrough"===e)for(const e of c)u.push({key:{status:"valid",value:e},value:{status:"valid",value:o.data[e]}});else if("strict"===e)c.length>0&&(s.addIssueToContext(o,{code:r.ZodIssueCode.unrecognized_keys,keys:c}),t.dirty());else if("strip"!==e)throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const e=this._def.catchall;for(const t of c){const s=o.data[t];u.push({key:{status:"valid",value:t},value:e._parse(new a(o,s,o.path,t)),alwaysSet:t in o.data})}}return o.common.async?Promise.resolve().then((async()=>{const e=[];for(const t of u){const s=await t.key;e.push({key:s,value:await t.value,alwaysSet:t.alwaysSet})}return e})).then((e=>s.ParseStatus.mergeObjectSync(t,e))):s.ParseStatus.mergeObjectSync(t,u)}get shape(){return this._def.shape()}strict(e){return t.errorUtil.errToObj,new Z({...this._def,unknownKeys:"strict",...void 0!==e?{errorMap:(s,n)=>{var r,a,o,i;const d=null!==(o=null===(a=(r=this._def).errorMap)||void 0===a?void 0:a.call(r,s,n).message)&&void 0!==o?o:n.defaultError;return"unrecognized_keys"===s.code?{message:null!==(i=t.errorUtil.errToObj(e).message)&&void 0!==i?i:d}:{message:d}}}:{}})}strip(){return new Z({...this._def,unknownKeys:"strip"})}passthrough(){return new Z({...this._def,unknownKeys:"passthrough"})}setKey(e,t){return this.augment({[e]:t})}merge(e){return new Z({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>T.mergeShapes(this._def.shape(),e._def.shape()),typeName:G.ZodObject})}catchall(e){return new Z({...this._def,catchall:e})}pick(e){const t={};return n.util.objectKeys(e).map((e=>{this.shape[e]&&(t[e]=this.shape[e])})),new Z({...this._def,shape:()=>t})}omit(e){const t={};return n.util.objectKeys(this.shape).map((s=>{-1===n.util.objectKeys(e).indexOf(s)&&(t[s]=this.shape[s])})),new Z({...this._def,shape:()=>t})}deepPartial(){return E(this)}partial(e){const t={};if(e)return n.util.objectKeys(this.shape).map((s=>{-1===n.util.objectKeys(e).indexOf(s)?t[s]=this.shape[s]:t[s]=this.shape[s].optional()})),new Z({...this._def,shape:()=>t});for(const e in this.shape){const s=this.shape[e];t[e]=s.optional()}return new Z({...this._def,shape:()=>t})}required(){const e={};for(const t in this.shape){let s=this.shape[t];for(;s instanceof K;)s=s._def.innerType;e[t]=s}return new Z({...this._def,shape:()=>e})}}e.ZodObject=Z,Z.create=(e,t)=>new Z({shape:()=>e,unknownKeys:"strip",catchall:b.create(),typeName:G.ZodObject,...i(t)}),Z.strictCreate=(e,t)=>new Z({shape:()=>e,unknownKeys:"strict",catchall:b.create(),typeName:G.ZodObject,...i(t)}),Z.lazycreate=(e,t)=>new Z({shape:e,unknownKeys:"strip",catchall:b.create(),typeName:G.ZodObject,...i(t)});class S extends d{_parse(e){const{ctx:t}=this._processInputParams(e),n=this._def.options;if(t.common.async)return Promise.all(n.map((async e=>{const s={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:s}),ctx:s}}))).then((function(e){for(const t of e)if("valid"===t.result.status)return t.result;for(const s of e)if("dirty"===s.result.status)return t.common.issues.push(...s.ctx.common.issues),s.result;const n=e.map((e=>new r.ZodError(e.ctx.common.issues)));return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_union,unionErrors:n}),s.INVALID}));{let e;const a=[];for(const s of n){const n={...t,common:{...t.common,issues:[]},parent:null},r=s._parseSync({data:t.data,path:t.path,parent:n});if("valid"===r.status)return r;"dirty"!==r.status||e||(e={result:r,ctx:n}),n.common.issues.length&&a.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;const o=a.map((e=>new r.ZodError(e)));return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_union,unionErrors:o}),s.INVALID}}get options(){return this._def.options}}e.ZodUnion=S,S.create=(e,t)=>new S({options:e,typeName:G.ZodUnion,...i(t)});class O extends d{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==n.ZodParsedType.object)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.object,received:t.parsedType}),s.INVALID;const a=this.discriminator,o=t.data[a],i=this.options.get(o);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_union_discriminator,options:this.validDiscriminatorValues,path:[a]}),s.INVALID)}get discriminator(){return this._def.discriminator}get validDiscriminatorValues(){return Array.from(this.options.keys())}get options(){return this._def.options}static create(e,t,s){const n=new Map;try{t.forEach((t=>{const s=t.shape[e].value;n.set(s,t)}))}catch(e){throw new Error("The discriminator value could not be extracted from all the provided schemas")}if(n.size!==t.length)throw new Error("Some of the discriminator values are not unique");return new O({typeName:G.ZodDiscriminatedUnion,discriminator:e,options:n,...i(s)})}}function M(e,t){const s=n.getParsedType(e),r=n.getParsedType(t);if(e===t)return{valid:!0,data:e};if(s===n.ZodParsedType.object&&r===n.ZodParsedType.object){const s=n.util.objectKeys(t),r=n.util.objectKeys(e).filter((e=>-1!==s.indexOf(e))),a={...e,...t};for(const s of r){const n=M(e[s],t[s]);if(!n.valid)return{valid:!1};a[s]=n.data}return{valid:!0,data:a}}if(s===n.ZodParsedType.array&&r===n.ZodParsedType.array){if(e.length!==t.length)return{valid:!1};const s=[];for(let n=0;n<e.length;n++){const r=M(e[n],t[n]);if(!r.valid)return{valid:!1};s.push(r.data)}return{valid:!0,data:s}}return s===n.ZodParsedType.date&&r===n.ZodParsedType.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}e.ZodDiscriminatedUnion=O;class N extends d{_parse(e){const{status:t,ctx:n}=this._processInputParams(e),a=(e,a)=>{if(s.isAborted(e)||s.isAborted(a))return s.INVALID;const o=M(e.value,a.value);return o.valid?((s.isDirty(e)||s.isDirty(a))&&t.dirty(),{status:t.value,value:o.data}):(s.addIssueToContext(n,{code:r.ZodIssueCode.invalid_intersection_types}),s.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then((([e,t])=>a(e,t))):a(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}}e.ZodIntersection=N,N.create=(e,t,s)=>new N({left:e,right:t,typeName:G.ZodIntersection,...i(s)});class D extends d{_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.array)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.array,received:o.parsedType}),s.INVALID;if(o.data.length<this._def.items.length)return s.addIssueToContext(o,{code:r.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,type:"array"}),s.INVALID;!this._def.rest&&o.data.length>this._def.items.length&&(s.addIssueToContext(o,{code:r.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,type:"array"}),t.dirty());const i=o.data.map(((e,t)=>{const s=this._def.items[t]||this._def.rest;return s?s._parse(new a(o,e,o.path,t)):null})).filter((e=>!!e));return o.common.async?Promise.all(i).then((e=>s.ParseStatus.mergeArray(t,e))):s.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new D({...this._def,rest:e})}}e.ZodTuple=D,D.create=(e,t)=>new D({items:e,typeName:G.ZodTuple,rest:null,...i(t)});class j extends d{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.object)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.object,received:o.parsedType}),s.INVALID;const i=[],d=this._def.keyType,c=this._def.valueType;for(const e in o.data)i.push({key:d._parse(new a(o,e,o.path,e)),value:c._parse(new a(o,o.data[e],o.path,e))});return o.common.async?s.ParseStatus.mergeObjectAsync(t,i):s.ParseStatus.mergeObjectSync(t,i)}get element(){return this._def.valueType}static create(e,t,s){return new j(t instanceof d?{keyType:e,valueType:t,typeName:G.ZodRecord,...i(s)}:{keyType:p.create(),valueType:e,typeName:G.ZodRecord,...i(t)})}}e.ZodRecord=j;class k extends d{_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.map)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.map,received:o.parsedType}),s.INVALID;const i=this._def.keyType,d=this._def.valueType,c=[...o.data.entries()].map((([e,t],s)=>({key:i._parse(new a(o,e,o.path,[s,"key"])),value:d._parse(new a(o,t,o.path,[s,"value"]))})));if(o.common.async){const e=new Map;return Promise.resolve().then((async()=>{for(const n of c){const r=await n.key,a=await n.value;if("aborted"===r.status||"aborted"===a.status)return s.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}))}{const e=new Map;for(const n of c){const r=n.key,a=n.value;if("aborted"===r.status||"aborted"===a.status)return s.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}}}e.ZodMap=k,k.create=(e,t,s)=>new k({valueType:t,keyType:e,typeName:G.ZodMap,...i(s)});class z extends d{_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.set)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.set,received:o.parsedType}),s.INVALID;const i=this._def;null!==i.minSize&&o.data.size<i.minSize.value&&(s.addIssueToContext(o,{code:r.ZodIssueCode.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,message:i.minSize.message}),t.dirty()),null!==i.maxSize&&o.data.size>i.maxSize.value&&(s.addIssueToContext(o,{code:r.ZodIssueCode.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,message:i.maxSize.message}),t.dirty());const d=this._def.valueType;function c(e){const n=new Set;for(const r of e){if("aborted"===r.status)return s.INVALID;"dirty"===r.status&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}const u=[...o.data.values()].map(((e,t)=>d._parse(new a(o,e,o.path,t))));return o.common.async?Promise.all(u).then((e=>c(e))):c(u)}min(e,s){return new z({...this._def,minSize:{value:e,message:t.errorUtil.toString(s)}})}max(e,s){return new z({...this._def,maxSize:{value:e,message:t.errorUtil.toString(s)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}e.ZodSet=z,z.create=(e,t)=>new z({valueType:e,minSize:null,maxSize:null,typeName:G.ZodSet,...i(t)});class L extends d{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==n.ZodParsedType.function)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.function,received:t.parsedType}),s.INVALID;function a(e,n){return s.makeIssue({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,r.overrideErrorMap,r.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_arguments,argumentsError:n}})}function o(e,n){return s.makeIssue({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,r.overrideErrorMap,r.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_return_type,returnTypeError:n}})}const i={errorMap:t.common.contextualErrorMap},d=t.data;return this._def.returns instanceof U?s.OK((async(...e)=>{const t=new r.ZodError([]),s=await this._def.args.parseAsync(e,i).catch((s=>{throw t.addIssue(a(e,s)),t})),n=await d(...s);return await this._def.returns._def.type.parseAsync(n,i).catch((e=>{throw t.addIssue(o(n,e)),t}))})):s.OK(((...e)=>{const t=this._def.args.safeParse(e,i);if(!t.success)throw new r.ZodError([a(e,t.error)]);const s=d(...t.data),n=this._def.returns.safeParse(s,i);if(!n.success)throw new r.ZodError([o(s,n.error)]);return n.data}))}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new L({...this._def,args:D.create(e).rest(w.create())})}returns(e){return new L({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}}e.ZodFunction=L,L.create=(e,t,s)=>new L({args:e?e.rest(w.create()):D.create([]).rest(w.create()),returns:t||w.create(),typeName:G.ZodFunction,...i(s)});class A extends d{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}e.ZodLazy=A,A.create=(e,t)=>new A({getter:e,typeName:G.ZodLazy,...i(t)});class R extends d{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_literal,expected:this._def.value}),s.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}}e.ZodLiteral=R,R.create=(e,t)=>new R({value:e,typeName:G.ZodLiteral,...i(t)});class B extends d{_parse(e){if("string"!=typeof e.data){const t=this._getOrReturnCtx(e),a=this._def.values;return s.addIssueToContext(t,{expected:n.util.joinValues(a),received:t.parsedType,code:r.ZodIssueCode.invalid_type}),s.INVALID}if(-1===this._def.values.indexOf(e.data)){const t=this._getOrReturnCtx(e),n=this._def.values;return s.addIssueToContext(t,{received:t.data,code:r.ZodIssueCode.invalid_enum_value,options:n}),s.INVALID}return s.OK(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}}e.ZodEnum=B,B.create=function(e,t){return new B({values:e,typeName:G.ZodEnum,...i(t)})};class V extends d{_parse(e){const t=n.util.getValidEnumValues(this._def.values),a=this._getOrReturnCtx(e);if(a.parsedType!==n.ZodParsedType.string&&a.parsedType!==n.ZodParsedType.number){const e=n.util.objectValues(t);return s.addIssueToContext(a,{expected:n.util.joinValues(e),received:a.parsedType,code:r.ZodIssueCode.invalid_type}),s.INVALID}if(-1===t.indexOf(e.data)){const e=n.util.objectValues(t);return s.addIssueToContext(a,{received:a.data,code:r.ZodIssueCode.invalid_enum_value,options:e}),s.INVALID}return s.OK(e.data)}get enum(){return this._def.values}}e.ZodNativeEnum=V,V.create=(e,t)=>new V({values:e,typeName:G.ZodNativeEnum,...i(t)});class U extends d{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==n.ZodParsedType.promise&&!1===t.common.async)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.promise,received:t.parsedType}),s.INVALID;const a=t.parsedType===n.ZodParsedType.promise?t.data:Promise.resolve(t.data);return s.OK(a.then((e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap}))))}}e.ZodPromise=U,U.create=(e,t)=>new U({type:e,typeName:G.ZodPromise,...i(t)});class F extends d{innerType(){return this._def.schema}_parse(e){const{status:t,ctx:r}=this._processInputParams(e),a=this._def.effect||null;if("preprocess"===a.type){const e=a.transform(r.data);return r.common.async?Promise.resolve(e).then((e=>this._def.schema._parseAsync({data:e,path:r.path,parent:r}))):this._def.schema._parseSync({data:e,path:r.path,parent:r})}const o={addIssue:e=>{s.addIssueToContext(r,e),e.fatal?t.abort():t.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),"refinement"===a.type){const e=e=>{const t=a.refinement(e,o);if(r.common.async)return Promise.resolve(t);if(t instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return e};if(!1===r.common.async){const n=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return"aborted"===n.status?s.INVALID:("dirty"===n.status&&t.dirty(),e(n.value),{status:t.value,value:n.value})}return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then((n=>"aborted"===n.status?s.INVALID:("dirty"===n.status&&t.dirty(),e(n.value).then((()=>({status:t.value,value:n.value}))))))}if("transform"===a.type){if(!1===r.common.async){const e=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!s.isValid(e))return e;const n=a.transform(e.value,o);if(n instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:n}}return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then((e=>s.isValid(e)?Promise.resolve(a.transform(e.value,o)).then((e=>({status:t.value,value:e}))):e))}n.util.assertNever(a)}}e.ZodEffects=F,e.ZodTransformer=F,F.create=(e,t,s)=>new F({schema:e,typeName:G.ZodEffects,effect:t,...i(s)}),F.createWithPreprocess=(e,t,s)=>new F({schema:t,effect:{type:"preprocess",transform:e},typeName:G.ZodEffects,...i(s)});class K extends d{_parse(e){return this._getType(e)===n.ZodParsedType.undefined?s.OK(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodOptional=K,K.create=(e,t)=>new K({innerType:e,typeName:G.ZodOptional,...i(t)});class $ extends d{_parse(e){return this._getType(e)===n.ZodParsedType.null?s.OK(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodNullable=$,$.create=(e,t)=>new $({innerType:e,typeName:G.ZodNullable,...i(t)});class J extends d{_parse(e){const{ctx:t}=this._processInputParams(e);let s=t.data;return t.parsedType===n.ZodParsedType.undefined&&(s=this._def.defaultValue()),this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}e.ZodDefault=J,J.create=(e,t)=>new K({innerType:e,typeName:G.ZodOptional,...i(t)});class W extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.nan){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.nan,received:t.parsedType}),s.INVALID}return{status:"valid",value:e.data}}}e.ZodNaN=W,W.create=e=>new W({typeName:G.ZodNaN,...i(e)});var G;e.custom=(e,t={},s)=>e?C.create().superRefine(((n,r)=>{if(!e(n)){const e="function"==typeof t?t(n):t,a="string"==typeof e?{message:e}:e;r.addIssue({code:"custom",...a,fatal:s})}})):C.create(),e.late={object:Z.lazycreate},function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodPromise="ZodPromise"}(G=e.ZodFirstPartyTypeKind||(e.ZodFirstPartyTypeKind={}));e.instanceof=(t,s={message:`Input not instance of ${t.name}`})=>e.custom((e=>e instanceof t),s,!0);const q=p.create;e.string=q;const H=h.create;e.number=H;const Q=W.create;e.nan=Q;const Y=g.create;e.bigint=Y;const X=f.create;e.boolean=X;const ee=v.create;e.date=ee;const te=y.create;e.undefined=te;const se=x.create;e.null=se;const ne=C.create;e.any=ne;const re=w.create;e.unknown=re;const ae=b.create;e.never=ae;const oe=_.create;e.void=oe;const ie=I.create;e.array=ie;const de=Z.create;e.object=de;const ce=Z.strictCreate;e.strictObject=ce;const ue=S.create;e.union=ue;const le=O.create;e.discriminatedUnion=le;const pe=N.create;e.intersection=pe;const me=D.create;e.tuple=me;const he=j.create;e.record=he;const ge=k.create;e.map=ge;const fe=z.create;e.set=fe;const ve=L.create;e.function=ve;const ye=A.create;e.lazy=ye;const xe=R.create;e.literal=xe;const Ce=B.create;e.enum=Ce;const we=V.create;e.nativeEnum=we;const be=U.create;e.promise=be;const _e=F.create;e.effect=_e,e.transformer=_e;const Ie=K.create;e.optional=Ie;const Te=$.create;e.nullable=Te;const Pe=F.createWithPreprocess;e.preprocess=Pe;e.ostring=()=>q().optional();e.onumber=()=>H().optional();e.oboolean=()=>X().optional()}(Re),function(t){var s=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),n=e&&e.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||s(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.ZodParsedType=t.getParsedType=void 0,n(ke,t),n(Ae,t);var r=Le;Object.defineProperty(t,"getParsedType",{enumerable:!0,get:function(){return r.getParsedType}}),Object.defineProperty(t,"ZodParsedType",{enumerable:!0,get:function(){return r.ZodParsedType}}),n(Re,t),n(ze,t)}(je),function(t){var s=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),n=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&s(t,e,r);return n(t,e),t},a=e&&e.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||s(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.z=void 0;const o=r(je);t.z=o,a(je,t),t.default=o}(De),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Session=e.CDP=e.Log=e.BrowsingContext=e.Script=e.CommonDataTypes=e.parseObject=void 0;const t=De,s=b,n=(0,f.log)(f.LogType.commandParser);function r(e,t){const r=t.safeParse(e);if(r.success)return r.data;n(`Command ${JSON.stringify(e)} parse failed: ${JSON.stringify(r)}.`);const a=r.error.errors.map((e=>`${e.message} in ${e.path.map((e=>JSON.stringify(e))).join("/")}.`)).join(" ");throw new s.Message.InvalidArgumentException(a)}var a,o,i,d;e.parseObject=r,function(e){e.RemoteReferenceSchema=t.z.object({handle:t.z.string().min(1)});const s=t.z.object({type:t.z.literal("undefined")}),n=t.z.object({type:t.z.literal("null")}),r=t.z.object({type:t.z.literal("string"),value:t.z.string()}),a=t.z.enum(["NaN","-0","Infinity","+Infinity","-Infinity"]),o=t.z.object({type:t.z.literal("number"),value:t.z.union([a,t.z.number()])}),i=t.z.object({type:t.z.literal("boolean"),value:t.z.boolean()}),d=t.z.object({type:t.z.literal("bigint"),value:t.z.string()}),c=t.z.union([s,n,r,o,i,d]);e.LocalValueSchema=t.z.lazy((()=>t.z.union([c,p,m,g,f,v,y])));const u=t.z.union([e.RemoteReferenceSchema,e.LocalValueSchema]),l=t.z.array(u),p=t.z.lazy((()=>t.z.object({type:t.z.literal("array"),value:l}))),m=t.z.object({type:t.z.literal("date"),value:t.z.string().min(1)}),h=t.z.lazy((()=>t.z.tuple([t.z.union([t.z.string(),u]),u]))),g=t.z.object({type:t.z.literal("map"),value:t.z.array(h)}),f=t.z.object({type:t.z.literal("object"),value:t.z.array(h)}),v=t.z.lazy((()=>t.z.object({type:t.z.literal("regexp"),value:t.z.object({pattern:t.z.string(),flags:t.z.string().optional()})}))),y=t.z.lazy((()=>t.z.object({type:t.z.literal("set"),value:l})));e.BrowsingContextSchema=t.z.string()}(a=e.CommonDataTypes||(e.CommonDataTypes={})),function(e){const s=t.z.enum(["window","dedicated-worker","shared-worker","service-worker","worker","paint-worklet","audio-worklet","worklet"]);e.GetRealmsParametersSchema=t.z.object({context:a.BrowsingContextSchema.optional(),type:s.optional()}),e.parseGetRealmsParams=function(t){return r(t,e.GetRealmsParametersSchema)};const n=t.z.object({context:a.BrowsingContextSchema,sandbox:t.z.string().optional()}),o=t.z.object({realm:t.z.string().min(1)}),i=t.z.union([o,n]),d=t.z.enum(["root","none"]),c=t.z.object({expression:t.z.string(),awaitPromise:t.z.boolean(),target:i,resultOwnership:d.optional()});e.parseEvaluateParams=function(e){return r(e,c)};const u=t.z.object({target:i,handles:t.z.array(t.z.string())});e.parseDisownParams=function(e){return r(e,u)};const l=t.z.union([a.RemoteReferenceSchema,a.LocalValueSchema]),p=t.z.object({functionDeclaration:t.z.string(),target:i,arguments:t.z.array(l).optional(),this:l.optional(),awaitPromise:t.z.boolean(),resultOwnership:d.optional()});e.parseCallFunctionParams=function(e){return r(e,p)}}(e.Script||(e.Script={})),function(e){const s=t.z.object({maxDepth:t.z.number().int().nonnegative().max(9007199254740991).optional(),root:a.BrowsingContextSchema.optional()});e.parseGetTreeParams=function(e){return r(e,s)};const n=t.z.enum(["none","interactive","complete"]),o=t.z.object({context:a.BrowsingContextSchema,url:t.z.string().url(),wait:n.optional()});e.parseNavigateParams=function(e){return r(e,o)};const i=t.z.object({type:t.z.enum(["tab","window"]),referenceContext:a.BrowsingContextSchema.optional()});e.parseCreateParams=function(e){return r(e,i)};const d=t.z.object({context:a.BrowsingContextSchema});var c;e.parseCloseParams=function(e){return r(e,d)},e.AllEvents="browsingContext",(c=e.EventNames||(e.EventNames={})).LoadEvent="browsingContext.load",c.DomContentLoadedEvent="browsingContext.domContentLoaded",c.ContextCreatedEvent="browsingContext.contextCreated",c.ContextDestroyedEvent="browsingContext.contextDestroyed"}(o=e.BrowsingContext||(e.BrowsingContext={})),function(e){e.AllEvents="log",(e.EventNames||(e.EventNames={})).LogEntryAddedEvent="log.entryAdded"}(i=e.Log||(e.Log={})),function(e){const s=t.z.object({cdpMethod:t.z.string(),cdpParams:t.z.object({}).passthrough(),cdpSession:t.z.string().optional()});e.parseSendCommandParams=function(e){return r(e,s)};const n=t.z.object({context:a.BrowsingContextSchema});e.parseGetSessionParams=function(e){return r(e,n)},e.AllEvents="cdp",(e.EventNames||(e.EventNames={})).EventReceivedEvent="cdp.eventReceived"}(d=e.CDP||(e.CDP={})),function(e){const s=t.z.enum([o.AllEvents,o.EventNames.ContextCreatedEvent,o.EventNames.ContextDestroyedEvent,o.EventNames.DomContentLoadedEvent,o.EventNames.LoadEvent,i.AllEvents,i.EventNames.LogEntryAddedEvent,d.AllEvents,d.EventNames.EventReceivedEvent]),n=t.z.object({events:t.z.array(s),contexts:t.z.array(a.BrowsingContextSchema).optional()});e.parseSubscribeParams=function(e){return r(e,n)}}(e.Session||(e.Session={}))}(Ne);
+!function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t={},s={},n={},r={},a=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.EventEmitter=void 0;const o=a((function(e){return{all:e=e||new Map,on:function(t,s){var n=e.get(t);n?n.push(s):e.set(t,[s])},off:function(t,s){var n=e.get(t);n&&(s?n.splice(n.indexOf(s)>>>0,1):e.set(t,[]))},emit:function(t,s){var n=e.get(t);n&&n.slice().map((function(e){e(s)})),(n=e.get("*"))&&n.slice().map((function(e){e(t,s)}))}}}));r.EventEmitter=class{#e=(0,o.default)();on(e,t){return this.#e.on(e,t),this}once(e,t){const s=n=>{t(n),this.off(e,s)};return this.on(e,s)}off(e,t){return this.#e.off(e,t),this}emit(e,t){this.#e.emit(e,t)}},Object.defineProperty(n,"__esModule",{value:!0}),n.createClient=n.CdpClient=void 0;const i=r;class d extends i.EventEmitter{_cdpConnection;_sessionId;constructor(e,t){super(),this._cdpConnection=e,this._sessionId=t}sendCommand(e,...t){const s=t[0];return this._cdpConnection.sendCommand(e,s,this._sessionId)}}n.CdpClient=d,n.createClient=function(e,t){return new d(e,t)};var c={};Object.defineProperty(c,"__esModule",{value:!0}),c.CdpConnection=void 0;const u=n;c.CdpConnection=class{#t;#s;#n=new Map;#r=new Map;#a;#o=0;constructor(e,t=(()=>{})){this.#t=e,this.#a=t,this.#t.setOnMessage(this._onMessage),this.#s=(0,u.createClient)(this,null)}close(){this.#t.close();for(const[e,{reject:t}]of this.#r)t(new Error("Disconnected"));this.#r.clear(),this.#n.clear()}browserClient(){return this.#s}getCdpClient(e){const t=this.#n.get(e);if(!t)throw new Error("Unknown CDP session ID");return t}sendCommand(e,t,s){return new Promise(((n,r)=>{const a=this.#o++;this.#r.set(a,{resolve:n,reject:r});const o={id:a,method:e,params:t};s&&(o.sessionId=s);const i=JSON.stringify(o);this.#t.sendMessage(i),this.#a("sent > "+i)}))}_onMessage=async e=>{this.#a("received < "+e);const t=JSON.parse(e);if("Target.attachedToTarget"===t.method){const{sessionId:e}=t.params;this.#n.set(e,(0,u.createClient)(this,e))}else if("Target.detachedFromTarget"===t.method){const{sessionId:e}=t.params;this.#n.get(e)&&this.#n.delete(e)}if(void 0!==t.id){const e=this.#r.get(t.id);e&&(t.result?e.resolve(t.result):t.error&&e.reject(t.error))}else if(t.method){const e=t.sessionId?this.#n.get(t.sessionId):this.#s;e&&e.emit(t.method,t.params||{})}}};var l={};Object.defineProperty(l,"__esModule",{value:!0}),l.WebSocketTransport=void 0;l.WebSocketTransport=class{_ws;_onMessage=null;constructor(e){this._ws=e,this._ws.on("message",(e=>{this._onMessage&&this._onMessage.call(null,e)}))}setOnMessage(e){this._onMessage=e}async sendMessage(e){this._ws.send(e)}close(){this._onMessage=null,this._ws.close()}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WebSocketTransport=e.CdpConnection=e.CdpClient=void 0;var t=n;Object.defineProperty(e,"CdpClient",{enumerable:!0,get:function(){return t.CdpClient}});var s=c;Object.defineProperty(e,"CdpConnection",{enumerable:!0,get:function(){return s.CdpConnection}});var r=l;Object.defineProperty(e,"WebSocketTransport",{enumerable:!0,get:function(){return r.WebSocketTransport}})}(s);var p,h,m={},g={},f={};p=f,Object.defineProperty(p,"__esModule",{value:!0}),p.log=p.LogType=void 0,(h=p.LogType||(p.LogType={})).system="System",h.bidi="BiDi Messages",h.browsingContexts="Browsing Contexts",h.cdp="CDP",h.commandParser="Command parser",p.log=function(e){return(...t)=>{console.log(e,...t),"MapperTabPage"in globalThis&&globalThis.MapperTabPage.log(e,...t)}},Object.defineProperty(g,"__esModule",{value:!0}),g.ProcessingQueue=void 0;const v=(0,f.log)(f.LogType.system);g.ProcessingQueue=class{#i=[];#d;#c;#u=!1;constructor(e,t=(()=>Promise.resolve())){this.#c=t,this.#d=e}add(e){this.#i.push(e),this.#l()}async#l(){if(!this.#u){for(this.#u=!0;this.#i.length>0;){const e=this.#i.shift();void 0!==e&&await e.then((e=>this.#d(e))).catch((e=>{v("Event was not processed:"+e),this.#c(e)})).finally()}this.#u=!1}}};var y={},x={};Object.defineProperty(x,"__esModule",{value:!0}),x.OutgoingBidiMessage=void 0;class C{#p;#h;constructor(e,t){this.#p=e,this.#h=t}static async createFromPromise(e,t){const s=await e;return new C(s,t)}static createResolved(e,t){return Promise.resolve(new C(e,t))}get message(){return this.#p}get channel(){return this.#h}}x.OutgoingBidiMessage=C;var b={},w={};!function(e){var t,s,n,r;Object.defineProperty(e,"__esModule",{value:!0}),e.CDP=e.Log=e.BrowsingContext=e.Message=void 0,function(e){class t{constructor(e,t,s){this.error=e,this.message=t,this.stacktrace=s}error;message;stacktrace;toErrorResponse(e){return{id:e,error:this.error,message:this.message,stacktrace:this.stacktrace}}}e.ErrorResponseClass=t;e.UnknownException=class extends t{constructor(e,t){super("unknown error",e,t)}};e.UnknownCommandException=class extends t{constructor(e,t){super("unknown command",e,t)}};e.InvalidArgumentException=class extends t{constructor(e,t){super("invalid argument",e,t)}};e.NoSuchNodeException=class extends t{constructor(e,t){super("no such node",e,t)}};e.NoSuchFrameException=class extends t{constructor(e){super("no such frame",e)}}}(e.Message||(e.Message={})),t=e.BrowsingContext||(e.BrowsingContext={}),(s=t.EventNames||(t.EventNames={})).LoadEvent="browsingContext.load",s.DomContentLoadedEvent="browsingContext.domContentLoaded",s.ContextCreatedEvent="browsingContext.contextCreated",s.ContextDestroyedEvent="browsingContext.contextDestroyed",t.AllEvents="browsingContext",(n=e.Log||(e.Log={})).AllEvents="log",function(e){e.LogEntryAddedEvent="log.entryAdded"}(n.EventNames||(n.EventNames={})),(r=e.CDP||(e.CDP={})).AllEvents="cdp",function(e){e.EventReceivedEvent="cdp.eventReceived"}(r.EventNames||(r.EventNames={}))}(w);var _={};Object.defineProperty(_,"__esModule",{value:!0}),_.BrowsingContextStorage=void 0;const I=w;class T{static#m=new Map;static getTopLevelContexts(){return Array.from(T.#m.values()).filter((e=>null===e.parentId))}static removeContext(e){T.#m.delete(e)}static addContext(e){T.#m.set(e.contextId,e),null!==e.parentId&&T.getKnownContext(e.parentId).addChild(e)}static hasKnownContext(e){return T.#m.has(e)}static findContext(e){return T.#m.get(e)}static getKnownContext(e){const t=T.findContext(e);if(void 0===t)throw new I.Message.NoSuchFrameException(`Context ${e} not found`);return t}}_.BrowsingContextStorage=T,Object.defineProperty(b,"__esModule",{value:!0}),b.SubscriptionManager=void 0;const P=w,E=_;class Z{#g=0;#f=new Map;getChannelsSubscribedToEvent(e,t){return Array.from(this.#f.keys()).map((s=>({priority:this.#v(e,t,s),channel:s}))).filter((({priority:e})=>null!==e)).sort(((e,t)=>e.priority-t.priority)).map((({channel:e})=>e))}#v(e,t,s){const n=this.#f.get(s);if(void 0===n)return null;let r=Z.#y(t).map((t=>n.get(t)?.get(e))).filter((e=>void 0!==e));return 0===r.length?null:Math.min(...r)}static#y(e){const t=[null];for(;null!==e;){t.push(e);e=E.BrowsingContextStorage.findContext(e)?.parentId??null}return t}subscribe(e,t,s){if(e===P.BrowsingContext.AllEvents)return void Object.values(P.BrowsingContext.EventNames).map((e=>this.subscribe(e,t,s)));if(e===P.CDP.AllEvents)return void Object.values(P.CDP.EventNames).map((e=>this.subscribe(e,t,s)));if(e===P.Log.AllEvents)return void Object.values(P.Log.EventNames).map((e=>this.subscribe(e,t,s)));this.#f.has(s)||this.#f.set(s,new Map);const n=this.#f.get(s);n.has(t)||n.set(t,new Map);const r=n.get(t);r.has(e)||r.set(e,this.#g++)}unsubscribe(e,t,s){if(e===P.BrowsingContext.AllEvents)return void Object.values(P.BrowsingContext.EventNames).map((e=>this.unsubscribe(e,t,s)));if(e===P.CDP.AllEvents)return void Object.values(P.CDP.EventNames).map((e=>this.unsubscribe(e,t,s)));if(e===P.Log.AllEvents)return void Object.values(P.Log.EventNames).map((e=>this.unsubscribe(e,t,s)));if(!this.#f.has(s))return;const n=this.#f.get(s);if(!n.has(t))return;const r=n.get(t);r.delete(e),0===r.size&&n.delete(e),0===n.size&&this.#f.delete(s)}}b.SubscriptionManager=Z;var S={};Object.defineProperty(S,"__esModule",{value:!0}),S.IdWrapper=void 0;class N{static#x=0;#C;constructor(){this.#C=++N.#x}get id(){return this.#C}}S.IdWrapper=N;var O={};Object.defineProperty(O,"__esModule",{value:!0}),O.Buffer=void 0;O.Buffer=class{#b;#w=[];#_;constructor(e,t=(()=>{})){this.#b=e,this.#_=t}get(){return this.#w}add(e){for(this.#w.push(e);this.#w.length>this.#b;){const e=this.#w.shift();void 0!==e&&this.#_(e)}}},Object.defineProperty(y,"__esModule",{value:!0}),y.EventManager=void 0;const M=x,D=b,j=S,k=O,A=_;class L extends j.IdWrapper{#I;#T;constructor(e,t){super(),this.#I=t,this.#T=e}get contextId(){return this.#I}get event(){return this.#T}}class z{static#P=new Map([["log.entryAdded",100]]);#E=new Map;#Z=new Map;#S=new Map;#N;#O;constructor(e){this.#O=e,this.#N=new D.SubscriptionManager}static#M(e,t,s){return JSON.stringify({eventName:e,browsingContext:t,channel:s})}async registerEvent(e,t){await this.registerPromiseEvent(Promise.resolve(e),t,e.method)}async registerPromiseEvent(e,t,s){const n=new L(e,t),r=this.#N.getChannelsSubscribedToEvent(s,t);this.#D(n,s);for(const t of r)this.#O.emitOutgoingMessage(M.OutgoingBidiMessage.createFromPromise(e,t)),this.#j(n,t,s)}async subscribe(e,t,s){for(let n of e)for(let e of t)if(null===e||A.BrowsingContextStorage.hasKnownContext(e)){this.#N.subscribe(n,e,s);for(let t of this.#k(n,e,s))this.#O.emitOutgoingMessage(M.OutgoingBidiMessage.createFromPromise(t.event,s)),this.#j(t,s,n)}}async unsubscribe(e,t,s){for(let n of e)for(let e of t)this.#N.unsubscribe(n,e,s)}#D(e,t){if(!z.#P.has(t))return;const s=z.#M(t,e.contextId);this.#Z.has(s)||this.#Z.set(s,new k.Buffer(z.#P.get(t))),this.#Z.get(s).add(e),this.#E.has(t)||this.#E.set(t,new Set),this.#E.get(t).add(e.contextId)}#j(e,t,s){if(!z.#P.has(s))return;const n=z.#M(s,e.contextId,t);this.#S.set(n,Math.max(this.#S.get(n)??0,e.id))}#k(e,t,s){const n=z.#M(e,t),r=z.#M(e,t,s),a=this.#S.get(r)??-1/0,o=this.#Z.get(n)?.get().filter((e=>e.id>a))??[];return null===t&&Array.from(this.#E.get(e)?.keys()??[]).filter((e=>null!==e)).map((t=>this.#k(e,t,s))).forEach((e=>o.push(...e))),o.sort(((e,t)=>e.id-t.id))}}y.EventManager=z;var R={},B={},V={},U={};Object.defineProperty(U,"__esModule",{value:!0}),U.Deferred=void 0;class F{#A=()=>{};#L=()=>{};#z;#R=!1;get isFinished(){return this.#R}constructor(){this.#z=new Promise(((e,t)=>{this.#A=e,this.#L=t}))}then(e,t){return this.#z.then(e,t)}catch(e){return this.#z.catch(e)}resolve(e){this.#R=!0,this.#A(e)}reject(e){this.#R=!0,this.#L(e)}finally(e){return this.#z.finally(e)}[Symbol.toStringTag]="Promise"}U.Deferred=F;var K={},$={};Object.defineProperty($,"__esModule",{value:!0}),$.getRemoteValuesText=$.logMessageFormatter=void 0;const J=["%s","%d","%i","%f","%o","%O","%c"];function W(e){return J.some((t=>e.includes(t)))}function G(e){let t="";const s=e[0].value.toString(),n=e.slice(1,void 0),r=s.split(new RegExp(J.map((e=>"("+e+")")).join("|"),"g"));for(const s of r)if(void 0!==s&&""!=s)if(W(s)){const r=n.shift();if(void 0===r)throw new Error('Less value is provided: "'+Q(e,!1)+'"');"%s"===s?t+=q(r):"%d"===s||"%i"===s?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseInt(r.value.toString(),10):t+="NaN":"%f"===s?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseFloat(r.value.toString()):t+="NaN":t+=H(r)}else t+=s;if(n.length>0)throw new Error('More value is provided: "'+Q(e,!1)+'"');return t}function H(e){if("array"!==e.type&&"bigint"!==e.type&&"date"!==e.type&&"number"!==e.type&&"object"!==e.type&&"string"!==e.type)return q(e);if("bigint"===e.type)return e.value.toString()+"n";if("number"===e.type)return e.value.toString();if(["date","string"].includes(e.type))return JSON.stringify(e.value);if("object"===e.type)return"{"+e.value.map((e=>`${JSON.stringify(e[0])}:${H(e[1])}`)).join(",")+"}";if("array"===e.type)return"["+e.value.map((e=>H(e))).join(",")+"]";throw Error("Invalid value type: "+e.toString())}function q(e){if(!e.hasOwnProperty("value"))return e.type;switch(e.type){case"string":case"number":case"boolean":case"bigint":return String(e.value);case"regexp":return`/${e.value.pattern}/${e.value.flags}`;case"date":return new Date(e.value).toString();case"object":return`Object(${e.value?.length})`;case"array":return`Array(${e.value?.length})`;case"map":return`Map(${e.value.length})`;case"set":return`Set(${e.value.length})`;case"node":return"node";default:return e.type}}function Q(e,t){const s=e[0];return s?"string"===s.type&&W(s.value.toString())&&t?G(e):e.map((e=>q(e))).join(" "):""}$.logMessageFormatter=G,$.getRemoteValuesText=Q;var Y={},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.ScriptEvaluator=void 0;const ee=w;class te{static#B=0;static#V=1;static#U="_element_";static#F=new Map;static async serializeCdpObject(e,t,s){const n=this.#K(e),r=await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>e)),awaitPromise:!1,arguments:[n],generateWebDriverValue:!0,executionContextId:s.executionContextId});return await this.#$(r,s,t)}static#K(e){return void 0!==e.objectId?{objectId:e.objectId}:void 0!==e.unserializableValue?{unserializableValue:e.unserializableValue}:{value:e.value}}static async stringifyObject(e,t){return(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(e){return String(e)})),awaitPromise:!1,arguments:[e],returnByValue:!0,executionContextId:t.executionContextId})).result.value}static async callFunction(e,t,s,n,r,a){const o=`(...args)=>{ return _callFunction((\n${t}\n), args);\n      function _callFunction(f, args) {\n        const deserializedThis = args.shift();\n        const deserializedArgs = args;\n        return f.apply(deserializedThis, deserializedArgs);\n      }}`,i=[await this.#J(s,e)];let d;i.push(...await Promise.all(n.map((async t=>await this.#J(t,e)))));try{d=await e.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:o,awaitPromise:r,arguments:i,generateWebDriverValue:!0,executionContextId:e.executionContextId})}catch(e){if(-32e3===e.code&&["Could not find object with given id","Argument should belong to the same JavaScript world as target object"].includes(e.message))throw new ee.Message.InvalidArgumentException("Handle was not found.");throw e}return d.exceptionDetails?{exceptionDetails:await this.#W(d.exceptionDetails,this.#V,a,e),type:"exception",realm:e.realmId}:{type:"success",result:await te.#$(d,e,a),realm:e.realmId}}static realmDestroyed(e){return Array.from(this.#F.entries()).filter((([,t])=>t===e.realmId)).map((([e])=>this.#F.delete(e)))}static async disown(e,t){if(te.#F.get(t)===e.realmId){try{await e.cdpClient.sendCommand("Runtime.releaseObject",{objectId:t})}catch(e){if(-32e3!==e.code||"Invalid remote object id"!==e.message)throw e}this.#F.delete(t)}}static async#W(e,t,s,n){const r=e.stackTrace?.callFrames.map((e=>({url:e.url,functionName:e.functionName,lineNumber:e.lineNumber-t,columnNumber:e.columnNumber}))),a=await this.serializeCdpObject(e.exception,s,n),o=await this.stringifyObject(e.exception,n);return{exception:a,columnNumber:e.columnNumber,lineNumber:e.lineNumber-t,stackTrace:{callFrames:r||[]},text:o||e.text}}static async#$(e,t,s){const n=e.result.webDriverValue,r=this.webDriverValueToBiDi(n,t);if(e.result.objectId){const n=e.result.objectId;"root"===s?(r.handle=n,this.#F.set(n,t.realmId)):t.cdpClient.sendCommand("Runtime.releaseObject",{objectId:n})}return r}static webDriverValueToBiDi(e,t){const s=e,n=s.value;if(void 0===n)return s;if("node"==s.type&&(n.hasOwnProperty("backendNodeId")&&(n.sharedId=`${t.navigableId}${te.#U}${n.backendNodeId}`,delete n.backendNodeId),n.hasOwnProperty("children")))for(const e in n.children)n.children[e]=this.webDriverValueToBiDi(n.children[e],t);if(["array","set"].includes(e.type))for(const e in n)n[e]=this.webDriverValueToBiDi(n[e],t);if(["object","map"].includes(e.type))for(const e in n)n[e]=[this.webDriverValueToBiDi(n[e][0],t),this.webDriverValueToBiDi(n[e][1],t)];return s}static async scriptEvaluate(e,t,s,n){let r=await e.cdpClient.sendCommand("Runtime.evaluate",{contextId:e.executionContextId,expression:t,awaitPromise:s,generateWebDriverValue:!0});return r.exceptionDetails?{exceptionDetails:await this.#W(r.exceptionDetails,this.#B,n,e),type:"exception",realm:e.realmId}:{type:"success",result:await te.#$(r,e,n),realm:e.realmId}}static async#J(e,t){if("sharedId"in e){const[s,n]=e.sharedId.split(te.#U),r=parseInt(n??"");if(isNaN(r)||void 0===r||void 0===s)throw new ee.Message.InvalidArgumentException(`SharedId "${e.sharedId}" should have format "{navigableId}${te.#U}{backendNodeId}".`);if(t.navigableId!==s)throw new ee.Message.NoSuchNodeException(`SharedId "${e.sharedId}" belongs to different document.`);try{return{objectId:(await t.cdpClient.sendCommand("DOM.resolveNode",{backendNodeId:r,executionContextId:t.executionContextId})).object.objectId}}catch(t){if(-32e3===t.code&&"No node with given id found"===t.message)throw new ee.Message.NoSuchNodeException(`SharedId "${e.sharedId}" was not found.`);throw t}}if("handle"in e)return{objectId:e.handle};switch(e.type){case"undefined":return{unserializableValue:"undefined"};case"null":return{unserializableValue:"null"};case"string":return{value:e.value};case"number":return"NaN"===e.value?{unserializableValue:"NaN"}:"-0"===e.value?{unserializableValue:"-0"}:"+Infinity"===e.value?{unserializableValue:"+Infinity"}:"Infinity"===e.value?{unserializableValue:"Infinity"}:"-Infinity"===e.value?{unserializableValue:"-Infinity"}:{value:e.value};case"boolean":return{value:!!e.value};case"bigint":return{unserializableValue:`BigInt(${JSON.stringify(e.value)})`};case"date":return{unserializableValue:`new Date(Date.parse(${JSON.stringify(e.value)}))`};case"regexp":return{unserializableValue:`new RegExp(${JSON.stringify(e.value.pattern)}, ${JSON.stringify(e.value.flags)})`};case"map":{const s=await this.#G(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){const t=new Map;for(let s=0;s<e.length;s+=2)t.set(e[s],e[s+1]);return t})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}case"object":{const s=await this.#G(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){const t={};for(let s=0;s<e.length;s+=2){t[e[s]]=e[s+1]}return t})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}case"array":{const s=await te.#H(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){return e})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}case"set":{const s=await this.#H(e.value,t);return{objectId:(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((function(...e){return new Set(e)})),awaitPromise:!1,arguments:s,returnByValue:!1,executionContextId:t.executionContextId})).result.objectId}}default:throw new Error(`Value ${JSON.stringify(e)} is not deserializable.`)}}static async#G(e,t){const s=[];for(let n of e){const e=n[0],r=n[1];let a,o;a="string"==typeof e?{value:e}:await this.#J(e,t),o=await this.#J(r,t),s.push(a),s.push(o)}return s}static async#H(e,t){const s=[];for(let n of e)s.push(await this.#J(n,t));return s}}X.ScriptEvaluator=te,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Realm=e.RealmType=void 0;const t=w,s=X,n=_;(e.RealmType||(e.RealmType={})).window="window";class r{static#q=new Map;static create(e,t,s,n,a,o,i,d,c){const u=new r(e,t,s,n,a,o,i,d,c);return r.#q.set(u.realmId,u),u}static findRealms(e={}){return Array.from(r.#q.values()).filter((t=>(void 0===e.realmId||e.realmId===t.realmId)&&((void 0===e.navigableId||e.navigableId===t.navigableId)&&((void 0===e.browsingContextId||e.browsingContextId===t.browsingContextId)&&((void 0===e.executionContextId||e.executionContextId===t.executionContextId)&&((void 0===e.type||e.type===t.type)&&((void 0===e.sandbox||e.sandbox===t.#Q)&&(void 0===e.cdpSessionId||e.cdpSessionId===t.#Y))))))))}static findRealm(e){const t=r.findRealms(e);if(1===t.length)return t[0]}static getRealm(e){const s=r.findRealm(e);if(void 0===s)throw new t.Message.NoSuchFrameException(`Realm ${JSON.stringify(e)} not found`);return s}static clearBrowsingContext(e){r.findRealms({browsingContextId:e}).map((e=>e.delete()))}delete(){r.#q.delete(this.realmId),s.ScriptEvaluator.realmDestroyed(this)}#X;#ee;#te;#se;#ne;#re;#Q;#Y;#ae;constructor(e,t,s,n,r,a,o,i,d){this.#X=e,this.#ee=t,this.#te=s,this.#se=n,this.#Q=o,this.#ne=r,this.#re=a,this.#Y=i,this.#ae=d}toBiDi(){return{realm:this.realmId,origin:this.origin,type:this.type,context:this.browsingContextId,...void 0!==this.#Q?{sandbox:this.#Q}:{}}}get realmId(){return this.#X}get navigableId(){return this.#te}get browsingContextId(){return this.#ee}get executionContextId(){return this.#se}get origin(){return this.#ne}get type(){return this.#re}get cdpClient(){return this.#ae}async callFunction(e,t,r,a,o){const i=n.BrowsingContextStorage.getKnownContext(this.browsingContextId);return await i.awaitUnblocked(),{result:await s.ScriptEvaluator.callFunction(this,e,t,r,a,o)}}async scriptEvaluate(e,t,r){const a=n.BrowsingContextStorage.getKnownContext(this.browsingContextId);return await a.awaitUnblocked(),{result:await s.ScriptEvaluator.scriptEvaluate(this,e,t,r)}}async disown(e){await s.ScriptEvaluator.disown(this,e)}async serializeCdpObject(e,t){return await s.ScriptEvaluator.serializeCdpObject(e,t,this)}async stringifyObject(e){return s.ScriptEvaluator.stringifyObject(e,this)}}e.Realm=r}(Y),Object.defineProperty(K,"__esModule",{value:!0}),K.LogManager=void 0;const se=w,ne=$,re=Y;class ae{#ae;#Y;#oe;constructor(e,t,s){this.#Y=t,this.#ae=e,this.#oe=s}static create(e,t,s){const n=new ae(e,t,s);return n.#ie(),n}#ie(){this.#de()}#de(){this.#ce()}#ce(){this.#ae.on("Runtime.consoleAPICalled",(e=>{const t=re.Realm.findRealm({cdpSessionId:this.#Y,executionContextId:e.executionContextId}),s=void 0===t?Promise.resolve(e.args):Promise.all(e.args.map((async e=>t.serializeCdpObject(e,"none"))));this.#oe.registerPromiseEvent(s.then((s=>({method:se.Log.EventNames.LogEntryAddedEvent,params:{level:ae.#ue(e.type),source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:(0,ne.getRemoteValuesText)(s,!0),timestamp:Math.round(e.timestamp),stackTrace:ae.#le(e.stackTrace),type:"console",method:"warning"===e.type?"warn":e.type,args:s}}))),t?.browsingContextId??"UNKNOWN",se.Log.EventNames.LogEntryAddedEvent)})),this.#ae.on("Runtime.exceptionThrown",(e=>{const t=re.Realm.findRealm({cdpSessionId:this.#Y,executionContextId:e.exceptionDetails.executionContextId}),s=(async()=>e.exceptionDetails.exception?void 0===t?JSON.stringify(e.exceptionDetails.exception):await t.stringifyObject(e.exceptionDetails.exception):e.exceptionDetails.text)();this.#oe.registerPromiseEvent(s.then((s=>({method:se.Log.EventNames.LogEntryAddedEvent,params:{level:"error",source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:s,timestamp:Math.round(e.timestamp),stackTrace:ae.#le(e.exceptionDetails.stackTrace),type:"javascript"}}))),t?.browsingContextId??"UNKNOWN",se.Log.EventNames.LogEntryAddedEvent)}))}static#ue(e){return["assert","error"].includes(e)?"error":["debug","trace"].includes(e)?"debug":["warn","warning"].includes(e)?"warn":"info"}static#le(e){const t=e?.callFrames.map((e=>({columnNumber:e.columnNumber,functionName:e.functionName,lineNumber:e.lineNumber,url:e.url})));return t?{callFrames:t}:void 0}}K.LogManager=ae,Object.defineProperty(V,"__esModule",{value:!0}),V.BrowsingContextImpl=void 0;const oe=w,ie=U,de=K,ce=Y,ue=_;class le{#pe={documentInitialized:new ie.Deferred,targetUnblocked:new ie.Deferred,Page:{navigatedWithinDocument:new ie.Deferred,lifecycleEvent:{DOMContentLoaded:new ie.Deferred,load:new ie.Deferred}}};#I;#he;#me;#oe;#ge=new Map;#fe="about:blank";#ve=null;#Y;#ae;#ye;get#xe(){if(void 0===this.#ye)throw new Error(`No default realm for browsing context ${this.#I}`);return this.#ye}constructor(e,t,s,n,r,a){this.#I=e,this.#he=t,this.#ae=s,this.#me=r,this.#oe=a,this.#Y=n,this.#Ce(),ue.BrowsingContextStorage.addContext(this)}static async createFrameContext(e,t,s,n,r){const a=new le(e,t,s,n,null,r);a.#pe.targetUnblocked.resolve(),await r.registerEvent({method:oe.BrowsingContext.EventNames.ContextCreatedEvent,params:a.serializeToBidiValue()},a.contextId)}static async createTargetContext(e,t,s,n,r,a){const o=new le(e,t,s,n,r,a);o.#be(),await a.registerEvent({method:oe.BrowsingContext.EventNames.ContextCreatedEvent,params:o.serializeToBidiValue()},o.contextId)}get cdpBrowserContextId(){return this.#me}get navigableId(){return this.#ve}convertFrameToTargetContext(e,t){this.#we(e,t),this.#be()}async delete(){if(await this.#_e(),ce.Realm.findRealms({browsingContextId:this.contextId}).forEach((e=>e.delete())),null!==this.parentId){ue.BrowsingContextStorage.getKnownContext(this.parentId).#ge.delete(this.contextId)}await this.#oe.registerEvent({method:oe.BrowsingContext.EventNames.ContextDestroyedEvent,params:this.serializeToBidiValue()},this.contextId),ue.BrowsingContextStorage.removeContext(this.contextId)}async#_e(){await Promise.all(this.children.map((e=>e.delete())))}#we(e,t){this.#pe.targetUnblocked.isFinished||this.#pe.targetUnblocked.reject("OOPiF"),this.#pe.targetUnblocked=new ie.Deferred,this.#ae=e,this.#Y=t,this.#Ce()}async#be(){de.LogManager.create(this.#ae,this.#Y,this.#oe),await this.#ae.sendCommand("Runtime.enable"),await this.#ae.sendCommand("Page.enable"),await this.#ae.sendCommand("Page.setLifecycleEventsEnabled",{enabled:!0}),await this.#ae.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await this.#ae.sendCommand("Runtime.runIfWaitingForDebugger"),this.#pe.targetUnblocked.resolve()}get contextId(){return this.#I}get parentId(){return this.#he}get cdpSessionId(){return this.#Y}get children(){return Array.from(this.#ge.values())}get url(){return this.#fe}addChild(e){this.#ge.set(e.contextId,e)}async awaitLoaded(){await this.#pe.Page.lifecycleEvent.load}async awaitUnblocked(){await this.#pe.targetUnblocked}serializeToBidiValue(e=0,t=!0){return{context:this.#I,url:this.url,children:e>0?this.children.map((t=>t.serializeToBidiValue(e-1,!1))):null,...t?{parent:this.#he}:{}}}#Ce(){this.#ae.on("Target.targetInfoChanged",(e=>{this.contextId===e.targetInfo.targetId&&(this.#fe=e.targetInfo.url)})),this.#ae.on("Page.frameNavigated",(async e=>{this.contextId===e.frame.id&&(this.#fe=e.frame.url+(e.frame.urlFragment??""),await this.#_e(),ce.Realm.clearBrowsingContext(this.contextId))})),this.#ae.on("Page.navigatedWithinDocument",(e=>{this.contextId===e.frameId&&(this.#fe=e.url,this.#pe.Page.navigatedWithinDocument.resolve(e))})),this.#ae.on("Page.lifecycleEvent",(async e=>{if(this.contextId===e.frameId)if("init"===e.name&&(this.#Ie(e.loaderId),this.#pe.documentInitialized.resolve()),"commit"!==e.name){if(e.loaderId===this.#ve)switch(e.name){case"DOMContentLoaded":this.#pe.Page.lifecycleEvent.DOMContentLoaded.resolve(e),await this.#oe.registerEvent({method:oe.BrowsingContext.EventNames.DomContentLoadedEvent,params:{context:this.contextId,navigation:this.#ve,url:this.#fe}},this.contextId);break;case"load":this.#pe.Page.lifecycleEvent.load.resolve(e),await this.#oe.registerEvent({method:oe.BrowsingContext.EventNames.LoadEvent,params:{context:this.contextId,navigation:this.#ve,url:this.#fe}},this.contextId)}}else this.#ve=e.loaderId})),this.#ae.on("Runtime.executionContextCreated",(e=>{if(e.context.auxData.frameId!==this.contextId)return;if(!["default","isolated"].includes(e.context.auxData.type))return;const t=ce.Realm.create(e.context.uniqueId,this.contextId,this.navigableId??"UNKNOWN",e.context.id,this.#Te(e),ce.RealmType.window,"isolated"===e.context.auxData.type?e.context.name:void 0,this.#Y,this.#ae);e.context.auxData.isDefault&&(this.#ye=t)})),this.#ae.on("Runtime.executionContextDestroyed",(e=>{ce.Realm.findRealms({cdpSessionId:this.#Y,executionContextId:e.executionContextId}).map((e=>e.delete()))}))}#Te(e){return"isolated"===e.context.auxData.type?this.#xe.origin:["://",""].includes(e.context.origin)?"null":e.context.origin}#Ie(e){this.#ve!==e&&(this.#pe.documentInitialized.isFinished||this.#pe.documentInitialized.reject("Document changed"),this.#pe.documentInitialized=new ie.Deferred,this.#pe.Page.navigatedWithinDocument.isFinished||this.#pe.Page.navigatedWithinDocument.reject("Document changed"),this.#pe.Page.navigatedWithinDocument=new ie.Deferred,this.#pe.Page.lifecycleEvent.DOMContentLoaded.isFinished||this.#pe.Page.lifecycleEvent.DOMContentLoaded.reject("Document changed"),this.#pe.Page.lifecycleEvent.DOMContentLoaded=new ie.Deferred,this.#pe.Page.lifecycleEvent.load.isFinished||this.#pe.Page.lifecycleEvent.load.reject("Document changed"),this.#pe.Page.lifecycleEvent.load=new ie.Deferred,this.#ve=e)}async navigate(e,t){await this.#pe.targetUnblocked;const s=await this.#ae.sendCommand("Page.navigate",{url:e,frameId:this.contextId});if(s.errorText)throw new oe.Message.UnknownException(s.errorText);switch(void 0!==s.loaderId&&s.loaderId!==this.#ve&&this.#Ie(s.loaderId),t){case"none":break;case"interactive":void 0===s.loaderId?await this.#pe.Page.navigatedWithinDocument:await this.#pe.Page.lifecycleEvent.DOMContentLoaded;break;case"complete":void 0===s.loaderId?await this.#pe.Page.navigatedWithinDocument:await this.#pe.Page.lifecycleEvent.load;break;default:throw new Error(`Not implemented wait '${t}'`)}return{result:{navigation:s.loaderId||null,url:e}}}async getOrCreateSandbox(e){if(void 0===e||""===e)return this.#xe;let t=ce.Realm.findRealms({browsingContextId:this.contextId,sandbox:e});if(0==t.length&&(await this.#ae.sendCommand("Page.createIsolatedWorld",{frameId:this.contextId,worldName:e}),t=ce.Realm.findRealms({browsingContextId:this.contextId,sandbox:e})),1!==t.length)throw Error(`Sandbox ${e} wasn't created.`);return t[0]}}V.BrowsingContextImpl=le,Object.defineProperty(B,"__esModule",{value:!0}),B.BrowsingContextProcessor=void 0;const pe=w,he=V,me=Y,ge=_,fe=(0,f.log)(f.LogType.browsingContexts);class ve{sessions=new Set;#Pe;#Ee;#oe;constructor(e,t,s){this.#Pe=e,this.#Ee=t,this.#oe=s,this.#Ze(this.#Pe.browserClient())}#Ze(e){this.#Se(e)}#Se(e){e.on("Target.attachedToTarget",(async t=>{await this.#Ne(t,e)})),e.on("Target.detachedFromTarget",(async e=>{await ve.#Oe(e)}))}#Me(e){if(this.sessions.has(e))return;this.sessions.add(e);const t=this.#Pe.getCdpClient(e);this.#Se(t),t.on("*",(async(t,s)=>{await this.#oe.registerEvent({method:pe.CDP.EventNames.EventReceivedEvent,params:{cdpMethod:t,cdpParams:s||{},cdpSession:e}},null)})),t.on("Page.frameAttached",(async s=>{await he.BrowsingContextImpl.createFrameContext(s.frameId,s.parentFrameId,t,e,this.#oe)}))}async#Ne(e,t){const{sessionId:s,targetInfo:n}=e;let r=this.#Pe.getCdpClient(s);if(!this.#De(n))return await r.sendCommand("Runtime.runIfWaitingForDebugger"),void await t.sendCommand("Target.detachFromTarget",e);fe("AttachedToTarget event received: "+JSON.stringify(e)),this.#Me(s),ge.BrowsingContextStorage.hasKnownContext(n.targetId)?ge.BrowsingContextStorage.getKnownContext(n.targetId).convertFrameToTargetContext(r,s):await he.BrowsingContextImpl.createTargetContext(n.targetId,null,r,s,e.targetInfo.browserContextId??null,this.#oe)}static async#Oe(e){const t=e.targetId;await(ge.BrowsingContextStorage.findContext(t)?.delete())}async process_browsingContext_getTree(e){return{result:{contexts:(void 0===e.root?ge.BrowsingContextStorage.getTopLevelContexts():[ge.BrowsingContextStorage.getKnownContext(e.root)]).map((t=>t.serializeToBidiValue(e.maxDepth??Number.MAX_VALUE)))}}}async process_browsingContext_create(e){const t=this.#Pe.browserClient();let s;if(void 0!==e.referenceContext&&(s=ge.BrowsingContextStorage.getKnownContext(e.referenceContext),null!==s.parentId))throw new pe.Message.InvalidArgumentException("referenceContext should be a top-level context");const n=(await t.sendCommand("Target.createTarget",{url:"about:blank",newWindow:"window"===e.type,...s?.cdpBrowserContextId?{browserContextId:s.cdpBrowserContextId}:{}})).targetId,r=ge.BrowsingContextStorage.getKnownContext(n);return await r.awaitLoaded(),{result:r.serializeToBidiValue(1)}}async process_browsingContext_navigate(e){const t=ge.BrowsingContextStorage.getKnownContext(e.context);return await t.navigate(e.url,void 0!==e.wait?e.wait:"none")}static async#je(e){if("realm"in e)return me.Realm.getRealm({realmId:e.realm});const t=ge.BrowsingContextStorage.getKnownContext(e.context);return await t.getOrCreateSandbox(e.sandbox)}async process_script_evaluate(e){const t=await ve.#je(e.target);return await t.scriptEvaluate(e.expression,e.awaitPromise,e.resultOwnership??"none")}process_script_getRealms(e){void 0!==e.context&&ge.BrowsingContextStorage.getKnownContext(e.context);const t=me.Realm.findRealms({browsingContextId:e.context,type:e.type}).map((e=>e.toBiDi()));return{result:{realms:t}}}async process_script_callFunction(e){const t=await ve.#je(e.target);return await t.callFunction(e.functionDeclaration,e.this||{type:"undefined"},e.arguments||[],e.awaitPromise,e.resultOwnership??"none")}async process_script_disown(e){const t=await ve.#je(e.target);return await Promise.all(e.handles.map((async e=>await t.disown(e)))),{result:{}}}async process_browsingContext_close(e){const t=this.#Pe.browserClient();if(null!==ge.BrowsingContextStorage.getKnownContext(e.context).parentId)throw new pe.Message.InvalidArgumentException("Not a top-level browsing context cannot be closed.");const s=new Promise((async s=>{const n=r=>{r.targetId===e.context&&(t.off("Target.detachedFromTarget",n),s())};t.on("Target.detachedFromTarget",n)}));return await this.#Pe.browserClient().sendCommand("Target.closeTarget",{targetId:e.context}),await s,{result:{}}}#De(e){return e.targetId!==this.#Ee&&["page","iframe"].includes(e.type)}async process_cdp_sendCommand(e){const t=e.cdpSession?this.#Pe.getCdpClient(e.cdpSession):this.#Pe.browserClient();return{result:await t.sendCommand(e.cdpMethod,e.cdpParams),cdpSession:e.cdpSession}}async process_cdp_getSession(e){const t=e.context,s=ge.BrowsingContextStorage.getKnownContext(t).cdpSessionId;return void 0===s?{result:{cdpSession:null}}:{result:{cdpSession:s}}}}B.BrowsingContextProcessor=ve,Object.defineProperty(R,"__esModule",{value:!0}),R.CommandProcessor=void 0;const ye=B,xe=w,Ce=x,be=r;class we{parseGetRealmsParams(e){return e}parseCallFunctionParams(e){return e}parseEvaluateParams(e){return e}parseDisownParams(e){return e}parseSendCommandParams(e){return e}parseGetSessionParams(e){return e}parseNavigateParams(e){return e}parseGetTreeParams(e){return e}parseSubscribeParams(e){return e}parseCreateParams(e){return e}parseCloseParams(e){return e}}class _e extends be.EventEmitter{#ke;#oe;#Ae;constructor(e,t,s,n=new we){super(),this.#oe=t,this.#ke=new ye.BrowsingContextProcessor(e,s,t),this.#Ae=n}async#Le(){return{result:{ready:!1,message:"already connected"}}}async#ze(e,t){return await this.#oe.subscribe(e.events,e.contexts??[null],t),{result:{}}}async#Re(e,t){return await this.#oe.unsubscribe(e.events,e.contexts??[null],t),{result:{}}}async#Be(e){switch(e.method){case"session.status":return await this.#Le();case"session.subscribe":return await this.#ze(this.#Ae.parseSubscribeParams(e.params),e.channel??null);case"session.unsubscribe":return await this.#Re(this.#Ae.parseSubscribeParams(e.params),e.channel??null);case"browsingContext.create":return await this.#ke.process_browsingContext_create(this.#Ae.parseCreateParams(e.params));case"browsingContext.close":return await this.#ke.process_browsingContext_close(this.#Ae.parseCloseParams(e.params));case"browsingContext.getTree":return await this.#ke.process_browsingContext_getTree(this.#Ae.parseGetTreeParams(e.params));case"browsingContext.navigate":return await this.#ke.process_browsingContext_navigate(this.#Ae.parseNavigateParams(e.params));case"script.getRealms":return this.#ke.process_script_getRealms(this.#Ae.parseGetRealmsParams(e.params));case"script.callFunction":return await this.#ke.process_script_callFunction(this.#Ae.parseCallFunctionParams(e.params));case"script.evaluate":return await this.#ke.process_script_evaluate(this.#Ae.parseEvaluateParams(e.params));case"script.disown":return await this.#ke.process_script_disown(this.#Ae.parseDisownParams(e.params));case"cdp.sendCommand":return await this.#ke.process_cdp_sendCommand(this.#Ae.parseSendCommandParams(e.params));case"cdp.getSession":return await this.#ke.process_cdp_getSession(this.#Ae.parseGetSessionParams(e.params));default:throw new xe.Message.UnknownCommandException(`Unknown command '${e.method}'.`)}}processCommand=async e=>{try{const t=await this.#Be(e),s={id:e.id,...t};this.emit("response",Ce.OutgoingBidiMessage.createResolved(s,e.channel??null))}catch(t){if(t instanceof xe.Message.ErrorResponseClass){const s=t;this.emit("response",Ce.OutgoingBidiMessage.createResolved(s.toErrorResponse(e.id),e.channel??null))}else{const s=t;console.error(s),this.emit("response",Ce.OutgoingBidiMessage.createResolved(new xe.Message.UnknownException(s.message).toErrorResponse(e.id),e.channel??null))}}}}R.CommandProcessor=_e,Object.defineProperty(m,"__esModule",{value:!0}),m.BidiServer=void 0;const Ie=r,Te=g,Pe=y,Ee=R,Ze=_;class Se extends Ie.EventEmitter{#Ve;#t;#Ue;constructor(e,t,s,n){super(),this.#Ve=new Te.ProcessingQueue(this.#Fe),this.#t=e,this.#t.setOnMessage(this.#Ke),this.#Ue=new Ee.CommandProcessor(t,new Pe.EventManager(this),s,n),this.#Ue.on("response",(e=>{this.emitOutgoingMessage(e)}))}static async createAndStart(e,t,s,n){const r=new Se(e,t,s,n),a=t.browserClient();return await a.sendCommand("Target.setDiscoverTargets",{discover:!0}),await a.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await Promise.all(Ze.BrowsingContextStorage.getTopLevelContexts().map((e=>e.awaitLoaded()))),r}#Fe=async e=>{const t=e.message;null!==e.channel&&(t.channel=e.channel),await this.#t.sendMessage(t)};emitOutgoingMessage(e){this.#Ve.add(e)}close(){this.#t.close()}#Ke=async e=>{this.#Ue.processCommand(e)}}m.BidiServer=Se;var Ne={};Object.defineProperty(Ne,"__esModule",{value:!0}),Ne.MapperTabPage=void 0;class Oe{static#$e='<!DOCTYPE html><title>BiDi-CDP Mapper</title><style>body{font-family: Roboto, serif; font-size: 13px; color: #202124;}.log{padding: 12px; font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; font-size: 11px; line-height: 180%; background: #f1f3f4; border-radius: 4px;}.pre{overflow-wrap: break-word; padding: 10px;}.card{margin: 60px auto; padding: 2px 0; max-width: 900px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15), 0 1px 6px rgba(0, 0, 0, 0.2); border-radius: 8px;}.divider{height: 1px; background: #f0f0f0;}.item{padding: 16px 20px;}</style><div class="card"><div class="item"><h1>BiDi-CDP Mapper is controlling this tab</h1><p>Closing or reloading it will stop the BiDi process. <a target="_blank" title="BiDi-CDP Mapper GitHub Repository" href="https://github.com/GoogleChromeLabs/chromium-bidi">Details.</a></p></div><div class="divider"></div><details id="details"><summary class="item">Debug information</summary></details></div>';static generatePage(){globalThis.document?.documentElement&&(window.MapperTabPage=Oe,window.document.documentElement.innerHTML=this.#$e,this.#Je("System"),this.#Je("BiDi Messages"),this.#Je("Browsing Contexts"),this.#Je("CDP"))}static log(e,...t){if(!globalThis.document?.documentElement)return;const s=this.#Je(e),n=document.createElement("div");n.className="pre",n.textContent=t.join(", "),s.appendChild(n)}static#Je(e){const t=e+"_log",s=document.getElementById(t);if(s)return s;const n=document.getElementById("details"),r=document.createElement("div");r.className="divider",n.appendChild(r);const a=document.createElement("div");return a.className="item",a.innerHTML=`<h3>${e}</h3><div id="${t}" class="log"></div>`,n.appendChild(a),document.getElementById(t)}}Ne.MapperTabPage=Oe;var Me={},De={},je={},ke={},Ae={},Le={};!function(e){var t;Object.defineProperty(e,"__esModule",{value:!0}),e.getParsedType=e.ZodParsedType=e.util=void 0,function(e){e.assertNever=function(e){throw new Error},e.arrayToEnum=e=>{const t={};for(const s of e)t[s]=s;return t},e.getValidEnumValues=t=>{const s=e.objectKeys(t).filter((e=>"number"!=typeof t[t[e]])),n={};for(const e of s)n[e]=t[e];return e.objectValues(n)},e.objectValues=t=>e.objectKeys(t).map((function(e){return t[e]})),e.objectKeys="function"==typeof Object.keys?e=>Object.keys(e):e=>{const t=[];for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.push(s);return t},e.find=(e,t)=>{for(const s of e)if(t(s))return s},e.isInteger="function"==typeof Number.isInteger?e=>Number.isInteger(e):e=>"number"==typeof e&&isFinite(e)&&Math.floor(e)===e,e.joinValues=function(e,t=" | "){return e.map((e=>"string"==typeof e?`'${e}'`:e)).join(t)}}(t=e.util||(e.util={})),e.ZodParsedType=t.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);e.getParsedType=t=>{switch(typeof t){case"undefined":return e.ZodParsedType.undefined;case"string":return e.ZodParsedType.string;case"number":return isNaN(t)?e.ZodParsedType.nan:e.ZodParsedType.number;case"boolean":return e.ZodParsedType.boolean;case"function":return e.ZodParsedType.function;case"bigint":return e.ZodParsedType.bigint;case"object":return Array.isArray(t)?e.ZodParsedType.array:null===t?e.ZodParsedType.null:t.then&&"function"==typeof t.then&&t.catch&&"function"==typeof t.catch?e.ZodParsedType.promise:"undefined"!=typeof Map&&t instanceof Map?e.ZodParsedType.map:"undefined"!=typeof Set&&t instanceof Set?e.ZodParsedType.set:"undefined"!=typeof Date&&t instanceof Date?e.ZodParsedType.date:e.ZodParsedType.object;default:return e.ZodParsedType.unknown}}}(Le),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.setErrorMap=e.overrideErrorMap=e.defaultErrorMap=e.ZodError=e.quotelessJson=e.ZodIssueCode=void 0;const t=Le;e.ZodIssueCode=t.util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of"]);e.quotelessJson=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class s extends Error{constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}get errors(){return this.issues}format(e){const t=e||function(e){return e.message},s={_errors:[]},n=e=>{for(const r of e.issues)if("invalid_union"===r.code)r.unionErrors.map(n);else if("invalid_return_type"===r.code)n(r.returnTypeError);else if("invalid_arguments"===r.code)n(r.argumentsError);else if(0===r.path.length)s._errors.push(t(r));else{let e=s,n=0;for(;n<r.path.length;){const s=r.path[n];n===r.path.length-1?(e[s]=e[s]||{_errors:[]},e[s]._errors.push(t(r))):e[s]=e[s]||{_errors:[]},e=e[s],n++}}};return n(this),s}toString(){return this.message}get message(){return JSON.stringify(this.issues,null,2)}get isEmpty(){return 0===this.issues.length}flatten(e=(e=>e.message)){const t={},s=[];for(const n of this.issues)n.path.length>0?(t[n.path[0]]=t[n.path[0]]||[],t[n.path[0]].push(e(n))):s.push(e(n));return{formErrors:s,fieldErrors:t}}get formErrors(){return this.flatten()}}e.ZodError=s,s.create=e=>new s(e);e.defaultErrorMap=(s,n)=>{let r;switch(s.code){case e.ZodIssueCode.invalid_type:r=s.received===t.ZodParsedType.undefined?"Required":`Expected ${s.expected}, received ${s.received}`;break;case e.ZodIssueCode.invalid_literal:r=`Invalid literal value, expected ${JSON.stringify(s.expected)}`;break;case e.ZodIssueCode.unrecognized_keys:r=`Unrecognized key(s) in object: ${t.util.joinValues(s.keys,", ")}`;break;case e.ZodIssueCode.invalid_union:r="Invalid input";break;case e.ZodIssueCode.invalid_union_discriminator:r=`Invalid discriminator value. Expected ${t.util.joinValues(s.options)}`;break;case e.ZodIssueCode.invalid_enum_value:r=`Invalid enum value. Expected ${t.util.joinValues(s.options)}, received '${s.received}'`;break;case e.ZodIssueCode.invalid_arguments:r="Invalid function arguments";break;case e.ZodIssueCode.invalid_return_type:r="Invalid function return type";break;case e.ZodIssueCode.invalid_date:r="Invalid date";break;case e.ZodIssueCode.invalid_string:r="regex"!==s.validation?`Invalid ${s.validation}`:"Invalid";break;case e.ZodIssueCode.too_small:r="array"===s.type?`Array must contain ${s.inclusive?"at least":"more than"} ${s.minimum} element(s)`:"string"===s.type?`String must contain ${s.inclusive?"at least":"over"} ${s.minimum} character(s)`:"number"===s.type?`Number must be greater than ${s.inclusive?"or equal to ":""}${s.minimum}`:"Invalid input";break;case e.ZodIssueCode.too_big:r="array"===s.type?`Array must contain ${s.inclusive?"at most":"less than"} ${s.maximum} element(s)`:"string"===s.type?`String must contain ${s.inclusive?"at most":"under"} ${s.maximum} character(s)`:"number"===s.type?`Number must be less than ${s.inclusive?"or equal to ":""}${s.maximum}`:"Invalid input";break;case e.ZodIssueCode.custom:r="Invalid input";break;case e.ZodIssueCode.invalid_intersection_types:r="Intersection results could not be merged";break;case e.ZodIssueCode.not_multiple_of:r=`Number must be a multiple of ${s.multipleOf}`;break;default:r=n.defaultError,t.util.assertNever(s)}return{message:r}},e.overrideErrorMap=e.defaultErrorMap;e.setErrorMap=t=>{e.overrideErrorMap=t}}(Ae),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isAsync=e.isValid=e.isDirty=e.isAborted=e.OK=e.DIRTY=e.INVALID=e.ParseStatus=e.addIssueToContext=e.EMPTY_PATH=e.makeIssue=void 0;const t=Ae;e.makeIssue=e=>{const{data:t,path:s,errorMaps:n,issueData:r}=e,a=[...s,...r.path||[]],o={...r,path:a};let i="";const d=n.filter((e=>!!e)).slice().reverse();for(const e of d)i=e(o,{data:t,defaultError:i}).message;return{...r,path:a,message:r.message||i}},e.EMPTY_PATH=[],e.addIssueToContext=function(s,n){const r=e.makeIssue({issueData:n,data:s.data,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,t.overrideErrorMap,t.defaultErrorMap].filter((e=>!!e))});s.common.issues.push(r)};class s{constructor(){this.value="valid"}dirty(){"valid"===this.value&&(this.value="dirty")}abort(){"aborted"!==this.value&&(this.value="aborted")}static mergeArray(t,s){const n=[];for(const r of s){if("aborted"===r.status)return e.INVALID;"dirty"===r.status&&t.dirty(),n.push(r.value)}return{status:t.value,value:n}}static async mergeObjectAsync(e,t){const n=[];for(const e of t)n.push({key:await e.key,value:await e.value});return s.mergeObjectSync(e,n)}static mergeObjectSync(t,s){const n={};for(const r of s){const{key:s,value:a}=r;if("aborted"===s.status)return e.INVALID;if("aborted"===a.status)return e.INVALID;"dirty"===s.status&&t.dirty(),"dirty"===a.status&&t.dirty(),(void 0!==a.value||r.alwaysSet)&&(n[s.value]=a.value)}return{status:t.value,value:n}}}e.ParseStatus=s,e.INVALID=Object.freeze({status:"aborted"});e.DIRTY=e=>({status:"dirty",value:e});e.OK=e=>({status:"valid",value:e});e.isAborted=e=>"aborted"===e.status;e.isDirty=e=>"dirty"===e.status;e.isValid=e=>"valid"===e.status;e.isAsync=e=>void 0!==typeof Promise&&e instanceof Promise}(ke);var ze={};Object.defineProperty(ze,"__esModule",{value:!0});var Re={},Be={};!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.errorUtil=void 0,function(e){e.errToObj=e=>"string"==typeof e?{message:e}:e||{},e.toString=e=>"string"==typeof e?e:null==e?void 0:e.message}(e.errorUtil||(e.errorUtil={}))}(Be),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.intersection=e.instanceof=e.function=e.enum=e.effect=e.discriminatedUnion=e.date=e.boolean=e.bigint=e.array=e.any=e.ZodFirstPartyTypeKind=e.late=e.ZodSchema=e.Schema=e.custom=e.ZodNaN=e.ZodDefault=e.ZodNullable=e.ZodOptional=e.ZodTransformer=e.ZodEffects=e.ZodPromise=e.ZodNativeEnum=e.ZodEnum=e.ZodLiteral=e.ZodLazy=e.ZodFunction=e.ZodSet=e.ZodMap=e.ZodRecord=e.ZodTuple=e.ZodIntersection=e.ZodDiscriminatedUnion=e.ZodUnion=e.ZodObject=e.objectUtil=e.ZodArray=e.ZodVoid=e.ZodNever=e.ZodUnknown=e.ZodAny=e.ZodNull=e.ZodUndefined=e.ZodDate=e.ZodBoolean=e.ZodBigInt=e.ZodNumber=e.ZodString=e.ZodType=void 0,e.void=e.unknown=e.union=e.undefined=e.tuple=e.transformer=e.string=e.strictObject=e.set=e.record=e.promise=e.preprocess=e.ostring=e.optional=e.onumber=e.oboolean=e.object=e.number=e.nullable=e.null=e.never=e.nativeEnum=e.nan=e.map=e.literal=e.lazy=void 0;const t=Be,s=ke,n=Le,r=Ae;class a{constructor(e,t,s,n){this.parent=e,this.data=t,this._path=s,this._key=n}get path(){return this._path.concat(this._key)}}const o=(e,t)=>{if(s.isValid(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,error:new r.ZodError(e.common.issues)}};function i(e){if(!e)return{};const{errorMap:t,invalid_type_error:s,required_error:n,description:r}=e;if(t&&(s||n))throw new Error('Can\'t use "invalid" or "required" in conjunction with custom error map.');if(t)return{errorMap:t,description:r};return{errorMap:(t,s)=>"invalid_type"!==t.code?{message:s.defaultError}:void 0===s.data&&n?{message:n}:e.invalid_type_error?{message:e.invalid_type_error}:{message:s.defaultError},description:r}}class d{constructor(e){this.spa=this.safeParseAsync,this.superRefine=this._refinement,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.default=this.default.bind(this),this.describe=this.describe.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return n.getParsedType(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:n.getParsedType(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new s.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:n.getParsedType(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(s.isAsync(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){var s;const r={common:{issues:[],async:null!==(s=null==t?void 0:t.async)&&void 0!==s&&s,contextualErrorMap:null==t?void 0:t.errorMap},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:n.getParsedType(e)},a=this._parseSync({data:e,path:r.path,parent:r});return o(r,a)}async parseAsync(e,t){const s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){const r={common:{issues:[],contextualErrorMap:null==t?void 0:t.errorMap,async:!0},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:n.getParsedType(e)},a=this._parse({data:e,path:[],parent:r}),i=await(s.isAsync(a)?a:Promise.resolve(a));return o(r,i)}refine(e,t){const s=e=>"string"==typeof t||void 0===t?{message:t}:"function"==typeof t?t(e):t;return this._refinement(((t,n)=>{const a=e(t),o=()=>n.addIssue({code:r.ZodIssueCode.custom,...s(t)});return"undefined"!=typeof Promise&&a instanceof Promise?a.then((e=>!!e||(o(),!1))):!!a||(o(),!1)}))}refinement(e,t){return this._refinement(((s,n)=>!!e(s)||(n.addIssue("function"==typeof t?t(s,n):t),!1)))}_refinement(e){return new F({schema:this,typeName:G.ZodEffects,effect:{type:"refinement",refinement:e}})}optional(){return K.create(this)}nullable(){return $.create(this)}nullish(){return this.optional().nullable()}array(){return I.create(this)}promise(){return U.create(this)}or(e){return S.create([this,e])}and(e){return M.create(this,e)}transform(e){return new F({schema:this,typeName:G.ZodEffects,effect:{type:"transform",transform:e}})}default(e){return new J({innerType:this,defaultValue:"function"==typeof e?e:()=>e,typeName:G.ZodDefault})}describe(e){return new(0,this.constructor)({...this._def,description:e})}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}e.ZodType=d,e.Schema=d,e.ZodSchema=d;const c=/^c[^\s-]{8,}$/i,u=/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i,l=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;class p extends d{constructor(){super(...arguments),this._regex=(e,s,n)=>this.refinement((t=>e.test(t)),{validation:s,code:r.ZodIssueCode.invalid_string,...t.errorUtil.errToObj(n)}),this.nonempty=e=>this.min(1,t.errorUtil.errToObj(e)),this.trim=()=>new p({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}_parse(e){if(this._getType(e)!==n.ZodParsedType.string){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.string,received:t.parsedType}),s.INVALID}const t=new s.ParseStatus;let a;for(const o of this._def.checks)if("min"===o.kind)e.data.length<o.value&&(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{code:r.ZodIssueCode.too_small,minimum:o.value,type:"string",inclusive:!0,message:o.message}),t.dirty());else if("max"===o.kind)e.data.length>o.value&&(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{code:r.ZodIssueCode.too_big,maximum:o.value,type:"string",inclusive:!0,message:o.message}),t.dirty());else if("email"===o.kind)l.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"email",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("uuid"===o.kind)u.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"uuid",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("cuid"===o.kind)c.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"cuid",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("url"===o.kind)try{new URL(e.data)}catch(n){a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"url",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty()}else if("regex"===o.kind){o.regex.lastIndex=0;o.regex.test(e.data)||(a=this._getOrReturnCtx(e,a),s.addIssueToContext(a,{validation:"regex",code:r.ZodIssueCode.invalid_string,message:o.message}),t.dirty())}else"trim"===o.kind?e.data=e.data.trim():n.util.assertNever(o);return{status:t.value,value:e.data}}_addCheck(e){return new p({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...t.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...t.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...t.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...t.errorUtil.errToObj(e)})}regex(e,s){return this._addCheck({kind:"regex",regex:e,...t.errorUtil.errToObj(s)})}min(e,s){return this._addCheck({kind:"min",value:e,...t.errorUtil.errToObj(s)})}max(e,s){return this._addCheck({kind:"max",value:e,...t.errorUtil.errToObj(s)})}length(e,t){return this.min(e,t).max(e,t)}get isEmail(){return!!this._def.checks.find((e=>"email"===e.kind))}get isURL(){return!!this._def.checks.find((e=>"url"===e.kind))}get isUUID(){return!!this._def.checks.find((e=>"uuid"===e.kind))}get isCUID(){return!!this._def.checks.find((e=>"cuid"===e.kind))}get minLength(){let e=-1/0;return this._def.checks.map((t=>{"min"===t.kind&&(null===e||t.value>e)&&(e=t.value)})),e}get maxLength(){let e=null;return this._def.checks.map((t=>{"max"===t.kind&&(null===e||t.value<e)&&(e=t.value)})),e}}function h(e,t){const s=(e.toString().split(".")[1]||"").length,n=(t.toString().split(".")[1]||"").length,r=s>n?s:n;return parseInt(e.toFixed(r).replace(".",""))%parseInt(t.toFixed(r).replace(".",""))/Math.pow(10,r)}e.ZodString=p,p.create=e=>new p({checks:[],typeName:G.ZodString,...i(e)});class m extends d{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._getType(e)!==n.ZodParsedType.number){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.number,received:t.parsedType}),s.INVALID}let t;const a=new s.ParseStatus;for(const o of this._def.checks)if("int"===o.kind)n.util.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:o.message}),a.dirty());else if("min"===o.kind){(o.inclusive?e.data<o.value:e.data<=o.value)&&(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.too_small,minimum:o.value,type:"number",inclusive:o.inclusive,message:o.message}),a.dirty())}else if("max"===o.kind){(o.inclusive?e.data>o.value:e.data>=o.value)&&(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,message:o.message}),a.dirty())}else"multipleOf"===o.kind?0!==h(e.data,o.value)&&(t=this._getOrReturnCtx(e,t),s.addIssueToContext(t,{code:r.ZodIssueCode.not_multiple_of,multipleOf:o.value,message:o.message}),a.dirty()):n.util.assertNever(o);return{status:a.value,value:e.data}}gte(e,s){return this.setLimit("min",e,!0,t.errorUtil.toString(s))}gt(e,s){return this.setLimit("min",e,!1,t.errorUtil.toString(s))}lte(e,s){return this.setLimit("max",e,!0,t.errorUtil.toString(s))}lt(e,s){return this.setLimit("max",e,!1,t.errorUtil.toString(s))}setLimit(e,s,n,r){return new m({...this._def,checks:[...this._def.checks,{kind:e,value:s,inclusive:n,message:t.errorUtil.toString(r)}]})}_addCheck(e){return new m({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:t.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:t.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:t.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:t.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:t.errorUtil.toString(e)})}multipleOf(e,s){return this._addCheck({kind:"multipleOf",value:e,message:t.errorUtil.toString(s)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find((e=>"int"===e.kind))}}e.ZodNumber=m,m.create=e=>new m({checks:[],typeName:G.ZodNumber,...i(e)});class g extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.bigint){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.bigint,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodBigInt=g,g.create=e=>new g({typeName:G.ZodBigInt,...i(e)});class f extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.boolean){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.boolean,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodBoolean=f,f.create=e=>new f({typeName:G.ZodBoolean,...i(e)});class v extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.date){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.date,received:t.parsedType}),s.INVALID}if(isNaN(e.data.getTime())){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_date}),s.INVALID}return{status:"valid",value:new Date(e.data.getTime())}}}e.ZodDate=v,v.create=e=>new v({typeName:G.ZodDate,...i(e)});class y extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.undefined,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodUndefined=y,y.create=e=>new y({typeName:G.ZodUndefined,...i(e)});class x extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.null){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.null,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodNull=x,x.create=e=>new x({typeName:G.ZodNull,...i(e)});class C extends d{constructor(){super(...arguments),this._any=!0}_parse(e){return s.OK(e.data)}}e.ZodAny=C,C.create=e=>new C({typeName:G.ZodAny,...i(e)});class b extends d{constructor(){super(...arguments),this._unknown=!0}_parse(e){return s.OK(e.data)}}e.ZodUnknown=b,b.create=e=>new b({typeName:G.ZodUnknown,...i(e)});class w extends d{_parse(e){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.never,received:t.parsedType}),s.INVALID}}e.ZodNever=w,w.create=e=>new w({typeName:G.ZodNever,...i(e)});class _ extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.void,received:t.parsedType}),s.INVALID}return s.OK(e.data)}}e.ZodVoid=_,_.create=e=>new _({typeName:G.ZodVoid,...i(e)});class I extends d{_parse(e){const{ctx:t,status:o}=this._processInputParams(e),i=this._def;if(t.parsedType!==n.ZodParsedType.array)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.array,received:t.parsedType}),s.INVALID;if(null!==i.minLength&&t.data.length<i.minLength.value&&(s.addIssueToContext(t,{code:r.ZodIssueCode.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,message:i.minLength.message}),o.dirty()),null!==i.maxLength&&t.data.length>i.maxLength.value&&(s.addIssueToContext(t,{code:r.ZodIssueCode.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,message:i.maxLength.message}),o.dirty()),t.common.async)return Promise.all(t.data.map(((e,s)=>i.type._parseAsync(new a(t,e,t.path,s))))).then((e=>s.ParseStatus.mergeArray(o,e)));const d=t.data.map(((e,s)=>i.type._parseSync(new a(t,e,t.path,s))));return s.ParseStatus.mergeArray(o,d)}get element(){return this._def.type}min(e,s){return new I({...this._def,minLength:{value:e,message:t.errorUtil.toString(s)}})}max(e,s){return new I({...this._def,maxLength:{value:e,message:t.errorUtil.toString(s)}})}length(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}var T;e.ZodArray=I,I.create=(e,t)=>new I({type:e,minLength:null,maxLength:null,typeName:G.ZodArray,...i(t)}),function(e){e.mergeShapes=(e,t)=>({...e,...t})}(T=e.objectUtil||(e.objectUtil={}));const P=e=>t=>new Z({...e,shape:()=>({...e.shape(),...t})});function E(e){if(e instanceof Z){const t={};for(const s in e.shape){const n=e.shape[s];t[s]=K.create(E(n))}return new Z({...e._def,shape:()=>t})}return e instanceof I?I.create(E(e.element)):e instanceof K?K.create(E(e.unwrap())):e instanceof $?$.create(E(e.unwrap())):e instanceof D?D.create(e.items.map((e=>E(e)))):e}class Z extends d{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=P(this._def),this.extend=P(this._def)}_getCached(){if(null!==this._cached)return this._cached;const e=this._def.shape(),t=n.util.objectKeys(e);return this._cached={shape:e,keys:t}}_parse(e){if(this._getType(e)!==n.ZodParsedType.object){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.object,received:t.parsedType}),s.INVALID}const{status:t,ctx:o}=this._processInputParams(e),{shape:i,keys:d}=this._getCached(),c=[];for(const e in o.data)d.includes(e)||c.push(e);const u=[];for(const e of d){const t=i[e],s=o.data[e];u.push({key:{status:"valid",value:e},value:t._parse(new a(o,s,o.path,e)),alwaysSet:e in o.data})}if(this._def.catchall instanceof w){const e=this._def.unknownKeys;if("passthrough"===e)for(const e of c)u.push({key:{status:"valid",value:e},value:{status:"valid",value:o.data[e]}});else if("strict"===e)c.length>0&&(s.addIssueToContext(o,{code:r.ZodIssueCode.unrecognized_keys,keys:c}),t.dirty());else if("strip"!==e)throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const e=this._def.catchall;for(const t of c){const s=o.data[t];u.push({key:{status:"valid",value:t},value:e._parse(new a(o,s,o.path,t)),alwaysSet:t in o.data})}}return o.common.async?Promise.resolve().then((async()=>{const e=[];for(const t of u){const s=await t.key;e.push({key:s,value:await t.value,alwaysSet:t.alwaysSet})}return e})).then((e=>s.ParseStatus.mergeObjectSync(t,e))):s.ParseStatus.mergeObjectSync(t,u)}get shape(){return this._def.shape()}strict(e){return t.errorUtil.errToObj,new Z({...this._def,unknownKeys:"strict",...void 0!==e?{errorMap:(s,n)=>{var r,a,o,i;const d=null!==(o=null===(a=(r=this._def).errorMap)||void 0===a?void 0:a.call(r,s,n).message)&&void 0!==o?o:n.defaultError;return"unrecognized_keys"===s.code?{message:null!==(i=t.errorUtil.errToObj(e).message)&&void 0!==i?i:d}:{message:d}}}:{}})}strip(){return new Z({...this._def,unknownKeys:"strip"})}passthrough(){return new Z({...this._def,unknownKeys:"passthrough"})}setKey(e,t){return this.augment({[e]:t})}merge(e){return new Z({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>T.mergeShapes(this._def.shape(),e._def.shape()),typeName:G.ZodObject})}catchall(e){return new Z({...this._def,catchall:e})}pick(e){const t={};return n.util.objectKeys(e).map((e=>{this.shape[e]&&(t[e]=this.shape[e])})),new Z({...this._def,shape:()=>t})}omit(e){const t={};return n.util.objectKeys(this.shape).map((s=>{-1===n.util.objectKeys(e).indexOf(s)&&(t[s]=this.shape[s])})),new Z({...this._def,shape:()=>t})}deepPartial(){return E(this)}partial(e){const t={};if(e)return n.util.objectKeys(this.shape).map((s=>{-1===n.util.objectKeys(e).indexOf(s)?t[s]=this.shape[s]:t[s]=this.shape[s].optional()})),new Z({...this._def,shape:()=>t});for(const e in this.shape){const s=this.shape[e];t[e]=s.optional()}return new Z({...this._def,shape:()=>t})}required(){const e={};for(const t in this.shape){let s=this.shape[t];for(;s instanceof K;)s=s._def.innerType;e[t]=s}return new Z({...this._def,shape:()=>e})}}e.ZodObject=Z,Z.create=(e,t)=>new Z({shape:()=>e,unknownKeys:"strip",catchall:w.create(),typeName:G.ZodObject,...i(t)}),Z.strictCreate=(e,t)=>new Z({shape:()=>e,unknownKeys:"strict",catchall:w.create(),typeName:G.ZodObject,...i(t)}),Z.lazycreate=(e,t)=>new Z({shape:e,unknownKeys:"strip",catchall:w.create(),typeName:G.ZodObject,...i(t)});class S extends d{_parse(e){const{ctx:t}=this._processInputParams(e),n=this._def.options;if(t.common.async)return Promise.all(n.map((async e=>{const s={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:s}),ctx:s}}))).then((function(e){for(const t of e)if("valid"===t.result.status)return t.result;for(const s of e)if("dirty"===s.result.status)return t.common.issues.push(...s.ctx.common.issues),s.result;const n=e.map((e=>new r.ZodError(e.ctx.common.issues)));return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_union,unionErrors:n}),s.INVALID}));{let e;const a=[];for(const s of n){const n={...t,common:{...t.common,issues:[]},parent:null},r=s._parseSync({data:t.data,path:t.path,parent:n});if("valid"===r.status)return r;"dirty"!==r.status||e||(e={result:r,ctx:n}),n.common.issues.length&&a.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;const o=a.map((e=>new r.ZodError(e)));return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_union,unionErrors:o}),s.INVALID}}get options(){return this._def.options}}e.ZodUnion=S,S.create=(e,t)=>new S({options:e,typeName:G.ZodUnion,...i(t)});class N extends d{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==n.ZodParsedType.object)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.object,received:t.parsedType}),s.INVALID;const a=this.discriminator,o=t.data[a],i=this.options.get(o);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_union_discriminator,options:this.validDiscriminatorValues,path:[a]}),s.INVALID)}get discriminator(){return this._def.discriminator}get validDiscriminatorValues(){return Array.from(this.options.keys())}get options(){return this._def.options}static create(e,t,s){const n=new Map;try{t.forEach((t=>{const s=t.shape[e].value;n.set(s,t)}))}catch(e){throw new Error("The discriminator value could not be extracted from all the provided schemas")}if(n.size!==t.length)throw new Error("Some of the discriminator values are not unique");return new N({typeName:G.ZodDiscriminatedUnion,discriminator:e,options:n,...i(s)})}}function O(e,t){const s=n.getParsedType(e),r=n.getParsedType(t);if(e===t)return{valid:!0,data:e};if(s===n.ZodParsedType.object&&r===n.ZodParsedType.object){const s=n.util.objectKeys(t),r=n.util.objectKeys(e).filter((e=>-1!==s.indexOf(e))),a={...e,...t};for(const s of r){const n=O(e[s],t[s]);if(!n.valid)return{valid:!1};a[s]=n.data}return{valid:!0,data:a}}if(s===n.ZodParsedType.array&&r===n.ZodParsedType.array){if(e.length!==t.length)return{valid:!1};const s=[];for(let n=0;n<e.length;n++){const r=O(e[n],t[n]);if(!r.valid)return{valid:!1};s.push(r.data)}return{valid:!0,data:s}}return s===n.ZodParsedType.date&&r===n.ZodParsedType.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}e.ZodDiscriminatedUnion=N;class M extends d{_parse(e){const{status:t,ctx:n}=this._processInputParams(e),a=(e,a)=>{if(s.isAborted(e)||s.isAborted(a))return s.INVALID;const o=O(e.value,a.value);return o.valid?((s.isDirty(e)||s.isDirty(a))&&t.dirty(),{status:t.value,value:o.data}):(s.addIssueToContext(n,{code:r.ZodIssueCode.invalid_intersection_types}),s.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then((([e,t])=>a(e,t))):a(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}}e.ZodIntersection=M,M.create=(e,t,s)=>new M({left:e,right:t,typeName:G.ZodIntersection,...i(s)});class D extends d{_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.array)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.array,received:o.parsedType}),s.INVALID;if(o.data.length<this._def.items.length)return s.addIssueToContext(o,{code:r.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,type:"array"}),s.INVALID;!this._def.rest&&o.data.length>this._def.items.length&&(s.addIssueToContext(o,{code:r.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,type:"array"}),t.dirty());const i=o.data.map(((e,t)=>{const s=this._def.items[t]||this._def.rest;return s?s._parse(new a(o,e,o.path,t)):null})).filter((e=>!!e));return o.common.async?Promise.all(i).then((e=>s.ParseStatus.mergeArray(t,e))):s.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new D({...this._def,rest:e})}}e.ZodTuple=D,D.create=(e,t)=>new D({items:e,typeName:G.ZodTuple,rest:null,...i(t)});class j extends d{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.object)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.object,received:o.parsedType}),s.INVALID;const i=[],d=this._def.keyType,c=this._def.valueType;for(const e in o.data)i.push({key:d._parse(new a(o,e,o.path,e)),value:c._parse(new a(o,o.data[e],o.path,e))});return o.common.async?s.ParseStatus.mergeObjectAsync(t,i):s.ParseStatus.mergeObjectSync(t,i)}get element(){return this._def.valueType}static create(e,t,s){return new j(t instanceof d?{keyType:e,valueType:t,typeName:G.ZodRecord,...i(s)}:{keyType:p.create(),valueType:e,typeName:G.ZodRecord,...i(t)})}}e.ZodRecord=j;class k extends d{_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.map)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.map,received:o.parsedType}),s.INVALID;const i=this._def.keyType,d=this._def.valueType,c=[...o.data.entries()].map((([e,t],s)=>({key:i._parse(new a(o,e,o.path,[s,"key"])),value:d._parse(new a(o,t,o.path,[s,"value"]))})));if(o.common.async){const e=new Map;return Promise.resolve().then((async()=>{for(const n of c){const r=await n.key,a=await n.value;if("aborted"===r.status||"aborted"===a.status)return s.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}))}{const e=new Map;for(const n of c){const r=n.key,a=n.value;if("aborted"===r.status||"aborted"===a.status)return s.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}}}e.ZodMap=k,k.create=(e,t,s)=>new k({valueType:t,keyType:e,typeName:G.ZodMap,...i(s)});class A extends d{_parse(e){const{status:t,ctx:o}=this._processInputParams(e);if(o.parsedType!==n.ZodParsedType.set)return s.addIssueToContext(o,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.set,received:o.parsedType}),s.INVALID;const i=this._def;null!==i.minSize&&o.data.size<i.minSize.value&&(s.addIssueToContext(o,{code:r.ZodIssueCode.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,message:i.minSize.message}),t.dirty()),null!==i.maxSize&&o.data.size>i.maxSize.value&&(s.addIssueToContext(o,{code:r.ZodIssueCode.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,message:i.maxSize.message}),t.dirty());const d=this._def.valueType;function c(e){const n=new Set;for(const r of e){if("aborted"===r.status)return s.INVALID;"dirty"===r.status&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}const u=[...o.data.values()].map(((e,t)=>d._parse(new a(o,e,o.path,t))));return o.common.async?Promise.all(u).then((e=>c(e))):c(u)}min(e,s){return new A({...this._def,minSize:{value:e,message:t.errorUtil.toString(s)}})}max(e,s){return new A({...this._def,maxSize:{value:e,message:t.errorUtil.toString(s)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}e.ZodSet=A,A.create=(e,t)=>new A({valueType:e,minSize:null,maxSize:null,typeName:G.ZodSet,...i(t)});class L extends d{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==n.ZodParsedType.function)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.function,received:t.parsedType}),s.INVALID;function a(e,n){return s.makeIssue({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,r.overrideErrorMap,r.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_arguments,argumentsError:n}})}function o(e,n){return s.makeIssue({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,r.overrideErrorMap,r.defaultErrorMap].filter((e=>!!e)),issueData:{code:r.ZodIssueCode.invalid_return_type,returnTypeError:n}})}const i={errorMap:t.common.contextualErrorMap},d=t.data;return this._def.returns instanceof U?s.OK((async(...e)=>{const t=new r.ZodError([]),s=await this._def.args.parseAsync(e,i).catch((s=>{throw t.addIssue(a(e,s)),t})),n=await d(...s);return await this._def.returns._def.type.parseAsync(n,i).catch((e=>{throw t.addIssue(o(n,e)),t}))})):s.OK(((...e)=>{const t=this._def.args.safeParse(e,i);if(!t.success)throw new r.ZodError([a(e,t.error)]);const s=d(...t.data),n=this._def.returns.safeParse(s,i);if(!n.success)throw new r.ZodError([o(s,n.error)]);return n.data}))}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new L({...this._def,args:D.create(e).rest(b.create())})}returns(e){return new L({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}}e.ZodFunction=L,L.create=(e,t,s)=>new L({args:e?e.rest(b.create()):D.create([]).rest(b.create()),returns:t||b.create(),typeName:G.ZodFunction,...i(s)});class z extends d{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}e.ZodLazy=z,z.create=(e,t)=>new z({getter:e,typeName:G.ZodLazy,...i(t)});class R extends d{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_literal,expected:this._def.value}),s.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}}e.ZodLiteral=R,R.create=(e,t)=>new R({value:e,typeName:G.ZodLiteral,...i(t)});class B extends d{_parse(e){if("string"!=typeof e.data){const t=this._getOrReturnCtx(e),a=this._def.values;return s.addIssueToContext(t,{expected:n.util.joinValues(a),received:t.parsedType,code:r.ZodIssueCode.invalid_type}),s.INVALID}if(-1===this._def.values.indexOf(e.data)){const t=this._getOrReturnCtx(e),n=this._def.values;return s.addIssueToContext(t,{received:t.data,code:r.ZodIssueCode.invalid_enum_value,options:n}),s.INVALID}return s.OK(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}}e.ZodEnum=B,B.create=function(e,t){return new B({values:e,typeName:G.ZodEnum,...i(t)})};class V extends d{_parse(e){const t=n.util.getValidEnumValues(this._def.values),a=this._getOrReturnCtx(e);if(a.parsedType!==n.ZodParsedType.string&&a.parsedType!==n.ZodParsedType.number){const e=n.util.objectValues(t);return s.addIssueToContext(a,{expected:n.util.joinValues(e),received:a.parsedType,code:r.ZodIssueCode.invalid_type}),s.INVALID}if(-1===t.indexOf(e.data)){const e=n.util.objectValues(t);return s.addIssueToContext(a,{received:a.data,code:r.ZodIssueCode.invalid_enum_value,options:e}),s.INVALID}return s.OK(e.data)}get enum(){return this._def.values}}e.ZodNativeEnum=V,V.create=(e,t)=>new V({values:e,typeName:G.ZodNativeEnum,...i(t)});class U extends d{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==n.ZodParsedType.promise&&!1===t.common.async)return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.promise,received:t.parsedType}),s.INVALID;const a=t.parsedType===n.ZodParsedType.promise?t.data:Promise.resolve(t.data);return s.OK(a.then((e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap}))))}}e.ZodPromise=U,U.create=(e,t)=>new U({type:e,typeName:G.ZodPromise,...i(t)});class F extends d{innerType(){return this._def.schema}_parse(e){const{status:t,ctx:r}=this._processInputParams(e),a=this._def.effect||null;if("preprocess"===a.type){const e=a.transform(r.data);return r.common.async?Promise.resolve(e).then((e=>this._def.schema._parseAsync({data:e,path:r.path,parent:r}))):this._def.schema._parseSync({data:e,path:r.path,parent:r})}const o={addIssue:e=>{s.addIssueToContext(r,e),e.fatal?t.abort():t.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),"refinement"===a.type){const e=e=>{const t=a.refinement(e,o);if(r.common.async)return Promise.resolve(t);if(t instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return e};if(!1===r.common.async){const n=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return"aborted"===n.status?s.INVALID:("dirty"===n.status&&t.dirty(),e(n.value),{status:t.value,value:n.value})}return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then((n=>"aborted"===n.status?s.INVALID:("dirty"===n.status&&t.dirty(),e(n.value).then((()=>({status:t.value,value:n.value}))))))}if("transform"===a.type){if(!1===r.common.async){const e=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!s.isValid(e))return e;const n=a.transform(e.value,o);if(n instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:n}}return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then((e=>s.isValid(e)?Promise.resolve(a.transform(e.value,o)).then((e=>({status:t.value,value:e}))):e))}n.util.assertNever(a)}}e.ZodEffects=F,e.ZodTransformer=F,F.create=(e,t,s)=>new F({schema:e,typeName:G.ZodEffects,effect:t,...i(s)}),F.createWithPreprocess=(e,t,s)=>new F({schema:t,effect:{type:"preprocess",transform:e},typeName:G.ZodEffects,...i(s)});class K extends d{_parse(e){return this._getType(e)===n.ZodParsedType.undefined?s.OK(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodOptional=K,K.create=(e,t)=>new K({innerType:e,typeName:G.ZodOptional,...i(t)});class $ extends d{_parse(e){return this._getType(e)===n.ZodParsedType.null?s.OK(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodNullable=$,$.create=(e,t)=>new $({innerType:e,typeName:G.ZodNullable,...i(t)});class J extends d{_parse(e){const{ctx:t}=this._processInputParams(e);let s=t.data;return t.parsedType===n.ZodParsedType.undefined&&(s=this._def.defaultValue()),this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}e.ZodDefault=J,J.create=(e,t)=>new K({innerType:e,typeName:G.ZodOptional,...i(t)});class W extends d{_parse(e){if(this._getType(e)!==n.ZodParsedType.nan){const t=this._getOrReturnCtx(e);return s.addIssueToContext(t,{code:r.ZodIssueCode.invalid_type,expected:n.ZodParsedType.nan,received:t.parsedType}),s.INVALID}return{status:"valid",value:e.data}}}e.ZodNaN=W,W.create=e=>new W({typeName:G.ZodNaN,...i(e)});var G;e.custom=(e,t={},s)=>e?C.create().superRefine(((n,r)=>{if(!e(n)){const e="function"==typeof t?t(n):t,a="string"==typeof e?{message:e}:e;r.addIssue({code:"custom",...a,fatal:s})}})):C.create(),e.late={object:Z.lazycreate},function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodPromise="ZodPromise"}(G=e.ZodFirstPartyTypeKind||(e.ZodFirstPartyTypeKind={}));e.instanceof=(t,s={message:`Input not instance of ${t.name}`})=>e.custom((e=>e instanceof t),s,!0);const H=p.create;e.string=H;const q=m.create;e.number=q;const Q=W.create;e.nan=Q;const Y=g.create;e.bigint=Y;const X=f.create;e.boolean=X;const ee=v.create;e.date=ee;const te=y.create;e.undefined=te;const se=x.create;e.null=se;const ne=C.create;e.any=ne;const re=b.create;e.unknown=re;const ae=w.create;e.never=ae;const oe=_.create;e.void=oe;const ie=I.create;e.array=ie;const de=Z.create;e.object=de;const ce=Z.strictCreate;e.strictObject=ce;const ue=S.create;e.union=ue;const le=N.create;e.discriminatedUnion=le;const pe=M.create;e.intersection=pe;const he=D.create;e.tuple=he;const me=j.create;e.record=me;const ge=k.create;e.map=ge;const fe=A.create;e.set=fe;const ve=L.create;e.function=ve;const ye=z.create;e.lazy=ye;const xe=R.create;e.literal=xe;const Ce=B.create;e.enum=Ce;const be=V.create;e.nativeEnum=be;const we=U.create;e.promise=we;const _e=F.create;e.effect=_e,e.transformer=_e;const Ie=K.create;e.optional=Ie;const Te=$.create;e.nullable=Te;const Pe=F.createWithPreprocess;e.preprocess=Pe;e.ostring=()=>H().optional();e.onumber=()=>q().optional();e.oboolean=()=>X().optional()}(Re),function(t){var s=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),n=e&&e.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||s(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.ZodParsedType=t.getParsedType=void 0,n(ke,t),n(ze,t);var r=Le;Object.defineProperty(t,"getParsedType",{enumerable:!0,get:function(){return r.getParsedType}}),Object.defineProperty(t,"ZodParsedType",{enumerable:!0,get:function(){return r.ZodParsedType}}),n(Re,t),n(Ae,t)}(je),function(t){var s=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),n=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&s(t,e,r);return n(t,e),t},a=e&&e.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||s(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.z=void 0;const o=r(je);t.z=o,a(je,t),t.default=o}(De),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Session=e.CDP=e.Log=e.BrowsingContext=e.Script=e.CommonDataTypes=e.parseObject=void 0;const t=De,s=w,n=(0,f.log)(f.LogType.commandParser);function r(e,t){const r=t.safeParse(e);if(r.success)return r.data;n(`Command ${JSON.stringify(e)} parse failed: ${JSON.stringify(r)}.`);const a=r.error.errors.map((e=>`${e.message} in ${e.path.map((e=>JSON.stringify(e))).join("/")}.`)).join(" ");throw new s.Message.InvalidArgumentException(a)}var a,o,i,d;e.parseObject=r,function(e){e.SharedReferenceSchema=t.z.object({sharedId:t.z.string().min(1)}),e.RemoteReferenceSchema=t.z.object({handle:t.z.string().min(1)});const s=t.z.object({type:t.z.literal("undefined")}),n=t.z.object({type:t.z.literal("null")}),r=t.z.object({type:t.z.literal("string"),value:t.z.string()}),a=t.z.enum(["NaN","-0","Infinity","+Infinity","-Infinity"]),o=t.z.object({type:t.z.literal("number"),value:t.z.union([a,t.z.number()])}),i=t.z.object({type:t.z.literal("boolean"),value:t.z.boolean()}),d=t.z.object({type:t.z.literal("bigint"),value:t.z.string()}),c=t.z.union([s,n,r,o,i,d]);e.LocalValueSchema=t.z.lazy((()=>t.z.union([c,p,h,g,f,v,y])));const u=t.z.union([e.SharedReferenceSchema,e.RemoteReferenceSchema,e.LocalValueSchema]),l=t.z.array(u),p=t.z.lazy((()=>t.z.object({type:t.z.literal("array"),value:l}))),h=t.z.object({type:t.z.literal("date"),value:t.z.string().min(1)}),m=t.z.lazy((()=>t.z.tuple([t.z.union([t.z.string(),u]),u]))),g=t.z.object({type:t.z.literal("map"),value:t.z.array(m)}),f=t.z.object({type:t.z.literal("object"),value:t.z.array(m)}),v=t.z.lazy((()=>t.z.object({type:t.z.literal("regexp"),value:t.z.object({pattern:t.z.string(),flags:t.z.string().optional()})}))),y=t.z.lazy((()=>t.z.object({type:t.z.literal("set"),value:l})));e.BrowsingContextSchema=t.z.string()}(a=e.CommonDataTypes||(e.CommonDataTypes={})),function(e){const s=t.z.enum(["window","dedicated-worker","shared-worker","service-worker","worker","paint-worklet","audio-worklet","worklet"]);e.GetRealmsParametersSchema=t.z.object({context:a.BrowsingContextSchema.optional(),type:s.optional()}),e.parseGetRealmsParams=function(t){return r(t,e.GetRealmsParametersSchema)};const n=t.z.object({context:a.BrowsingContextSchema,sandbox:t.z.string().optional()}),o=t.z.object({realm:t.z.string().min(1)}),i=t.z.union([o,n]),d=t.z.enum(["root","none"]),c=t.z.object({expression:t.z.string(),awaitPromise:t.z.boolean(),target:i,resultOwnership:d.optional()});e.parseEvaluateParams=function(e){return r(e,c)};const u=t.z.object({target:i,handles:t.z.array(t.z.string())});e.parseDisownParams=function(e){return r(e,u)};const l=t.z.union([a.RemoteReferenceSchema,a.SharedReferenceSchema,a.LocalValueSchema]),p=t.z.object({functionDeclaration:t.z.string(),target:i,arguments:t.z.array(l).optional(),this:l.optional(),awaitPromise:t.z.boolean(),resultOwnership:d.optional()});e.parseCallFunctionParams=function(e){return r(e,p)}}(e.Script||(e.Script={})),function(e){const s=t.z.object({maxDepth:t.z.number().int().nonnegative().max(9007199254740991).optional(),root:a.BrowsingContextSchema.optional()});e.parseGetTreeParams=function(e){return r(e,s)};const n=t.z.enum(["none","interactive","complete"]),o=t.z.object({context:a.BrowsingContextSchema,url:t.z.string().url(),wait:n.optional()});e.parseNavigateParams=function(e){return r(e,o)};const i=t.z.object({type:t.z.enum(["tab","window"]),referenceContext:a.BrowsingContextSchema.optional()});e.parseCreateParams=function(e){return r(e,i)};const d=t.z.object({context:a.BrowsingContextSchema});var c;e.parseCloseParams=function(e){return r(e,d)},e.AllEvents="browsingContext",(c=e.EventNames||(e.EventNames={})).LoadEvent="browsingContext.load",c.DomContentLoadedEvent="browsingContext.domContentLoaded",c.ContextCreatedEvent="browsingContext.contextCreated",c.ContextDestroyedEvent="browsingContext.contextDestroyed"}(o=e.BrowsingContext||(e.BrowsingContext={})),function(e){e.AllEvents="log",(e.EventNames||(e.EventNames={})).LogEntryAddedEvent="log.entryAdded"}(i=e.Log||(e.Log={})),function(e){const s=t.z.object({cdpMethod:t.z.string(),cdpParams:t.z.object({}).passthrough(),cdpSession:t.z.string().optional()});e.parseSendCommandParams=function(e){return r(e,s)};const n=t.z.object({context:a.BrowsingContextSchema});e.parseGetSessionParams=function(e){return r(e,n)},e.AllEvents="cdp",(e.EventNames||(e.EventNames={})).EventReceivedEvent="cdp.eventReceived"}(d=e.CDP||(e.CDP={})),function(e){const s=t.z.enum([o.AllEvents,o.EventNames.ContextCreatedEvent,o.EventNames.ContextDestroyedEvent,o.EventNames.DomContentLoadedEvent,o.EventNames.LoadEvent,i.AllEvents,i.EventNames.LogEntryAddedEvent,d.AllEvents,d.EventNames.EventReceivedEvent]),n=t.z.object({events:t.z.array(s),contexts:t.z.array(a.BrowsingContextSchema).optional()});e.parseSubscribeParams=function(e){return r(e,n)}}(e.Session||(e.Session={}))}(Me);
 /**
 	 * Copyright 2021 Google LLC.
 	 * Copyright (c) Microsoft Corporation.
@@ -17,5 +17,5 @@
 	 *
 	 * @license
 	 */
-var Ve=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s);var r=Object.getOwnPropertyDescriptor(t,s);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,n,r)}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),Ue=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Fe=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&Ve(t,e,s);return Ue(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const Ke=s,$e=h,Je=f,We=Oe,Ge=x,qe=Fe(Ne),He=(0,Je.log)(Je.LogType.system),Qe=(0,Je.log)(Je.LogType.bidi),Ye=async function(){return await new Promise((e=>{window.setSelfTargetId=function(t){He("current target ID: "+t),e(t)}}))}();(async()=>{We.MapperTabPage.generatePage();const e=await Ye,t=await async function(e){class t{_onMessage=null;constructor(){window.onBidiMessage=e=>{let s;Qe("received < ",e);try{s=t.#$e(e)}catch(t){return void this.#Je(e,"invalid argument",t.message,null)}this._onMessage&&this._onMessage.call(null,s)}}setOnMessage(e){this._onMessage=e}async sendMessage(e){const t=JSON.stringify(e);Qe("sent > ",t),window.sendBidiResponse(t)}close(){this._onMessage=null,window.onBidiMessage=null}#Je(e,s,n,r){const a=t.#We(e,s,n);r?this.sendMessage({...a,channel:r}):this.sendMessage(a)}static#Ge(e){return null===e?"null":Array.isArray(e)?"array":typeof e}static#We(e,s,n){let r;try{const s=JSON.parse(e);"object"===t.#Ge(s)&&"id"in s&&(r=s.id)}catch{}return{id:r,error:s,message:n}}static#$e(e){let s;try{s=JSON.parse(e)}catch{throw new Error("Cannot parse data as JSON")}const n=t.#Ge(s);if("object"!==n)throw new Error(`Expected JSON object but got ${n}`);const{id:r,method:a,params:o}=s,i=t.#Ge(r);if("number"!==i||!Number.isInteger(r)||r<0)throw new Error(`Expected unsigned integer but got ${i}`);const d=t.#Ge(a);if("string"!==d)throw new Error(`Expected string method but got ${d}`);const c=t.#Ge(o);if("object"!==c)throw new Error(`Expected object params but got ${c}`);let u=s.channel;if(void 0!==u){const e=t.#Ge(u);if("string"!==e)throw new Error(`Expected string channel but got ${e}`);""===u&&(u=void 0)}return{id:r,method:a,params:o,channel:u}}}return await $e.BidiServer.createAndStart(new t,function(){class e{_onMessage=null;constructor(){window.cdp.onmessage=e=>{this._onMessage&&this._onMessage.call(null,e)}}setOnMessage(e){this._onMessage=e}async sendMessage(e){window.cdp.send(e)}close(){this._onMessage=null,window.cdp.onmessage=null}}return new Ke.CdpConnection(new e,(0,Je.log)(Je.LogType.cdp))}(),e,new Xe)}(e);He("launched"),t.emitOutgoingMessage(Ge.OutgoingBidiMessage.createResolved({launched:!0},null))})();class Xe{parseGetRealmsParams(e){return qe.Script.parseGetRealmsParams(e)}parseCallFunctionParams(e){return qe.Script.parseCallFunctionParams(e)}parseEvaluateParams(e){return qe.Script.parseEvaluateParams(e)}parseDisownParams(e){return qe.Script.parseDisownParams(e)}parseSendCommandParams(e){return qe.CDP.parseSendCommandParams(e)}parseGetSessionParams(e){return qe.CDP.parseGetSessionParams(e)}parseNavigateParams(e){return qe.BrowsingContext.parseNavigateParams(e)}parseGetTreeParams(e){return qe.BrowsingContext.parseGetTreeParams(e)}parseSubscribeParams(e){return qe.Session.parseSubscribeParams(e)}parseCreateParams(e){return qe.BrowsingContext.parseCreateParams(e)}parseCloseParams(e){return qe.BrowsingContext.parseCloseParams(e)}}}();
+var Ve=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s);var r=Object.getOwnPropertyDescriptor(t,s);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,n,r)}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),Ue=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Fe=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&Ve(t,e,s);return Ue(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const Ke=s,$e=m,Je=f,We=Ne,Ge=x,He=Fe(Me),qe=(0,Je.log)(Je.LogType.system),Qe=(0,Je.log)(Je.LogType.bidi),Ye=async function(){return await new Promise((e=>{window.setSelfTargetId=t=>{qe("current target ID: "+t),e(t)}}))}();(async()=>{We.MapperTabPage.generatePage();const e=await Ye,t=await async function(e){class t{_onMessage=null;constructor(){window.onBidiMessage=e=>{let s;Qe("received < ",e);try{s=t.#We(e)}catch(t){return void this.#Ge(e,"invalid argument",t.message,null)}this._onMessage&&this._onMessage.call(null,s)}}setOnMessage(e){this._onMessage=e}async sendMessage(e){const t=JSON.stringify(e);Qe("sent > ",t),window.sendBidiResponse(t)}close(){this._onMessage=null,window.onBidiMessage=null}#Ge(e,s,n,r){const a=t.#He(e,s,n);r?this.sendMessage({...a,channel:r}):this.sendMessage(a)}static#qe(e){return null===e?"null":Array.isArray(e)?"array":typeof e}static#He(e,s,n){let r;try{const s=JSON.parse(e);"object"===t.#qe(s)&&"id"in s&&(r=s.id)}catch{}return{id:r,error:s,message:n}}static#We(e){let s;try{s=JSON.parse(e)}catch{throw new Error("Cannot parse data as JSON")}const n=t.#qe(s);if("object"!==n)throw new Error(`Expected JSON object but got ${n}`);const{id:r,method:a,params:o}=s,i=t.#qe(r);if("number"!==i||!Number.isInteger(r)||r<0)throw new Error(`Expected unsigned integer but got ${i}`);const d=t.#qe(a);if("string"!==d)throw new Error(`Expected string method but got ${d}`);const c=t.#qe(o);if("object"!==c)throw new Error(`Expected object params but got ${c}`);let u=s.channel;if(void 0!==u){const e=t.#qe(u);if("string"!==e)throw new Error(`Expected string channel but got ${e}`);""===u&&(u=void 0)}return{id:r,method:a,params:o,channel:u}}}return await $e.BidiServer.createAndStart(new t,function(){class e{_onMessage=null;constructor(){window.cdp.onmessage=e=>{this._onMessage&&this._onMessage.call(null,e)}}setOnMessage(e){this._onMessage=e}async sendMessage(e){window.cdp.send(e)}close(){this._onMessage=null,window.cdp.onmessage=null}}return new Ke.CdpConnection(new e,(0,Je.log)(Je.LogType.cdp))}(),e,new Xe)}(e);qe("launched"),t.emitOutgoingMessage(Ge.OutgoingBidiMessage.createResolved({launched:!0},null))})();class Xe{parseGetRealmsParams(e){return He.Script.parseGetRealmsParams(e)}parseCallFunctionParams(e){return He.Script.parseCallFunctionParams(e)}parseEvaluateParams(e){return He.Script.parseEvaluateParams(e)}parseDisownParams(e){return He.Script.parseDisownParams(e)}parseSendCommandParams(e){return He.CDP.parseSendCommandParams(e)}parseGetSessionParams(e){return He.CDP.parseGetSessionParams(e)}parseNavigateParams(e){return He.BrowsingContext.parseNavigateParams(e)}parseGetTreeParams(e){return He.BrowsingContext.parseGetTreeParams(e)}parseSubscribeParams(e){return He.Session.parseSubscribeParams(e)}parseCreateParams(e){return He.BrowsingContext.parseCreateParams(e)}parseCloseParams(e){return He.BrowsingContext.parseCloseParams(e)}}}();
 //# sourceMappingURL=mapperTab.js.map
diff --git a/third_party/blink/common/loader/mime_sniffing_throttle.cc b/third_party/blink/common/loader/mime_sniffing_throttle.cc
index 2a2bdfab..867e4d2 100644
--- a/third_party/blink/common/loader/mime_sniffing_throttle.cc
+++ b/third_party/blink/common/loader/mime_sniffing_throttle.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/public/common/loader/mime_sniffing_throttle.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/third_party/blink/common/loader/mime_sniffing_url_loader.cc b/third_party/blink/common/loader/mime_sniffing_url_loader.cc
index 4279c40c..3f5a3ba2 100644
--- a/third_party/blink/common/loader/mime_sniffing_url_loader.cc
+++ b/third_party/blink/common/loader/mime_sniffing_url_loader.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "net/base/mime_sniffer.h"
 #include "services/network/public/cpp/record_ontransfersizeupdate_utils.h"
diff --git a/third_party/blink/common/loader/throttling_url_loader_unittest.cc b/third_party/blink/common/loader/throttling_url_loader_unittest.cc
index b6a55192..c8269cf6 100644
--- a/third_party/blink/common/loader/throttling_url_loader_unittest.cc
+++ b/third_party/blink/common/loader/throttling_url_loader_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/notreached.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/third_party/blink/common/media/watch_time_reporter.cc b/third_party/blink/common/media/watch_time_reporter.cc
index 5c6f10e..2762b49 100644
--- a/third_party/blink/common/media/watch_time_reporter.cc
+++ b/third_party/blink/common/media/watch_time_reporter.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/containers/cxx20_erase.h"
 #include "base/power_monitor/power_monitor.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "media/base/pipeline_status.h"
 #include "media/base/timestamp_constants.h"
diff --git a/third_party/blink/common/messaging/web_message_port.cc b/third_party/blink/common/messaging/web_message_port.cc
index 36136d2..897d165 100644
--- a/third_party/blink/common/messaging/web_message_port.cc
+++ b/third_party/blink/common/messaging/web_message_port.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/public/common/messaging/web_message_port.h"
 
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/common/messaging/message_port_channel.h"
 #include "third_party/blink/public/common/messaging/string_message_codec.h"
 #include "third_party/blink/public/common/messaging/transferable_message.h"
diff --git a/third_party/blink/perf_tests/layout/multicol/deeply-nested-tables-2.html b/third_party/blink/perf_tests/layout/multicol/deeply-nested-tables-2.html
new file mode 100644
index 0000000..234c0c5d
--- /dev/null
+++ b/third_party/blink/perf_tests/layout/multicol/deeply-nested-tables-2.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<script src="../../resources/runner.js"></script>
+<pre id="log"></pre>
+<!-- We only want to measure layout performance, so try to avoid irrelevant things, such as painting. -->
+<div style="overflow:hidden; width:0; height:0;">
+  <div id="target" style="columns:2; column-fill:auto; height:100px;">
+    <div style="display:table;">
+      <div style="display:table;">
+        <div style="display:table;">
+          <div style="display:table;">
+            <div style="display:table;">
+              <div style="display:table;">
+                <div style="display:table;">
+                  <div style="display:table;">
+                    <div style="display:table;">
+                      <div style="display:table;">
+                        <div style="display:table;">
+                          <div style="display:table;">
+                            <div style="display:table;">
+                              <div style="display:table;">
+                                <div style="display:table;">
+                                  <div style="display:table;">
+                                    <div style="height:150px;"></div>
+                                  </div>
+                                </div>
+                              </div>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+<script>
+  var target = document.getElementById("target");
+  var style = target.style;
+
+  function test() {
+    style.display = "none";
+    PerfTestRunner.forceLayout();
+    style.display = "block";
+    PerfTestRunner.forceLayout();
+  }
+
+  PerfTestRunner.measureRunsPerSecond({
+    description: "Measures performance of multicol layout in deeply nested tables.",
+    run: test
+  });
+</script>
diff --git a/third_party/blink/public/common/browser_interface_broker_proxy.h b/third_party/blink/public/common/browser_interface_broker_proxy.h
index 95b7978..c5e74f5e 100644
--- a/third_party/blink/public/common/browser_interface_broker_proxy.h
+++ b/third_party/blink/public/common/browser_interface_broker_proxy.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_BROWSER_INTERFACE_BROKER_PROXY_H_
 #define THIRD_PARTY_BLINK_PUBLIC_COMMON_BROWSER_INTERFACE_BROKER_PROXY_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/generic_pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/blink/public/common/common_export.h"
diff --git a/third_party/blink/public/common/loader/mime_sniffing_throttle.h b/third_party/blink/public/common/loader/mime_sniffing_throttle.h
index 7a2fbdb8..b74b7e8 100644
--- a/third_party/blink/public/common/loader/mime_sniffing_throttle.h
+++ b/third_party/blink/public/common/loader/mime_sniffing_throttle.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_COMMON_LOADER_MIME_SNIFFING_THROTTLE_H_
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
 #include "third_party/blink/public/common/common_export.h"
 #include "third_party/blink/public/common/loader/url_loader_throttle.h"
diff --git a/third_party/blink/public/common/loader/mime_sniffing_url_loader.h b/third_party/blink/public/common/loader/mime_sniffing_url_loader.h
index 8e074006..2e6ebb9 100644
--- a/third_party/blink/public/common/loader/mime_sniffing_url_loader.h
+++ b/third_party/blink/public/common/loader/mime_sniffing_url_loader.h
@@ -11,6 +11,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_piece.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/third_party/blink/public/common/loader/throttling_url_loader.h b/third_party/blink/public/common/loader/throttling_url_loader.h
index 694515e..11b6513 100644
--- a/third_party/blink/public/common/loader/throttling_url_loader.h
+++ b/third_party/blink/public/common/loader/throttling_url_loader.h
@@ -12,7 +12,6 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_piece.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/third_party/blink/public/common/messaging/web_message_port.h b/third_party/blink/public/common/messaging/web_message_port.h
index 154f5241..6e1ac8b 100644
--- a/third_party/blink/public/common/messaging/web_message_port.h
+++ b/third_party/blink/public/common/messaging/web_message_port.h
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/connector.h"
 #include "mojo/public/cpp/bindings/message.h"
 #include "third_party/blink/public/common/common_export.h"
diff --git a/third_party/blink/public/mojom/smart_card/smart_card.mojom b/third_party/blink/public/mojom/smart_card/smart_card.mojom
index 123272de..5c16557 100644
--- a/third_party/blink/public/mojom/smart_card/smart_card.mojom
+++ b/third_party/blink/public/mojom/smart_card/smart_card.mojom
@@ -6,6 +6,30 @@
 
 import "services/device/public/mojom/smart_card.mojom";
 
+// Maps to the namesake enum in
+// https://github.com/WICG/web-smart-card/blob/main/README.md#web-idl
+enum SmartCardResponseCode {
+  kNoService,
+  kNoSmartCard,
+  kNotReady,
+  kNotTransacted,
+  kProtoMismatch,
+  kReaderUnavailable,
+  kRemovedCard,
+  kResetCard,
+  kSharingViolation,
+  kSystemCancelled,
+  kUnpoweredCard,
+  kUnresponsiveCard,
+  kUnsupportedCard,
+  kUnsupportedFeature
+};
+
+union SmartCardGetReadersResult {
+  SmartCardResponseCode response_code;
+  array<device.mojom.SmartCardReaderInfo> readers;
+};
+
 // Interface for accessing smart card readers from the render process.
 // The implementation is responsible for checking access permissions.
 interface SmartCardService {
@@ -16,9 +40,11 @@
   RegisterClient(pending_associated_remote<device.mojom.SmartCardManagerClient> client)
       => (bool can_notify_added_removed);
 
-  // Enumerates all smart card readers in the system. Returns an empty array
-  // if the client is denied access to smart cards.
-  GetReaders() => (array<device.mojom.SmartCardReaderInfo> readers);
+  // Enumerates all smart card readers in the system.
+  // If the client is denied access to smart cards, the call succeeds but the
+  // `result.readers` array will be empty.
+  // If the call fails a `result.response_code` will be returned instead.
+  GetReaders() => (SmartCardGetReadersResult result);
 
   // TODO(crbug.com/1386175): Expose SmartCardConnection
 };
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
index 6e419a1..1a9c6e5d 100644
--- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
+++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -3774,6 +3774,9 @@
   kLinkRelPrerenderSameOrigin = 4433,
   kLinkRelPrerenderSameSiteCrossOrigin = 4434,
   kLinkRelPrerenderCrossSite = 4435,
+  kCSSBackgroundClipBorder = 4436,
+  kCSSBackgroundClipContent = 4437,
+  kCSSBackgroundClipPadding = 4438,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/interface_registry.h b/third_party/blink/public/platform/interface_registry.h
index 27524edb0..0abdcad 100644
--- a/third_party/blink/public/platform/interface_registry.h
+++ b/third_party/blink/public/platform/interface_registry.h
@@ -9,6 +9,7 @@
 
 #include "base/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "third_party/blink/public/platform/web_common.h"
@@ -20,10 +21,6 @@
 #include "third_party/blink/renderer/platform/wtf/functional.h"  // nogncheck
 #endif
 
-namespace base {
-class SingleThreadTaskRunner;
-}
-
 namespace blink {
 
 using InterfaceFactory =
diff --git a/third_party/blink/public/platform/internet_disconnected_web_url_loader.h b/third_party/blink/public/platform/internet_disconnected_web_url_loader.h
index 8e358a86..5b119b6 100644
--- a/third_party/blink/public/platform/internet_disconnected_web_url_loader.h
+++ b/third_party/blink/public/platform/internet_disconnected_web_url_loader.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
diff --git a/third_party/blink/public/platform/modules/mediastream/web_platform_media_stream_source.h b/third_party/blink/public/platform/modules/mediastream/web_platform_media_stream_source.h
index a13a09f9..57570063 100644
--- a/third_party/blink/public/platform/modules/mediastream/web_platform_media_stream_source.h
+++ b/third_party/blink/public/platform/modules/mediastream/web_platform_media_stream_source.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_MEDIASTREAM_WEB_PLATFORM_MEDIA_STREAM_SOURCE_H_
 
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/mediastream/media_stream_controls.h"
 #include "third_party/blink/public/common/mediastream/media_stream_request.h"
 #include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h"
diff --git a/third_party/blink/public/platform/resource_load_info_notifier_wrapper.h b/third_party/blink/public/platform/resource_load_info_notifier_wrapper.h
index 7fcfb99..023d67a6 100644
--- a/third_party/blink/public/platform/resource_load_info_notifier_wrapper.h
+++ b/third_party/blink/public/platform/resource_load_info_notifier_wrapper.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_RESOURCE_LOAD_INFO_NOTIFIER_WRAPPER_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_RESOURCE_LOAD_INFO_NOTIFIER_WRAPPER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "build/build_config.h"
 #include "net/base/request_priority.h"
diff --git a/third_party/blink/public/platform/web_dedicated_or_shared_worker_fetch_context.h b/third_party/blink/public/platform/web_dedicated_or_shared_worker_fetch_context.h
index 95e09007..8c341bfc 100644
--- a/third_party/blink/public/platform/web_dedicated_or_shared_worker_fetch_context.h
+++ b/third_party/blink/public/platform/web_dedicated_or_shared_worker_fetch_context.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
diff --git a/third_party/blink/public/platform/web_navigation_body_loader.h b/third_party/blink/public/platform/web_navigation_body_loader.h
index 68628252..340e385f 100644
--- a/third_party/blink/public/platform/web_navigation_body_loader.h
+++ b/third_party/blink/public/platform/web_navigation_body_loader.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_NAVIGATION_BODY_LOADER_H_
 
 #include "base/containers/span.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "services/network/public/mojom/url_loader.mojom-forward.h"
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
diff --git a/third_party/blink/public/platform/web_worker_fetch_context.h b/third_party/blink/public/platform/web_worker_fetch_context.h
index 64cb9ba..ee83fa2b 100644
--- a/third_party/blink/public/platform/web_worker_fetch_context.h
+++ b/third_party/blink/public/platform/web_worker_fetch_context.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/mojom/url_loader_factory.mojom-shared.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/service_worker/controller_service_worker_mode.mojom-shared.h"
diff --git a/third_party/blink/public/web/web_frame_widget.h b/third_party/blink/public/web/web_frame_widget.h
index 6264d51..e945732 100644
--- a/third_party/blink/public/web/web_frame_widget.h
+++ b/third_party/blink/public/web/web_frame_widget.h
@@ -48,6 +48,10 @@
 #include "ui/gfx/ca_layer_result.h"
 #include "ui/gfx/geometry/rect.h"
 
+namespace base {
+class SingleThreadTaskRunner;
+}
+
 namespace cc {
 struct ApplyViewportChangesArgs;
 class LayerTreeHost;
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
index deef767..b1d3500 100644
--- a/third_party/blink/public/web/web_local_frame.h
+++ b/third_party/blink/public/web/web_local_frame.h
@@ -56,6 +56,10 @@
 #include "ui/gfx/range/range.h"
 #include "v8/include/v8-forward.h"
 
+namespace base {
+class SingleThreadTaskRunner;
+}
+
 namespace cc {
 class PaintCanvas;
 }  // namespace cc
diff --git a/third_party/blink/renderer/BUILD.gn b/third_party/blink/renderer/BUILD.gn
index 28ad2d01..2c645ad 100644
--- a/third_party/blink/renderer/BUILD.gn
+++ b/third_party/blink/renderer/BUILD.gn
@@ -104,6 +104,15 @@
     }
   }
 
+  if (is_clang && clang_use_chrome_plugins) {
+    cflags += [
+      "-Xclang",
+      "-plugin-arg-find-bad-constructs",
+      "-Xclang",
+      "check-blink-data-member-type",
+    ]
+  }
+
   if (is_clang && blink_gc_plugin && clang_use_chrome_plugins) {
     # The plugin is built directly into clang, so there's no need to load it
     # dynamically.
diff --git a/third_party/blink/renderer/bindings/core/v8/script_cache_consumer.cc b/third_party/blink/renderer/bindings/core/v8/script_cache_consumer.cc
index 907978e..1b73fc6 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_cache_consumer.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_cache_consumer.cc
@@ -7,6 +7,7 @@
 #include <atomic>
 #include "base/bind.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_cache_consumer_client.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_code_cache.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
index eef2a7f..75879511 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
@@ -9,6 +9,8 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/threading/thread_restrictions.h"
 #include "mojo/public/cpp/system/wait.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_threaded_test.cc b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_threaded_test.cc
index 89fac2f..b918c36 100644
--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_threaded_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_threaded_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
 
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "third_party/blink/renderer/bindings/core/v8/serialization/unpacked_serialized_script_value.h"
 #include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
index 24001ea..7af45f9d 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
@@ -9,6 +9,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/crash/core/common/crash_key.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/controller/blink_initializer.cc b/third_party/blink/renderer/controller/blink_initializer.cc
index 3fd4a45..52094e5 100644
--- a/third_party/blink/renderer/controller/blink_initializer.cc
+++ b/third_party/blink/renderer/controller/blink_initializer.cc
@@ -35,6 +35,7 @@
 
 #include "base/allocator/partition_allocator/page_allocator.h"
 #include "base/command_line.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/binder_map.h"
 #include "third_party/blink/public/common/features.h"
@@ -54,7 +55,6 @@
 #include "third_party/blink/renderer/core/execution_context/agent.h"
 #include "third_party/blink/renderer/core/frame/display_cutout_client_impl.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
-#include "third_party/blink/renderer/core/html/parser/literal_buffer.h"
 #include "third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h"
 #include "third_party/blink/renderer/platform/disk_data_allocator.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -103,12 +103,6 @@
   }
 };
 
-// See description of `g_literal_buffer_create_string_with_encoding` in
-// LiteralBuffer as to what this controls.
-BASE_FEATURE(kLiteralBufferCreateStringWithEncoding,
-             "LiteralBufferCreateStringWithEncoding",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 Thread::TaskObserver* g_end_of_task_runner = nullptr;
 
 BlinkInitializer& GetBlinkInitializer() {
@@ -163,9 +157,6 @@
 
   // Initialize performance manager.
   RendererResourceCoordinatorImpl::MaybeInitialize();
-
-  g_literal_buffer_create_string_with_encoding =
-      base::FeatureList::IsEnabled(kLiteralBufferCreateStringWithEncoding);
 }
 
 }  // namespace
diff --git a/third_party/blink/renderer/controller/blink_leak_detector.cc b/third_party/blink/renderer/controller/blink_leak_detector.cc
index 8a155f24..3acd7ee 100644
--- a/third_party/blink/renderer/controller/blink_leak_detector.cc
+++ b/third_party/blink/renderer/controller/blink_leak_detector.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/controller/blink_leak_detector.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
diff --git a/third_party/blink/renderer/controller/blink_leak_detector.h b/third_party/blink/renderer/controller/blink_leak_detector.h
index 34d32852..5a2db2f 100644
--- a/third_party/blink/renderer/controller/blink_leak_detector.h
+++ b/third_party/blink/renderer/controller/blink_leak_detector.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CONTROLLER_BLINK_LEAK_DETECTOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_CONTROLLER_BLINK_LEAK_DETECTOR_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/types/pass_key.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/mojom/leak_detector/leak_detector.mojom-blink.h"
diff --git a/third_party/blink/renderer/controller/highest_pmf_reporter.cc b/third_party/blink/renderer/controller/highest_pmf_reporter.cc
index 0792313..7137e64 100644
--- a/third_party/blink/renderer/controller/highest_pmf_reporter.cc
+++ b/third_party/blink/renderer/controller/highest_pmf_reporter.cc
@@ -6,6 +6,7 @@
 
 #include <limits>
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
diff --git a/third_party/blink/renderer/controller/memory_usage_monitor.cc b/third_party/blink/renderer/controller/memory_usage_monitor.cc
index 3de8f5f..0854504 100644
--- a/third_party/blink/renderer/controller/memory_usage_monitor.cc
+++ b/third_party/blink/renderer/controller/memory_usage_monitor.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/controller/memory_usage_monitor.h"
 
 #include "base/observer_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h"
 #include "third_party/blink/renderer/platform/heap/process_heap.h"
 #include "third_party/blink/renderer/platform/scheduler/public/main_thread.h"
diff --git a/third_party/blink/renderer/controller/oom_intervention_impl.cc b/third_party/blink/renderer/controller/oom_intervention_impl.cc
index 87add8d..798fb8bab 100644
--- a/third_party/blink/renderer/controller/oom_intervention_impl.cc
+++ b/third_party/blink/renderer/controller/oom_intervention_impl.cc
@@ -12,6 +12,7 @@
 #include "base/debug/crash_logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_gc_for_context_dispose.h"
diff --git a/third_party/blink/renderer/controller/oom_intervention_impl.h b/third_party/blink/renderer/controller/oom_intervention_impl.h
index 00b2bf05..d9d3e71 100644
--- a/third_party/blink/renderer/controller/oom_intervention_impl.h
+++ b/third_party/blink/renderer/controller/oom_intervention_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/gtest_prod_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/types/pass_key.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/third_party/blink/renderer/controller/performance_manager/v8_worker_memory_reporter.cc b/third_party/blink/renderer/controller/performance_manager/v8_worker_memory_reporter.cc
index db974e7..a6a9de93 100644
--- a/third_party/blink/renderer/controller/performance_manager/v8_worker_memory_reporter.cc
+++ b/third_party/blink/renderer/controller/performance_manager/v8_worker_memory_reporter.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/core/timing/measure_memory/measure_memory_controller.h"
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
diff --git a/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.cc b/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.cc
index 09a6d1c..90e5b88 100644
--- a/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.cc
+++ b/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.cc
@@ -9,6 +9,7 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h"
diff --git a/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.h b/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.h
index 9954e90..875ff33 100644
--- a/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.h
+++ b/third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CONTROLLER_USER_LEVEL_MEMORY_PRESSURE_SIGNAL_GENERATOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_CONTROLLER_USER_LEVEL_MEMORY_PRESSURE_SIGNAL_GENERATOR_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/controller/controller_export.h"
 #include "third_party/blink/renderer/controller/memory_usage_monitor.h"
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index 59048ca..b5d2ef2 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -97,12 +97,6 @@
   defines = [ "BLINK_CORE_IMPLEMENTATION=1" ]
 
   if (is_clang && clang_use_chrome_plugins) {
-    cflags += [
-      "-Xclang",
-      "-plugin-arg-find-bad-constructs",
-      "-Xclang",
-      "check-blink-data-member-type",
-    ]
     if (use_layout_plugin) {
       cflags += [
         "-Xclang",
diff --git a/third_party/blink/renderer/core/animation/worklet_animation_controller.cc b/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
index bf1a6c9..d670cf2 100644
--- a/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
+++ b/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/animation/worklet_animation_controller.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/animation/document_timeline.h"
 #include "third_party/blink/renderer/core/animation/scroll_timeline.h"
 #include "third_party/blink/renderer/core/animation/worklet_animation_base.h"
diff --git a/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.cc b/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.cc
index f2a1ca9..a67d756 100644
--- a/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.cc
+++ b/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/renderer/core/execution_context/agent.h"
 #include "third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h"
diff --git a/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h b/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h
index 4e98102..3774aed 100644
--- a/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h
+++ b/third_party/blink/renderer/core/animation_frame/worker_animation_frame_provider.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_FRAME_WORKER_ANIMATION_FRAME_PROVIDER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_FRAME_WORKER_ANIMATION_FRAME_PROVIDER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/frame_request_callback_collection.h"
 #include "third_party/blink/renderer/platform/graphics/begin_frame_provider.h"
diff --git a/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc b/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc
index 19e05c0..a15be07 100644
--- a/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc
+++ b/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/annotation/annotation_agent_impl.h"
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
 #include "third_party/blink/renderer/core/annotation/annotation_agent_container_impl.h"
diff --git a/third_party/blink/renderer/core/css/css_font_face_src_value.h b/third_party/blink/renderer/core/css/css_font_face_src_value.h
index 515e345..c704551 100644
--- a/third_party/blink/renderer/core/css/css_font_face_src_value.h
+++ b/third_party/blink/renderer/core/css/css_font_face_src_value.h
@@ -29,6 +29,7 @@
 #include <utility>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_origin_clean.h"
 #include "third_party/blink/renderer/core/css/css_value.h"
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index e3dcfcd..e3cbd03 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -1663,6 +1663,7 @@
       style_builder_template_args: {
         fill_type: "Clip",
       },
+      style_builder_custom_functions: ["value"],
       valid_for_first_letter: true,
       valid_for_first_line: true,
       valid_for_cue: true,
diff --git a/third_party/blink/renderer/core/css/css_selector.cc b/third_party/blink/renderer/core/css/css_selector.cc
index 9999e43..3d5967c5 100644
--- a/third_party/blink/renderer/core/css/css_selector.cc
+++ b/third_party/blink/renderer/core/css/css_selector.cc
@@ -158,6 +158,13 @@
             return 0;
           }
           return MaximumSpecificity(data_.parent_rule_->FirstSelector());
+        case kPseudoNthChild:
+        case kPseudoNthLastChild:
+          if (SelectorList()) {
+            return kClassLikeSpecificity + MaximumSpecificity(SelectorList());
+          } else {
+            return kClassLikeSpecificity;
+          }
         case kPseudoRelativeAnchor:
           return 0;
         // FIXME: PseudoAny should base the specificity on the sub-selectors.
@@ -862,6 +869,18 @@
   builder.Append('|');
 }
 
+static void SerializeSelectorList(const CSSSelectorList* selector_list,
+                                  StringBuilder& builder) {
+  const CSSSelector* first_sub_selector = selector_list->First();
+  for (const CSSSelector* sub_selector = first_sub_selector; sub_selector;
+       sub_selector = CSSSelectorList::Next(*sub_selector)) {
+    if (sub_selector != first_sub_selector) {
+      builder.Append(", ");
+    }
+    builder.Append(sub_selector->SelectorText());
+  }
+}
+
 const CSSSelector* CSSSelector::SerializeCompound(
     StringBuilder& builder) const {
   if (match_ == kTag && !is_implicitly_added_) {
@@ -873,6 +892,7 @@
 
   for (const CSSSelector* simple_selector = this; simple_selector;
        simple_selector = simple_selector->TagHistory()) {
+    bool suppress_selector_list = false;
     if (simple_selector->match_ == kId) {
       builder.Append('#');
       SerializeIdentifier(simple_selector->SerializingValue(), builder);
@@ -915,6 +935,14 @@
             }
           }
 
+          // Only relevant for :nth-child, not :nth-of-type.
+          if (simple_selector->data_.rare_data_->selector_list_ != nullptr) {
+            builder.Append(" of ");
+            SerializeSelectorList(
+                simple_selector->data_.rare_data_->selector_list_, builder);
+            suppress_selector_list = true;
+          }
+
           builder.Append(')');
           break;
         }
@@ -1032,17 +1060,9 @@
       }
     }
 
-    if (simple_selector->SelectorList()) {
+    if (simple_selector->SelectorList() && !suppress_selector_list) {
       builder.Append('(');
-      const CSSSelector* first_sub_selector =
-          simple_selector->SelectorList()->First();
-      for (const CSSSelector* sub_selector = first_sub_selector; sub_selector;
-           sub_selector = CSSSelectorList::Next(*sub_selector)) {
-        if (sub_selector != first_sub_selector) {
-          builder.Append(", ");
-        }
-        builder.Append(sub_selector->SelectorText());
-      }
+      SerializeSelectorList(simple_selector->SelectorList(), builder);
       builder.Append(')');
     }
 
@@ -1252,10 +1272,11 @@
   return false;
 }
 
-void CSSSelector::SetNth(int a, int b) {
+void CSSSelector::SetNth(int a, int b, CSSSelectorList* sub_selectors) {
   CreateRareData();
   data_.rare_data_->bits_.nth_.a_ = a;
   data_.rare_data_->bits_.nth_.b_ = b;
+  data_.rare_data_->selector_list_ = sub_selectors;
 }
 
 bool CSSSelector::MatchNth(unsigned count) const {
diff --git a/third_party/blink/renderer/core/css/css_selector.h b/third_party/blink/renderer/core/css/css_selector.h
index f9e0580..04bb44c1 100644
--- a/third_party/blink/renderer/core/css/css_selector.h
+++ b/third_party/blink/renderer/core/css/css_selector.h
@@ -136,8 +136,8 @@
     kInvalidList,       // Used as a marker in CSSSelectorList.
     kTag,               // Example: div
     kId,                // Example: #id
-    kClass,             // example: .class
-    kPseudoClass,       // Example:  :nth-child(2)
+    kClass,             // Example: .class
+    kPseudoClass,       // Example: :nth-child(2)
     kPseudoElement,     // Example: ::first-line
     kPagePseudoClass,   // ??
     kAttributeExact,    // Example: E[foo="bar"]
@@ -234,7 +234,7 @@
     kPseudoModal,
     kPseudoNoButton,
     kPseudoNot,
-    kPseudoNthChild,
+    kPseudoNthChild,  // Includes :nth-child(An+B of <selector>)
     kPseudoNthLastChild,
     kPseudoNthLastOfType,
     kPseudoNthOfType,
@@ -421,7 +421,7 @@
   void SetContainsPseudoInsideHasPseudoClass();
   void SetContainsComplexLogicalCombinationsInsideHasPseudoClass();
 
-  void SetNth(int a, int b);
+  void SetNth(int a, int b, CSSSelectorList* sub_selector);
   bool MatchNth(unsigned count) const;
 
   static bool IsAdjacentRelation(RelationType relation) {
@@ -537,8 +537,8 @@
         bool contains_complex_logical_combinations_;
       } has_;
     } bits_;
-    QualifiedName attribute_;  // used for attribute selector
-    AtomicString argument_;    // Used for :contains, :lang, :nth-*, :toggle()
+    QualifiedName attribute_;  // Used for attribute selector
+    AtomicString argument_;    // Used for :contains, :lang, :dir, :toggle, etc.
     Member<CSSSelectorList>
         selector_list_;  // Used :is, :not, :-webkit-any, etc.
     std::unique_ptr<Vector<AtomicString>>
diff --git a/third_party/blink/renderer/core/css/css_selector_test.cc b/third_party/blink/renderer/core/css/css_selector_test.cc
index f0da112..b2fecb4 100644
--- a/third_party/blink/renderer/core/css/css_selector_test.cc
+++ b/third_party/blink/renderer/core/css/css_selector_test.cc
@@ -41,6 +41,7 @@
       "[attr] {}"
       "div:hover {}"
       "div:nth-child(2){}"
+      "div:nth-child(2n+1 of .a){}"
       ".class#id { }"
       "#id.class { }"
       "[attr]#id { }"
@@ -66,7 +67,7 @@
       ".a.b .c {}";
 
   sheet.AddCSSRules(css_rules);
-  EXPECT_EQ(29u,
+  EXPECT_EQ(30u,
             sheet.GetRuleSet().RuleCount());  // .a, .b counts as two rules.
 #ifndef NDEBUG
   sheet.GetRuleSet().Show();
@@ -79,19 +80,19 @@
   CSSSelector selector;
 
   // Overflow count - b (max_int - -1 = max_int + 1)
-  selector.SetNth(1, -1);
+  selector.SetNth(1, -1, /*sub_selector=*/nullptr);
   EXPECT_FALSE(selector.MatchNth(max_int));
   // 0 - (min_int) = max_int + 1
-  selector.SetNth(1, min_int);
+  selector.SetNth(1, min_int, /*sub_selector=*/nullptr);
   EXPECT_FALSE(selector.MatchNth(0));
 
   // min_int - 1
-  selector.SetNth(-1, min_int);
+  selector.SetNth(-1, min_int, /*sub_selector=*/nullptr);
   EXPECT_FALSE(selector.MatchNth(1));
 
   // a shouldn't negate to itself (and min_int negates to itself).
   // Note: This test can only fail when using ubsan.
-  selector.SetNth(min_int, 10);
+  selector.SetNth(min_int, 10, /*sub_selector=*/nullptr);
   EXPECT_FALSE(selector.MatchNth(2));
 }
 
diff --git a/third_party/blink/renderer/core/css/media_feature_names.json5 b/third_party/blink/renderer/core/css/media_feature_names.json5
index f3db7192..51787f74 100644
--- a/third_party/blink/renderer/core/css/media_feature_names.json5
+++ b/third_party/blink/renderer/core/css/media_feature_names.json5
@@ -26,9 +26,6 @@
     "device-height",
     "device-width",
     "display-mode",
-    // This has not been standardized and is only available to UA style sheets.
-    // See crbug.com/809165
-    "immersive",
     "inline-size",
     "max-color",
     "max-color-index",
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 9121f75..7d1a4d89 100644
--- a/third_party/blink/renderer/core/css/media_query_evaluator.cc
+++ b/third_party/blink/renderer/core/css/media_query_evaluator.cc
@@ -927,26 +927,6 @@
   return return_value_if_no_parameter;
 }
 
-static bool ImmersiveMediaFeatureEval(const MediaQueryExpValue& value,
-                                      MediaQueryOperator op,
-                                      const MediaValues& media_values) {
-  bool return_value_if_no_parameter;
-  int is_immersive_numeric_value;
-
-  bool immersive = media_values.InImmersiveMode();
-
-  return_value_if_no_parameter = immersive;
-  is_immersive_numeric_value = immersive ? 1 : 0;
-
-  if (value.IsValid()) {
-    float number;
-    return NumberValue(value, number) &&
-           CompareValue(is_immersive_numeric_value, static_cast<int>(number),
-                        op);
-  }
-  return return_value_if_no_parameter;
-}
-
 static bool HoverMediaFeatureEval(const MediaQueryExpValue& value,
                                   MediaQueryOperator,
                                   const MediaValues& media_values) {
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 ac072b9..ea08fa34 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
@@ -188,24 +188,6 @@
     {nullptr, false}  // Do not remove the terminator line.
 };
 
-MediaQueryEvaluatorTestCase g_non_immersive_test_cases[] = {
-    {"(immersive: 1)", false},
-    {"(immersive: 0)", true},
-    {nullptr, false}  // Do not remove the terminator line.
-};
-
-MediaQueryEvaluatorTestCase g_immersive_test_cases[] = {
-    {"(immersive: 1)", true},
-    {"(immersive: 0)", false},
-    {nullptr, false}  // Do not remove the terminator line.
-};
-
-MediaQueryEvaluatorTestCase g_non_ua_sheet_immersive_test_cases[] = {
-    {"(immersive: 1)", false},
-    {"(immersive: 0)", false},
-    {nullptr, false}  // Do not remove the terminator line.
-};
-
 MediaQueryEvaluatorTestCase g_forcedcolors_active_cases[] = {
     {"(forced-colors: active)", true},
     {"(forced-colors: none)", false},
@@ -407,7 +389,6 @@
   data.media_type = media_type_names::kScreen;
   data.strict_mode = true;
   data.display_mode = blink::mojom::DisplayMode::kBrowser;
-  data.immersive_mode = false;
 
   // Default values.
   {
@@ -415,9 +396,6 @@
     MediaQueryEvaluator media_query_evaluator(media_values);
     TestMQEvaluator(g_screen_test_cases, media_query_evaluator);
     TestMQEvaluator(g_viewport_test_cases, media_query_evaluator);
-    TestMQEvaluator(g_non_immersive_test_cases, media_query_evaluator,
-                    kUASheetMode);
-    TestMQEvaluator(g_non_ua_sheet_immersive_test_cases, media_query_evaluator);
   }
 
   // Print values.
@@ -439,17 +417,6 @@
     data.color_bits_per_component = 24;
     data.monochrome_bits_per_component = 0;
   }
-
-  // Immersive values.
-  {
-    data.immersive_mode = true;
-    auto* media_values = MakeGarbageCollected<MediaValuesCached>(data);
-    MediaQueryEvaluator media_query_evaluator(media_values);
-    TestMQEvaluator(g_immersive_test_cases, media_query_evaluator,
-                    kUASheetMode);
-    TestMQEvaluator(g_non_ua_sheet_immersive_test_cases, media_query_evaluator);
-    data.immersive_mode = false;
-  }
 }
 
 TEST(MediaQueryEvaluatorTest, Dynamic) {
@@ -493,19 +460,6 @@
                   media_query_evaluator);
 }
 
-TEST(MediaQueryEvaluatorTest, DynamicImmersive) {
-  auto page_holder = std::make_unique<DummyPageHolder>(gfx::Size(500, 500));
-  page_holder->GetFrameView().SetMediaType(media_type_names::kScreen);
-
-  MediaQueryEvaluator media_query_evaluator(&page_holder->GetFrame());
-  page_holder->GetDocument().GetSettings()->SetImmersiveModeEnabled(false);
-
-  TestMQEvaluator(g_non_immersive_test_cases, media_query_evaluator,
-                  kUASheetMode);
-  page_holder->GetDocument().GetSettings()->SetImmersiveModeEnabled(true);
-  TestMQEvaluator(g_immersive_test_cases, media_query_evaluator, kUASheetMode);
-}
-
 TEST(MediaQueryEvaluatorTest, CachedForcedColors) {
   ScopedForcedColorsForTest scoped_feature(true);
 
diff --git a/third_party/blink/renderer/core/css/media_query_exp.cc b/third_party/blink/renderer/core/css/media_query_exp.cc
index 4ba81b2..6b1455ad 100644
--- a/third_party/blink/renderer/core/css/media_query_exp.cc
+++ b/third_party/blink/renderer/core/css/media_query_exp.cc
@@ -183,8 +183,7 @@
       media_feature == media_feature_names::kMinColorIndexMediaFeature ||
       media_feature == media_feature_names::kMonochromeMediaFeature ||
       media_feature == media_feature_names::kMaxMonochromeMediaFeature ||
-      media_feature == media_feature_names::kMinMonochromeMediaFeature ||
-      media_feature == media_feature_names::kImmersiveMediaFeature) {
+      media_feature == media_feature_names::kMinMonochromeMediaFeature) {
     return true;
   }
 
diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/blink/renderer/core/css/media_values.cc
index ed063fc..facb239 100644
--- a/third_party/blink/renderer/core/css/media_values.cc
+++ b/third_party/blink/renderer/core/css/media_values.cc
@@ -283,12 +283,6 @@
   return frame->GetPage()->GetSettings().GetAcceleratedCompositingEnabled();
 }
 
-bool MediaValues::CalculateInImmersiveMode(LocalFrame* frame) {
-  DCHECK(frame);
-  DCHECK(frame->GetSettings());
-  return frame->GetSettings()->GetImmersiveModeEnabled();
-}
-
 mojom::blink::PointerType MediaValues::CalculatePrimaryPointerType(
     LocalFrame* frame) {
   DCHECK(frame);
diff --git a/third_party/blink/renderer/core/css/media_values.h b/third_party/blink/renderer/core/css/media_values.h
index a0f6e05a..82308316 100644
--- a/third_party/blink/renderer/core/css/media_values.h
+++ b/third_party/blink/renderer/core/css/media_values.h
@@ -70,7 +70,6 @@
   virtual mojom::blink::HoverType PrimaryHoverType() const = 0;
   virtual int AvailableHoverTypes() const = 0;
   virtual bool ThreeDEnabled() const = 0;
-  virtual bool InImmersiveMode() const = 0;
   virtual const String MediaType() const = 0;
   virtual blink::mojom::DisplayMode DisplayMode() const = 0;
   virtual bool StrictMode() const = 0;
@@ -116,7 +115,6 @@
   static const String CalculateMediaType(LocalFrame*);
   static blink::mojom::DisplayMode CalculateDisplayMode(LocalFrame*);
   static bool CalculateThreeDEnabled(LocalFrame*);
-  static bool CalculateInImmersiveMode(LocalFrame*);
   static mojom::blink::PointerType CalculatePrimaryPointerType(LocalFrame*);
   static int CalculateAvailablePointerTypes(LocalFrame*);
   static mojom::blink::HoverType CalculatePrimaryHoverType(LocalFrame*);
diff --git a/third_party/blink/renderer/core/css/media_values_cached.cc b/third_party/blink/renderer/core/css/media_values_cached.cc
index 9d778b5..d067ec5a 100644
--- a/third_party/blink/renderer/core/css/media_values_cached.cc
+++ b/third_party/blink/renderer/core/css/media_values_cached.cc
@@ -64,7 +64,6 @@
     ic_size = em_size;
     line_height = em_size;
     three_d_enabled = MediaValues::CalculateThreeDEnabled(frame);
-    immersive_mode = MediaValues::CalculateInImmersiveMode(frame);
     strict_mode = MediaValues::CalculateStrictMode(frame);
     display_mode = MediaValues::CalculateDisplayMode(frame);
     media_type = MediaValues::CalculateMediaType(frame);
@@ -233,10 +232,6 @@
   return data_.three_d_enabled;
 }
 
-bool MediaValuesCached::InImmersiveMode() const {
-  return data_.immersive_mode;
-}
-
 bool MediaValuesCached::StrictMode() const {
   return data_.strict_mode;
 }
diff --git a/third_party/blink/renderer/core/css/media_values_cached.h b/third_party/blink/renderer/core/css/media_values_cached.h
index b3ebfb4..b64f634 100644
--- a/third_party/blink/renderer/core/css/media_values_cached.h
+++ b/third_party/blink/renderer/core/css/media_values_cached.h
@@ -55,7 +55,6 @@
     float ic_size = 16.f;
     float line_height = 0;
     bool three_d_enabled = false;
-    bool immersive_mode = false;
     bool strict_mode = true;
     String media_type;
     mojom::blink::DisplayMode display_mode =
@@ -96,7 +95,6 @@
       data.ch_size = ch_size;
       data.ch_size = ic_size;
       data.three_d_enabled = three_d_enabled;
-      data.immersive_mode = immersive_mode;
       data.strict_mode = strict_mode;
       data.media_type = media_type;
       data.display_mode = display_mode;
@@ -131,7 +129,6 @@
   mojom::blink::HoverType PrimaryHoverType() const override;
   int AvailableHoverTypes() const override;
   bool ThreeDEnabled() const override;
-  bool InImmersiveMode() const override;
   bool StrictMode() const override;
   Document* GetDocument() const override;
   bool HasValues() const override;
diff --git a/third_party/blink/renderer/core/css/media_values_dynamic.cc b/third_party/blink/renderer/core/css/media_values_dynamic.cc
index b6f0bc1..648e9245 100644
--- a/third_party/blink/renderer/core/css/media_values_dynamic.cc
+++ b/third_party/blink/renderer/core/css/media_values_dynamic.cc
@@ -191,10 +191,6 @@
   return CalculateThreeDEnabled(frame_);
 }
 
-bool MediaValuesDynamic::InImmersiveMode() const {
-  return CalculateInImmersiveMode(frame_);
-}
-
 const String MediaValuesDynamic::MediaType() const {
   return CalculateMediaType(frame_);
 }
diff --git a/third_party/blink/renderer/core/css/media_values_dynamic.h b/third_party/blink/renderer/core/css/media_values_dynamic.h
index 6fbe7a69d..cde9afa 100644
--- a/third_party/blink/renderer/core/css/media_values_dynamic.h
+++ b/third_party/blink/renderer/core/css/media_values_dynamic.h
@@ -34,7 +34,6 @@
   mojom::blink::HoverType PrimaryHoverType() const override;
   int AvailableHoverTypes() const override;
   bool ThreeDEnabled() const override;
-  bool InImmersiveMode() const override;
   bool StrictMode() const override;
   const String MediaType() const override;
   blink::mojom::DisplayMode DisplayMode() const override;
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
index 91fce87..ee82962 100644
--- a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
@@ -1407,10 +1407,28 @@
         return false;
       }
       block.ConsumeWhitespace();
+      if (block.AtEnd()) {
+        selector.SetNth(ab.first, ab.second, nullptr);
+        output_.push_back(std::move(selector));
+        return true;
+      }
+
+      // See if there's an “of ...” part.
+      if (selector.GetPseudoType() != CSSSelector::kPseudoNthChild &&
+          selector.GetPseudoType() != CSSSelector::kPseudoNthLastChild) {
+        return false;
+      }
+
+      CSSSelectorList* sub_selectors = ConsumeNthChildOfSelectors(block);
+      if (sub_selectors == nullptr) {
+        return false;
+      }
+      block.ConsumeWhitespace();
       if (!block.AtEnd()) {
         return false;
       }
-      selector.SetNth(ab.first, ab.second);
+
+      selector.SetNth(ab.first, ab.second, sub_selectors);
       output_.push_back(std::move(selector));
       return true;
     }
@@ -1659,6 +1677,29 @@
   return true;
 }
 
+// Consumes the “of ...” part of :nth_child(An+B of ...).
+// Returns nullptr on failure.
+CSSSelectorList* CSSSelectorParser::ConsumeNthChildOfSelectors(
+    CSSParserTokenRange& range) {
+  if (!RuntimeEnabledFeatures::CSSSelectorNthChildComplexSelectorEnabled()) {
+    return nullptr;
+  }
+
+  if (range.Peek().GetType() != kIdentToken ||
+      range.Consume().Value() != "of") {
+    return nullptr;
+  }
+  range.ConsumeWhitespace();
+
+  ResetVectorAfterScope reset_vector(output_);
+  base::span<CSSSelector> selectors =
+      ConsumeComplexSelectorList(range, /*in_nested_style_rule=*/false);
+  if (selectors.empty()) {
+    return nullptr;
+  }
+  return CSSSelectorList::AdoptSelectorVector(selectors);
+}
+
 const AtomicString& CSSSelectorParser::DefaultNamespace() const {
   if (!style_sheet_ || ignore_default_namespace_) {
     return g_star_atom;
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser.h b/third_party/blink/renderer/core/css/parser/css_selector_parser.h
index ddab51f..1b7b7eb 100644
--- a/third_party/blink/renderer/core/css/parser/css_selector_parser.h
+++ b/third_party/blink/renderer/core/css/parser/css_selector_parser.h
@@ -70,6 +70,7 @@
       HeapVector<CSSSelector>&);
 
   static bool ConsumeANPlusB(CSSParserTokenRange&, std::pair<int, int>&);
+  CSSSelectorList* ConsumeNthChildOfSelectors(CSSParserTokenRange&);
 
   static bool SupportsComplexSelector(CSSParserTokenRange,
                                       const CSSParserContext*);
diff --git a/third_party/blink/renderer/core/css/parser/media_query_parser.cc b/third_party/blink/renderer/core/css/parser/media_query_parser.cc
index bffab8a6..acacaca 100644
--- a/third_party/blink/renderer/core/css/parser/media_query_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/media_query_parser.cc
@@ -27,13 +27,9 @@
   STACK_ALLOCATED();
 
  public:
-  explicit MediaQueryFeatureSet(CSSParserMode parser_mode)
-      : parser_mode_(parser_mode) {}
+  MediaQueryFeatureSet() = default;
 
   bool IsAllowed(const String& feature) const override {
-    if (feature == media_feature_names::kImmersiveMediaFeature) {
-      return parser_mode_ == kUASheetMode;
-    }
     if (feature == media_feature_names::kInlineSizeMediaFeature ||
         feature == media_feature_names::kMinInlineSizeMediaFeature ||
         feature == media_feature_names::kMaxInlineSizeMediaFeature ||
@@ -73,7 +69,6 @@
            feature == media_feature_names::kDisplayModeMediaFeature ||
            feature == media_feature_names::kScanMediaFeature ||
            feature == media_feature_names::kColorGamutMediaFeature ||
-           feature == media_feature_names::kImmersiveMediaFeature ||
            feature == media_feature_names::kPrefersColorSchemeMediaFeature ||
            feature == media_feature_names::kPrefersContrastMediaFeature ||
            feature == media_feature_names::kPrefersReducedMotionMediaFeature ||
@@ -98,9 +93,6 @@
 
   bool IsCaseSensitive(const String& feature) const override { return false; }
   bool SupportsRange() const override { return true; }
-
- private:
-  CSSParserMode parser_mode_;
 };
 
 }  // namespace
@@ -485,7 +477,7 @@
 
     // ( <media-feature> )
     const MediaQueryExpNode* feature =
-        ConsumeFeature(block, MediaQueryFeatureSet(mode_));
+        ConsumeFeature(block, MediaQueryFeatureSet());
     if (feature && block.AtEnd()) {
       return MediaQueryExpNode::Nested(feature);
     }
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 b829916b..23bc983 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
@@ -602,6 +602,56 @@
   return list;
 }
 
+void UseCountBackgroundClip(Document& document, const CSSValue& value) {
+  if (const auto* identifier_value = DynamicTo<CSSIdentifierValue>(value)) {
+    switch (identifier_value->GetValueID()) {
+      case CSSValueID::kBorder:
+        UseCounter::Count(document, WebFeature::kCSSBackgroundClipBorder);
+        break;
+      case CSSValueID::kContent:
+        UseCounter::Count(document, WebFeature::kCSSBackgroundClipContent);
+        break;
+      case CSSValueID::kPadding:
+        UseCounter::Count(document, WebFeature::kCSSBackgroundClipPadding);
+        break;
+      default:
+        break;
+    }
+  }
+}
+
+// TODO(crbug.com/1339290): Revert to use the generated implementation once the
+// use counters are no longer needed. Also remove UseCountBackgroundClip above.
+void BackgroundClip::ApplyValue(StyleResolverState& state,
+                                const CSSValue& value) const {
+  Document& document = state.GetDocument();
+  FillLayer* curr_child = &state.StyleBuilder().AccessBackgroundLayers();
+  FillLayer* prev_child = nullptr;
+  const auto* value_list = DynamicTo<CSSValueList>(value);
+  if (value_list && !value.IsImageSetValue()) {
+    // Walk each value and put it into a layer, creating new layers as needed.
+    const auto* curr_val = value_list->begin();
+    while (curr_child || curr_val != value_list->end()) {
+      if (!curr_child) {
+        curr_child = prev_child->EnsureNext();
+      }
+      CSSToStyleMap::MapFillClip(state, curr_child, *curr_val->Get());
+      UseCountBackgroundClip(document, *curr_val->Get());
+      prev_child = curr_child;
+      curr_child = curr_child->Next();
+      // as per https://w3c.github.io/csswg-drafts/css-backgrounds/#layering
+      if (++curr_val == value_list->end() && curr_child) {
+        curr_val = value_list->begin();
+      }
+    }
+  } else {
+    while (curr_child) {
+      CSSToStyleMap::MapFillClip(state, curr_child, value);
+      curr_child = curr_child->Next();
+    }
+  }
+}
+
 const CSSValue* BackgroundColor::ParseSingleValue(
     CSSParserTokenRange& range,
     const CSSParserContext& context,
diff --git a/third_party/blink/renderer/core/css/remote_font_face_source.cc b/third_party/blink/renderer/core/css/remote_font_face_source.cc
index f9ccfc3..6576380 100644
--- a/third_party/blink/renderer/core/css/remote_font_face_source.cc
+++ b/third_party/blink/renderer/core/css/remote_font_face_source.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/css/remote_font_face_source.h"
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom-blink.h"
 #include "third_party/blink/public/platform/task_type.h"
diff --git a/third_party/blink/renderer/core/css/remote_font_face_source.h b/third_party/blink/renderer/core/css/remote_font_face_source.h
index 1327e06..91d73fa5 100644
--- a/third_party/blink/renderer/core/css/remote_font_face_source.h
+++ b/third_party/blink/renderer/core/css/remote_font_face_source.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_REMOTE_FONT_FACE_SOURCE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_REMOTE_FONT_FACE_SOURCE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/core/css/css_font_face_source.h"
 #include "third_party/blink/renderer/core/execution_context/security_context.h"
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
index 6279a9d..7c20603 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -1157,7 +1157,7 @@
     const CustomProperty& property) const {
   const AtomicString& name = property.GetPropertyNameAtomicString();
   const bool is_inherited = property.IsInherited();
-  return state_.Style()->GetVariableData(name, is_inherited);
+  return state_.StyleBuilder().GetVariableData(name, is_inherited);
 }
 
 CSSVariableData* StyleCascade::GetEnvironmentVariable(
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index e8cb4c9..2c07be6 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -2705,7 +2705,6 @@
   // Set up our initial style properties based on either the `default_font` or
   // `parent_style`.
   ComputedStyleBuilder builder = CreateComputedStyleBuilder();
-  ComputedStyle* style = builder.MutableInternalStyle();
   if (default_font) {
     builder.SetFontDescription(*default_font);
   } else {  // parent_style
@@ -2713,27 +2712,30 @@
   }
   builder.SetDisplay(is_text_run ? EDisplay::kInline : EDisplay::kBlock);
 
-  // Apply any properties in the `css_property_value_set`.
-  if (css_property_value_set) {
-    // Use a dummy/disconnected element when resolving the styles so that we
-    // don't inherit anything from existing elements.
-    StyleResolverState state(
-        GetDocument(), EnsureElementForFormattedText(),
-        nullptr /* StyleRecalcContext */,
-        StyleRequest{parent_style ? parent_style : &InitialStyle()});
-    state.SetStyle(style);
-
-    // Use StyleCascade to apply inheritance in the correct order.
-    STACK_UNINITIALIZED StyleCascade cascade(state);
-    cascade.MutableMatchResult().AddMatchedProperties(
-        css_property_value_set,
-        AddMatchedPropertiesOptions::Builder().SetIsInlineStyle(true).Build());
-    cascade.Apply();
-
-    StyleAdjuster::AdjustComputedStyle(state, nullptr);
+  if (!css_property_value_set) {
+    return builder.TakeStyle();
   }
 
-  return builder.TakeStyle();
+  // Apply any properties in the `css_property_value_set`.
+
+  // Use a dummy/disconnected element when resolving the styles so that we
+  // don't inherit anything from existing elements.
+  StyleResolverState state(
+      GetDocument(), EnsureElementForFormattedText(),
+      nullptr /* StyleRecalcContext */,
+      StyleRequest{parent_style ? parent_style : &InitialStyle()});
+  state.SetStyle(builder.TakeStyle());
+
+  // Use StyleCascade to apply inheritance in the correct order.
+  STACK_UNINITIALIZED StyleCascade cascade(state);
+  cascade.MutableMatchResult().AddMatchedProperties(
+      css_property_value_set,
+      AddMatchedPropertiesOptions::Builder().SetIsInlineStyle(true).Build());
+  cascade.Apply();
+
+  StyleAdjuster::AdjustComputedStyle(state, nullptr);
+
+  return state.TakeStyle();
 }
 
 static Font ComputeInitialLetterFont(const ComputedStyle& style,
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_state.h b/third_party/blink/renderer/core/css/resolver/style_resolver_state.h
index 70a5da4..f8bedcc 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver_state.h
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver_state.h
@@ -91,7 +91,6 @@
 
   void SetStyle(scoped_refptr<ComputedStyle>);
   const ComputedStyle* Style() const { return style_builder_.InternalStyle(); }
-  ComputedStyle* Style() { return style_builder_.MutableInternalStyle(); }
   ComputedStyleBuilder& StyleBuilder() { return style_builder_; }
   const ComputedStyleBuilder& StyleBuilder() const { return style_builder_; }
   scoped_refptr<ComputedStyle> TakeStyle();
diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc
index 7978e37..d6a5c71b 100644
--- a/third_party/blink/renderer/core/css/rule_feature_set.cc
+++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -217,7 +217,9 @@
          pseudo == CSSSelector::kPseudoNot ||
          pseudo == CSSSelector::kPseudoSlotted ||
          pseudo == CSSSelector::kPseudoWhere ||
-         pseudo == CSSSelector::kPseudoParent;
+         pseudo == CSSSelector::kPseudoParent ||
+         pseudo == CSSSelector::kPseudoNthChild ||
+         pseudo == CSSSelector::kPseudoNthLastChild;
 }
 
 bool RequiresSubtreeInvalidation(const CSSSelector& selector) {
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc
index 45d7e5e..14a8753 100644
--- a/third_party/blink/renderer/core/css/selector_checker.cc
+++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -703,21 +703,25 @@
 
 bool SelectorChecker::CheckPseudoNot(const SelectorCheckingContext& context,
                                      MatchResult& result) const {
-  const CSSSelector& selector = *context.selector;
-  DCHECK(selector.SelectorList());
+  return !MatchesAnyInList(context, context.selector->SelectorList()->First(),
+                           result);
+}
+
+bool SelectorChecker::MatchesAnyInList(const SelectorCheckingContext& context,
+                                       const CSSSelector* selector_list,
+                                       MatchResult& result) const {
   SelectorCheckingContext sub_context(context);
   sub_context.is_sub_selector = true;
   sub_context.in_nested_complex_selector = true;
   sub_context.pseudo_id = kPseudoIdNone;
-  for (sub_context.selector = selector.SelectorList()->First();
-       sub_context.selector;
+  for (sub_context.selector = selector_list; sub_context.selector;
        sub_context.selector = CSSSelectorList::Next(*sub_context.selector)) {
     SubResult sub_result(result);
     if (MatchSelector(sub_context, sub_result) == kSelectorMatches) {
-      return false;
+      return true;
     }
   }
-  return true;
+  return false;
 }
 
 namespace {
@@ -1379,7 +1383,17 @@
           parent->SetChildrenAffectedByForwardPositionalRules();
         }
       }
-      return selector.MatchNth(NthIndexCache::NthChildIndex(element));
+      if (selector.SelectorList()) {
+        // Check if the element itself matches the “of” selector.
+        // Note that this will also propagate the correct MatchResult flags,
+        // so NthIndexCache does not have to do that.
+        if (!MatchesAnyInList(context, selector.SelectorList()->First(),
+                              result)) {
+          return false;
+        }
+      }
+      return selector.MatchNth(NthIndexCache::NthChildIndex(
+          element, selector.SelectorList(), this, &context));
     case CSSSelector::kPseudoNthOfType:
       if (mode_ == kResolvingStyle) {
         if (ContainerNode* parent = element.ParentElementOrDocumentFragment()) {
@@ -1396,7 +1410,15 @@
           !parent->IsFinishedParsingChildren()) {
         return false;
       }
-      return selector.MatchNth(NthIndexCache::NthLastChildIndex(element));
+      if (selector.SelectorList()) {
+        // Check if the element itself matches the “of” selector.
+        if (!MatchesAnyInList(context, selector.SelectorList()->First(),
+                              result)) {
+          return false;
+        }
+      }
+      return selector.MatchNth(NthIndexCache::NthLastChildIndex(
+          element, selector.SelectorList(), this, &context));
     }
     case CSSSelector::kPseudoNthLastOfType: {
       ContainerNode* parent = element.ParentElementOrDocumentFragment();
@@ -1421,21 +1443,8 @@
     case CSSSelector::kPseudoIs:
     case CSSSelector::kPseudoWhere:
     case CSSSelector::kPseudoAny:
-    case CSSSelector::kPseudoParent: {
-      SelectorCheckingContext sub_context(context);
-      sub_context.is_sub_selector = true;
-      sub_context.in_nested_complex_selector = true;
-      sub_context.pseudo_id = kPseudoIdNone;
-      for (sub_context.selector = selector.SelectorListOrParent();
-           sub_context.selector; sub_context.selector = CSSSelectorList::Next(
-                                     *sub_context.selector)) {
-        SubResult sub_result(result);
-        if (MatchSelector(sub_context, sub_result) == kSelectorMatches) {
-          return true;
-        }
-      }
-      break;
-    }
+    case CSSSelector::kPseudoParent:
+      return MatchesAnyInList(context, selector.SelectorListOrParent(), result);
     case CSSSelector::kPseudoAutofill:
     case CSSSelector::kPseudoWebKitAutofill: {
       auto* html_form_element = DynamicTo<HTMLFormControlElement>(&element);
diff --git a/third_party/blink/renderer/core/css/selector_checker.h b/third_party/blink/renderer/core/css/selector_checker.h
index 4ce79672..c9430c8 100644
--- a/third_party/blink/renderer/core/css/selector_checker.h
+++ b/third_party/blink/renderer/core/css/selector_checker.h
@@ -326,6 +326,9 @@
   bool CheckPseudoScope(const SelectorCheckingContext&, MatchResult&) const;
   bool CheckPseudoNot(const SelectorCheckingContext&, MatchResult&) const;
   bool CheckPseudoHas(const SelectorCheckingContext&, MatchResult&) const;
+  bool MatchesAnyInList(const SelectorCheckingContext& context,
+                        const CSSSelector* selector_list,
+                        MatchResult& result) const;
 
   // The *activations* for a given StyleScope/element, is a list of active
   // scopes found in the ancestor chain, their roots (Element*), and the
@@ -355,6 +358,8 @@
 #if DCHECK_IS_ON()
   mutable bool inside_match_ = false;
 #endif
+
+  friend class NthIndexCache;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index a4b9d57..f8c7b3c 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -39,6 +39,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/notreached.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "cc/animation/animation_host.h"
 #include "cc/animation/animation_timeline.h"
diff --git a/third_party/blink/renderer/core/dom/events/event_queue.cc b/third_party/blink/renderer/core/dom/events/event_queue.cc
index 4dbd1fd..63a2f8dd 100644
--- a/third_party/blink/renderer/core/dom/events/event_queue.cc
+++ b/third_party/blink/renderer/core/dom/events/event_queue.cc
@@ -26,6 +26,7 @@
 
 #include "third_party/blink/renderer/core/dom/events/event_queue.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
diff --git a/third_party/blink/renderer/core/dom/nth_index_cache.cc b/third_party/blink/renderer/core/dom/nth_index_cache.cc
index 772e3641..b7b3394 100644
--- a/third_party/blink/renderer/core/dom/nth_index_cache.cc
+++ b/third_party/blink/renderer/core/dom/nth_index_cache.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/dom/nth_index_cache.h"
 
+#include "third_party/blink/renderer/core/css/css_selector_list.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/element_traversal.h"
 
@@ -26,8 +27,16 @@
   document_->SetNthIndexCache(nullptr);
 }
 
+void NthIndexCache::Key::Trace(Visitor* visitor) const {
+  visitor->Trace(parent);
+  visitor->Trace(filter);
+}
+
 unsigned NthIndexCache::Key::GetHash() const {
   unsigned hash = WTF::MemberHash<Node>::GetHash(parent);
+  if (filter != nullptr) {
+    WTF::AddIntToHash(hash, WTF::MemberHash<CSSSelectorList>::GetHash(filter));
+  }
   if (!child_tag_name.empty()) {
     WTF::AddIntToHash(hash, DefaultHash<String>::GetHash(child_tag_name));
   }
@@ -43,25 +52,6 @@
 
 const unsigned kCachedSiblingCountLimit = 32;
 
-unsigned UncachedNthChildIndex(Element& element) {
-  int index = 1;
-  for (const Element* sibling = ElementTraversal::PreviousSibling(element);
-       sibling; sibling = ElementTraversal::PreviousSibling(*sibling)) {
-    index++;
-  }
-
-  return index;
-}
-
-unsigned UncachedNthLastChildIndex(Element& element) {
-  int index = 1;
-  for (const Element* sibling = ElementTraversal::NextSibling(element); sibling;
-       sibling = ElementTraversal::NextSibling(*sibling)) {
-    ++index;
-  }
-  return index;
-}
-
 unsigned UncachedNthOfTypeIndex(Element& element, unsigned& sibling_count) {
   int index = 1;
   const QualifiedName& tag = element.TagQName();
@@ -90,40 +80,118 @@
 
 }  // namespace
 
-unsigned NthIndexCache::NthChildIndex(Element& element) {
+bool NthIndexCache::MatchesFilter(
+    Element* element,
+    const CSSSelectorList* filter,
+    const SelectorChecker* selector_checker,
+    const SelectorChecker::SelectorCheckingContext* context) {
+  if (filter == nullptr) {
+    // With no selector list, consider all elements.
+    return true;
+  }
+
+  SelectorChecker::SelectorCheckingContext sub_context(*context);
+  sub_context.element = element;
+  sub_context.is_sub_selector = true;
+  sub_context.in_nested_complex_selector = true;
+  sub_context.pseudo_id = kPseudoIdNone;
+  for (sub_context.selector = filter->First(); sub_context.selector;
+       sub_context.selector = CSSSelectorList::Next(*sub_context.selector)) {
+    // NOTE: We don't want to propagate match_result up to the parent;
+    // the correct flags were already set when the caller tested that
+    // the element matched the selector list itself.
+    SelectorChecker::MatchResult dummy_match_result;
+    if (selector_checker->MatchSelector(sub_context, dummy_match_result) ==
+        SelectorChecker::kSelectorMatches) {
+      return true;
+    }
+  }
+  return false;
+}
+
+unsigned NthIndexCache::UncachedNthChildIndex(
+    Element& element,
+    const CSSSelectorList* filter,
+    const SelectorChecker* selector_checker,
+    const SelectorChecker::SelectorCheckingContext* context,
+    unsigned& sibling_count) {
+  int index = 1;
+  for (Element* sibling = ElementTraversal::PreviousSibling(element); sibling;
+       sibling = ElementTraversal::PreviousSibling(*sibling)) {
+    if (MatchesFilter(sibling, filter, selector_checker, context)) {
+      ++index;
+    }
+    ++sibling_count;
+  }
+
+  return index;
+}
+
+unsigned NthIndexCache::UncachedNthLastChildIndex(
+    Element& element,
+    const CSSSelectorList* filter,
+    const SelectorChecker* selector_checker,
+    const SelectorChecker::SelectorCheckingContext* context,
+    unsigned& sibling_count) {
+  int index = 1;
+  for (Element* sibling = ElementTraversal::NextSibling(element); sibling;
+       sibling = ElementTraversal::NextSibling(*sibling)) {
+    if (MatchesFilter(sibling, filter, selector_checker, context)) {
+      index++;
+    }
+    ++sibling_count;
+  }
+  return index;
+}
+
+unsigned NthIndexCache::NthChildIndex(
+    Element& element,
+    const CSSSelectorList* filter,
+    const SelectorChecker* selector_checker,
+    const SelectorChecker::SelectorCheckingContext* context) {
   if (element.IsPseudoElement() || !element.parentNode()) {
     return 1;
   }
   NthIndexCache* nth_index_cache = element.GetDocument().GetNthIndexCache();
   if (nth_index_cache && nth_index_cache->cache_) {
     auto it = nth_index_cache->cache_->Find<KeyHashTranslator>(
-        Key(element.parentNode()));
+        Key(element.parentNode(), filter));
     if (it != nth_index_cache->cache_->end()) {
       return it->value->NthIndex(element);
     }
   }
-  unsigned index = UncachedNthChildIndex(element);
-  if (nth_index_cache && index > kCachedSiblingCountLimit) {
-    nth_index_cache->CacheNthIndexDataForParent(element);
+  unsigned sibling_count = 0;
+  unsigned index = UncachedNthChildIndex(element, filter, selector_checker,
+                                         context, sibling_count);
+  if (nth_index_cache && sibling_count > kCachedSiblingCountLimit) {
+    nth_index_cache->CacheNthIndexDataForParent(element, filter,
+                                                selector_checker, context);
   }
   return index;
 }
 
-unsigned NthIndexCache::NthLastChildIndex(Element& element) {
+unsigned NthIndexCache::NthLastChildIndex(
+    Element& element,
+    const CSSSelectorList* filter,
+    const SelectorChecker* selector_checker,
+    const SelectorChecker::SelectorCheckingContext* context) {
   if (element.IsPseudoElement() && !element.parentNode()) {
     return 1;
   }
   NthIndexCache* nth_index_cache = element.GetDocument().GetNthIndexCache();
   if (nth_index_cache && nth_index_cache->cache_) {
     auto it = nth_index_cache->cache_->Find<KeyHashTranslator>(
-        Key(element.parentNode()));
+        Key(element.parentNode(), filter));
     if (it != nth_index_cache->cache_->end()) {
       return it->value->NthLastIndex(element);
     }
   }
-  unsigned index = UncachedNthLastChildIndex(element);
-  if (nth_index_cache && index > kCachedSiblingCountLimit) {
-    nth_index_cache->CacheNthIndexDataForParent(element);
+  unsigned sibling_count = 0;
+  unsigned index = UncachedNthLastChildIndex(element, filter, selector_checker,
+                                             context, sibling_count);
+  if (nth_index_cache && sibling_count > kCachedSiblingCountLimit) {
+    nth_index_cache->CacheNthIndexDataForParent(element, filter,
+                                                selector_checker, context);
   }
   return index;
 }
@@ -175,12 +243,17 @@
   }
 }
 
-void NthIndexCache::CacheNthIndexDataForParent(Element& element) {
+void NthIndexCache::CacheNthIndexDataForParent(
+    Element& element,
+    const CSSSelectorList* filter,
+    const SelectorChecker* selector_checker,
+    const SelectorChecker::SelectorCheckingContext* context) {
   DCHECK(element.parentNode());
   EnsureCache();
-  auto add_result =
-      cache_->insert(MakeGarbageCollected<Key>(element.parentNode()),
-                     MakeGarbageCollected<NthIndexData>(*element.parentNode()));
+  auto add_result = cache_->insert(
+      MakeGarbageCollected<Key>(element.parentNode(), filter),
+      MakeGarbageCollected<NthIndexData>(*element.parentNode(), filter,
+                                         selector_checker, context));
   DCHECK(add_result.is_new_entry);
 }
 
@@ -232,7 +305,16 @@
   return count_ - NthOfTypeIndex(element) + 1;
 }
 
-NthIndexData::NthIndexData(ContainerNode& parent) {
+NthIndexData::NthIndexData(
+    ContainerNode& parent,
+    const CSSSelectorList* filter,
+    const SelectorChecker* selector_checker,
+    const SelectorChecker::SelectorCheckingContext* context) {
+  auto matches = [&](Element& element) {
+    return NthIndexCache::MatchesFilter(&element, filter, selector_checker,
+                                        context);
+  };
+
   // The frequency at which we cache the nth-index for a set of siblings.  A
   // spread value of 3 means every third Element will have its nth-index cached.
   // Using a spread value > 1 is done to save memory. Looking up the nth-index
@@ -240,8 +322,8 @@
   // 'spread' elements will be traversed.
   const unsigned kSpread = 3;
   unsigned count = 0;
-  for (Element* sibling = ElementTraversal::FirstChild(parent); sibling;
-       sibling = ElementTraversal::NextSibling(*sibling)) {
+  for (Element* sibling = ElementTraversal::FirstChild(parent, matches);
+       sibling; sibling = ElementTraversal::NextSibling(*sibling, matches)) {
     if (!(++count % kSpread)) {
       element_index_map_.insert(sibling, count);
     }
diff --git a/third_party/blink/renderer/core/dom/nth_index_cache.h b/third_party/blink/renderer/core/dom/nth_index_cache.h
index 6f29debe2..6f58598a 100644
--- a/third_party/blink/renderer/core/dom/nth_index_cache.h
+++ b/third_party/blink/renderer/core/dom/nth_index_cache.h
@@ -30,6 +30,7 @@
 
 #include "base/dcheck_is_on.h"
 #include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/css/selector_checker.h"
 #include "third_party/blink/renderer/core/dom/element.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -40,11 +41,14 @@
 
 // The cache for a given :nth-* selector; maps from each child element of
 // a given node (modulo spread; see file comment) to its correct child index.
-// The owner needs to key by parent and potentially tag name; we receive them
-// to do the actual query, but do not store them.
+// The owner needs to key by parent and potentially tag name or selector;
+// we receive them to do the actual query, but do not store them.
 class CORE_EXPORT NthIndexData final : public GarbageCollected<NthIndexData> {
  public:
-  explicit NthIndexData(ContainerNode&);
+  NthIndexData(ContainerNode&,
+               const CSSSelectorList* filter,
+               const SelectorChecker* selector_checker,
+               const SelectorChecker::SelectorCheckingContext* context);
   NthIndexData(ContainerNode&, const QualifiedName& type);
   NthIndexData(const NthIndexData&) = delete;
   NthIndexData& operator=(const NthIndexData&) = delete;
@@ -82,25 +86,41 @@
   NthIndexCache& operator=(const NthIndexCache&) = delete;
   ~NthIndexCache();
 
-  static unsigned NthChildIndex(Element&);
-  static unsigned NthLastChildIndex(Element&);
+  static unsigned NthChildIndex(
+      Element& element,
+      const CSSSelectorList* filter,
+      const SelectorChecker* selector_checker,
+      const SelectorChecker::SelectorCheckingContext* context);
+  static unsigned NthLastChildIndex(
+      Element& element,
+      const CSSSelectorList* filter,
+      const SelectorChecker* selector_checker,
+      const SelectorChecker::SelectorCheckingContext* context);
   static unsigned NthOfTypeIndex(Element&);
   static unsigned NthLastOfTypeIndex(Element&);
 
  private:
   // Key in the top-level cache; identifies the parent and the type of query.
   struct Key : public GarbageCollected<Key> {
-    explicit Key(Node* parent_arg) : parent(parent_arg) {}
+    Key(Node* parent_arg, const CSSSelectorList* filter_arg)
+        : parent(parent_arg), filter(filter_arg) {}
     Key(Node* parent_arg, String child_tag_name_arg)
         : parent(parent_arg), child_tag_name(child_tag_name_arg) {}
 
     Member<Node> parent;
     String child_tag_name;  // Empty if not :nth-of-type.
+    // Can be nullptr. Always nullptr if :nth-of-type, which filters on
+    // child_tag_name instead.
+    Member<const CSSSelectorList> filter;
 
-    void Trace(Visitor* visitor) const { visitor->Trace(parent); }
+    void Trace(Visitor* visitor) const;
     unsigned GetHash() const;
     bool operator==(const Key& other) const {
-      return parent == other.parent && child_tag_name == other.child_tag_name;
+      // NOTE: We compare filter by identity, which makes for potentially
+      // (theoretically) less effective caching between different selectors, but
+      // is simpler.
+      return parent == other.parent && filter == other.filter &&
+             child_tag_name == other.child_tag_name;
     }
   };
 
@@ -128,7 +148,28 @@
     }
   };
 
-  void CacheNthIndexDataForParent(Element&);
+  static bool MatchesFilter(
+      Element* element,
+      const CSSSelectorList* filter,
+      const SelectorChecker* selector_checker,
+      const SelectorChecker::SelectorCheckingContext* context);
+  static unsigned UncachedNthChildIndex(
+      Element& element,
+      const CSSSelectorList* filter,
+      const SelectorChecker* selector_checker,
+      const SelectorChecker::SelectorCheckingContext* context,
+      unsigned& sibling_count);
+  static unsigned UncachedNthLastChildIndex(
+      Element& element,
+      const CSSSelectorList* filter,
+      const SelectorChecker* selector_checker,
+      const SelectorChecker::SelectorCheckingContext* context,
+      unsigned& sibling_count);
+  void CacheNthIndexDataForParent(
+      Element& element,
+      const CSSSelectorList* filter,
+      const SelectorChecker* selector_checker,
+      const SelectorChecker::SelectorCheckingContext* context);
   void CacheNthOfTypeIndexDataForParent(Element&);
   void EnsureCache();
 
@@ -141,6 +182,8 @@
 #if DCHECK_IS_ON()
   uint64_t dom_tree_version_;
 #endif
+
+  friend class NthIndexData;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/nth_index_cache_test.cc b/third_party/blink/renderer/core/dom/nth_index_cache_test.cc
index a30ceaf..55aceae 100644
--- a/third_party/blink/renderer/core/dom/nth_index_cache_test.cc
+++ b/third_party/blink/renderer/core/dom/nth_index_cache_test.cc
@@ -31,10 +31,14 @@
 
   NthIndexCache nth_index_cache(GetDocument());
 
-  EXPECT_EQ(nth_index_cache.NthChildIndex(*GetElementById("nth-child")), 12U);
-  EXPECT_EQ(
-      nth_index_cache.NthLastChildIndex(*GetElementById("nth-last-child")),
-      12U);
+  EXPECT_EQ(nth_index_cache.NthChildIndex(
+                *GetElementById("nth-child"), /*filter=*/nullptr,
+                /*selector_checker=*/nullptr, /*context=*/nullptr),
+            12U);
+  EXPECT_EQ(nth_index_cache.NthLastChildIndex(
+                *GetElementById("nth-last-child"), /*filter=*/nullptr,
+                /*selector_checker=*/nullptr, /*context=*/nullptr),
+            12U);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
index 3dd96696..875e6cd 100644
--- a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
+++ b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/dom/scripted_idle_task_controller.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/editing/frame_caret.cc b/third_party/blink/renderer/core/editing/frame_caret.cc
index 02b14e5..2c0de0f 100644
--- a/third_party/blink/renderer/core/editing/frame_caret.cc
+++ b/third_party/blink/renderer/core/editing/frame_caret.cc
@@ -26,6 +26,7 @@
 #include "third_party/blink/renderer/core/editing/frame_caret.h"
 
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/editing/caret_display_item_client.h"
 #include "third_party/blink/renderer/core/editing/editing_utilities.h"
diff --git a/third_party/blink/renderer/core/editing/serializers/serialization.cc b/third_party/blink/renderer/core/editing/serializers/serialization.cc
index e7ca217..bb4b4760 100644
--- a/third_party/blink/renderer/core/editing/serializers/serialization.cc
+++ b/third_party/blink/renderer/core/editing/serializers/serialization.cc
@@ -30,6 +30,7 @@
 #include "third_party/blink/renderer/core/editing/serializers/serialization.h"
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
diff --git a/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.cc b/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.cc
index f32cb54..10e35bb 100644
--- a/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.cc
+++ b/third_party/blink/renderer/core/editing/suggestion/text_suggestion_controller.cc
@@ -218,9 +218,6 @@
     NOTREACHED();
     return;
   }
-  // TODO(crbug.com/779126): add support for suggestions in immersive mode.
-  if (GetFrame().GetSettings()->GetImmersiveModeEnabled())
-    return;
 
   // It's theoretically possible, but extremely unlikely, that the user has
   // managed to tap on some text after TextSuggestionController has told the
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
index 49d7298f..cf4278a 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -31,6 +31,7 @@
 #include <memory>
 
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/third_party/blink/renderer/core/exported/web_shared_worker_impl.h b/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
index ae80372d..93cbdfdc 100644
--- a/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
+++ b/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
@@ -37,6 +37,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "services/network/public/mojom/content_security_policy.mojom-blink-forward.h"
diff --git a/third_party/blink/renderer/core/fetch/blob_bytes_consumer.cc b/third_party/blink/renderer/core/fetch/blob_bytes_consumer.cc
index 01b7f87..cbef9d0 100644
--- a/third_party/blink/renderer/core/fetch/blob_bytes_consumer.cc
+++ b/third_party/blink/renderer/core/fetch/blob_bytes_consumer.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/fetch/blob_bytes_consumer.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/common/blob/blob_utils.h"
 #include "third_party/blink/public/mojom/blob/blob.mojom-blink.h"
 #include "third_party/blink/public/platform/task_type.h"
diff --git a/third_party/blink/renderer/core/fetch/body.cc b/third_party/blink/renderer/core/fetch/body.cc
index 89d496cf..f24125ee 100644
--- a/third_party/blink/renderer/core/fetch/body.cc
+++ b/third_party/blink/renderer/core/fetch/body.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
diff --git a/third_party/blink/renderer/core/fetch/fetch_data_loader.cc b/third_party/blink/renderer/core/fetch/fetch_data_loader.cc
index c6640e5..e1fb277a 100644
--- a/third_party/blink/renderer/core/fetch/fetch_data_loader.cc
+++ b/third_party/blink/renderer/core/fetch/fetch_data_loader.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/system/simple_watcher.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc b/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc
index a8ceb2b..5985a16 100644
--- a/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc
+++ b/third_party/blink/renderer/core/fetch/fetch_data_loader_test.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/data_pipe_utils.h"
diff --git a/third_party/blink/renderer/core/fileapi/blob.cc b/third_party/blink/renderer/core/fileapi/blob.cc
index 04c0282..29b5b58 100644
--- a/third_party/blink/renderer/core/fileapi/blob.cc
+++ b/third_party/blink/renderer/core/fileapi/blob.cc
@@ -33,6 +33,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_blob_property_bag.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_arraybuffer_arraybufferview_blob_usvstring.h"
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_loader.cc b/third_party/blink/renderer/core/fileapi/file_reader_loader.cc
index 4a58df4..e7587e1 100644
--- a/third_party/blink/renderer/core/fileapi/file_reader_loader.cc
+++ b/third_party/blink/renderer/core/fileapi/file_reader_loader.cc
@@ -36,6 +36,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/system/wait.h"
 #include "third_party/blink/public/common/blob/blob_utils.h"
 #include "third_party/blink/public/platform/web_url_request.h"
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_loader.h b/third_party/blink/renderer/core/fileapi/file_reader_loader.h
index 592c916e..c91ed7c 100644
--- a/third_party/blink/renderer/core/fileapi/file_reader_loader.h
+++ b/third_party/blink/renderer/core/fileapi/file_reader_loader.h
@@ -35,6 +35,7 @@
 
 #include "base/dcheck_is_on.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/mojom/blob/blob.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
diff --git a/third_party/blink/renderer/core/frame/attribution_src_loader.cc b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
index b85c8315..df74a53 100644
--- a/third_party/blink/renderer/core/frame/attribution_src_loader.cc
+++ b/third_party/blink/renderer/core/frame/attribution_src_loader.cc
@@ -336,8 +336,9 @@
   request.SetHttpHeaderField(http_names::kAttributionReportingEligible,
                              eligible);
 
-  FetchParameters params(std::move(request),
-                         local_frame_->DomWindow()->GetCurrentWorld());
+  FetchParameters params(
+      std::move(request),
+      ResourceLoaderOptions(local_frame_->DomWindow()->GetCurrentWorld()));
   params.MutableOptions().initiator_info.name =
       fetch_initiator_type_names::kAttributionsrc;
 
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.cc b/third_party/blink/renderer/core/frame/frame_test_helpers.cc
index 8ef0ef6..9928ad4 100644
--- a/third_party/blink/renderer/core/frame/frame_test_helpers.cc
+++ b/third_party/blink/renderer/core/frame/frame_test_helpers.cc
@@ -35,6 +35,7 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "cc/test/test_ukm_recorder_factory.h"
 #include "cc/trees/layer_tree_host.h"
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.h b/third_party/blink/renderer/core/frame/frame_test_helpers.h
index 04fbba2..dfebfe8 100644
--- a/third_party/blink/renderer/core/frame/frame_test_helpers.h
+++ b/third_party/blink/renderer/core/frame/frame_test_helpers.h
@@ -39,6 +39,7 @@
 #include "base/callback_helpers.h"
 #include "base/functional/function_ref.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/test/fake_layer_tree_frame_sink.h"
 #include "cc/trees/layer_tree_host.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
index b320f51..0ca0cb7 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.cc
+++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -31,6 +31,7 @@
 
 #include "base/containers/contains.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "build/build_config.h"
 #include "cc/input/snap_selection_strategy.h"
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.h b/third_party/blink/renderer/core/frame/local_dom_window.h
index eeacb74..f222a6e 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.h
+++ b/third_party/blink/renderer/core/frame/local_dom_window.h
@@ -29,6 +29,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "services/network/public/mojom/content_security_policy.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index f42f7ce6..5ee0a7c 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -35,6 +35,7 @@
 #include <utility>
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/core/frame/pending_beacon.h b/third_party/blink/renderer/core/frame/pending_beacon.h
index cf2ee2f7..58e67a2 100644
--- a/third_party/blink/renderer/core/frame/pending_beacon.h
+++ b/third_party/blink/renderer/core/frame/pending_beacon.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PENDING_BEACON_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PENDING_BEACON_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/frame/pending_beacon.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
diff --git a/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.cc b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.cc
index 48bc25e..f8dd566 100644
--- a/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.cc
+++ b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.cc
@@ -9,6 +9,7 @@
 
 #include "base/numerics/safe_conversions.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
diff --git a/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h
index fd90353..e3ec25a 100644
--- a/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h
+++ b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PENDING_BEACON_DISPATCHER_H_
 
 #include "base/gtest_prod_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/types/pass_key.h"
 #include "third_party/blink/public/mojom/frame/pending_beacon.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/frame/remote_frame.h b/third_party/blink/renderer/core/frame/remote_frame.h
index d4ada3c..b672ab0 100644
--- a/third_party/blink/renderer/core/frame/remote_frame.h
+++ b/third_party/blink/renderer/core/frame/remote_frame.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_REMOTE_FRAME_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_REMOTE_FRAME_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
diff --git a/third_party/blink/renderer/core/frame/root_frame_viewport.cc b/third_party/blink/renderer/core/frame/root_frame_viewport.cc
index 50dd4b3..a4f9f98 100644
--- a/third_party/blink/renderer/core/frame/root_frame_viewport.cc
+++ b/third_party/blink/renderer/core/frame/root_frame_viewport.cc
@@ -7,6 +7,7 @@
 #include "base/barrier_closure.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/input/snap_selection_strategy.h"
 #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5
index 006cd6b..970b9ee 100644
--- a/third_party/blink/renderer/core/frame/settings.json5
+++ b/third_party/blink/renderer/core/frame/settings.json5
@@ -232,7 +232,6 @@
     {
       name: "immersiveModeEnabled",
       initial: false,
-      invalidate: ["MediaControls"],
     },
 
     // Only affects main thread scrolling
diff --git a/third_party/blink/renderer/core/frame/use_counter_impl_test.cc b/third_party/blink/renderer/core/frame/use_counter_impl_test.cc
index 6cfe2b50b..cdcafcf 100644
--- a/third_party/blink/renderer/core/frame/use_counter_impl_test.cc
+++ b/third_party/blink/renderer/core/frame/use_counter_impl_test.cc
@@ -31,8 +31,9 @@
 const char kExtensionUrl[] = "chrome-extension://dummysite/";
 
 int GetPageVisitsBucketforHistogram(const std::string& histogram_name) {
-  if (histogram_name.find("CSS") == std::string::npos)
+  if (histogram_name.find("CSS") == std::string::npos) {
     return static_cast<int>(blink::mojom::WebFeature::kPageVisits);
+  }
   // For CSS histograms, the page visits bucket should be 1.
   return static_cast<int>(
       blink::mojom::blink::CSSSampleId::kTotalPagesMeasured);
@@ -508,8 +509,9 @@
   HashSet<CSSPropertyID> alternatives = GetAlternatives();
 
   for (CSSPropertyID property : CSSPropertyIDList()) {
-    if (IsInternal(property))
+    if (IsInternal(property)) {
       continue;
+    }
     if (alternatives.Contains(property)) {
       // Alternative properties should use the same CSSSampleId as the
       // corresponding main property.
@@ -534,13 +536,15 @@
   int max_sample_id = 0;
 
   for (CSSPropertyID property : CSSPropertyIDList()) {
-    if (IsInternal(property))
+    if (IsInternal(property)) {
       continue;
+    }
     max_sample_id = std::max(max_sample_id, ToSampleId(property));
   }
 
-  for (CSSPropertyID property : kCSSPropertyAliasList)
+  for (CSSPropertyID property : kCSSPropertyAliasList) {
     max_sample_id = std::max(max_sample_id, ToSampleId(property));
+  }
 
   EXPECT_EQ(static_cast<int>(mojom::blink::CSSSampleId::kMaxValue),
             max_sample_id);
@@ -600,6 +604,89 @@
   EXPECT_TRUE(document.IsUseCounted(feature));
 }
 
+TEST_F(UseCounterImplTest, BackgroundClip) {
+  auto dummy_page_holder =
+      std::make_unique<DummyPageHolder>(gfx::Size(800, 600));
+  Page::InsertOrdinaryPageForTesting(&dummy_page_holder->GetPage());
+  Document& document = dummy_page_holder->GetDocument();
+
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{background-clip: border-box;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{background-clip: content-box;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{background-clip: padding-box;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{-webkit-background-clip: border-box;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{-webkit-background-clip: content-box;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{-webkit-background-clip: padding-box;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{-webkit-background-clip: text;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.documentElement()->setInnerHTML(
+      "<style>html{-webkit-background-clip: border;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_TRUE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.ClearUseCounterForTesting(WebFeature::kCSSBackgroundClipBorder);
+  document.documentElement()->setInnerHTML(
+      "<style>html{-webkit-background-clip: content;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_TRUE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+
+  document.ClearUseCounterForTesting(WebFeature::kCSSBackgroundClipContent);
+  document.documentElement()->setInnerHTML(
+      "<style>html{-webkit-background-clip: padding;}</style>");
+  UpdateAllLifecyclePhases(document);
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipBorder));
+  EXPECT_FALSE(document.IsUseCounted(WebFeature::kCSSBackgroundClipContent));
+  EXPECT_TRUE(document.IsUseCounted(WebFeature::kCSSBackgroundClipPadding));
+}
+
 TEST_F(UseCounterImplTest, H1UserAgentFontSizeInSectionApplied) {
   auto dummy_page_holder =
       std::make_unique<DummyPageHolder>(gfx::Size(800, 600));
diff --git a/third_party/blink/renderer/core/frame/visual_viewport.cc b/third_party/blink/renderer/core/frame/visual_viewport.cc
index 945268e..47607c2 100644
--- a/third_party/blink/renderer/core/frame/visual_viewport.cc
+++ b/third_party/blink/renderer/core/frame/visual_viewport.cc
@@ -34,6 +34,7 @@
 
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/input/main_thread_scrolling_reason.h"
 #include "cc/layers/solid_color_scrollbar_layer.h"
 #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_test.cc b/third_party/blink/renderer/core/frame/web_frame_widget_test.cc
index 51377b00..452776b 100644
--- a/third_party/blink/renderer/core/frame/web_frame_widget_test.cc
+++ b/third_party/blink/renderer/core/frame/web_frame_widget_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index 62812d95..851f1cc 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -94,6 +94,7 @@
 
 #include "base/notreached.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
diff --git a/third_party/blink/renderer/core/html/build.gni b/third_party/blink/renderer/core/html/build.gni
index 949e22a..37560946 100644
--- a/third_party/blink/renderer/core/html/build.gni
+++ b/third_party/blink/renderer/core/html/build.gni
@@ -627,7 +627,6 @@
   "parser/html_view_source_parser.cc",
   "parser/html_view_source_parser.h",
   "parser/input_stream_preprocessor.h",
-  "parser/literal_buffer.cc",
   "parser/literal_buffer.h",
   "parser/markup_tokenizer_inlines.h",
   "parser/parser_scripting_flag_policy.h",
diff --git a/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc b/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc
index 8bf1f468..0edf7a1e 100644
--- a/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc
+++ b/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc
@@ -187,13 +187,6 @@
     style_builder.SetOverflowX(EOverflow::kScroll);
     // overflow-y:visible doesn't work because overflow-x:scroll makes a layer.
     style_builder.SetOverflowY(EOverflow::kScroll);
-    ComputedStyleBuilder no_scrollbar_style_builder =
-        GetDocument().GetStyleResolver().CreateComputedStyleBuilder();
-    no_scrollbar_style_builder.SetStyleType(kPseudoIdScrollbar);
-    no_scrollbar_style_builder.SetDisplay(EDisplay::kNone);
-    style_builder.MutableInternalStyle()->AddCachedPseudoElementStyle(
-        no_scrollbar_style_builder.TakeStyle(), kPseudoIdScrollbar,
-        g_null_atom);
     style_builder.SetPseudoElementStyles(
         1 << (kPseudoIdScrollbar - kFirstPublicPseudoId));
 
@@ -208,7 +201,18 @@
   if (!is_visible_)
     style_builder.SetOpacity(0);
 
-  return style_builder.TakeStyle();
+  scoped_refptr<ComputedStyle> style = style_builder.TakeStyle();
+
+  if (style->HasPseudoElementStyle(kPseudoIdScrollbar)) {
+    ComputedStyleBuilder no_scrollbar_style_builder =
+        GetDocument().GetStyleResolver().CreateComputedStyleBuilder();
+    no_scrollbar_style_builder.SetStyleType(kPseudoIdScrollbar);
+    no_scrollbar_style_builder.SetDisplay(EDisplay::kNone);
+    style->AddCachedPseudoElementStyle(no_scrollbar_style_builder.TakeStyle(),
+                                       kPseudoIdScrollbar, g_null_atom);
+  }
+
+  return style;
 }
 
 // ----------------------------
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc
index 0fc2ac3..dfd3b0f4 100644
--- a/third_party/blink/renderer/core/html/html_element.cc
+++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -1510,6 +1510,19 @@
 
   GetPopoverData()->setInvoker(nullptr);
 
+  if (force_hide) {
+    // Stop matching `:open` now:
+    GetPopoverData()->setVisibilityState(
+        PopoverVisibilityState::kTransitioning);
+    PseudoStateChanged(CSSSelector::kPseudoOpen);
+
+    // Note that a `beforetoggle` event is not fired in the case that the
+    // popover is being hidden because it has been removed from the document.
+
+    // Immediately finish the hide process.
+    return PopoverHideFinishIfNeeded();
+  }
+
   // Fire the "closing" beforetoggle event.
   auto* event = BeforeToggleEvent::CreateBubble(
       event_type_names::kBeforetoggle, Event::Cancelable::kNo,
@@ -1519,18 +1532,6 @@
   DCHECK_EQ(event->currentState(), "open");
   DCHECK_EQ(event->newState(), "closed");
   event->SetTarget(this);
-  if (force_hide) {
-    // Stop matching `:open` now:
-    GetPopoverData()->setVisibilityState(
-        PopoverVisibilityState::kTransitioning);
-    PseudoStateChanged(CSSSelector::kPseudoOpen);
-
-    // We will be force-hidden when the popover element is being removed from
-    // the document, during which event dispatch is prohibited.
-    GetDocument().EnqueueAnimationFrameEvent(event);
-    // Immediately finish the hide process.
-    return PopoverHideFinishIfNeeded();
-  }
   auto result = DispatchEvent(*event);
   DCHECK_EQ(result, DispatchEventResult::kNotCanceled);
 
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc
index 3f139d09..2168848 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element.cc
@@ -485,9 +485,10 @@
   if (!trust_token_)
     return nullptr;
 
+  // TODO(crbug.com/1264024): Deprecate JSON comments here, if possible.
   JSONParseError parse_error;
   std::unique_ptr<JSONValue> parsed_attribute =
-      ParseJSON(trust_token_, &parse_error);
+      ParseJSONWithCommentsDeprecated(trust_token_, &parse_error);
   if (!parsed_attribute) {
     GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
         mojom::blink::ConsoleMessageSource::kOther,
diff --git a/third_party/blink/renderer/core/html/media/video_wake_lock.cc b/third_party/blink/renderer/core/html/media/video_wake_lock.cc
index 9dd3d1d..3cb38588 100644
--- a/third_party/blink/renderer/core/html/media/video_wake_lock.cc
+++ b/third_party/blink/renderer/core/html/media/video_wake_lock.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/html/media/video_wake_lock.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/wake_lock/wake_lock.mojom-blink.h"
 #include "third_party/blink/renderer/core/dom/document.h"
diff --git a/third_party/blink/renderer/core/html/parser/background_html_scanner.h b/third_party/blink/renderer/core/html/parser/background_html_scanner.h
index 08ddcfea..16eedf2 100644
--- a/third_party/blink/renderer/core/html/parser/background_html_scanner.h
+++ b/third_party/blink/renderer/core/html/parser/background_html_scanner.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_BACKGROUND_HTML_SCANNER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_PARSER_BACKGROUND_HTML_SCANNER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_streamer.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/heap/cross_thread_persistent.h"
diff --git a/third_party/blink/renderer/core/html/parser/background_html_scanner_test.cc b/third_party/blink/renderer/core/html/parser/background_html_scanner_test.cc
index 56c25fe..d1b33d2 100644
--- a/third_party/blink/renderer/core/html/parser/background_html_scanner_test.cc
+++ b/third_party/blink/renderer/core/html/parser/background_html_scanner_test.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/html/parser/background_html_scanner.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/scriptable_document_parser.h"
diff --git a/third_party/blink/renderer/core/html/parser/background_html_token_producer.cc b/third_party/blink/renderer/core/html/parser/background_html_token_producer.cc
index 558cb65..925fbce 100644
--- a/third_party/blink/renderer/core/html/parser/background_html_token_producer.cc
+++ b/third_party/blink/renderer/core/html/parser/background_html_token_producer.cc
@@ -6,6 +6,7 @@
 
 #include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/core/html/parser/html_document_parser.h"
 #include "third_party/blink/renderer/core/html/parser/html_tokenizer.h"
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
index 39d40dc..2114be0 100644
--- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc
+++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
@@ -32,6 +32,8 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/types/optional_util.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/loader/loading_behavior_flag.h"
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.h b/third_party/blink/renderer/core/html/parser/html_document_parser.h
index 69eee4d..8e291e5 100644
--- a/third_party/blink/renderer/core/html/parser/html_document_parser.h
+++ b/third_party/blink/renderer/core/html/parser/html_document_parser.h
@@ -31,6 +31,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/core/core_export.h"
diff --git a/third_party/blink/renderer/core/html/parser/html_meta_charset_parser.cc b/third_party/blink/renderer/core/html/parser/html_meta_charset_parser.cc
index 3e4c56d8..7dbedadc 100644
--- a/third_party/blink/renderer/core/html/parser/html_meta_charset_parser.cc
+++ b/third_party/blink/renderer/core/html/parser/html_meta_charset_parser.cc
@@ -48,7 +48,7 @@
   HTMLAttributeList attributes;
   for (const HTMLToken::Attribute& token_attribute : token_attributes) {
     String attribute_name = token_attribute.NameAttemptStaticStringCreation();
-    String attribute_value = token_attribute.Value8BitIfNecessary();
+    String attribute_value = token_attribute.Value();
     attributes.push_back(std::make_pair(attribute_name, attribute_value));
   }
 
diff --git a/third_party/blink/renderer/core/html/parser/html_parser_idioms.h b/third_party/blink/renderer/core/html/parser/html_parser_idioms.h
index ed47cc7..1c1b0b4c 100644
--- a/third_party/blink/renderer/core/html/parser/html_parser_idioms.h
+++ b/third_party/blink/renderer/core/html/parser/html_parser_idioms.h
@@ -133,15 +133,9 @@
 
 template <wtf_size_t inlineCapacity>
 inline static String AttemptStaticStringCreation(
-    const UCharLiteralBuffer<inlineCapacity>& vector,
-    CharacterWidth width) {
-  if (g_literal_buffer_create_string_with_encoding) {
-    // TODO(sky): once this is made the default, remove `width` parameter.
-    return AttemptStaticStringCreation(
-        vector.data(), vector.size(),
-        vector.Is8Bit() ? kForce8Bit : kForce16Bit);
-  }
-  return AttemptStaticStringCreation(vector.data(), vector.size(), width);
+    const UCharLiteralBuffer<inlineCapacity>& vector) {
+  return AttemptStaticStringCreation(
+      vector.data(), vector.size(), vector.Is8Bit() ? kForce8Bit : kForce16Bit);
 }
 
 template <wtf_size_t inlineCapacity>
@@ -151,7 +145,7 @@
   return AttemptStaticStringCreation(vector.data(), vector.size(), width);
 }
 
-inline static String AttemptStaticStringCreation(const String str) {
+inline static String AttemptStaticStringCreation(const String& str) {
   if (!str.Is8Bit())
     return AttemptStaticStringCreation(str.Characters16(), str.length(),
                                        kForce16Bit);
diff --git a/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc b/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc
index 8989338..0e14a6b 100644
--- a/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc
+++ b/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc
@@ -29,6 +29,7 @@
 
 #include <memory>
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
@@ -203,7 +204,7 @@
       return;
     for (const HTMLToken::Attribute& html_token_attribute : attributes) {
       AtomicString attribute_name(html_token_attribute.GetName());
-      String attribute_value = html_token_attribute.Value8BitIfNecessary();
+      String attribute_value = html_token_attribute.Value();
       ProcessAttribute(attribute_name, attribute_value);
     }
     PostProcessAfterAttributes();
@@ -1051,8 +1052,8 @@
   DCHECK(predicted_base_element_url_.IsEmpty());
   if (const HTMLToken::Attribute* href_attribute =
           token.GetAttributeItem(html_names::kHrefAttr)) {
-    KURL url(document_url_, StripLeadingAndTrailingHTMLSpaces(
-                                href_attribute->Value8BitIfNecessary()));
+    KURL url(document_url_,
+             StripLeadingAndTrailingHTMLSpaces(href_attribute->Value()));
     bool is_valid_base_url =
         url.IsValid() && !url.ProtocolIsData() && !url.ProtocolIsJavaScript();
     predicted_base_element_url_ = is_valid_base_url ? url : KURL();
diff --git a/third_party/blink/renderer/core/html/parser/html_preload_scanner.h b/third_party/blink/renderer/core/html/parser/html_preload_scanner.h
index da86ae9..6de1740fe 100644
--- a/third_party/blink/renderer/core/html/parser/html_preload_scanner.h
+++ b/third_party/blink/renderer/core/html/parser/html_preload_scanner.h
@@ -32,6 +32,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "services/network/public/cpp/client_hints.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/core_export.h"
diff --git a/third_party/blink/renderer/core/html/parser/html_token.h b/third_party/blink/renderer/core/html/parser/html_token.h
index f18b01c3..e46c2008 100644
--- a/third_party/blink/renderer/core/html/parser/html_token.h
+++ b/third_party/blink/renderer/core/html/parser/html_token.h
@@ -87,19 +87,12 @@
     const UCharLiteralBuffer<32>& NameBuffer() const { return name_; }
 
     String NameAttemptStaticStringCreation() const {
-      return AttemptStaticStringCreation(name_, kLikely8Bit);
+      return AttemptStaticStringCreation(name_);
     }
 
     bool NameIsEmpty() const { return name_.IsEmpty(); }
     void AppendToName(UChar c) { name_.AddChar(c); }
 
-    String Value8BitIfNecessary() const {
-      // TODO(sky): remove this function and convert callers to Value() once
-      // `g_literal_buffer_create_string_with_encoding` is removed.
-      if (!g_literal_buffer_create_string_with_encoding)
-        return StringImpl::Create8BitIfPossible(value_.data(), value_.size());
-      return value_.AsString();
-    }
     String Value() const { return value_.AsString(); }
 
     void AppendToValue(UChar c) { value_.AddChar(c); }
diff --git a/third_party/blink/renderer/core/html/parser/literal_buffer.cc b/third_party/blink/renderer/core/html/parser/literal_buffer.cc
deleted file mode 100644
index 45d9cd4..0000000
--- a/third_party/blink/renderer/core/html/parser/literal_buffer.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2022 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/core/html/parser/literal_buffer.h"
-
-bool g_literal_buffer_create_string_with_encoding = true;
diff --git a/third_party/blink/renderer/core/html/parser/literal_buffer.h b/third_party/blink/renderer/core/html/parser/literal_buffer.h
index f18a8d9..a6520032 100644
--- a/third_party/blink/renderer/core/html/parser/literal_buffer.h
+++ b/third_party/blink/renderer/core/html/parser/literal_buffer.h
@@ -27,12 +27,6 @@
 #define BUFFER_INLINE_CAPACITY kInlineSize
 #endif
 
-// Controls whether strings created by LiteralBuffer have an encoding specified.
-// Specifying the encoding may avoid unnecessary allocations and checks to
-// determine encoding, and allows for a fast path when copying UChars to
-// LChars.
-CORE_EXPORT extern bool g_literal_buffer_create_string_with_encoding;
-
 // LiteralBufferBase is an optimized version of Vector for LChar and UChar
 // characters. In particular `AddChar` is faster than `push_back`, since
 // it avoids unnecessary register spills. See https://crbug.com/1205338.
@@ -280,8 +274,9 @@
   }
 
   String AsString() const {
-    if (g_literal_buffer_create_string_with_encoding && Is8Bit())
+    if (Is8Bit()) {
       return String::Make8BitFrom16BitSource(this->data(), this->size());
+    }
     return String(this->data(), this->size());
   }
 
@@ -290,8 +285,6 @@
   }
 
   AtomicString AsAtomicString() const {
-    if (!g_literal_buffer_create_string_with_encoding)
-      return AtomicString(this->data(), this->size());
     return AtomicString(this->data(), this->size(),
                         Is8Bit() ? WTF::AtomicStringUCharEncoding::kIs8Bit
                                  : WTF::AtomicStringUCharEncoding::kIs16Bit);
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
index f9cac87..de14a7f 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
@@ -9,6 +9,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/checked_math.h"
 #include "base/numerics/clamped_math.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
 #include "gpu/config/gpu_feature_info.h"
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager_test.cc b/third_party/blink/renderer/core/input/pointer_event_manager_test.cc
index 7e712c7..2998a6b 100644
--- a/third_party/blink/renderer/core/input/pointer_event_manager_test.cc
+++ b/third_party/blink/renderer/core/input/pointer_event_manager_test.cc
@@ -7,6 +7,7 @@
 #include <limits>
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/events/native_event_listener.h"
diff --git a/third_party/blink/renderer/core/inspector/devtools_agent.cc b/third_party/blink/renderer/core/inspector/devtools_agent.cc
index 67e846d..d6de5872 100644
--- a/third_party/blink/renderer/core/inspector/devtools_agent.cc
+++ b/third_party/blink/renderer/core/inspector/devtools_agent.cc
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
diff --git a/third_party/blink/renderer/core/inspector/devtools_session.cc b/third_party/blink/renderer/core/inspector/devtools_session.cc
index 9c8849e..01c2f36 100644
--- a/third_party/blink/renderer/core/inspector/devtools_session.cc
+++ b/third_party/blink/renderer/core/inspector/devtools_session.cc
@@ -8,6 +8,8 @@
 #include <utility>
 #include <vector>
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_controller.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/inspector/devtools_agent.h"
diff --git a/third_party/blink/renderer/core/inspector/devtools_session.h b/third_party/blink/renderer/core/inspector/devtools_session.h
index 4ba6f7c..382c3e29 100644
--- a/third_party/blink/renderer/core/inspector/devtools_session.h
+++ b/third_party/blink/renderer/core/inspector/devtools_session.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <type_traits>
 #include "base/callback.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
index a5663fd5..7b17aa97 100644
--- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
@@ -36,6 +36,7 @@
 #include "base/containers/span.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "net/base/ip_address.h"
 #include "net/base/ip_endpoint.h"
diff --git a/third_party/blink/renderer/core/inspector/inspector_task_runner.cc b/third_party/blink/renderer/core/inspector/inspector_task_runner.cc
index ab48fcde..b8e9f4d 100644
--- a/third_party/blink/renderer/core/inspector/inspector_task_runner.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_task_runner.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/inspector/inspector_task_runner.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/bindings/thread_debugger.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
diff --git a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
index 264ba50..1985652f 100644
--- a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
+++ b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
diff --git a/third_party/blink/renderer/core/layout/scroll_anchor.cc b/third_party/blink/renderer/core/layout/scroll_anchor.cc
index 5f00563..5a9a052 100644
--- a/third_party/blink/renderer/core/layout/scroll_anchor.cc
+++ b/third_party/blink/renderer/core/layout/scroll_anchor.cc
@@ -76,7 +76,6 @@
   return box;
 }
 
-
 // TODO(skobes): Storing a "corner" doesn't make much sense anymore since we
 // adjust only on the block flow axis.  This could probably be refactored to
 // simply measure the movement of the block-start edge.
@@ -232,7 +231,10 @@
   }
 
   return ":nth-child(" +
-         String::Number(NthIndexCache::NthChildIndex(*element)) + ")";
+         String::Number(NthIndexCache::NthChildIndex(
+             *element, /*filter=*/nullptr, /*selector_checker=*/nullptr,
+             /*context=*/nullptr)) +
+         ")";
 }
 
 // Computes a selector that uniquely identifies |anchor_node|. This is done
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_text_path.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_text_path.cc
index 6f97622e..e3317c3f 100644
--- a/third_party/blink/renderer/core/layout/svg/layout_svg_text_path.cc
+++ b/third_party/blink/renderer/core/layout/svg/layout_svg_text_path.cc
@@ -96,12 +96,11 @@
     author_path_length = computed_path_length;
   }
 
-  const SVGLength& start_offset =
-      *text_path_element.startOffset()->CurrentValue();
-  float path_start_offset = start_offset.ScaleByPercentage(1);
-  if (start_offset.IsPercentage())
-    path_start_offset *= author_path_length;
-
+  const SVGLengthContext context(&text_path_element);
+  const Length& start_offset =
+      context.ConvertToLength(*text_path_element.startOffset()->CurrentValue());
+  float path_start_offset =
+      FloatValueForLength(start_offset, author_path_length);
   path_start_offset *= offset_scale;
 
   return std::make_unique<PathPositionMapper>(path_data, computed_path_length,
diff --git a/third_party/blink/renderer/core/loader/interactive_detector.cc b/third_party/blink/renderer/core/loader/interactive_detector.cc
index 0810f42..631a83b2 100644
--- a/third_party/blink/renderer/core/loader/interactive_detector.cc
+++ b/third_party/blink/renderer/core/loader/interactive_detector.cc
@@ -6,6 +6,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/profiler/sample_metadata.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
diff --git a/third_party/blink/renderer/core/loader/interactive_detector.h b/third_party/blink/renderer/core/loader/interactive_detector.h
index fbc90fa..f48b0bfb 100644
--- a/third_party/blink/renderer/core/loader/interactive_detector.h
+++ b/third_party/blink/renderer/core/loader/interactive_detector.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_INTERACTIVE_DETECTOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_INTERACTIVE_DETECTOR_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/core_export.h"
diff --git a/third_party/blink/renderer/core/loader/interactive_detector_test.cc b/third_party/blink/renderer/core/loader/interactive_detector_test.cc
index a001bba4..3ba767b9 100644
--- a/third_party/blink/renderer/core/loader/interactive_detector_test.cc
+++ b/third_party/blink/renderer/core/loader/interactive_detector_test.cc
@@ -5,6 +5,7 @@
 #include "services/metrics/public/cpp/ukm_builders.h"
 
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/core/loader/interactive_detector.h"
diff --git a/third_party/blink/renderer/core/loader/loader_factory_for_frame.h b/third_party/blink/renderer/core/loader/loader_factory_for_frame.h
index f1b73563..d4fe2cc 100644
--- a/third_party/blink/renderer/core/loader/loader_factory_for_frame.h
+++ b/third_party/blink/renderer/core/loader/loader_factory_for_frame.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include <utility>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
diff --git a/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc b/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc
index 4b8ec020..1c482b9 100644
--- a/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc
+++ b/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/loader/loader_factory_for_worker.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/loader/loader_factory_for_worker.h b/third_party/blink/renderer/core/loader/loader_factory_for_worker.h
index de3ba88..531e11e 100644
--- a/third_party/blink/renderer/core/loader/loader_factory_for_worker.h
+++ b/third_party/blink/renderer/core/loader/loader_factory_for_worker.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include <utility>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/loader/pending_link_preload.cc b/third_party/blink/renderer/core/loader/pending_link_preload.cc
index e985a4d..ed5c9bf 100644
--- a/third_party/blink/renderer/core/loader/pending_link_preload.cc
+++ b/third_party/blink/renderer/core/loader/pending_link_preload.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/loader/pending_link_preload.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/loader/link_loader.h"
 #include "third_party/blink/renderer/core/loader/preload_helper.h"
diff --git a/third_party/blink/renderer/core/loader/pending_link_preload.h b/third_party/blink/renderer/core/loader/pending_link_preload.h
index a0cd3dc3..a4d43314 100644
--- a/third_party/blink/renderer/core/loader/pending_link_preload.h
+++ b/third_party/blink/renderer/core/loader/pending_link_preload.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_PENDING_LINK_PRELOAD_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_PENDING_LINK_PRELOAD_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/loader/link_load_parameters.h"
 #include "third_party/blink/renderer/core/script/modulator.h"
 
diff --git a/third_party/blink/renderer/core/loader/ping_loader.cc b/third_party/blink/renderer/core/loader/ping_loader.cc
index 2def049c..9b71f2f 100644
--- a/third_party/blink/renderer/core/loader/ping_loader.cc
+++ b/third_party/blink/renderer/core/loader/ping_loader.cc
@@ -80,7 +80,8 @@
   request.SetKeepalive(true);
   request.SetRequestContext(mojom::blink::RequestContextType::BEACON);
   beacon.Serialize(request);
-  FetchParameters params(std::move(request), &state.World());
+  FetchParameters params(std::move(request),
+                         ResourceLoaderOptions(&state.World()));
   // The spec says:
   //  - If mimeType is not null:
   //   - If mimeType value is a CORS-safelisted request-header value for the
@@ -125,8 +126,9 @@
   request.SetReferrerString(Referrer::NoReferrer());
   request.SetReferrerPolicy(network::mojom::ReferrerPolicy::kNever);
   request.SetRequestContext(mojom::blink::RequestContextType::PING);
-  FetchParameters params(std::move(request),
-                         frame->DomWindow()->GetCurrentWorld());
+  FetchParameters params(
+      std::move(request),
+      ResourceLoaderOptions(frame->DomWindow()->GetCurrentWorld()));
   params.MutableOptions().initiator_info.name =
       fetch_initiator_type_names::kPing;
 
@@ -147,8 +149,9 @@
   request.SetRequestDestination(network::mojom::RequestDestination::kReport);
   request.SetRequestorOrigin(execution_context->GetSecurityOrigin());
   request.SetRedirectMode(network::mojom::RedirectMode::kError);
-  FetchParameters params(std::move(request),
-                         execution_context->GetCurrentWorld());
+  FetchParameters params(
+      std::move(request),
+      ResourceLoaderOptions(execution_context->GetCurrentWorld()));
   params.MutableOptions().initiator_info.name =
       fetch_initiator_type_names::kViolationreport;
 
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
index 66ec350..77855f7 100644
--- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
+++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/cpp/resource_request.h"
diff --git a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
index 8ff6b461..8ebbc37 100644
--- a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
@@ -26,6 +26,7 @@
 
 #include "third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h
index f6ae138..d9ad049 100644
--- a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h
+++ b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h
@@ -26,6 +26,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_CSS_STYLE_SHEET_RESOURCE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_CSS_STYLE_SHEET_RESOURCE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
 #include "third_party/blink/renderer/core/loader/resource/text_resource.h"
diff --git a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource_test.cc b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource_test.cc
index ceebcce1..d8370c4 100644
--- a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h"
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/core/loader/resource/font_resource.cc b/third_party/blink/renderer/core/loader/resource/font_resource.cc
index 701a7f4a..8c1248c 100644
--- a/third_party/blink/renderer/core/loader/resource/font_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/font_resource.cc
@@ -27,6 +27,7 @@
 #include "third_party/blink/renderer/core/loader/resource/font_resource.h"
 
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource.cc b/third_party/blink/renderer/core/loader/resource/image_resource.cc
index 57b7252..d4dcc41 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/image_resource.cc
@@ -30,6 +30,7 @@
 
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/loader/referrer_utils.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource.h b/third_party/blink/renderer/core/loader/resource/image_resource.h
index 55cec7b6..538cadb 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource.h
+++ b/third_party/blink/renderer/core/loader/resource/image_resource.h
@@ -23,6 +23,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_IMAGE_RESOURCE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_IMAGE_RESOURCE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/loader/resource/image_resource_content.h"
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
index b92a65e..5c073ca 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
@@ -31,6 +31,7 @@
 #include "third_party/blink/renderer/core/loader/resource/image_resource.h"
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/loader/referrer_utils.h"
diff --git a/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc b/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc
index 4f7c978b..2c7c21a 100644
--- a/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/resource_loader_code_cache_test.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/web_back_forward_cache_loader_helper.h"
 #include "third_party/blink/renderer/core/loader/resource/script_resource.h"
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource.cc b/third_party/blink/renderer/core/loader/resource/script_resource.cc
index 538efa4..68d7c287 100644
--- a/third_party/blink/renderer/core/loader/resource/script_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/script_resource.cc
@@ -29,6 +29,7 @@
 #include <utility>
 
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/mojom/loader/code_cache.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/loader/resource/script_resource.h b/third_party/blink/renderer/core/loader/resource/script_resource.h
index a899000e6..072ec77 100644
--- a/third_party/blink/renderer/core/loader/resource/script_resource.h
+++ b/third_party/blink/renderer/core/loader/resource/script_resource.h
@@ -26,6 +26,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_SCRIPT_RESOURCE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_SCRIPT_RESOURCE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/script/script_type.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/script/script_type.mojom-shared.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_cache_consumer.h"
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.cc b/third_party/blink/renderer/core/loader/threadable_loader.cc
index b56f74b8..f19bece0 100644
--- a/third_party/blink/renderer/core/loader/threadable_loader.cc
+++ b/third_party/blink/renderer/core/loader/threadable_loader.cc
@@ -34,6 +34,7 @@
 #include <memory>
 
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/cpp/cors/cors_error_status.h"
 #include "services/network/public/mojom/cors.mojom-blink.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.h b/third_party/blink/renderer/core/loader/threadable_loader.h
index 8c77ed2..7a98358 100644
--- a/third_party/blink/renderer/core/loader/threadable_loader.h
+++ b/third_party/blink/renderer/core/loader/threadable_loader.h
@@ -32,6 +32,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_THREADABLE_LOADER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_THREADABLE_LOADER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink-forward.h"
diff --git a/third_party/blink/renderer/core/loader/threaded_icon_loader.cc b/third_party/blink/renderer/core/loader/threaded_icon_loader.cc
index 1bc8a830..ffe9b7c 100644
--- a/third_party/blink/renderer/core/loader/threaded_icon_loader.cc
+++ b/third_party/blink/renderer/core/loader/threaded_icon_loader.cc
@@ -8,6 +8,7 @@
 
 #include "base/cxx17_backports.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "skia/ext/image_operations.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/platform/web_data.h"
diff --git a/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc b/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc
index e49d1ef..0892014 100644
--- a/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc
+++ b/third_party/blink/renderer/core/loader/web_associated_url_loader_impl.cc
@@ -35,6 +35,7 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/cpp/request_destination.h"
 #include "services/network/public/cpp/request_mode.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/third_party/blink/renderer/core/loader/web_bundle/script_web_bundle_rule.cc b/third_party/blink/renderer/core/loader/web_bundle/script_web_bundle_rule.cc
index 815bb50..73ce7ac 100644
--- a/third_party/blink/renderer/core/loader/web_bundle/script_web_bundle_rule.cc
+++ b/third_party/blink/renderer/core/loader/web_bundle/script_web_bundle_rule.cc
@@ -53,7 +53,9 @@
 ScriptWebBundleRule::ParseJson(const String& inline_text,
                                const KURL& base_url,
                                ConsoleLogger* logger) {
-  std::unique_ptr<JSONValue> json = ParseJSON(inline_text);
+  // TODO(crbug.com/1264024): Deprecate JSON comments here, if possible.
+  std::unique_ptr<JSONValue> json =
+      ParseJSONWithCommentsDeprecated(inline_text);
   if (!json) {
     return ScriptWebBundleError(
         ScriptWebBundleError::Type::kSyntaxError,
diff --git a/third_party/blink/renderer/core/loader/worker_resource_timing_notifier_impl.cc b/third_party/blink/renderer/core/loader/worker_resource_timing_notifier_impl.cc
index c983ad4..ca2c4b3 100644
--- a/third_party/blink/renderer/core/loader/worker_resource_timing_notifier_impl.cc
+++ b/third_party/blink/renderer/core/loader/worker_resource_timing_notifier_impl.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/loader/worker_resource_timing_notifier_impl.h"
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/loader/cross_thread_resource_timing_info_copier.h"
 #include "third_party/blink/renderer/core/timing/dom_window_performance.h"
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
index aaa1de6..344328f 100644
--- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
+++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
@@ -9,6 +9,7 @@
 
 #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"
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl.cc b/third_party/blink/renderer/core/page/chrome_client_impl.cc
index 3b1aad5..f984b55 100644
--- a/third_party/blink/renderer/core/page/chrome_client_impl.cc
+++ b/third_party/blink/renderer/core/page/chrome_client_impl.cc
@@ -703,10 +703,6 @@
   NotifyPopupOpeningObservers();
   ColorChooserUIController* controller = nullptr;
 
-  // TODO(crbug.com/779126): add support for the chooser in immersive mode.
-  if (frame->GetDocument()->GetSettings()->GetImmersiveModeEnabled())
-    return nullptr;
-
   if (RuntimeEnabledFeatures::PagePopupEnabled()) {
     controller = MakeGarbageCollected<ColorChooserPopupUIController>(
         frame, this, chooser_client);
@@ -725,13 +721,6 @@
     LocalFrame* frame,
     DateTimeChooserClient* picker_client,
     const DateTimeChooserParameters& parameters) {
-  // TODO(crbug.com/779126): add support for the chooser in immersive mode.
-  if (picker_client->OwnerElement()
-          .GetDocument()
-          .GetSettings()
-          ->GetImmersiveModeEnabled())
-    return nullptr;
-
   NotifyPopupOpeningObservers();
   if (RuntimeEnabledFeatures::InputMultipleFieldsUIEnabled()) {
     return MakeGarbageCollected<DateTimeChooserImpl>(frame, picker_client,
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl_test.cc b/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
index e6ccebd..c3e422b 100644
--- a/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
+++ b/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
@@ -305,38 +305,6 @@
   Persistent<HTMLSelectElement> select_;
 };
 
-TEST_F(PagePopupSuppressionTest, SuppressColorChooser) {
-  // Some platforms don't support PagePopups so just return.
-  if (!RuntimeEnabledFeatures::PagePopupEnabled())
-    return;
-  // By default, the popup should be shown.
-  EXPECT_TRUE(CanOpenColorChooser());
-
-  Settings* settings = GetSettings();
-  settings->SetImmersiveModeEnabled(true);
-
-  EXPECT_FALSE(CanOpenColorChooser());
-
-  settings->SetImmersiveModeEnabled(false);
-  EXPECT_TRUE(CanOpenColorChooser());
-}
-
-TEST_F(PagePopupSuppressionTest, SuppressDateTimeChooser) {
-  // Some platforms don't support PagePopups so just return.
-  if (!RuntimeEnabledFeatures::PagePopupEnabled())
-    return;
-  // By default, the popup should be shown.
-  EXPECT_TRUE(CanOpenDateTimeChooser());
-
-  Settings* settings = GetSettings();
-  settings->SetImmersiveModeEnabled(true);
-
-  EXPECT_FALSE(CanOpenDateTimeChooser());
-
-  settings->SetImmersiveModeEnabled(false);
-  EXPECT_TRUE(CanOpenDateTimeChooser());
-}
-
 // A FileChooserClient which makes FileChooser::OpenFileChooser() success.
 class MockFileChooserClient : public GarbageCollected<MockFileChooserClient>,
                               public FileChooserClient {
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
index 6872dcb..66b3d6c9 100644
--- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
+++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
@@ -45,6 +45,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_PAINT_LAYER_SCROLLABLE_AREA_H_
 
 #include "base/check_op.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink-forward.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/layout/scroll_anchor.h"
diff --git a/third_party/blink/renderer/core/script/import_map.cc b/third_party/blink/renderer/core/script/import_map.cc
index 30c4172..f8f54ce 100644
--- a/third_party/blink/renderer/core/script/import_map.cc
+++ b/third_party/blink/renderer/core/script/import_map.cc
@@ -140,7 +140,8 @@
 
   // <spec step="1">Let parsed be the result of parsing JSON into Infra values
   // given input.</spec>
-  std::unique_ptr<JSONValue> parsed = ParseJSON(input);
+  // TODO(crbug.com/1264024): Deprecate JSON comments here, if possible.
+  std::unique_ptr<JSONValue> parsed = ParseJSONWithCommentsDeprecated(input);
 
   if (!parsed) {
     *error_to_rethrow =
diff --git a/third_party/blink/renderer/core/script/module_map_test.cc b/third_party/blink/renderer/core/script/module_map_test.cc
index 5795990f0..ad2f15c 100644
--- a/third_party/blink/renderer/core/script/module_map_test.cc
+++ b/third_party/blink/renderer/core/script/module_map_test.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/script/module_map.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_source_location_type.h"
diff --git a/third_party/blink/renderer/core/script/script_runner.cc b/third_party/blink/renderer/core/script/script_runner.cc
index 1600d7e..a16b8cd3 100644
--- a/third_party/blink/renderer/core/script/script_runner.cc
+++ b/third_party/blink/renderer/core/script/script_runner.cc
@@ -28,6 +28,7 @@
 #include <algorithm>
 
 #include "base/feature_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/typed_macros.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/core/scroll/mac_scrollbar_animator_impl.mm b/third_party/blink/renderer/core/scroll/mac_scrollbar_animator_impl.mm
index 3d2ead1..1fef4b65 100644
--- a/third_party/blink/renderer/core/scroll/mac_scrollbar_animator_impl.mm
+++ b/third_party/blink/renderer/core/scroll/mac_scrollbar_animator_impl.mm
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/scroll/mac_scrollbar_animator_impl.h"
 
+#import "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/core/scroll/scroll_animator.h"
 #include "third_party/blink/renderer/core/scroll/scrollbar_theme_mac.h"
diff --git a/third_party/blink/renderer/core/scroll/scrollable_area.cc b/third_party/blink/renderer/core/scroll/scrollable_area.cc
index f161d1a0..a82a237 100644
--- a/third_party/blink/renderer/core/scroll/scrollable_area.cc
+++ b/third_party/blink/renderer/core/scroll/scrollable_area.cc
@@ -31,6 +31,7 @@
 
 #include "third_party/blink/renderer/core/scroll/scrollable_area.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "cc/input/main_thread_scrolling_reason.h"
 #include "cc/input/scroll_utils.h"
diff --git a/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.cc b/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.cc
index cfb25ff..7cab8f1 100644
--- a/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.cc
+++ b/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/devtools/inspector_issue.mojom-blink.h"
 #include "third_party/blink/renderer/core/event_target_names.h"
 #include "third_party/blink/renderer/core/inspector/inspector_audits_issue.h"
diff --git a/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.h b/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.h
index 1688e27..e495574 100644
--- a/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.h
+++ b/third_party/blink/renderer/core/shadow_realm/shadow_realm_global_scope.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SHADOW_REALM_SHADOW_REALM_GLOBAL_SCOPE_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SHADOW_REALM_SHADOW_REALM_GLOBAL_SCOPE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/dom/events/event_target.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
diff --git a/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc b/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc
index 5ef0264..171c83b 100644
--- a/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc
+++ b/third_party/blink/renderer/core/speculation_rules/speculation_rule_set.cc
@@ -280,8 +280,10 @@
 
   // Let parsed be the result of parsing a JSON string to an Infra value given
   // input.
+  // TODO(crbug.com/1264024): Deprecate JSON comments here, if possible.
   JSONParseError parse_error;
-  auto parsed = JSONObject::From(ParseJSON(source_text, &parse_error));
+  auto parsed = JSONObject::From(
+      ParseJSONWithCommentsDeprecated(source_text, &parse_error));
 
   // If parsed is not a map, then return null.
   if (!parsed) {
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc
index a64f6b2..2e054587 100644
--- a/third_party/blink/renderer/core/style/computed_style.cc
+++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -1964,90 +1964,74 @@
   return NonInheritedVariablesInternal().get();
 }
 
-static CSSVariableData* GetInitialVariableData(
+namespace {
+
+template <typename T>
+CSSVariableData* GetVariableData(
+    const T& style_or_builder,
     const AtomicString& name,
-    const StyleInitialData* initial_data) {
-  if (!initial_data) {
-    return nullptr;
+    absl::optional<bool> inherited_hint = absl::nullopt) {
+  if (inherited_hint.value_or(true) && style_or_builder.InheritedVariables()) {
+    if (auto data = style_or_builder.InheritedVariables()->GetData(name)) {
+      return *data;
+    }
   }
-  return initial_data->GetVariableData(name);
+  if (!inherited_hint.value_or(false) &&
+      style_or_builder.NonInheritedVariables()) {
+    if (auto data = style_or_builder.NonInheritedVariables()->GetData(name)) {
+      return *data;
+    }
+  }
+  if (StyleInitialData* initial_data = style_or_builder.InitialData().get()) {
+    return initial_data->GetVariableData(name);
+  }
+  return nullptr;
 }
 
+template <typename T>
+const CSSValue* GetVariableValue(
+    const T& style_or_builder,
+    const AtomicString& name,
+    absl::optional<bool> inherited_hint = absl::nullopt) {
+  if (inherited_hint.value_or(true) && style_or_builder.InheritedVariables()) {
+    if (auto data = style_or_builder.InheritedVariables()->GetValue(name)) {
+      return *data;
+    }
+  }
+  if (!inherited_hint.value_or(false) &&
+      style_or_builder.NonInheritedVariables()) {
+    if (auto data = style_or_builder.NonInheritedVariables()->GetValue(name)) {
+      return *data;
+    }
+  }
+  if (StyleInitialData* initial_data = style_or_builder.InitialData().get()) {
+    return initial_data->GetVariableValue(name);
+  }
+  return nullptr;
+}
+
+}  // namespace
+
 CSSVariableData* ComputedStyle::GetVariableData(
     const AtomicString& name) const {
-  if (InheritedVariables()) {
-    if (auto data = InheritedVariables()->GetData(name)) {
-      return *data;
-    }
-  }
-  if (NonInheritedVariables()) {
-    if (auto data = NonInheritedVariables()->GetData(name)) {
-      return *data;
-    }
-  }
-  return GetInitialVariableData(name, InitialData().get());
+  return blink::GetVariableData(*this, name);
 }
 
 CSSVariableData* ComputedStyle::GetVariableData(
     const AtomicString& name,
     bool is_inherited_property) const {
-  if (is_inherited_property) {
-    if (InheritedVariables()) {
-      if (auto data = InheritedVariables()->GetData(name)) {
-        return *data;
-      }
-    }
-  } else {
-    if (NonInheritedVariables()) {
-      if (auto data = NonInheritedVariables()->GetData(name)) {
-        return *data;
-      }
-    }
-  }
-  return GetInitialVariableData(name, InitialData().get());
-}
-
-static const CSSValue* GetInitialVariableValue(
-    const AtomicString& name,
-    const StyleInitialData* initial_data) {
-  if (!initial_data) {
-    return nullptr;
-  }
-  return initial_data->GetVariableValue(name);
+  return blink::GetVariableData(*this, name, is_inherited_property);
 }
 
 const CSSValue* ComputedStyle::GetVariableValue(
     const AtomicString& name) const {
-  if (InheritedVariables()) {
-    if (auto value = InheritedVariables()->GetValue(name)) {
-      return *value;
-    }
-  }
-  if (NonInheritedVariables()) {
-    if (auto value = NonInheritedVariables()->GetValue(name)) {
-      return *value;
-    }
-  }
-  return GetInitialVariableValue(name, InitialData().get());
+  return blink::GetVariableValue(*this, name);
 }
 
 const CSSValue* ComputedStyle::GetVariableValue(
     const AtomicString& name,
     bool is_inherited_property) const {
-  if (is_inherited_property) {
-    if (InheritedVariables()) {
-      if (auto value = InheritedVariables()->GetValue(name)) {
-        return *value;
-      }
-    }
-  } else {
-    if (NonInheritedVariables()) {
-      if (auto value = NonInheritedVariables()->GetValue(name)) {
-        return *value;
-      }
-    }
-  }
-  return GetInitialVariableValue(name, InitialData().get());
+  return blink::GetVariableValue(*this, name, is_inherited_property);
 }
 
 bool ComputedStyle::HasIdenticalAscentDescentAndLineGap(
@@ -2651,6 +2635,12 @@
   SetColorSchemeForced(forced_scheme);
 }
 
+CSSVariableData* ComputedStyleBuilder::GetVariableData(
+    const AtomicString& name,
+    bool is_inherited_property) const {
+  return blink::GetVariableData(*this, name, is_inherited_property);
+}
+
 StyleInheritedVariables& ComputedStyleBuilder::MutableInheritedVariables() {
   ClearVariableNamesCache();
 
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index e03f56ae..40123b6 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -2700,7 +2700,6 @@
   ComputedStyleBuilder& operator=(ComputedStyleBuilder&&) = default;
 
   // TODO(crbug.com/1377295): Eventually remove these functions.
-  ComputedStyle* MutableInternalStyle() const { return style_.get(); }
   const ComputedStyle* InternalStyle() const { return style_.get(); }
 
   scoped_refptr<ComputedStyle> TakeStyle() { return std::move(style_); }
@@ -3271,6 +3270,11 @@
   const StyleInheritedVariables* InheritedVariables() const {
     return InheritedVariablesInternal().get();
   }
+  const StyleNonInheritedVariables* NonInheritedVariables() const {
+    return NonInheritedVariablesInternal().get();
+  }
+  CSSVariableData* GetVariableData(const AtomicString&,
+                                   bool is_inherited_property) const;
   CORE_EXPORT StyleInheritedVariables& MutableInheritedVariables();
   CORE_EXPORT StyleNonInheritedVariables& MutableNonInheritedVariables();
   CORE_EXPORT void SetVariableData(const AtomicString& name,
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image.cc b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
index 4a7c611..881dda0 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image.cc
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
@@ -29,6 +29,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.cc b/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.cc
index bf15550..258b332 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.cc
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.cc
@@ -31,6 +31,7 @@
 #include <algorithm>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/svg/graphics/svg_image.h"
 #include "third_party/blink/renderer/platform/graphics/image_observer.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.h b/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.h
index 5225dc5..146779a 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.h
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image_chrome_client.h
@@ -30,6 +30,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SVG_GRAPHICS_SVG_IMAGE_CHROME_CLIENT_H_
 
 #include "base/gtest_prod_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/loader/empty_clients.h"
 #include "third_party/blink/renderer/platform/heap/disallow_new_wrapper.h"
diff --git a/third_party/blink/renderer/core/svg/svg_length_context.cc b/third_party/blink/renderer/core/svg/svg_length_context.cc
index f456d5d9..ac50258 100644
--- a/third_party/blink/renderer/core/svg/svg_length_context.cc
+++ b/third_party/blink/renderer/core/svg/svg_length_context.cc
@@ -102,6 +102,38 @@
   return style;
 }
 
+namespace {
+
+class CSSToLengthConversionDataContext {
+  STACK_ALLOCATED();
+
+ public:
+  explicit CSSToLengthConversionDataContext(const SVGElement* context)
+      : context_(context),
+        style_(ComputedStyleForLengthResolving(context)),
+        root_style_(RootElementStyle(context)) {}
+
+  bool HasStyle() const { return style_; }
+
+  CSSToLengthConversionData MakeConversionData() const {
+    DCHECK(context_);
+    DCHECK(HasStyle());
+    return CSSToLengthConversionData(style_, style_, root_style_,
+                                     context_->GetDocument().GetLayoutView(),
+                                     CSSToLengthConversionData::ContainerSizes(
+                                         context_->ParentOrShadowHostElement()),
+                                     1.0f, ignored_flags_);
+  }
+
+ private:
+  const SVGElement* context_ = nullptr;
+  const ComputedStyle* style_ = nullptr;
+  const ComputedStyle* root_style_ = nullptr;
+  mutable CSSToLengthConversionData::Flags ignored_flags_ = 0;
+};
+
+}  // namespace
+
 static float ConvertValueFromUserUnitsToEMS(const ComputedStyle* style,
                                             float value) {
   if (!style) {
@@ -362,6 +394,26 @@
   return x.ScaleByPercentage(1);
 }
 
+float SVGLengthContext::ResolveValue(const CSSPrimitiveValue& primitive_value,
+                                     SVGLengthMode mode) const {
+  CSSToLengthConversionDataContext conversion_context(context_);
+  if (!conversion_context.HasStyle()) {
+    return 0;
+  }
+  const Length& length =
+      primitive_value.ConvertToLength(conversion_context.MakeConversionData());
+  return ValueForLength(length, 1.0f, mode);
+}
+
+Length SVGLengthContext::ConvertToLength(const SVGLength& length) const {
+  CSSToLengthConversionDataContext conversion_context(context_);
+  if (!conversion_context.HasStyle()) {
+    return Length::Fixed(0);
+  }
+  return length.AsCSSPrimitiveValue().ConvertToLength(
+      conversion_context.MakeConversionData());
+}
+
 float SVGLengthContext::ValueForLength(const UnzoomedLength& unzoomed_length,
                                        SVGLengthMode mode) const {
   return ValueForLength(unzoomed_length.length(), 1, mode);
@@ -613,26 +665,4 @@
   return true;
 }
 
-float SVGLengthContext::ResolveValue(const CSSPrimitiveValue& primitive_value,
-                                     SVGLengthMode mode) const {
-  const ComputedStyle* style = ComputedStyleForLengthResolving(context_);
-  if (!style) {
-    return 0;
-  }
-
-  const ComputedStyle* root_style = RootElementStyle(context_);
-  if (!root_style) {
-    return 0;
-  }
-
-  DCHECK(context_);
-  CSSToLengthConversionData::Flags ignored_flags = 0;
-  CSSToLengthConversionData conversion_data = CSSToLengthConversionData(
-      style, style, root_style, context_->GetDocument().GetLayoutView(),
-      CSSToLengthConversionData::ContainerSizes(
-          context_->ParentOrShadowHostElement()),
-      1.0f, ignored_flags);
-  Length length = primitive_value.ConvertToLength(conversion_data);
-  return ValueForLength(length, 1.0f, mode);
-}
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_length_context.h b/third_party/blink/renderer/core/svg/svg_length_context.h
index b37cc02..5f8ff15 100644
--- a/third_party/blink/renderer/core/svg/svg_length_context.h
+++ b/third_party/blink/renderer/core/svg/svg_length_context.h
@@ -74,6 +74,8 @@
                                    const Length& y_length,
                                    const ComputedStyle&) const;
 
+  Length ConvertToLength(const SVGLength&) const;
+
   float ConvertValueToUserUnits(float,
                                 SVGLengthMode,
                                 CSSPrimitiveValue::UnitType from_unit) const;
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc
index ce4c9eaf..0387f044 100644
--- a/third_party/blink/renderer/core/testing/internals.cc
+++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -33,6 +33,7 @@
 #include "base/functional/function_ref.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/process/process_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/layers/picture_layer.h"
 #include "cc/trees/layer_tree_host.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
diff --git a/third_party/blink/renderer/core/testing/no_network_web_url_loader.h b/third_party/blink/renderer/core/testing/no_network_web_url_loader.h
index d3666a6..4fc5ba6 100644
--- a/third_party/blink/renderer/core/testing/no_network_web_url_loader.h
+++ b/third_party/blink/renderer/core/testing/no_network_web_url_loader.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_NO_NETWORK_WEB_URL_LOADER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_NO_NETWORK_WEB_URL_LOADER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
 #include "third_party/blink/public/platform/web_url_loader_factory.h"
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.cc b/third_party/blink/renderer/core/testing/null_execution_context.cc
index 805fa19..c34dab51 100644
--- a/third_party/blink/renderer/core/testing/null_execution_context.cc
+++ b/third_party/blink/renderer/core/testing/null_execution_context.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/testing/null_execution_context.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
diff --git a/third_party/blink/renderer/core/testing/sim/sim_test.cc b/third_party/blink/renderer/core/testing/sim/sim_test.cc
index 1c319eb..35a931a5 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_test.cc
+++ b/third_party/blink/renderer/core/testing/sim/sim_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "content/test/test_blink_web_unit_test_support.h"
 #include "third_party/blink/public/platform/web_cache.h"
 #include "third_party/blink/public/web/web_navigation_params.h"
diff --git a/third_party/blink/renderer/core/testing/sim/sim_test.h b/third_party/blink/renderer/core/testing/sim/sim_test.h
index aca10e6..4ebaef3 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_test.h
+++ b/third_party/blink/renderer/core/testing/sim/sim_test.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_TEST_H_
 
 #include <gtest/gtest.h>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/web_effective_connection_type.h"
 #include "third_party/blink/renderer/core/frame/frame_test_helpers.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_compositor.h"
diff --git a/third_party/blink/renderer/core/timing/performance.cc b/third_party/blink/renderer/core/timing/performance.cc
index fa8900c1e..05e63b2 100644
--- a/third_party/blink/renderer/core/timing/performance.cc
+++ b/third_party/blink/renderer/core/timing/performance.cc
@@ -35,6 +35,7 @@
 
 #include "base/containers/contains.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
diff --git a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc
index e1e81c4c..ab9aa7c 100644
--- a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc
+++ b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "content/web_test/renderer/event_sender.h"
 #include "content/web_test/renderer/test_runner.h"
 #include "third_party/blink/public/common/features.h"
diff --git a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h
index f721713..6ca05f37 100644
--- a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h
+++ b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/test/frame_widget_test_helper.h"
 #include "third_party/blink/renderer/core/frame/web_frame_widget_impl.h"
 
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index fe2d16c..dc7fec50 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/feature_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/network/public/cpp/cross_origin_embedder_policy.h"
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
index b83a63a5..9127750 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/feature_list.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/renderer/platform/network/content_security_policy_parsers.h"
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.h b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
index 2bf9546e..24327619 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.h
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
diff --git a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc
index 2a703cc..03128d2 100644
--- a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc
+++ b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h"
 
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
diff --git a/third_party/blink/renderer/core/workers/shared_worker_client_holder.h b/third_party/blink/renderer/core/workers/shared_worker_client_holder.h
index da73e6b..f72c567c 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_client_holder.h
+++ b/third_party/blink/renderer/core/workers/shared_worker_client_holder.h
@@ -32,6 +32,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_SHARED_WORKER_CLIENT_HOLDER_H_
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "third_party/blink/public/mojom/blob/blob_url_store.mojom-blink-forward.h"
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc b/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc
index 1fa97bb..243fcd26 100644
--- a/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc
+++ b/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.h"
 #include "third_party/blink/renderer/core/workers/worker_thread.h"
 #include "third_party/blink/renderer/core/workers/worklet_global_scope.h"
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.h b/third_party/blink/renderer/core/workers/worker_global_scope.h
index f5c55f2..351e21d 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.h
@@ -29,6 +29,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink-forward.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
diff --git a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
index 99523cc..6ed3285 100644
--- a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
 #include "third_party/blink/public/common/features.h"
diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc
index 3282f6ea..26406732 100644
--- a/third_party/blink/renderer/core/workers/worker_thread.cc
+++ b/third_party/blink/renderer/core/workers/worker_thread.cc
@@ -33,6 +33,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "third_party/blink/public/common/loader/worker_main_script_load_parameters.h"
 #include "third_party/blink/public/mojom/frame/lifecycle.mojom-shared.h"
diff --git a/third_party/blink/renderer/core/workers/worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worklet_global_scope.cc
index c031d2ba..7af884e 100644
--- a/third_party/blink/renderer/core/workers/worklet_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worklet_global_scope.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/workers/worklet_global_scope.h"
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "services/metrics/public/cpp/mojo_ukm_recorder.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
diff --git a/third_party/blink/renderer/core/workers/worklet_module_responses_map.cc b/third_party/blink/renderer/core/workers/worklet_module_responses_map.cc
index 2c30bef..4e03113 100644
--- a/third_party/blink/renderer/core/workers/worklet_module_responses_map.cc
+++ b/third_party/blink/renderer/core/workers/worklet_module_responses_map.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/workers/worklet_module_responses_map.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.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"
diff --git a/third_party/blink/renderer/core/workers/worklet_module_responses_map.h b/third_party/blink/renderer/core/workers/worklet_module_responses_map.h
index f0c8768d..15e0709d 100644
--- a/third_party/blink/renderer/core/workers/worklet_module_responses_map.h
+++ b/third_party/blink/renderer/core/workers/worklet_module_responses_map.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_WORKLET_MODULE_RESPONSES_MAP_H_
 
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h"
diff --git a/third_party/blink/renderer/core/workers/worklet_module_tree_client.cc b/third_party/blink/renderer/core/workers/worklet_module_tree_client.cc
index 8dea3475..662b0f75 100644
--- a/third_party/blink/renderer/core/workers/worklet_module_tree_client.cc
+++ b/third_party/blink/renderer/core/workers/worklet_module_tree_client.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/workers/worklet_module_tree_client.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
index f11889e..d361529 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -1235,8 +1235,10 @@
   if (GetNode()->HasTagName(html_names::kStrongTag))
     return ax::mojom::blink::Role::kStrong;
 
-  if (GetNode()->HasTagName(html_names::kDelTag))
+  if (GetNode()->HasTagName(html_names::kDelTag) ||
+      GetNode()->HasTagName(html_names::kSTag)) {
     return ax::mojom::blink::Role::kContentDeletion;
+  }
 
   if (GetNode()->HasTagName(html_names::kInsTag))
     return ax::mojom::blink::Role::kContentInsertion;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
index dfcd1c7..cce4627 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -49,6 +49,7 @@
 #include "third_party/blink/renderer/modules/accessibility/blink_ax_tree_source.h"
 #include "third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_deque.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h"
@@ -551,7 +552,9 @@
     Member<AXObject> obj;
     ax::mojom::blink::EventFrom event_from;
     ax::mojom::blink::Action event_from_action;
-    std::vector<ui::AXEventIntent> event_intents;
+    std::vector<ui::AXEventIntent> event_intents ALLOW_DISCOURAGED_TYPE(
+        "Avoids conversion when passed from/to ui::AXTreeUpdate or "
+        "blink::WebAXObject");
   };
 
   // Create an AXObject, and do not check if a previous one exists.
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc
index f9581480..cc97d022 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/timer/elapsed_timer.h"
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
 #include "third_party/blink/renderer/core/animation/worklet_animation_controller.h"
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
index 1d24b90e..8a4cdd4c 100644
--- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
+++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/blink/renderer/modules/background_sync/periodic_sync_manager.cc b/third_party/blink/renderer/modules/background_sync/periodic_sync_manager.cc
index 1cd4749..bd61828 100644
--- a/third_party/blink/renderer/modules/background_sync/periodic_sync_manager.cc
+++ b/third_party/blink/renderer/modules/background_sync/periodic_sync_manager.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/background_sync/periodic_sync_manager.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
diff --git a/third_party/blink/renderer/modules/background_sync/sync_manager.cc b/third_party/blink/renderer/modules/background_sync/sync_manager.cc
index 35becc2..b4b2c19 100644
--- a/third_party/blink/renderer/modules/background_sync/sync_manager.cc
+++ b/third_party/blink/renderer/modules/background_sync/sync_manager.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/background_sync/sync_manager.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/callback_promise_adapter.h"
diff --git a/third_party/blink/renderer/modules/background_sync/sync_manager.h b/third_party/blink/renderer/modules/background_sync/sync_manager.h
index d1f44e38..2f6f1a7 100644
--- a/third_party/blink/renderer/modules/background_sync/sync_manager.h
+++ b/third_party/blink/renderer/modules/background_sync/sync_manager.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_BACKGROUND_SYNC_SYNC_MANAGER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_BACKGROUND_SYNC_SYNC_MANAGER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/mojom/background_sync/background_sync.mojom-blink.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.h b/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.h
index aadd3e04..aaad6e8 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.h
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_BLUETOOTH_BLUETOOTH_REMOTE_GATT_SERVER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_BLUETOOTH_BLUETOOTH_REMOTE_GATT_SERVER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_typedefs.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc b/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc
index 153438fd..df0f965 100644
--- a/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc
+++ b/third_party/blink/renderer/modules/breakout_box/frame_queue_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/frame_queue_transferring_optimizer.cc b/third_party/blink/renderer/modules/breakout_box/frame_queue_transferring_optimizer.cc
index bd9729d..91ff4a3 100644
--- a/third_party/blink/renderer/modules/breakout_box/frame_queue_transferring_optimizer.cc
+++ b/third_party/blink/renderer/modules/breakout_box/frame_queue_transferring_optimizer.cc
@@ -4,6 +4,8 @@
 
 #include "third_party/blink/renderer/modules/breakout_box/frame_queue_transferring_optimizer.h"
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/video_frame.h"
 #include "third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/frame_queue_underlying_source.h b/third_party/blink/renderer/modules/breakout_box/frame_queue_underlying_source.h
index a9b67b18..e9803f4 100644
--- a/third_party/blink/renderer/modules/breakout_box/frame_queue_underlying_source.h
+++ b/third_party/blink/renderer/modules/breakout_box/frame_queue_underlying_source.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_BREAKOUT_BOX_FRAME_QUEUE_UNDERLYING_SOURCE_H_
 
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/video_frame.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.cc
index 1790062..7f633af 100644
--- a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.cc
+++ b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/audio_buffer.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_transferring_optimizer.h"
 #include "third_party/blink/renderer/modules/breakout_box/frame_queue_transferring_optimizer.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.h b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.h
index b6343f1..acce1fbb 100644
--- a/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.h
+++ b/third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_BREAKOUT_BOX_MEDIA_STREAM_AUDIO_TRACK_UNDERLYING_SOURCE_H_
 
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/audio_parameters.h"
 #include "third_party/blink/public/platform/modules/mediastream/web_media_stream_audio_sink.h"
 #include "third_party/blink/renderer/modules/breakout_box/frame_queue_underlying_source.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.cc b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.cc
index c40c1b2..45b93a2 100644
--- a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.cc
+++ b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.h"
 
 #include "base/feature_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/capture/video/video_capture_buffer_pool_util.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.h b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.h
index e310f92..0897859 100644
--- a/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.h
+++ b/third_party/blink/renderer/modules/breakout_box/media_stream_video_track_underlying_source.h
@@ -7,6 +7,7 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_video_sink.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_transferring_optimizer.h"
 #include "third_party/blink/renderer/modules/breakout_box/frame_queue_underlying_source.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.cc b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.cc
index e381a9d..6d17be5 100644
--- a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.cc
+++ b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.cc
@@ -5,6 +5,8 @@
 #include "third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.h"
 
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.h b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.h
index c942a1b..29f21e6 100644
--- a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.h
+++ b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.h
@@ -7,6 +7,8 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_buffer.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc
index 1484a070..f048e77a 100644
--- a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc
+++ b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/breakout_box/pushable_media_stream_audio_source.h"
 
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "media/base/bind_to_current_loop.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.cc b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.cc
index 878fdd7e..cfb1e91 100644
--- a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.cc
+++ b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.cc
@@ -6,6 +6,7 @@
 
 #include "base/synchronization/lock.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.h b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.h
index 0910107..ce8daa72 100644
--- a/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.h
+++ b/third_party/blink/renderer/modules/breakout_box/pushable_media_stream_video_source.h
@@ -8,6 +8,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 
diff --git a/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.cc b/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.cc
index 80cdd76b8..bd1b1e61 100644
--- a/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.cc
+++ b/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/audio_buffer.h"
 #include "media/base/video_frame.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
diff --git a/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.h b/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.h
index f965d01..0f42e21 100644
--- a/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.h
+++ b/third_party/blink/renderer/modules/breakout_box/transferred_frame_queue_underlying_source.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_BREAKOUT_BOX_TRANSFERRED_FRAME_QUEUE_UNDERLYING_SOURCE_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_BREAKOUT_BOX_TRANSFERRED_FRAME_QUEUE_UNDERLYING_SOURCE_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/renderer/modules/breakout_box/frame_queue_underlying_source.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
diff --git a/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel_unittest.cc b/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel_unittest.cc
index 0e653599..09ed4b1 100644
--- a/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel_unittest.cc
+++ b/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel_unittest.cc
@@ -7,6 +7,7 @@
 #include <iterator>
 
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/bind.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
diff --git a/third_party/blink/renderer/modules/cache_storage/cache.cc b/third_party/blink/renderer/modules/cache_storage/cache.cc
index f423594..f375870 100644
--- a/third_party/blink/renderer/modules/cache_storage/cache.cc
+++ b/third_party/blink/renderer/modules/cache_storage/cache.cc
@@ -9,6 +9,7 @@
 
 #include "base/containers/contains.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
 #include "third_party/blink/public/common/cache_storage/cache_storage_utils.h"
 #include "third_party/blink/public/common/features.h"
diff --git a/third_party/blink/renderer/modules/cache_storage/cache.h b/third_party/blink/renderer/modules/cache_storage/cache.h
index 579f02ef..0473c16c 100644
--- a/third_party/blink/renderer/modules/cache_storage/cache.h
+++ b/third_party/blink/renderer/modules/cache_storage/cache.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_CACHE_STORAGE_CACHE_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/cache_storage/cache_storage.cc b/third_party/blink/renderer/modules/cache_storage/cache_storage.cc
index 9779fe4..c3a1852 100644
--- a/third_party/blink/renderer/modules/cache_storage/cache_storage.cc
+++ b/third_party/blink/renderer/modules/cache_storage/cache_storage.cc
@@ -8,6 +8,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/common/cache_storage/cache_storage_utils.h"
 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/cache_storage/cache_test.cc b/third_party/blink/renderer/modules/cache_storage/cache_test.cc
index 1d7e996..fc29415 100644
--- a/third_party/blink/renderer/modules/cache_storage/cache_test.cc
+++ b/third_party/blink/renderer/modules/cache_storage/cache_test.cc
@@ -10,6 +10,7 @@
 #include <utility>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc b/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc
index c0f0435..0b7872dc 100644
--- a/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc
+++ b/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.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 219077b8..8f20577 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
@@ -13,6 +13,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/checked_math.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_union_canvasfilter_string.h"
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h
index 7463140..487ef18 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h
@@ -7,6 +7,7 @@
 
 #include "base/bind.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/paint/record_paint_canvas.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_typedefs.h"
 #include "third_party/blink/renderer/core/geometry/dom_matrix.h"
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 f9f4621..6b3e51c 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
@@ -1012,7 +1012,6 @@
   DCHECK(font_data);
   if (!font_data)
     return;
-  const FontMetrics& font_metrics = font_data->GetFontMetrics();
 
   // FIXME: Need to turn off font smoothing.
 
@@ -1029,7 +1028,8 @@
   // Draw the item text at the correct point.
   gfx::PointF location(ClampTo<float>(x),
                        ClampTo<float>(y + GetFontBaseline(*font_data)));
-  double font_width = font.Width(text_run);
+  gfx::RectF bounds;
+  double font_width = font.Width(text_run, nullptr, &bounds);
 
   bool use_max_width = (max_width && *max_width < font_width);
   double width = use_max_width ? *max_width : font_width;
@@ -1051,11 +1051,6 @@
       break;
   }
 
-  gfx::RectF bounds(
-      location.x() - font_metrics.Height() / 2,
-      location.y() - font_metrics.Ascent() - font_metrics.LineGap(),
-      ClampTo<float>(width + font_metrics.Height()),
-      font_metrics.LineSpacing());
   if (paint_type == CanvasRenderingContext2DState::kStrokePaintType)
     InflateStrokeRect(bounds);
 
@@ -1070,6 +1065,8 @@
     location.set_x(location.x() / ClampTo<float>(width / font_width));
   }
 
+  bounds.Offset(location.x(), location.y());
+
   Draw<OverdrawOp::kNone>(
       [this, text = std::move(text), direction, bidi_override, location](
           cc::PaintCanvas* c, const cc::PaintFlags* flags)  // draw lambda
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 cd57a470..536cf9f 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
@@ -34,6 +34,7 @@
 #include <utility>
 
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.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_bitmap_options.h"
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_promise.h b/third_party/blink/renderer/modules/clipboard/clipboard_promise.h
index 5d037701..f013ef9 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_promise.h
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_promise.h
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc b/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc
index 6c0bbe08..88e9cb5 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_reader.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 #include "third_party/blink/renderer/modules/clipboard/clipboard_reader.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/clipboard/clipboard.mojom-blink.h"
 #include "third_party/blink/renderer/core/clipboard/clipboard_mime_types.h"
 #include "third_party/blink/renderer/core/clipboard/system_clipboard.h"
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_reader.h b/third_party/blink/renderer/modules/clipboard/clipboard_reader.h
index 1f256264..6c7a4030 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_reader.h
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_reader.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_CLIPBOARD_CLIPBOARD_READER_H_
 
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/fileapi/blob.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
index 1a94aa2..0774ced4 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/clipboard/clipboard_writer.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/clipboard/clipboard.mojom-blink.h"
 #include "third_party/blink/renderer/core/clipboard/clipboard_mime_types.h"
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_writer.h b/third_party/blink/renderer/modules/clipboard/clipboard_writer.h
index 1da9f92..90cfa44 100644
--- a/third_party/blink/renderer/modules/clipboard/clipboard_writer.h
+++ b/third_party/blink/renderer/modules/clipboard/clipboard_writer.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_CLIPBOARD_CLIPBOARD_WRITER_H_
 
 #include "base/sequence_checker.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/fileapi/blob.h"
 #include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h"
 #include "third_party/blink/renderer/modules/clipboard/clipboard_promise.h"
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 a706a04..2d7e888 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
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/compute_pressure/pressure_observer_manager.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_pressure_observer_options.h"
diff --git a/third_party/blink/renderer/modules/content_index/content_index.cc b/third_party/blink/renderer/modules/content_index/content_index.cc
index cbb78dd..a127bb4 100644
--- a/third_party/blink/renderer/modules/content_index/content_index.cc
+++ b/third_party/blink/renderer/modules/content_index/content_index.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/content_index/content_index.h"
 
 #include "base/feature_list.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
diff --git a/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.cc b/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.cc
index 7eab7e5..e894ecd9 100644
--- a/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.cc
+++ b/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/animation/animation_effect.h"
 #include "third_party/blink/renderer/core/animation/compositor_animations.h"
 #include "third_party/blink/renderer/core/animation/css/compositor_keyframe_double.h"
diff --git a/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.h b/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.h
index 540616d..6aac41cf 100644
--- a/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.h
+++ b/third_party/blink/renderer/modules/csspaint/nativepaint/background_color_paint_definition.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CSSPAINT_NATIVEPAINT_BACKGROUND_COLOR_PAINT_DEFINITION_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_CSSPAINT_NATIVEPAINT_BACKGROUND_COLOR_PAINT_DEFINITION_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/animation/keyframe_effect_model.h"
 #include "third_party/blink/renderer/modules/csspaint/nativepaint/native_css_paint_definition.h"
diff --git a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc
index 57902f3..063eaa62 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h"
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/graphics/paint/paint_canvas.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h
index f39ec02b..a0c08ad 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h
+++ b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CSSPAINT_PAINT_RENDERING_CONTEXT_2D_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_CSSPAINT_PAINT_RENDERING_CONTEXT_2D_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_paint_rendering_context_2d_settings.h"
 #include "third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h"
 #include "third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope.h"
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
index 50150bf9..7141b740 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
+++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc
index e8baa122..ed202bc 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc
+++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client_test.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
diff --git a/third_party/blink/renderer/modules/device_orientation/device_sensor_event_pump.h b/third_party/blink/renderer/modules/device_orientation/device_sensor_event_pump.h
index 4498920..5840d9ab 100644
--- a/third_party/blink/renderer/modules/device_orientation/device_sensor_event_pump.h
+++ b/third_party/blink/renderer/modules/device_orientation/device_sensor_event_pump.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_DEVICE_ORIENTATION_DEVICE_SENSOR_EVENT_PUMP_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_DEVICE_ORIENTATION_DEVICE_SENSOR_EVENT_PUMP_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/device/public/mojom/sensor_provider.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/document_metadata/document_metadata_extractor.cc b/third_party/blink/renderer/modules/document_metadata/document_metadata_extractor.cc
index 2b7f4200..5002bcc 100644
--- a/third_party/blink/renderer/modules/document_metadata/document_metadata_extractor.cc
+++ b/third_party/blink/renderer/modules/document_metadata/document_metadata_extractor.cc
@@ -270,7 +270,9 @@
     if (element.HasTagName(html_names::kScriptTag) &&
         element.FastGetAttribute(html_names::kTypeAttr) ==
             "application/ld+json") {
-      std::unique_ptr<JSONValue> json = ParseJSON(element.textContent());
+      // TODO(crbug.com/1264024): Deprecate JSON comments here, if possible.
+      std::unique_ptr<JSONValue> json =
+          ParseJSONWithCommentsDeprecated(element.textContent());
       if (!json) {
         LOG(ERROR) << "Failed to parse json.";
         return ExtractionStatus::kParseFailure;
diff --git a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc
index 7328ef07..56233d7 100644
--- a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc
+++ b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/mojo/mojom/media_player.mojom-blink.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
index 4382fca..f363e8b 100644
--- a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
+++ b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
@@ -32,6 +32,7 @@
 
 #include <memory>
 #include <utility>
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/mojom/referrer_policy.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h
index 8f4ef99..8d90df96 100644
--- a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h
+++ b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h
@@ -33,6 +33,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom-blink-forward.h"
 #include "third_party/blink/public/web/web_embedded_worker.h"
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.cc b/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.cc
index 343481e7..0bae69a 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.cc
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.cc
@@ -9,6 +9,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/notreached.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/system/string_data_source.h"
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.h b/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.h
index 91868174..66a495d 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.h
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_incognito_file_delegate.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file.h"
 #include "base/files/file_error_or.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_file_delegate_host.mojom-blink.h"
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_file_handle.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.cc b/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.cc
index e424b710..daa8d55 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.cc
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.cc
@@ -8,6 +8,7 @@
 #include "base/files/file_error_or.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/checked_math.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_capacity_allocation_host.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.h b/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.h
index 15c2f47e..4cb69ef 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.h
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_access_regular_file_delegate.h
@@ -7,6 +7,7 @@
 
 #include "base/files/file.h"
 #include "base/files/file_error_or.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/types/pass_key.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/third_party/blink/renderer/modules/file_system_access/file_system_sync_access_handle.h b/third_party/blink/renderer/modules/file_system_access/file_system_sync_access_handle.h
index ff88652..140506a 100644
--- a/third_party/blink/renderer/modules/file_system_access/file_system_sync_access_handle.h
+++ b/third_party/blink/renderer/modules/file_system_access/file_system_sync_access_handle.h
@@ -7,6 +7,7 @@
 
 #include "base/feature_list.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_access_handle_host.mojom-blink.h"
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_file_handle.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.cc b/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.cc
index 425f93ae..cc9ea8a 100644
--- a/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.cc
+++ b/third_party/blink/renderer/modules/filesystem/file_system_dispatcher.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "components/services/filesystem/public/mojom/types.mojom-blink.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_shared_memory_reader.cc b/third_party/blink/renderer/modules/gamepad/gamepad_shared_memory_reader.cc
index d834d2d..0cae3f6a3 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_shared_memory_reader.cc
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_shared_memory_reader.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/gamepad/gamepad_shared_memory_reader.h"
 
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "device/gamepad/public/cpp/gamepads.h"
 #include "device/gamepad/public/mojom/gamepad_hardware_buffer.h"
diff --git a/third_party/blink/renderer/modules/geolocation/geolocation.cc b/third_party/blink/renderer/modules/geolocation/geolocation.cc
index e560149..1ff5e69 100644
--- a/third_party/blink/renderer/modules/geolocation/geolocation.cc
+++ b/third_party/blink/renderer/modules/geolocation/geolocation.cc
@@ -27,6 +27,7 @@
 
 #include "third_party/blink/renderer/modules/geolocation/geolocation.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/device/public/mojom/geoposition.mojom-blink.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/idle/idle_detector.cc b/third_party/blink/renderer/modules/idle/idle_detector.cc
index 61bfb35..101ebb0 100644
--- a/third_party/blink/renderer/modules/idle/idle_detector.cc
+++ b/third_party/blink/renderer/modules/idle/idle_detector.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/blink/public/common/features.h"
diff --git a/third_party/blink/renderer/modules/idle/idle_detector.h b/third_party/blink/renderer/modules/idle/idle_detector.h
index f19f9bc..34a9f6ec 100644
--- a/third_party/blink/renderer/modules/idle/idle_detector.h
+++ b/third_party/blink/renderer/modules/idle/idle_detector.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_IDLE_IDLE_DETECTOR_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/idle/idle_manager.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
diff --git a/third_party/blink/renderer/modules/idle/idle_manager.cc b/third_party/blink/renderer/modules/idle/idle_manager.cc
index 716ba178..9b8ddc8aa 100644
--- a/third_party/blink/renderer/modules/idle/idle_manager.cc
+++ b/third_party/blink/renderer/modules/idle/idle_manager.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/idle/idle_manager.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
diff --git a/third_party/blink/renderer/modules/imagecapture/image_capture_frame_grabber.cc b/third_party/blink/renderer/modules/imagecapture/image_capture_frame_grabber.cc
index ce573260..a8516cec 100644
--- a/third_party/blink/renderer/modules/imagecapture/image_capture_frame_grabber.cc
+++ b/third_party/blink/renderer/modules/imagecapture/image_capture_frame_grabber.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/imagecapture/image_capture_frame_grabber.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "cc/paint/skia_paint_canvas.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/video_frame.h"
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_factory.h b/third_party/blink/renderer/modules/indexeddb/idb_factory.h
index 48f71390..0e8ddcb 100644
--- a/third_party/blink/renderer/modules/indexeddb/idb_factory.h
+++ b/third_party/blink/renderer/modules/indexeddb/idb_factory.h
@@ -31,6 +31,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/third_party/blink/renderer/modules/indexeddb/web_idb_callbacks_impl.h b/third_party/blink/renderer/modules/indexeddb/web_idb_callbacks_impl.h
index 25ae4de..dbb565f 100644
--- a/third_party/blink/renderer/modules/indexeddb/web_idb_callbacks_impl.h
+++ b/third_party/blink/renderer/modules/indexeddb/web_idb_callbacks_impl.h
@@ -32,6 +32,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "third_party/blink/public/common/indexeddb/web_idb_types.h"
 #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom-blink-forward.h"
diff --git a/third_party/blink/renderer/modules/indexeddb/web_idb_cursor.h b/third_party/blink/renderer/modules/indexeddb/web_idb_cursor.h
index 8bb2c27..ace9166a 100644
--- a/third_party/blink/renderer/modules/indexeddb/web_idb_cursor.h
+++ b/third_party/blink/renderer/modules/indexeddb/web_idb_cursor.h
@@ -10,6 +10,7 @@
 #include <memory>
 
 #include "base/gtest_prod_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/indexeddb/web_idb_database.cc b/third_party/blink/renderer/modules/indexeddb/web_idb_database.cc
index f2d08349a..52de3f14 100644
--- a/third_party/blink/renderer/modules/indexeddb/web_idb_database.cc
+++ b/third_party/blink/renderer/modules/indexeddb/web_idb_database.cc
@@ -8,6 +8,7 @@
 
 #include "base/format_macros.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/self_owned_associated_receiver.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.cc b/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.cc
index ba8d43a..3888ef4 100644
--- a/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.cc
+++ b/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/format_macros.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom-blink.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/modules/indexeddb/idb_database_error.h"
diff --git a/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.h b/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.h
index 5b4e5ad5..47ac1c1 100644
--- a/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.h
+++ b/third_party/blink/renderer/modules/indexeddb/web_idb_transaction.h
@@ -10,6 +10,7 @@
 #include <memory>
 
 #include "base/gtest_prod_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
diff --git a/third_party/blink/renderer/modules/locks/lock.cc b/third_party/blink/renderer/modules/locks/lock.cc
index efe44fc4..8821dcb 100644
--- a/third_party/blink/renderer/modules/locks/lock.cc
+++ b/third_party/blink/renderer/modules/locks/lock.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/locks/lock.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_function.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
diff --git a/third_party/blink/renderer/modules/manifest/manifest_parser.cc b/third_party/blink/renderer/modules/manifest/manifest_parser.cc
index 5789175..df34d9fafe 100644
--- a/third_party/blink/renderer/modules/manifest/manifest_parser.cc
+++ b/third_party/blink/renderer/modules/manifest/manifest_parser.cc
@@ -140,9 +140,11 @@
 bool ManifestParser::Parse() {
   DCHECK(!manifest_);
 
+  // TODO(crbug.com/1264024): Deprecate JSON comments here, if possible.
   JSONParseError error;
   bool has_comments = false;
-  std::unique_ptr<JSONValue> root = ParseJSON(data_, &error, &has_comments);
+  std::unique_ptr<JSONValue> root =
+      ParseJSONWithCommentsDeprecated(data_, &error, &has_comments);
   manifest_ = mojom::blink::Manifest::New();
   if (!root) {
     AddErrorInfo(error.message, true, error.line, error.column);
diff --git a/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.cc b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.cc
index b56ec6d4a..daf7c6d 100644
--- a/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.cc
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/ranges/algorithm.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/audio/audio_device_description.h"
 #include "media/base/audio_renderer_sink.h"
@@ -151,7 +152,7 @@
   // Ignore session id.
   {
     base::AutoLock auto_lock(cache_lock_);
-    auto cache_iter = FindCacheEntry_Locked(source_frame_token, device_id);
+    auto* cache_iter = FindCacheEntry_Locked(source_frame_token, device_id);
     if (cache_iter != cache_.end()) {
       // A matching cached sink is found.
       UMA_HISTOGRAM_ENUMERATION(
@@ -203,7 +204,7 @@
     base::AutoLock auto_lock(cache_lock_);
 
     // Looking up the sink by its pointer.
-    auto cache_iter = base::ranges::find(
+    auto* cache_iter = base::ranges::find(
         cache_, sink_ptr, [](const CacheEntry& val) { return val.sink.get(); });
 
     if (cache_iter == cache_.end())
@@ -264,7 +265,7 @@
 void AudioRendererSinkCache::DropSinksForFrame(
     const LocalFrameToken& source_frame_token) {
   base::AutoLock auto_lock(cache_lock_);
-  base::EraseIf(cache_, [source_frame_token](const CacheEntry& val) {
+  WTF::EraseIf(cache_, [source_frame_token](const CacheEntry& val) {
     if (val.source_frame_token == source_frame_token) {
       val.sink->Stop();
       return true;
@@ -273,7 +274,7 @@
   });
 }
 
-size_t AudioRendererSinkCache::GetCacheSizeForTesting() {
+wtf_size_t AudioRendererSinkCache::GetCacheSizeForTesting() {
   base::AutoLock auto_lock(cache_lock_);
   return cache_.size();
 }
diff --git a/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.h b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.h
index d544bf3..6852c17 100644
--- a/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.h
+++ b/third_party/blink/renderer/modules/media/audio/audio_renderer_sink_cache.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 #include <string>
-#include <vector>
 
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
@@ -20,6 +19,7 @@
 #include "media/base/output_device_info.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace media {
 class AudioRendererSink;
@@ -70,7 +70,7 @@
   friend class AudioRendererSinkCache::WindowObserver;
 
   struct CacheEntry;
-  using CacheContainer = std::vector<CacheEntry>;
+  using CacheContainer = Vector<CacheEntry>;
 
   // Schedules a sink for deletion. Deletion will be performed on the same
   // thread the cache is created on.
@@ -90,7 +90,7 @@
   void DropSinksForFrame(const LocalFrameToken& source_frame_token);
 
   // To avoid publishing CacheEntry structure in the header.
-  size_t GetCacheSizeForTesting();
+  wtf_size_t GetCacheSizeForTesting();
 
   // Global instance, set in constructor and unset in destructor.
   static AudioRendererSinkCache* instance_;
diff --git a/third_party/blink/renderer/modules/media/audio/mojo_audio_output_ipc.cc b/third_party/blink/renderer/modules/media/audio/mojo_audio_output_ipc.cc
index ebe986b..aacb280 100644
--- a/third_party/blink/renderer/modules/media/audio/mojo_audio_output_ipc.cc
+++ b/third_party/blink/renderer/modules/media/audio/mojo_audio_output_ipc.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/audio/audio_device_description.h"
 #include "media/mojo/mojom/audio_output_stream.mojom-blink.h"
 #include "mojo/public/cpp/bindings/callback_helpers.h"
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 623c167b..b1fffb5 100644
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
+++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
@@ -11,6 +11,7 @@
 #include "base/feature_list.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/media_switches.h"
 #include "media/base/media_util.h"
 #include "media/base/mime_util.h"
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
index 0a5efc65..4c8dac3c 100644
--- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
+++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
@@ -130,7 +130,6 @@
 const char kActAsAudioControlsCSSClass[] = "audio-only";
 const char kScrubbingMessageCSSClass[] = "scrubbing-message";
 const char kTestModeCSSClass[] = "test-mode";
-const char kImmersiveModeCSSClass[] = "immersive-mode";
 
 // The delay between two taps to be recognized as a double tap gesture.
 constexpr base::TimeDelta kDoubleTapDelay = base::Milliseconds(300);
@@ -180,14 +179,11 @@
   if (media_element.FastHasAttribute(html_names::kDisableremoteplaybackAttr))
     return false;
 
-  // Explicitly do not show cast button when:
-  // - the mediaControlsEnabled setting is false, to make sure the overlay does
-  //   not appear;
-  // - the immersiveModeEnabled setting is true.
+  // Explicitly do not show cast button when the mediaControlsEnabled setting is
+  // false, to make sure the overlay does not appear.
   Document& document = media_element.GetDocument();
   if (document.GetSettings() &&
-      (!document.GetSettings()->GetMediaControlsEnabled() ||
-       document.GetSettings()->GetImmersiveModeEnabled())) {
+      (!document.GetSettings()->GetMediaControlsEnabled())) {
     return false;
   }
 
@@ -760,13 +756,6 @@
     toRemove.push_back(kShowDefaultPosterCSSClass);
   }
 
-  if (ShouldShowVideoControls() && GetDocument().GetSettings() &&
-      GetDocument().GetSettings()->GetImmersiveModeEnabled()) {
-    toAdd.push_back(kImmersiveModeCSSClass);
-  } else {
-    toRemove.push_back(kImmersiveModeCSSClass);
-  }
-
   classList().add(toAdd, ASSERT_NO_EXCEPTION);
   classList().remove(toRemove, ASSERT_NO_EXCEPTION);
 
@@ -1631,15 +1620,6 @@
     // happening, we need to manually hide any popups.
     HidePopupMenu();
 
-    // In immersive mode we don't use double-tap features, so instead of
-    // waiting 300 ms for a potential second tap, we just immediately toggle
-    // controls visibility.
-    if (GetDocument().GetSettings() &&
-        GetDocument().GetSettings()->GetImmersiveModeEnabled()) {
-      MaybeToggleControlsFromTap();
-      return;
-    }
-
     if (tap_timer_.IsActive()) {
       // Cancel the visibility toggle event.
       tap_timer_.Stop();
diff --git a/third_party/blink/renderer/modules/media_controls/resources/default_100_percent/gradient_bg.png b/third_party/blink/renderer/modules/media_controls/resources/default_100_percent/gradient_bg.png
deleted file mode 100644
index 25f2a02..0000000
--- a/third_party/blink/renderer/modules/media_controls/resources/default_100_percent/gradient_bg.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/renderer/modules/media_controls/resources/default_100_percent/top_gradient_bg.png b/third_party/blink/renderer/modules/media_controls/resources/default_100_percent/top_gradient_bg.png
deleted file mode 100644
index 3539f67..0000000
--- a/third_party/blink/renderer/modules/media_controls/resources/default_100_percent/top_gradient_bg.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
index d03c65e7..a32514e 100644
--- a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
+++ b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
@@ -72,36 +72,53 @@
   transition: opacity 1s cubic-bezier(0.25, 0.1, 0.25, 1);
 }
 
+video::-webkit-media-controls {
+  --gradient-steps:
+    hsla(0, 0%, 0%, 0) 0%,
+    hsla(0, 0%, 0%, 0.013) 8.1%,
+    hsla(0, 0%, 0%, 0.049) 15.5%,
+    hsla(0, 0%, 0%, 0.104) 22.5%,
+    hsla(0, 0%, 0%, 0.175) 29%,
+    hsla(0, 0%, 0%, 0.259) 35.3%,
+    hsla(0, 0%, 0%, 0.352) 41.2%,
+    hsla(0, 0%, 0%, 0.45) 47.1%,
+    hsla(0, 0%, 0%, 0.55) 52.9%,
+    hsla(0, 0%, 0%, 0.648) 58.8%,
+    hsla(0, 0%, 0%, 0.741) 64.7%,
+    hsla(0, 0%, 0%, 0.825) 71%,
+    hsla(0, 0%, 0%, 0.896) 77.5%,
+    hsla(0, 0%, 0%, 0.951) 84.5%,
+    hsla(0, 0%, 0%, 0.987) 91.9%,
+    hsl(0, 0%, 0%) 100%;
+}
+
 video::-webkit-media-controls:not(.audio-only) div[pseudo="-webkit-media-controls-panel" i] {
   background:
-    -webkit-image-set(url('default_100_percent/gradient_bg.png') 1x)
-    repeat-x bottom left;
+    linear-gradient(to bottom, var(--gradient-steps)) repeat-x bottom left;
 }
 
 video::-webkit-media-controls.sizing-small div[pseudo="-webkit-media-controls-panel" i] {
-  background-size: auto 92px;
+  background-size: auto 112px;
 }
 
 video::-webkit-media-controls.sizing-large div[pseudo="-webkit-media-controls-panel" i] {
-  background-size: auto 200px;
+  background-size: auto 222px;
 }
 
 /* Need dark gradient at the top of the video when the scrubbing message is
  * shown */
 video::-webkit-media-controls:not(.audio-only) div[pseudo="-webkit-media-controls-panel" i].scrubbing-message {
   background:
-    -webkit-image-set(url('default_100_percent/top_gradient_bg.png') 1x)
-    repeat-x top left,
-    -webkit-image-set(url('default_100_percent/gradient_bg.png') 1x)
-    repeat-x bottom left;
+    linear-gradient(to top, var(--gradient-steps)) repeat-x top left,
+    linear-gradient(to bottom, var(--gradient-steps)) repeat-x bottom left;
 }
 
 video::-webkit-media-controls.sizing-small div[pseudo="-webkit-media-controls-panel" i].scrubbing-message {
-  background-size: auto 120px, auto 92px;
+  background-size: auto 120px, auto 112px;
 }
 
 video::-webkit-media-controls.sizing-large div[pseudo="-webkit-media-controls-panel" i].scrubbing-message {
-  background-size: auto 120px, auto 200px;
+  background-size: auto 120px, auto 220px;
 }
 
 audio::-internal-media-controls-button-panel,
@@ -1381,123 +1398,6 @@
 }
 
 /**
- * VR styling.
- */
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-timeline" i],
-video::-webkit-media-controls.immersive-mode div[pseudo="-internal-media-controls-button-panel" i] {
-  padding-left: 32px;
-  padding-right: 32px;
-}
-
-/* Timeline sizing does not include padding in max width. */
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-timeline" i] {
-  width: calc(100% - 64px);
-  max-width: 471px;
-  height: 5px;
-  margin-bottom: 20px;
-  padding-top: 19px;
-  padding-bottom: 19px;
-}
-
-/* Button panel sizing does include padding in max width. */
-video::-webkit-media-controls.immersive-mode div[pseudo="-internal-media-controls-button-panel" i] {
-  max-width: 535px; /* 471px + 64px padding. */
-}
-
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-panel" i] {
-  /* Centering the button panel and timeline within the controls. */
-  align-items: center;
-
-  /* Taller scrim. */
-  background:
-    -webkit-image-set(url('default_100_percent/vr_gradient_bg.png') 1x)
-    repeat-x bottom left;
-}
-
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-timeline" i]::-internal-track-segment-highlight-before,
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-timeline" i]::-internal-track-segment-highlight-after,
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-timeline" i]::-internal-track-segment-background {
-  height: 5px;
-}
-
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-timeline" i]::-webkit-slider-thumb {
-  width: 16px;
-  height: 16px;
-  border-radius: 8px;
-  margin-top: -5px;
-}
-
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-overlay-play-button" i] {
-  margin-left: -52px /* (play button width / 2) + 20px Padding */;
-  margin-top: -64px /* (play button width + timeline height + padding-bottom) / 2 + padding */
-}
-
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-overlay-play-button" i]::-internal-media-controls-overlay-play-button-internal {
-  width: 64px;
-  height: 64px;
-  border-radius: 32px;
-  background-size: 36px;
-}
-
-video::-webkit-media-controls.immersive-mode div[pseudo="-internal-media-controls-loading-panel" i]::-internal-media-controls-loading-panel-spinner-frame {
-  width: 64px; /* play button width */
-  height: 64px; /* play button width */
-  margin-top: -44px; /* (play button width + timeline height + padding-bottom) / -2 */
-  margin-left: -32px; /* play button width / -2 */
-}
-
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-volume-control-container" i],
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-volume-control-container" i] {
-  height: 43px;
-}
-
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-volume-control-container" i].closed,
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-volume-control-container" i].closed {
-  min-width: 43px;
-}
-
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-mute-button" i],
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-fullscreen-button" i],
-video::-webkit-media-controls.immersive-mode input[pseudo="-internal-media-controls-overflow-button" i] {
-  width: 43px;
-  height: 43px;
-  min-width: 43px;
-  margin-left: 5px;
-  background-size: 24px;
-}
-
-video::-webkit-media-controls.immersive-mode div[pseudo="-internal-media-controls-button-panel" i] {
-  height: 43px;
-  line-height: 43px;
-}
-
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-current-time-display" i],
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-time-remaining-display" i] {
-  font-size: 16px;
-}
-
-/* Hover highlighting. */
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-mute-button" i]:hover,
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-fullscreen-button" i]:hover,
-video::-webkit-media-controls.immersive-mode input[pseudo="-internal-media-controls-overflow-button" i]:hover {
-  background-color: rgba(255, 255, 255, 0.2);
-  border-radius: 4px;
-}
-
-/* Hide hover background */
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-play-button" i]::-internal-media-controls-button-hover-background,
-video::-webkit-media-controls.immersive-mode input[pseudo="-webkit-media-controls-fullscreen-button" i]::-internal-media-controls-button-hover-background,
-video::-webkit-media-controls.immersive-mode input[pseudo="-internal-media-controls-overflow-button" i]::-internal-media-controls-button-hover-background {
-  display: none;
-}
-
-video::-webkit-media-controls.immersive-mode div[pseudo="-webkit-media-controls-panel" i] {
-  background:
-    -webkit-image-set(url('default_200_percent/vr_gradient_bg.png') 1x)
-    repeat-x bottom left auto 198px;
-}
-
-/**
  * Test mode styles to remove animations/transitions to make web tests
  * simpler.
  */
diff --git a/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler.cc b/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler.cc
index 94d5130..ddad7774 100644
--- a/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler.cc
+++ b/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler.cc
@@ -11,6 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/rand_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "gpu/command_buffer/client/raster_interface.h"
 #include "media/base/limits.h"
diff --git a/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.cc b/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.cc
index 2881bbc..b6d77fa 100644
--- a/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.cc
+++ b/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_parameters.h"
 #include "media/base/audio_renderer_sink.h"
 #include "third_party/blink/public/platform/web_media_player.h"
diff --git a/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.h b/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.h
index b607eed0..a5419a3 100644
--- a/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.h
+++ b/third_party/blink/renderer/modules/mediacapturefromelement/html_audio_element_capturer_source.h
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h"
diff --git a/third_party/blink/renderer/modules/mediacapturefromelement/html_media_element_capture.cc b/third_party/blink/renderer/modules/mediacapturefromelement/html_media_element_capture.cc
index 2cd6540..8dc3807f 100644
--- a/third_party/blink/renderer/modules/mediacapturefromelement/html_media_element_capture.cc
+++ b/third_party/blink/renderer/modules/mediacapturefromelement/html_media_element_capture.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/mediacapturefromelement/html_media_element_capture.h"
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/variant.h"
 #include "third_party/blink/public/mojom/mediastream/media_devices.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.cc b/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.cc
index f83490aa..572e9ba0 100644
--- a/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.cc
+++ b/third_party/blink/renderer/modules/mediarecorder/audio_track_recorder.cc
@@ -6,6 +6,7 @@
 #include <memory>
 
 #include "base/check_op.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/time/time.h"
 #include "media/base/audio_bus.h"
diff --git a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h
index 2e698cb..d6a3bc3 100644
--- a/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h
+++ b/third_party/blink/renderer/modules/mediarecorder/video_track_recorder.h
@@ -26,6 +26,7 @@
 #include "third_party/blink/renderer/modules/mediarecorder/buildflags.h"
 #include "third_party/blink/renderer/modules/mediarecorder/track_recorder.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
@@ -179,7 +180,8 @@
     SkBitmap bitmap_;
     std::unique_ptr<cc::PaintCanvas> canvas_;
     std::unique_ptr<WebGraphicsContext3DProvider> encoder_thread_context_;
-    std::vector<uint8_t> resize_buffer_;
+    std::vector<uint8_t> resize_buffer_
+        ALLOW_DISCOURAGED_TYPE("Avoids conversion when passed to media:: code");
 
     media::VideoFramePool frame_pool_;
   };
diff --git a/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.h b/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.h
index f40c0a8..de46c1f 100644
--- a/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.h
+++ b/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/types/pass_key.h"
 #include "third_party/blink/public/platform/web_time_range.h"
diff --git a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc
index 479fd466..61cbf7a 100644
--- a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/audio/audio_source_parameters.h"
 #include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
diff --git a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.h b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.h
index e560f8968..9adb6213 100644
--- a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.h
+++ b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.h
@@ -9,6 +9,7 @@
 
 #include <string>
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_capturer_source.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
diff --git a/third_party/blink/renderer/modules/mediastream/local_video_capturer_source.cc b/third_party/blink/renderer/modules/mediastream/local_video_capturer_source.cc
index 9120140a..0603e5f 100644
--- a/third_party/blink/renderer/modules/mediastream/local_video_capturer_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/local_video_capturer_source.cc
@@ -8,6 +8,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/token.h"
 #include "media/capture/mojom/video_capture_types.mojom-blink.h"
 #include "media/capture/video_capture_types.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h
index 814e579..8a615fd 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h
@@ -9,6 +9,7 @@
 
 #include "base/files/file.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "media/base/audio_parameters.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
index ff2be10..818c640 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
@@ -16,7 +16,6 @@
 #include "base/memory/aligned_memory.h"
 #include "base/path_service.h"
 #include "base/test/mock_callback.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc
index 0328b2be..b92e187 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc
@@ -6,6 +6,8 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/modules/mediastream/web_media_stream.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.h b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.h
index 2ab0d186..d2004554 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.h
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASTREAM_MEDIA_STREAM_RENDERER_FACTORY_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/public/platform/modules/mediastream/web_media_stream_audio_renderer.h"
 #include "third_party/blink/public/platform/modules/mediastream/web_media_stream_video_renderer.h"
 #include "third_party/blink/public/platform/web_string.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_track_transfer_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_track_transfer_test.cc
index 19603526..b675a1e9 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_track_transfer_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_track_transfer_test.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/mediastream/media_stream_track.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc
index c16f9966..0032b1d 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/token.h"
 #include "build/build_config.h"
 #include "media/capture/mojom/video_capture_types.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.h b/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.h
index ef777626..42a3472 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.h
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.h
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/token.h"
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.cc
index b95a686b..cdf6ef19 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/video_frame.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.h b/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.h
index 6598802b..dafe60d8 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.h
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.h
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/public/common/media/video_capture.h"
 #include "third_party/blink/public/platform/modules/mediastream/web_media_stream_video_renderer.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc
index 97d8d71..63964071 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc
@@ -19,6 +19,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/token.h"
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
index 55fb43c..e36dd5bc 100644
--- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
 #include "media/audio/audio_source_parameters.h"
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h
index 225a76b..2038a42 100644
--- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h
+++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h
@@ -10,6 +10,7 @@
 #include "base/atomicops.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_capturer_source.h"
 #include "third_party/blink/renderer/modules/mediastream/media_constraints.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
diff --git a/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc b/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc
index f9c3c22..d1fb5e2 100644
--- a/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc
+++ b/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc
@@ -11,7 +11,6 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/lock.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "media/audio/audio_sink_parameters.h"
 #include "media/base/audio_bus.h"
diff --git a/third_party/blink/renderer/modules/mediastream/track_audio_renderer_test.cc b/third_party/blink/renderer/modules/mediastream/track_audio_renderer_test.cc
index 38df8c7..e054775b 100644
--- a/third_party/blink/renderer/modules/mediastream/track_audio_renderer_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/track_audio_renderer_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.h b/third_party/blink/renderer/modules/mediastream/user_media_processor.h
index 52021bd..00df21f6 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_processor.h
+++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.h
@@ -11,6 +11,7 @@
 #include "base/callback_forward.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "build/build_config.h"
 #include "third_party/blink/public/common/mediastream/media_stream_request.h"
diff --git a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.cc b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.cc
index 9d98a49..08cf1df 100644
--- a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.cc
+++ b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.cc
@@ -14,6 +14,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/values.h"
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.h b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.h
index 60149bb..5b75c4aa 100644
--- a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.h
+++ b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_compositor.h
@@ -14,6 +14,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "cc/layers/surface_layer.h"
diff --git a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc
index 5e95a2d..1ab7b9d 100644
--- a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc
@@ -12,6 +12,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/time/time.h"
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h
index c87098f..1ddcea92 100644
--- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h
+++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_ML_WEBNN_ML_GRAPH_XNNPACK_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_ML_WEBNN_ML_GRAPH_XNNPACK_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/modules/ml/webnn/ml_graph.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
diff --git a/third_party/blink/renderer/modules/notifications/notification.cc b/third_party/blink/renderer/modules/notifications/notification.cc
index 9f61a874..573fdede 100644
--- a/third_party/blink/renderer/modules/notifications/notification.cc
+++ b/third_party/blink/renderer/modules/notifications/notification.cc
@@ -33,6 +33,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/common/notifications/notification_constants.h"
diff --git a/third_party/blink/renderer/modules/notifications/notification_manager.cc b/third_party/blink/renderer/modules/notifications/notification_manager.cc
index 3b54fed9..599dbddd 100644
--- a/third_party/blink/renderer/modules/notifications/notification_manager.cc
+++ b/third_party/blink/renderer/modules/notifications/notification_manager.cc
@@ -9,6 +9,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
 #include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/payments/payment_request.cc b/third_party/blink/renderer/modules/payments/payment_request.cc
index c9f2e3c4..fa253fb 100644
--- a/third_party/blink/renderer/modules/payments/payment_request.cc
+++ b/third_party/blink/renderer/modules/payments/payment_request.cc
@@ -11,6 +11,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
 #include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom-blink.h"
@@ -884,14 +885,6 @@
     return ScriptPromise();
   }
 
-  // TODO(crbug.com/779126): add support for handling payment requests in
-  // immersive mode.
-  if (local_frame->GetSettings()->GetImmersiveModeEnabled()) {
-    exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
-                                      "Page popups are suppressed");
-    return ScriptPromise();
-  }
-
   VLOG(2) << "Renderer: PaymentRequest (" << id_.Utf8() << "): show()";
 
   UseCounter::Count(GetExecutionContext(), WebFeature::kPaymentRequestShow);
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.cc b/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.cc
index bd065827..2a8e25f9 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.cc
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.cc
@@ -6,6 +6,7 @@
 
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_host.cc b/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_host.cc
index d2c661a..70eb3f93c 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_host.cc
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_host.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_host.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_adapter_impl.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_proxy.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_proxy.cc b/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_proxy.cc
index fcf4947..8dd44b33 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_proxy.cc
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_proxy.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/ice_transport_host.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/sctp_transport_proxy.cc b/third_party/blink/renderer/modules/peerconnection/adapters/sctp_transport_proxy.cc
index ecad472..32b75a98 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/sctp_transport_proxy.cc
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/sctp_transport_proxy.cc
@@ -9,6 +9,7 @@
 
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.cc b/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.cc
index 4d8928c..2fce598 100644
--- a/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.cc
@@ -4,6 +4,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_track.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h"
@@ -13,14 +14,14 @@
 namespace blink {
 
 MediaStreamComponent* CreateMediaStreamComponent(
-    const std::string& id,
+    const String& id,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
   auto audio_source = std::make_unique<blink::MediaStreamAudioSource>(
       std::move(task_runner), true /* is_local_source */);
   auto* audio_source_ptr = audio_source.get();
   auto* source = MakeGarbageCollected<MediaStreamSource>(
-      String::FromUTF8(id), MediaStreamSource::kTypeAudio,
-      String::FromUTF8("audio_track"), false, std::move(audio_source));
+      id, MediaStreamSource::kTypeAudio, "audio_track", false,
+      std::move(audio_source));
 
   auto* component = MakeGarbageCollected<MediaStreamComponentImpl>(
       source->Id(), source,
@@ -30,8 +31,8 @@
 }
 
 FakeRTCRtpSenderImpl::FakeRTCRtpSenderImpl(
-    absl::optional<std::string> track_id,
-    std::vector<std::string> stream_ids,
+    absl::optional<String> track_id,
+    Vector<String> stream_ids,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
     : track_id_(std::move(track_id)),
       stream_ids_(std::move(stream_ids)),
@@ -75,12 +76,7 @@
 }
 
 Vector<String> FakeRTCRtpSenderImpl::StreamIds() const {
-  Vector<String> wtf_stream_ids(
-      static_cast<WTF::wtf_size_t>(stream_ids_.size()));
-  for (wtf_size_t i = 0; i < stream_ids_.size(); ++i) {
-    wtf_stream_ids[i] = String::FromUTF8(stream_ids_[i]);
-  }
-  return wtf_stream_ids;
+  return stream_ids_;
 }
 
 void FakeRTCRtpSenderImpl::ReplaceTrack(MediaStreamComponent* with_track,
@@ -116,8 +112,8 @@
 }
 
 FakeRTCRtpReceiverImpl::FakeRTCRtpReceiverImpl(
-    const std::string& track_id,
-    std::vector<std::string> stream_ids,
+    const String& track_id,
+    Vector<String> stream_ids,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
     : component_(CreateMediaStreamComponent(track_id, task_runner)),
       stream_ids_(std::move(stream_ids)) {}
@@ -159,12 +155,7 @@
 }
 
 Vector<String> FakeRTCRtpReceiverImpl::StreamIds() const {
-  Vector<String> wtf_stream_ids(
-      base::checked_cast<wtf_size_t>(stream_ids_.size()));
-  for (wtf_size_t i = 0; i < wtf_stream_ids.size(); ++i) {
-    wtf_stream_ids[i] = String::FromUTF8(stream_ids_[i]);
-  }
-  return wtf_stream_ids;
+  return stream_ids_;
 }
 
 Vector<std::unique_ptr<RTCRtpSource>> FakeRTCRtpReceiverImpl::GetSources() {
@@ -190,12 +181,12 @@
 }
 
 FakeRTCRtpTransceiverImpl::FakeRTCRtpTransceiverImpl(
-    absl::optional<std::string> mid,
+    const String& mid,
     FakeRTCRtpSenderImpl sender,
     FakeRTCRtpReceiverImpl receiver,
     webrtc::RtpTransceiverDirection direction,
     absl::optional<webrtc::RtpTransceiverDirection> current_direction)
-    : mid_(std::move(mid)),
+    : mid_(mid),
       sender_(std::move(sender)),
       receiver_(std::move(receiver)),
       direction_(std::move(direction)),
@@ -209,7 +200,7 @@
 }
 
 String FakeRTCRtpTransceiverImpl::Mid() const {
-  return mid_ ? String::FromUTF8(*mid_) : String();
+  return mid_;
 }
 
 std::unique_ptr<blink::RTCRtpSenderPlatform> FakeRTCRtpTransceiverImpl::Sender()
diff --git a/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.h b/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.h
index 72af15b8..8bc5940 100644
--- a/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.h
+++ b/third_party/blink/renderer/modules/peerconnection/fake_rtc_rtp_transceiver_impl.h
@@ -6,9 +6,8 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_FAKE_RTC_RTP_TRANSCEIVER_IMPL_H_
 
 #include <memory>
-#include <string>
-#include <vector>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/mediastream/media_constraints.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_component.h"
@@ -17,19 +16,21 @@
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_sender_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_source.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_transceiver_platform.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace blink {
 
 // TODO(https://crbug.com/868868): Similar methods to this exist in many blink
 // unittests. Move to a separate file and reuse it in all of them.
 MediaStreamComponent* CreateMediaStreamComponent(
-    const std::string& id,
+    const String& id,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner);
 
 class FakeRTCRtpSenderImpl : public blink::RTCRtpSenderPlatform {
  public:
-  FakeRTCRtpSenderImpl(absl::optional<std::string> track_id,
-                       std::vector<std::string> stream_ids,
+  FakeRTCRtpSenderImpl(absl::optional<String> track_id,
+                       Vector<String> stream_ids,
                        scoped_refptr<base::SingleThreadTaskRunner> task_runner);
   FakeRTCRtpSenderImpl(const FakeRTCRtpSenderImpl&);
   ~FakeRTCRtpSenderImpl() override;
@@ -53,16 +54,16 @@
   void SetStreams(const Vector<String>& stream_ids) override;
 
  private:
-  absl::optional<std::string> track_id_;
-  std::vector<std::string> stream_ids_;
+  absl::optional<String> track_id_;
+  Vector<String> stream_ids_;
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 };
 
 class FakeRTCRtpReceiverImpl : public RTCRtpReceiverPlatform {
  public:
   FakeRTCRtpReceiverImpl(
-      const std::string& track_id,
-      std::vector<std::string> stream_ids,
+      const String& track_id,
+      Vector<String> stream_ids,
       scoped_refptr<base::SingleThreadTaskRunner> task_runner);
   FakeRTCRtpReceiverImpl(const FakeRTCRtpReceiverImpl&);
   ~FakeRTCRtpReceiverImpl() override;
@@ -83,13 +84,13 @@
 
  private:
   Persistent<MediaStreamComponent> component_;
-  std::vector<std::string> stream_ids_;
+  Vector<String> stream_ids_;
 };
 
 class FakeRTCRtpTransceiverImpl : public RTCRtpTransceiverPlatform {
  public:
   FakeRTCRtpTransceiverImpl(
-      absl::optional<std::string> mid,
+      const String& mid,
       FakeRTCRtpSenderImpl sender,
       FakeRTCRtpReceiverImpl receiver,
       webrtc::RtpTransceiverDirection direction,
@@ -115,7 +116,7 @@
       const override;
 
  private:
-  absl::optional<std::string> mid_;
+  String mid_;
   FakeRTCRtpSenderImpl sender_;
   FakeRTCRtpReceiverImpl receiver_;
   webrtc::RtpTransceiverDirection direction_;
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.h b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.h
index cdeb7c54..fc8685d 100644
--- a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.h
+++ b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/webrtc/api/media_stream_interface.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.cc b/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.cc
index 5f3a96f..f041aec 100644
--- a/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.cc
+++ b/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.cc
@@ -134,7 +134,7 @@
                                           Kind kind,
                                           const std::string& track_id) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  auto it = base::ranges::find_if(
+  auto* it = base::ranges::find_if(
       observers_,
       [&](const std::unique_ptr<MediaStreamTrackMetricsObserver>& observer) {
         return direction == observer->direction() && kind == observer->kind() &&
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.h b/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.h
index 5ce4eeb0..3f2628f1 100644
--- a/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.h
+++ b/third_party/blink/renderer/modules/peerconnection/media_stream_track_metrics.h
@@ -8,12 +8,12 @@
 #include <stdint.h>
 
 #include <memory>
-#include <vector>
 
 #include "base/threading/thread_checker.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/webrtc/api/peer_connection_interface.h"
 
 namespace blink {
@@ -97,9 +97,7 @@
   mojo::Remote<blink::mojom::blink::MediaStreamTrackMetricsHost>
       track_metrics_host_;
 
-  typedef std::vector<std::unique_ptr<MediaStreamTrackMetricsObserver>>
-      ObserverVector;
-  ObserverVector observers_;
+  Vector<std::unique_ptr<MediaStreamTrackMetricsObserver>> observers_;
 
   webrtc::PeerConnectionInterface::IceConnectionState ice_state_;
 
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h
index bfba2153..7d2a88a 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h
+++ b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h
@@ -5,11 +5,10 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
 
-#include <set>
 #include <string>
-#include <vector>
 
 #include "third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h"
+#include "third_party/blink/renderer/platform/wtf/hash_set.h"
 #include "third_party/webrtc/api/media_stream_interface.h"
 #include "third_party/webrtc/rtc_base/ref_counted_object.h"
 
@@ -19,7 +18,7 @@
 
 namespace blink {
 
-typedef std::set<webrtc::ObserverInterface*> ObserverSet;
+using ObserverSet = HashSet<webrtc::ObserverInterface*>;
 
 class MockWebRtcAudioSource : public webrtc::AudioSourceInterface {
  public:
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.cc b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.cc
index 4ba121d9..c362dd8 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.cc
@@ -16,6 +16,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/mock_data_channel_impl.h"
 #include "third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h"
 #include "third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_platform.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/peerconnection/webrtc_util.h"
 #include "third_party/webrtc/api/rtp_receiver_interface.h"
 #include "third_party/webrtc/rtc_base/ref_counted_object.h"
@@ -83,7 +84,10 @@
   ~MockStreamCollection() override {}
 
  private:
-  typedef std::vector<rtc::scoped_refptr<MediaStreamInterface>> StreamVector;
+  typedef std::vector<rtc::scoped_refptr<MediaStreamInterface>> StreamVector
+      ALLOW_DISCOURAGED_TYPE(
+          "Avoids conversion when implementing "
+          "webrtc::StreamCollectionInterface");
   StreamVector streams_;
 };
 
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.h b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.h
index 865f429..e92ec6b 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.h
+++ b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.h
@@ -11,6 +11,7 @@
 #include "base/notreached.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/webrtc/api/dtls_transport_interface.h"
 #include "third_party/webrtc/api/peer_connection_interface.h"
@@ -67,7 +68,8 @@
  private:
   rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track_;
   rtc::scoped_refptr<webrtc::DtlsTransportInterface> transport_;
-  std::vector<std::string> stream_ids_;
+  std::vector<std::string> stream_ids_ ALLOW_DISCOURAGED_TYPE(
+      "Avoids conversion when implementing webrtc::RtpSenderInterface");
 };
 
 class FakeRtpReceiver : public webrtc::RtpReceiverInterface {
@@ -99,7 +101,9 @@
  private:
   rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track_;
   rtc::scoped_refptr<webrtc::DtlsTransportInterface> transport_;
-  std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>> streams_;
+  std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>> streams_
+      ALLOW_DISCOURAGED_TYPE(
+          "Avoids conversion when implementing webrtc::RcpReceiverInterface");
 };
 
 class FakeRtpTransceiver : public webrtc::RtpTransceiverInterface {
@@ -323,10 +327,11 @@
 
  private:
   std::string stream_label_;
-  std::vector<std::string> local_stream_ids_;
+  std::vector<std::string> local_stream_ids_ ALLOW_DISCOURAGED_TYPE(
+      "Avoids conversion when implementing webrtc::PeerConnectionInterface");
   rtc::scoped_refptr<MockStreamCollection> remote_streams_;
-  std::vector<rtc::scoped_refptr<FakeRtpSender>> senders_;
-  std::vector<rtc::scoped_refptr<FakeRtpTransceiver>> transceivers_;
+  Vector<rtc::scoped_refptr<FakeRtpSender>> senders_;
+  Vector<rtc::scoped_refptr<FakeRtpTransceiver>> transceivers_;
   std::unique_ptr<webrtc::SessionDescriptionInterface> local_desc_;
   std::unique_ptr<webrtc::SessionDescriptionInterface> remote_desc_;
   std::unique_ptr<webrtc::SessionDescriptionInterface>
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
index 396f4df..a7ac7d3a 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -21,6 +21,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/webrtc/thread_wrapper.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
index 7a06ac1..99ee86ca 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
index 754249519..ba8484d 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "base/containers/contains.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/types/pass_key.h"
 #include "base/values.h"
 #include "build/build_config.h"
@@ -608,9 +609,13 @@
     for (const auto& stats : *report) {
       // The format of "stats_subdictionary" is:
       // {timestamp:<milliseconds>, values: [<key-value pairs>]}
+      // The timestamp unit is milliseconds but we want decimal
+      // precision so we convert ourselves.
       base::Value::Dict stats_subdictionary;
-      // Timestamp is reported in milliseconds.
-      stats_subdictionary.Set("timestamp", stats.timestamp_us() / 1000.0);
+      stats_subdictionary.Set(
+          "timestamp",
+          stats.timestamp().us() /
+              static_cast<double>(base::Time::kMicrosecondsPerMillisecond));
       // Values are reported as
       // "values": ["member1", value, "member2", value...]
       base::Value::List name_value_pairs;
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h
index 37f7bb5..83b092b 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_PEER_CONNECTION_TRACKER_H_
 
 #include "base/gtest_prod_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/types/pass_key.h"
 #include "base/values.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
index 87226e0..57d06a21 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
@@ -92,7 +92,7 @@
       "receiverTrackId", {"receiverStreamId"},
       blink::scheduler::GetSingleThreadTaskRunnerForTesting());
   transceiver = std::make_unique<blink::FakeRTCRtpTransceiverImpl>(
-      absl::nullopt, std::move(sender), std::move(receiver),
+      String(), std::move(sender), std::move(receiver),
       webrtc::RtpTransceiverDirection::kSendOnly /* direction */,
       absl::nullopt /* current_direction */);
   return transceiver;
@@ -308,7 +308,7 @@
   CreateTrackerWithMocks();
   CreateAndRegisterPeerConnectionHandler();
   blink::FakeRTCRtpTransceiverImpl transceiver(
-      absl::nullopt,
+      String(),
       blink::FakeRTCRtpSenderImpl(
           absl::nullopt, {},
           blink::scheduler::GetSingleThreadTaskRunnerForTesting()),
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_data_channel.cc b/third_party/blink/renderer/modules/peerconnection/rtc_data_channel.cc
index 78d28d6..26879ee 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_data_channel.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_data_channel.cc
@@ -32,6 +32,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_data_channel_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_data_channel_test.cc
index 951a3e77..ab4db7e78 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_data_channel_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_data_channel_test.cc
@@ -11,6 +11,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_simple_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc
index 27ffb2b..641653e 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/renderer/core/dom/document.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.cc
index e4769aa40..ed99ad16 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.h"
+#include "base/task/single_thread_task_runner.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"
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.h
index 5984a66..7d6701e 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_receiver_source_optimizer.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_RECEIVER_SOURCE_OPTIMIZER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_RECEIVER_SOURCE_OPTIMIZER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_transferring_optimizer.h"
 #include "third_party/blink/renderer/core/streams/underlying_source_base.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.cc
index 395903c..7ff6c4a 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/heap/cross_thread_persistent.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"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.h
index 1d8e9ce4..e3235d3 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_sender_source_optimizer.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_SENDER_SOURCE_OPTIMIZER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_SENDER_SOURCE_OPTIMIZER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_transferring_optimizer.h"
 #include "third_party/blink/renderer/core/streams/underlying_source_base.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink_test.cc
index cb4fd6d..ef1097ee9 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink.h"
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.h
index 49d628f..2766a7a 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_UNDERLYING_SOURCE_H_
 
 #include "base/gtest_prod_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/renderer/core/streams/underlying_source_base.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.cc
index 44e313eb..39d9e27 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/heap/cross_thread_persistent.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"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.h
index a245ddc..72c3baf 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_receiver_source_optimizer.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_RECEIVER_SOURCE_OPTIMIZER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_RECEIVER_SOURCE_OPTIMIZER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_transferring_optimizer.h"
 #include "third_party/blink/renderer/core/streams/underlying_source_base.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.cc
index cfd51bb..702906f3 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/heap/cross_thread_persistent.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"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.h
index f43c6336..6f905ef 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_sender_source_optimizer.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_SENDER_SOURCE_OPTIMIZER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_SENDER_SOURCE_OPTIMIZER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_transferring_optimizer.h"
 #include "third_party/blink/renderer/core/streams/underlying_source_base.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
index a2ebc2a..c779722 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink.h"
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.h
index d9a41610..e3f15e8 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_UNDERLYING_SOURCE_H_
 
 #include "base/gtest_prod_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/renderer/core/streams/underlying_source_base.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
index ea2ec5d5..c7b13f6 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_union_string_stringsequence.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.h b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.h
index 7a712358..91b931dd 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_ice_candidate_pair.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_ice_parameters.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
index 4445b80..db62875 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -40,6 +40,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 6db4f64..e5b6ca8 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -23,6 +23,8 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/trace_event.h"
 #include "build/chromecast_buildflags.h"
@@ -338,10 +340,8 @@
     class MemberIterator : public RTCLegacyStatsMemberIterator {
      public:
       MemberIterator(
-          const std::vector<StatsReport::Values::value_type>::const_iterator&
-              it,
-          const std::vector<StatsReport::Values::value_type>::const_iterator&
-              end)
+          Vector<StatsReport::Values::value_type>::const_iterator it,
+          Vector<StatsReport::Values::value_type>::const_iterator end)
           : it_(it), end_(end) {}
 
       // RTCLegacyStatsMemberIterator
@@ -374,16 +374,17 @@
       }
 
      private:
-      std::vector<StatsReport::Values::value_type>::const_iterator it_;
-      std::vector<StatsReport::Values::value_type>::const_iterator end_;
+      Vector<StatsReport::Values::value_type>::const_iterator it_;
+      Vector<StatsReport::Values::value_type>::const_iterator end_;
     };
 
     explicit Report(const StatsReport* report)
         : id_(report->id()->ToString()),
           type_(report->type()),
           type_name_(report->TypeToString()),
-          timestamp_(report->timestamp()),
-          values_(report->values().begin(), report->values().end()) {}
+          timestamp_(report->timestamp()) {
+      values_.AppendRange(report->values().begin(), report->values().end());
+    }
 
     ~Report() override {
       // Since the values vector holds pointers to const objects that are bound
@@ -396,7 +397,7 @@
     String GetType() const override { return String::FromUTF8(type_name_); }
     double Timestamp() const override { return timestamp_; }
     RTCLegacyStatsMemberIterator* Iterator() const override {
-      return new MemberIterator(values_.cbegin(), values_.cend());
+      return new MemberIterator(values_.begin(), values_.end());
     }
 
     bool HasValues() const { return values_.size() > 0; }
@@ -407,7 +408,7 @@
     const StatsReport::StatsType type_;
     const std::string type_name_;
     const double timestamp_;
-    const std::vector<StatsReport::Values::value_type> values_;
+    Vector<StatsReport::Values::value_type> values_;
   };
 
   static void DeleteReports(std::vector<Report*>* reports) {
@@ -506,7 +507,7 @@
 
 // Counts the number of senders that have |stream_id| as an associated stream.
 size_t GetLocalStreamUsageCount(
-    const std::vector<std::unique_ptr<blink::RTCRtpSenderImpl>>& rtp_senders,
+    const Vector<std::unique_ptr<blink::RTCRtpSenderImpl>>& rtp_senders,
     const std::string stream_id) {
   size_t usage_count = 0;
   for (const auto& sender : rtp_senders) {
@@ -1805,7 +1806,7 @@
 RTCPeerConnectionHandler::RemoveTrack(blink::RTCRtpSenderPlatform* web_sender) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::RemoveTrack");
-  auto it = FindSender(web_sender->Id());
+  auto* it = FindSender(web_sender->Id());
   if (it == rtp_senders_.end())
     return webrtc::RTCError(webrtc::RTCErrorType::INVALID_PARAMETER);
   const auto& sender = *it;
@@ -2185,7 +2186,7 @@
     uintptr_t transceiver_id = blink::RTCRtpTransceiverImpl::GetId(
         transceiver_states[i].webrtc_transceiver().get());
     ids[i] = transceiver_id;
-    auto it = FindTransceiver(transceiver_id);
+    auto* it = FindTransceiver(transceiver_id);
     bool transceiver_is_new = (it == rtp_transceivers_.end());
     bool transceiver_was_modified = false;
     if (!transceiver_is_new) {
@@ -2327,27 +2328,27 @@
   // video or not.
 }
 
-std::vector<std::unique_ptr<blink::RTCRtpSenderImpl>>::iterator
+Vector<std::unique_ptr<blink::RTCRtpSenderImpl>>::iterator
 RTCPeerConnectionHandler::FindSender(uintptr_t id) {
-  for (auto it = rtp_senders_.begin(); it != rtp_senders_.end(); ++it) {
+  for (auto* it = rtp_senders_.begin(); it != rtp_senders_.end(); ++it) {
     if ((*it)->Id() == id)
       return it;
   }
   return rtp_senders_.end();
 }
 
-std::vector<std::unique_ptr<blink::RTCRtpReceiverImpl>>::iterator
+Vector<std::unique_ptr<blink::RTCRtpReceiverImpl>>::iterator
 RTCPeerConnectionHandler::FindReceiver(uintptr_t id) {
-  for (auto it = rtp_receivers_.begin(); it != rtp_receivers_.end(); ++it) {
+  for (auto* it = rtp_receivers_.begin(); it != rtp_receivers_.end(); ++it) {
     if ((*it)->Id() == id)
       return it;
   }
   return rtp_receivers_.end();
 }
 
-std::vector<std::unique_ptr<blink::RTCRtpTransceiverImpl>>::iterator
+Vector<std::unique_ptr<blink::RTCRtpTransceiverImpl>>::iterator
 RTCPeerConnectionHandler::FindTransceiver(uintptr_t id) {
-  for (auto it = rtp_transceivers_.begin(); it != rtp_transceivers_.end();
+  for (auto* it = rtp_transceivers_.begin(); it != rtp_transceivers_.end();
        ++it) {
     if ((*it)->Id() == id)
       return it;
@@ -2355,9 +2356,9 @@
   return rtp_transceivers_.end();
 }
 
-size_t RTCPeerConnectionHandler::GetTransceiverIndex(
+wtf_size_t RTCPeerConnectionHandler::GetTransceiverIndex(
     const RTCRtpTransceiverPlatform& platform_transceiver) {
-  for (size_t i = 0; i < rtp_transceivers_.size(); ++i) {
+  for (wtf_size_t i = 0; i < rtp_transceivers_.size(); ++i) {
     if (platform_transceiver.Id() == rtp_transceivers_[i]->Id())
       return i;
   }
@@ -2377,7 +2378,7 @@
   auto webrtc_receiver = transceiver_state.receiver_state()->webrtc_receiver();
 
   std::unique_ptr<blink::RTCRtpTransceiverImpl> transceiver;
-  auto it = FindTransceiver(
+  auto* it = FindTransceiver(
       blink::RTCRtpTransceiverImpl::GetId(webrtc_transceiver.get()));
   if (it == rtp_transceivers_.end()) {
     // Create a new transceiver, including a sender and a receiver.
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
index 46cc8c3..cfe9cc9 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
@@ -392,11 +392,11 @@
       webrtc::CreateSessionDescriptionObserver* observer,
       webrtc::PeerConnectionInterface::RTCOfferAnswerOptions offer_options,
       blink::TransceiverStateSurfacer* transceiver_state_surfacer);
-  std::vector<std::unique_ptr<blink::RTCRtpSenderImpl>>::iterator FindSender(
+  Vector<std::unique_ptr<blink::RTCRtpSenderImpl>>::iterator FindSender(
       uintptr_t id);
-  std::vector<std::unique_ptr<blink::RTCRtpReceiverImpl>>::iterator
-  FindReceiver(uintptr_t id);
-  std::vector<std::unique_ptr<blink::RTCRtpTransceiverImpl>>::iterator
+  Vector<std::unique_ptr<blink::RTCRtpReceiverImpl>>::iterator FindReceiver(
+      uintptr_t id);
+  Vector<std::unique_ptr<blink::RTCRtpTransceiverImpl>>::iterator
   FindTransceiver(uintptr_t id);
   // For full transceiver implementations, returns the index of
   // |rtp_transceivers_| that correspond to |platform_transceiver|.
@@ -405,7 +405,7 @@
   // For receiver-only transceiver implementations, returns the index of
   // |rtp_receivers_| that correspond to |platform_transceiver.Receiver()|.
   // NOTREACHED()-crashes if no correspondent is found.
-  size_t GetTransceiverIndex(
+  wtf_size_t GetTransceiverIndex(
       const RTCRtpTransceiverPlatform& platform_transceiver);
   std::unique_ptr<blink::RTCRtpTransceiverImpl> CreateOrUpdateTransceiver(
       blink::RtpTransceiverState transceiver_state,
@@ -452,11 +452,11 @@
   // any components referencing it.
   scoped_refptr<blink::WebRtcMediaStreamTrackAdapterMap> track_adapter_map_;
   // Blink layer correspondents of |webrtc::RtpSenderInterface|.
-  std::vector<std::unique_ptr<blink::RTCRtpSenderImpl>> rtp_senders_;
+  Vector<std::unique_ptr<blink::RTCRtpSenderImpl>> rtp_senders_;
   // Blink layer correspondents of |webrtc::RtpReceiverInterface|.
-  std::vector<std::unique_ptr<blink::RTCRtpReceiverImpl>> rtp_receivers_;
+  Vector<std::unique_ptr<blink::RTCRtpReceiverImpl>> rtp_receivers_;
   // Blink layer correspondents of |webrtc::RtpTransceiverInterface|.
-  std::vector<std::unique_ptr<blink::RTCRtpTransceiverImpl>> rtp_transceivers_;
+  Vector<std::unique_ptr<blink::RTCRtpTransceiverImpl>> rtp_transceivers_;
   // A snapshot of transceiver ids taken before the last transition, used to
   // detect any removals during rollback.
   Vector<uintptr_t> previous_transceiver_ids_;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
index 180a33a3..fe88138 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
@@ -959,13 +959,13 @@
     EXPECT_EQ(stats->GetType().Utf8(), webrtc::RTCTestStats::kType);
     if (stats->Id().Utf8() == "RTCUndefinedStats") {
       ++undefined_stats_count;
-      EXPECT_EQ(stats->Timestamp(), 1.0);
+      EXPECT_EQ(stats->TimestampMs(), 1.0);
       for (size_t i = 0; i < stats->MembersCount(); ++i) {
         EXPECT_FALSE(stats->GetMember(i)->IsDefined());
       }
     } else if (stats->Id().Utf8() == "RTCDefinedStats") {
       ++defined_stats_count;
-      EXPECT_EQ(stats->Timestamp(), 2.0);
+      EXPECT_EQ(stats->TimestampMs(), 2.0);
       std::set<webrtc::RTCStatsMemberInterface::Type> members;
       for (size_t i = 0; i < stats->MembersCount(); ++i) {
         std::unique_ptr<RTCStatsMember> member = stats->GetMember(i);
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
index 63d3490..67d8ff1a 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -6,6 +6,7 @@
 
 #include "base/numerics/safe_conversions.h"
 #include "base/synchronization/lock.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_study_settings.h"
 #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h
index 4ed6d8e..a0840e5e 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_RTP_RECEIVER_H_
 
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtp_contributing_source.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc
index 83b2732..669b35e 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/check_op.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_encoded_audio_stream_transformer.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_sender_platform.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.h
index f2891fe..95b593ca 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.h
@@ -11,6 +11,7 @@
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_receiver_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_transceiver_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_stats.h"
@@ -100,7 +101,8 @@
   bool is_initialized_;
   std::unique_ptr<blink::WebRtcMediaStreamTrackAdapterMap::AdapterRef>
       track_ref_;
-  std::vector<std::string> stream_ids_;
+  std::vector<std::string> stream_ids_ ALLOW_DISCOURAGED_TYPE(
+      "Avoids conversions when passed from/to webrtc API");
 };
 
 // Used to surface |webrtc::RtpReceiverInterface| to blink. Multiple
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc
index e72b5bb..daf824a 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc
@@ -169,7 +169,7 @@
   EXPECT_EQ(report->Size(), 1u);
   auto stats = report->GetStats(blink::WebString::FromUTF8("stats-id"));
   EXPECT_TRUE(stats);
-  EXPECT_EQ(stats->Timestamp(), 1.234);
+  EXPECT_EQ(stats->TimestampMs(), 1.234);
 }
 
 TEST_F(RTCRtpReceiverImplTest, CreateReceiverWithInsertableStreams) {
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
index 090716b..65cc6af 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -10,6 +10,7 @@
 #include <utility>
 
 #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_study_settings.h"
 #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h
index 8616639..f0a2281 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtp_encoding_parameters.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc
index 438ad29b..4a70c7ef 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.cc
@@ -9,6 +9,7 @@
 
 #include "base/check_op.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_dtmf_sender_handler.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_encoded_audio_stream_transformer.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.h
index 51184f24..16c10bb 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl.h
@@ -13,6 +13,7 @@
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_sender_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_transceiver_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_stats.h"
@@ -103,7 +104,8 @@
   bool is_initialized_;
   std::unique_ptr<blink::WebRtcMediaStreamTrackAdapterMap::AdapterRef>
       track_ref_;
-  std::vector<std::string> stream_ids_;
+  std::vector<std::string> stream_ids_ ALLOW_DISCOURAGED_TYPE(
+      "Avoids conversions when passed from/to webrtc API");
 };
 
 // Used to surface |webrtc::RtpSenderInterface| to blink. Multiple
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc
index 12cb509..66ba0dc 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc
@@ -241,7 +241,7 @@
   EXPECT_EQ(report->Size(), 1u);
   auto stats = report->GetStats(blink::WebString::FromUTF8("stats-id"));
   EXPECT_TRUE(stats);
-  EXPECT_EQ(stats->Timestamp(), 1.234);
+  EXPECT_EQ(stats->TimestampMs(), 1.234);
 }
 
 TEST_F(RTCRtpSenderImplTest, CopiedSenderSharesInternalStates) {
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl.cc
index 8f26da6..9fb6725 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/check_op.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 #include "third_party/webrtc/api/scoped_refptr.h"
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc
index 19c08c6..8b5d8ec1 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc
@@ -7,6 +7,7 @@
 #include <limits>
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.h b/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.h
index 890eecb..db34aa5 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
 #include "third_party/blink/renderer/modules/event_target_modules.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_stats_report.cc b/third_party/blink/renderer/modules/peerconnection/rtc_stats_report.cc
index 0d1f62e..54d01a6 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_stats_report.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_stats_report.cc
@@ -53,7 +53,7 @@
   V8ObjectBuilder builder(script_state);
 
   builder.AddString("id", stats->Id());
-  builder.AddNumber("timestamp", stats->Timestamp());
+  builder.AddNumber("timestamp", stats->TimestampMs());
   builder.AddString("type", stats->GetType());
 
   const bool expose_hardware_caps = ExposeHardwareCapabilityStats(script_state);
diff --git a/third_party/blink/renderer/modules/peerconnection/rtp_contributing_source_cache.cc b/third_party/blink/renderer/modules/peerconnection/rtp_contributing_source_cache.cc
index 1f91cf9..1707280 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtp_contributing_source_cache.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtp_contributing_source_cache.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtp_contributing_source_cache.h"
 
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/execution_context/agent.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/loader/document_loader.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.cc b/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.cc
index 20ab1abc..98ef364 100644
--- a/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.cc
+++ b/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.cc
@@ -11,6 +11,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
 #include "base/power_monitor/power_observer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.h b/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.h
index bdb9bf3..2f521d5 100644
--- a/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.h
+++ b/third_party/blink/renderer/modules/peerconnection/speed_limit_uma_listener.h
@@ -8,6 +8,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/thermal_resource.cc b/third_party/blink/renderer/modules/peerconnection/thermal_resource.cc
index 0ce0219..421d009 100644
--- a/third_party/blink/renderer/modules/peerconnection/thermal_resource.cc
+++ b/third_party/blink/renderer/modules/peerconnection/thermal_resource.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/peerconnection/thermal_resource.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "third_party/webrtc/rtc_base/ref_counted_object.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/thermal_resource.h b/third_party/blink/renderer/modules/peerconnection/thermal_resource.h
index 8126078..325f4707 100644
--- a/third_party/blink/renderer/modules/peerconnection/thermal_resource.h
+++ b/third_party/blink/renderer/modules/peerconnection/thermal_resource.h
@@ -8,6 +8,7 @@
 #include "base/feature_list.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/thread_annotations.h"
 #include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/thermal_uma_listener.h b/third_party/blink/renderer/modules/peerconnection/thermal_uma_listener.h
index 6e9651a..2dfa220 100644
--- a/third_party/blink/renderer/modules/peerconnection/thermal_uma_listener.h
+++ b/third_party/blink/renderer/modules/peerconnection/thermal_uma_listener.h
@@ -10,6 +10,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom-blink.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.cc b/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.cc
index 088a82d..34b56cf 100644
--- a/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.cc
+++ b/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/peerconnection/webrtc_util.h"
 #include "third_party/webrtc/api/rtp_transceiver_interface.h"
 #include "third_party/webrtc/api/sctp_transport_interface.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.h b/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.h
index b9f474a8..7d7da464 100644
--- a/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.h
+++ b/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.h
@@ -5,9 +5,11 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_TRANSCEIVER_STATE_SURFACER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_TRANSCEIVER_STATE_SURFACER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl.h"
 #include "third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_peer_connection_handler_client.h"
 #include "third_party/webrtc/api/rtp_transceiver_interface.h"
 #include "third_party/webrtc/api/sctp_transport_interface.h"
@@ -57,7 +59,9 @@
   bool is_initialized_;
   bool states_obtained_;
   blink::WebRTCSctpTransportSnapshot sctp_transport_snapshot_;
-  std::vector<blink::RtpTransceiverState> transceiver_states_;
+  std::vector<blink::RtpTransceiverState> transceiver_states_
+      ALLOW_DISCOURAGED_TYPE(
+          "Avoids conversions when passed from/to webrtc API");
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.cc b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.cc
index 6e0a7468..55698ee 100644
--- a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.cc
+++ b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.cc
@@ -6,6 +6,7 @@
 
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h"
 #include "third_party/blink/renderer/modules/peerconnection/media_stream_video_webrtc_sink.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h
index ebee920..1eaa30f 100644
--- a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h
+++ b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/mediastream/remote_media_stream_track_adapter.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/peerconnection/media_stream_video_webrtc_sink.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.cc b/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.cc
index 6281b4f..48c2573 100644
--- a/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.cc
+++ b/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.h b/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.h
index 24abf94..d208140 100644
--- a/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.h
+++ b/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.h
@@ -17,6 +17,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl.h"
 #include "third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer.h"
 #include "third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 #include "third_party/webrtc/api/jsep.h"
 #include "third_party/webrtc/api/peer_connection_interface.h"
@@ -61,7 +62,9 @@
 
     webrtc::PeerConnectionInterface::SignalingState signaling_state;
     blink::WebRTCSctpTransportSnapshot sctp_transport_state;
-    std::vector<blink::RtpTransceiverState> transceiver_states;
+    std::vector<blink::RtpTransceiverState> transceiver_states
+        ALLOW_DISCOURAGED_TYPE(
+            "Avoids conversions when passed from/to webrtc API");
     std::unique_ptr<webrtc::SessionDescriptionInterface>
         pending_local_description;
     std::unique_ptr<webrtc::SessionDescriptionInterface>
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_video_perf_reporter.cc b/third_party/blink/renderer/modules/peerconnection/webrtc_video_perf_reporter.cc
index a179082..6f5445b 100644
--- a/third_party/blink/renderer/modules/peerconnection/webrtc_video_perf_reporter.cc
+++ b/third_party/blink/renderer/modules/peerconnection/webrtc_video_perf_reporter.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/webrtc_video_perf_reporter.h"
 
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/video_codecs.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/modules/permissions/permission_status_listener.cc b/third_party/blink/renderer/modules/permissions/permission_status_listener.cc
index cd9295d18..b41b3ffd 100644
--- a/third_party/blink/renderer/modules/permissions/permission_status_listener.cc
+++ b/third_party/blink/renderer/modules/permissions/permission_status_listener.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/permissions/permission_status_listener.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
 #include "third_party/blink/renderer/modules/permissions/permission_utils.h"
diff --git a/third_party/blink/renderer/modules/presentation/presentation_connection.cc b/third_party/blink/renderer/modules/presentation/presentation_connection.cc
index bab786c..9c49388 100644
--- a/third_party/blink/renderer/modules/presentation/presentation_connection.cc
+++ b/third_party/blink/renderer/modules/presentation/presentation_connection.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/presentation/presentation_connection.h"
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
diff --git a/third_party/blink/renderer/modules/presentation/presentation_connection.h b/third_party/blink/renderer/modules/presentation/presentation_connection.h
index b7a7b0fa..823240c2 100644
--- a/third_party/blink/renderer/modules/presentation/presentation_connection.h
+++ b/third_party/blink/renderer/modules/presentation/presentation_connection.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PRESENTATION_PRESENTATION_CONNECTION_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PRESENTATION_PRESENTATION_CONNECTION_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/mojom/presentation/presentation.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/presentation/presentation_controller.cc b/third_party/blink/renderer/modules/presentation/presentation_controller.cc
index ce55f4e..9d151d91 100644
--- a/third_party/blink/renderer/modules/presentation/presentation_controller.cc
+++ b/third_party/blink/renderer/modules/presentation/presentation_controller.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/presentation/presentation_controller.h"
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/modules/presentation/presentation_availability_callbacks.h"
diff --git a/third_party/blink/renderer/modules/presentation/presentation_receiver.cc b/third_party/blink/renderer/modules/presentation/presentation_receiver.cc
index 58953f6c..dfabf30 100644
--- a/third_party/blink/renderer/modules/presentation/presentation_receiver.cc
+++ b/third_party/blink/renderer/modules/presentation/presentation_receiver.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/presentation/presentation_receiver.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
diff --git a/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.h b/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.h
index a79498c..3e077cbe 100644
--- a/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.h
+++ b/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/modules/sensor/sensor_proxy.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h"
 #include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
diff --git a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.h b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.h
index c43dca5..e249c34 100644
--- a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.h
+++ b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_FETCH_RESPOND_WITH_OBSERVER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_FETCH_RESPOND_WITH_OBSERVER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/cpp/cross_origin_embedder_policy.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink-forward.h"
 #include "third_party/blink/public/platform/web_url_request.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.cc b/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.cc
index 3b83932f..1645724 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/containers/contains.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_event_status.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.h b/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.h
index b3e2794..6642b4d 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_event_queue.h
@@ -9,12 +9,14 @@
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker.mojom-blink.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_event_status.mojom-blink-forward.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h"
 #include "third_party/blink/renderer/platform/wtf/deque.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
@@ -273,12 +275,14 @@
   // Event queue to where all online events (normal and pending events) are
   // enqueued. We use std::map as a task queue because it's ordered by the
   // `event_id` and the entries can be effectively erased in random order.
-  std::map<int /* event_id */, std::unique_ptr<Event>> queued_online_events_;
+  std::map<int /* event_id */, std::unique_ptr<Event>> queued_online_events_
+      ALLOW_DISCOURAGED_TYPE("Needs to be ordered by event_id");
 
   // Event queue to where offline events are enqueued. We use std::map as a task
   // queue because it's ordered by the `event_id` and the entries can be
   // effectively erased in random order.
-  std::map<int /* event_id */, std::unique_ptr<Event>> queued_offline_events_;
+  std::map<int /* event_id */, std::unique_ptr<Event>> queued_offline_events_
+      ALLOW_DISCOURAGED_TYPE("Needs to be ordered by event_id");
 
   // Set to true during running ProcessEvents(). This is used for avoiding to
   // invoke |idle_callback_| or to re-enter ProcessEvents() when calling
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
index f3e7d14d..2394da2fa2 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
@@ -34,6 +34,8 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_client.mojom-blink.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_event_status.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
index 7262c2b..c6571f1 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
@@ -33,6 +33,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/public/mojom/service_worker/controller_service_worker.mojom-blink.h"
 #include "third_party/blink/public/mojom/service_worker/dispatch_fetch_event_params.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.cc b/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.cc
index a84f15a..8dc6b775 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.cc
@@ -9,6 +9,7 @@
 
 #include "base/barrier_closure.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/trace_event.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.h b/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.h
index 1780b814..993badb 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_installed_scripts_manager.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_SERVICE_WORKER_INSTALLED_SCRIPTS_MANAGER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_SERVICE_WORKER_INSTALLED_SCRIPTS_MANAGER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/shared_remote.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_installed_scripts_manager.mojom-blink.h"
 #include "third_party/blink/renderer/core/workers/installed_scripts_manager.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_thread.cc b/third_party/blink/renderer/modules/service_worker/service_worker_thread.cc
index 04f1d5d8..969a0710 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_thread.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_thread.cc
@@ -32,6 +32,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
 #include "third_party/blink/renderer/core/workers/worker_backing_thread.h"
 #include "third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h"
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_thread.h b/third_party/blink/renderer/modules/service_worker/service_worker_thread.h
index c8ca932..fad0e43 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_thread.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_thread.h
@@ -31,6 +31,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_SERVICE_WORKER_THREAD_H_
 
 #include <memory>
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom-blink-forward.h"
diff --git a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
index 49133f1..de17da4b 100644
--- a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
+++ b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
@@ -8,6 +8,8 @@
 
 #include "base/feature_list.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc
index 160a8cd..ac24cab 100644
--- a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc
+++ b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h"
 
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/network/public/cpp/wrapper_shared_url_loader_factory.h"
 #include "third_party/blink/public/common/loader/loader_constants.h"
diff --git a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h
index 06b1e09..354877a 100644
--- a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h
+++ b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.h
@@ -12,6 +12,7 @@
 #include "third_party/blink/public/mojom/service_worker/service_worker.mojom-forward.h"
 #include "third_party/blink/public/mojom/worker/subresource_loader_updater.mojom-blink.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_fetch_context.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_string.h"
diff --git a/third_party/blink/renderer/modules/shared_storage/shared_storage.cc b/third_party/blink/renderer/modules/shared_storage/shared_storage.cc
index 9cefc57..b28d41cd 100644
--- a/third_party/blink/renderer/modules/shared_storage/shared_storage.cc
+++ b/third_party/blink/renderer/modules/shared_storage/shared_storage.cc
@@ -10,7 +10,6 @@
 
 #include "base/metrics/histogram_functions.h"
 #include "base/numerics/safe_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_error.cc b/third_party/blink/renderer/modules/smart_card/smart_card_error.cc
index b349a1b..eac2694 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_error.cc
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_error.cc
@@ -3,11 +3,94 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/modules/smart_card/smart_card_error.h"
+#include "base/notreached.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_smart_card_error_options.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 
 namespace blink {
+namespace {
+
+// The response code messages are mostly from
+// https://learn.microsoft.com/en-us/windows/win32/secauthn/authentication-return-values,
+// which are also used by PCSC lite.
+String MojomResponseCodeToMessage(
+    mojom::SmartCardResponseCode mojom_response_code) {
+  switch (mojom_response_code) {
+    case mojom::SmartCardResponseCode::kNoService:
+      return "No smart card service available in the system.";
+    case mojom::SmartCardResponseCode::kNoSmartCard:
+      return "The operation requires a smart card, but no smart card is "
+             "currently in the device.";
+    case mojom::SmartCardResponseCode::kNotReady:
+      return "The reader or smart card is not ready to accept commands.";
+    case mojom::SmartCardResponseCode::kNotTransacted:
+      return "An attempt was made to end a non-existent transaction.";
+    case mojom::SmartCardResponseCode::kProtoMismatch:
+      return "The requested protocols are incompatible with the protocol "
+             "currently in use with the smart card.";
+    case mojom::SmartCardResponseCode::kReaderUnavailable:
+      return "The specified reader is not currently available for use.";
+    case mojom::SmartCardResponseCode::kRemovedCard:
+      return "The smart card has been removed, so further communication is not "
+             "possible.";
+    case mojom::SmartCardResponseCode::kResetCard:
+      return "The smart card has been reset, so any shared state information "
+             "is invalid.";
+    case mojom::SmartCardResponseCode::kSharingViolation:
+      return "The smart card cannot be accessed because of other connections "
+             "outstanding.";
+    case mojom::SmartCardResponseCode::kSystemCancelled:
+      return "The action was cancelled by the system, presumably to log off or "
+             "shut down.";
+    case mojom::SmartCardResponseCode::kUnpoweredCard:
+      return "Power has been removed from the smart card, so that further "
+             "communication is not possible.";
+    case mojom::SmartCardResponseCode::kUnresponsiveCard:
+      return "The smart card is not responding to a reset.";
+    case mojom::SmartCardResponseCode::kUnsupportedCard:
+      return "The reader cannot communicate with the card, due to ATR string "
+             "configuration conflicts.";
+    case mojom::SmartCardResponseCode::kUnsupportedFeature:
+      return "This smart card does not support the requested feature.";
+  }
+}
+
+V8SmartCardResponseCode::Enum MojomToV8ResponseCode(
+    mojom::SmartCardResponseCode mojom_response_code) {
+  switch (mojom_response_code) {
+    case mojom::SmartCardResponseCode::kNoService:
+      return V8SmartCardResponseCode::Enum::kNoService;
+    case mojom::SmartCardResponseCode::kNoSmartCard:
+      return V8SmartCardResponseCode::Enum::kNoSmartcard;
+    case mojom::SmartCardResponseCode::kNotReady:
+      return V8SmartCardResponseCode::Enum::kNotReady;
+    case mojom::SmartCardResponseCode::kNotTransacted:
+      return V8SmartCardResponseCode::Enum::kNotTransacted;
+    case mojom::SmartCardResponseCode::kProtoMismatch:
+      return V8SmartCardResponseCode::Enum::kProtoMismatch;
+    case mojom::SmartCardResponseCode::kReaderUnavailable:
+      return V8SmartCardResponseCode::Enum::kReaderUnavailable;
+    case mojom::SmartCardResponseCode::kRemovedCard:
+      return V8SmartCardResponseCode::Enum::kRemovedCard;
+    case mojom::SmartCardResponseCode::kResetCard:
+      return V8SmartCardResponseCode::Enum::kResetCard;
+    case mojom::SmartCardResponseCode::kSharingViolation:
+      return V8SmartCardResponseCode::Enum::kSharingViolation;
+    case mojom::SmartCardResponseCode::kSystemCancelled:
+      return V8SmartCardResponseCode::Enum::kSystemCancelled;
+    case mojom::SmartCardResponseCode::kUnpoweredCard:
+      return V8SmartCardResponseCode::Enum::kUnpoweredCard;
+    case mojom::SmartCardResponseCode::kUnresponsiveCard:
+      return V8SmartCardResponseCode::Enum::kUnresponsiveCard;
+    case mojom::SmartCardResponseCode::kUnsupportedCard:
+      return V8SmartCardResponseCode::Enum::kUnsupportedCard;
+    case mojom::SmartCardResponseCode::kUnsupportedFeature:
+      return V8SmartCardResponseCode::Enum::kUnsupportedFeature;
+  }
+}
+
+}  // namespace
 
 // static
 SmartCardError* SmartCardError::Create(String message,
@@ -16,9 +99,11 @@
                                               options->responseCode());
 }
 
-SmartCardError::SmartCardError(String message,
-                               V8SmartCardResponseCode::Enum value)
-    : SmartCardError(std::move(message), V8SmartCardResponseCode(value)) {}
+SmartCardError::SmartCardError(mojom::SmartCardResponseCode mojom_response_code)
+    : SmartCardError(
+          MojomResponseCodeToMessage(mojom_response_code),
+          V8SmartCardResponseCode(MojomToV8ResponseCode(mojom_response_code))) {
+}
 
 SmartCardError::SmartCardError(String message,
                                V8SmartCardResponseCode response_code)
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_error.h b/third_party/blink/renderer/modules/smart_card/smart_card_error.h
index d365f7b5..6444cab3 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_error.h
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_error.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SMART_CARD_SMART_CARD_ERROR_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_SMART_CARD_SMART_CARD_ERROR_H_
 
+#include "third_party/blink/public/mojom/smart_card/smart_card.mojom-shared.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_smart_card_response_code.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
@@ -21,7 +22,7 @@
   // Constructor exposed to script. Called by the V8 bindings.
   static SmartCardError* Create(String message, const SmartCardErrorOptions*);
 
-  SmartCardError(String message, V8SmartCardResponseCode::Enum);
+  explicit SmartCardError(mojom::SmartCardResponseCode mojom_response_code);
   SmartCardError(String message, V8SmartCardResponseCode);
   ~SmartCardError() override;
 
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc
index 7d2cd229..ce687ae 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc
@@ -9,6 +9,7 @@
 #include "third_party/blink/public/mojom/smart_card/smart_card.mojom-blink.h"
 #include "third_party/blink/renderer/core/execution_context/navigator_base.h"
 #include "third_party/blink/renderer/modules/event_target_modules.h"
+#include "third_party/blink/renderer/modules/smart_card/smart_card_error.h"
 #include "third_party/blink/renderer/modules/smart_card/smart_card_reader_presence_event.h"
 #include "third_party/blink/renderer/modules/smart_card/smart_card_reader_presence_observer.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
@@ -118,7 +119,8 @@
     return ScriptPromise();
   }
 
-  auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
+  auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(
+      script_state, exception_state.GetContext());
   get_readers_promises_.insert(resolver);
 
   EnsureServiceConnection();
@@ -156,12 +158,19 @@
 
 void SmartCardResourceManager::FinishGetReaders(
     ScriptPromiseResolver* resolver,
-    Vector<device::mojom::blink::SmartCardReaderInfoPtr> reader_infos) {
+    mojom::blink::SmartCardGetReadersResultPtr result) {
   DCHECK(get_readers_promises_.Contains(resolver));
   get_readers_promises_.erase(resolver);
 
+  if (result->is_response_code()) {
+    auto* error =
+        MakeGarbageCollected<SmartCardError>(result->get_response_code());
+    resolver->Reject(error);
+    return;
+  }
+
   HeapVector<Member<SmartCardReader>> readers;
-  for (auto& reader_info : reader_infos) {
+  for (auto& reader_info : result->get_readers()) {
     readers.push_back(GetOrCreateReader(std::move(reader_info)));
   }
 
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.h b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.h
index 84037844..63272c32 100644
--- a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.h
+++ b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.h
@@ -63,7 +63,8 @@
   void EnsureServiceConnection();
   void CloseServiceConnection();
 
-  void FinishGetReaders(ScriptPromiseResolver*, Vector<SmartCardReaderInfoPtr>);
+  void FinishGetReaders(ScriptPromiseResolver*,
+                        mojom::blink::SmartCardGetReadersResultPtr);
 
   void OnManagerClientRegistered(bool supports_reader_presence_observer);
   void ResolveWatchForReadersPromise(ScriptPromiseResolver* resolver);
diff --git a/third_party/blink/renderer/modules/storage/storage_namespace.h b/third_party/blink/renderer/modules/storage/storage_namespace.h
index 6fd63053..3c8d5a5 100644
--- a/third_party/blink/renderer/modules/storage/storage_namespace.h
+++ b/third_party/blink/renderer/modules/storage/storage_namespace.h
@@ -26,6 +26,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_STORAGE_NAMESPACE_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_STORAGE_NAMESPACE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/common/dom_storage/session_storage_namespace_id.h"
 #include "third_party/blink/public/mojom/dom_storage/dom_storage.mojom-blink-forward.h"
diff --git a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
index 661b0cea..4b2abe4 100644
--- a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
+++ b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
@@ -26,6 +26,7 @@
 #include "third_party/blink/renderer/modules/webaudio/async_audio_decoder.h"
 
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.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/core/typed_arrays/dom_array_buffer.h"
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_handler.h b/third_party/blink/renderer/modules/webaudio/audio_worklet_handler.h
index c2285f9..844803c 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_worklet_handler.h
+++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_handler.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_audio_worklet_node_options.h"
 #include "third_party/blink/renderer/modules/webaudio/audio_node.h"
 #include "third_party/blink/renderer/modules/webaudio/audio_param_map.h"
diff --git a/third_party/blink/renderer/modules/webaudio/deferred_task_handler.cc b/third_party/blink/renderer/modules/webaudio/deferred_task_handler.cc
index 441be22..fa1de8f 100644
--- a/third_party/blink/renderer/modules/webaudio/deferred_task_handler.cc
+++ b/third_party/blink/renderer/modules/webaudio/deferred_task_handler.cc
@@ -25,6 +25,7 @@
 
 #include "third_party/blink/renderer/modules/webaudio/deferred_task_handler.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/modules/webaudio/audio_node.h"
 #include "third_party/blink/renderer/modules/webaudio/audio_node_output.h"
diff --git a/third_party/blink/renderer/modules/webaudio/offline_audio_destination_handler.h b/third_party/blink/renderer/modules/webaudio/offline_audio_destination_handler.h
index 24fd138..88fb292b8 100644
--- a/third_party/blink/renderer/modules/webaudio/offline_audio_destination_handler.h
+++ b/third_party/blink/renderer/modules/webaudio/offline_audio_destination_handler.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/modules/webaudio/audio_buffer.h"
 #include "third_party/blink/renderer/modules/webaudio/audio_destination_node.h"
 #include "third_party/blink/renderer/modules/webaudio/offline_audio_context.h"
diff --git a/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.h b/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.h
index 3cd935eb..e32019e3 100644
--- a/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.h
+++ b/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.h
@@ -9,6 +9,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/web_audio_latency_hint.h"
 #include "third_party/blink/public/platform/web_audio_sink_descriptor.h"
 #include "third_party/blink/renderer/modules/webaudio/audio_destination_node.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/background_readback.cc b/third_party/blink/renderer/modules/webcodecs/background_readback.cc
index d3d12ee..77d22d9 100644
--- a/third_party/blink/renderer/modules/webcodecs/background_readback.cc
+++ b/third_party/blink/renderer/modules/webcodecs/background_readback.cc
@@ -7,7 +7,6 @@
 #include "base/feature_list.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/task/task_traits.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_event.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/background_readback.h b/third_party/blink/renderer/modules/webcodecs/background_readback.h
index 36c453b..4524a9c 100644
--- a/third_party/blink/renderer/modules/webcodecs/background_readback.h
+++ b/third_party/blink/renderer/modules/webcodecs/background_readback.h
@@ -9,6 +9,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/types/pass_key.h"
 #include "media/base/video_frame.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/codec_pressure_gauge_test.cc b/third_party/blink/renderer/modules/webcodecs/codec_pressure_gauge_test.cc
index 1e6222c..08d490a 100644
--- a/third_party/blink/renderer/modules/webcodecs/codec_pressure_gauge_test.cc
+++ b/third_party/blink/renderer/modules/webcodecs/codec_pressure_gauge_test.cc
@@ -6,7 +6,6 @@
 
 #include "base/test/bind.h"
 #include "base/test/mock_callback.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.cc b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.cc
index 6410b19d..2cc124c4 100644
--- a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.cc
+++ b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.cc
@@ -4,7 +4,7 @@
 
 #include "third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.h"
 
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "third_party/blink/renderer/modules/webcodecs/codec_pressure_gauge.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.h b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.h
index 544d613b..fff6b85 100644
--- a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.h
+++ b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_CODEC_PRESSURE_MANAGER_H_
 
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/webcodecs/codec_pressure_gauge.h"
 #include "third_party/blink/renderer/modules/webcodecs/reclaimable_codec.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.cc b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.cc
index ec7ea37e..83c19fad 100644
--- a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.cc
+++ b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/modules/webcodecs/codec_pressure_manager.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.h b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.h
index ca265e91..e7f8742f 100644
--- a/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.h
+++ b/third_party/blink/renderer/modules/webcodecs/codec_pressure_manager_provider.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_CODEC_PRESSURE_MANAGER_PROVIDER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_CODEC_PRESSURE_MANAGER_PROVIDER_H_
 
+#include "base/task/sequenced_task_runner.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/garbage_collected.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/decoder_selector.cc b/third_party/blink/renderer/modules/webcodecs/decoder_selector.cc
index 3bb95f3..794dffd4 100644
--- a/third_party/blink/renderer/modules/webcodecs/decoder_selector.cc
+++ b/third_party/blink/renderer/modules/webcodecs/decoder_selector.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/check_op.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "media/base/channel_layout.h"
 #include "media/base/demuxer_stream.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/decoder_selector.h b/third_party/blink/renderer/modules/webcodecs/decoder_selector.h
index 582ce85..60533fbc 100644
--- a/third_party/blink/renderer/modules/webcodecs/decoder_selector.h
+++ b/third_party/blink/renderer/modules/webcodecs/decoder_selector.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/demuxer_stream.h"
 #include "media/base/media_util.h"
 #include "media/filters/decoder_selector.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/image_decoder_external.h b/third_party/blink/renderer/modules/webcodecs/image_decoder_external.h
index d524435..f3e3e9f6 100644
--- a/third_party/blink/renderer/modules/webcodecs/image_decoder_external.h
+++ b/third_party/blink/renderer/modules/webcodecs/image_decoder_external.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_property.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/video_decoder_broker.cc b/third_party/blink/renderer/modules/webcodecs/video_decoder_broker.cc
index 3e74052..6f1a2b57 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_decoder_broker.cc
+++ b/third_party/blink/renderer/modules/webcodecs/video_decoder_broker.cc
@@ -9,6 +9,7 @@
 #include <string>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/buildflag.h"
 #include "media/base/decoder_factory.h"
 #include "media/base/decoder_status.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc b/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc
index ac933c8..29c1c9f9 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc
+++ b/third_party/blink/renderer/modules/webcodecs/video_decoder_broker_test.cc
@@ -33,6 +33,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/modules/webcodecs/video_decoder_broker.h"
 using ::testing::_;
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
index 464b7d7d..d16b1b7 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
+++ b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/clamped_math.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_event.h"
 #include "components/viz/common/gpu/raster_context_provider.h"
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame_monitor.h b/third_party/blink/renderer/modules/webcodecs/video_frame_monitor.h
index 9151834..2e1887f 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_frame_monitor.h
+++ b/third_party/blink/renderer/modules/webcodecs/video_frame_monitor.h
@@ -12,6 +12,7 @@
 #include "media/base/video_frame.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
 #include "third_party/blink/renderer/platform/wtf/hash_traits.h"
 
@@ -129,7 +130,8 @@
   // key: ID of the source of the frames.
   // value: References to frames associated to that source.
   // Using std::map because HashMap does not directly support std::string.
-  using SourceMap = std::map<std::string, FrameMap>;
+  using SourceMap ALLOW_DISCOURAGED_TYPE("TODO(crbug.com/1404327)") =
+      std::map<std::string, FrameMap>;
 
   base::Lock lock_;
   // Contains all data for VideoFrameMonitor.
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame_monitor_test.cc b/third_party/blink/renderer/modules/webcodecs/video_frame_monitor_test.cc
index f327273..56e99117 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_frame_monitor_test.cc
+++ b/third_party/blink/renderer/modules/webcodecs/video_frame_monitor_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/run_loop.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h"
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 077c8045..ececfd4c 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
@@ -32,6 +32,7 @@
 #include "base/feature_list.h"
 #include "base/numerics/checked_math.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
diff --git a/third_party/blink/renderer/modules/webgl/webgl_webcodecs_video_frame.h b/third_party/blink/renderer/modules/webgl/webgl_webcodecs_video_frame.h
index 0a0e8e5b..407d4da 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_webcodecs_video_frame.h
+++ b/third_party/blink/renderer/modules/webgl/webgl_webcodecs_video_frame.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBGL_WEBGL_WEBCODECS_VIDEO_FRAME_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "media/base/video_frame.h"
 #include "third_party/blink/renderer/modules/webcodecs/video_frame.h"
 #include "third_party/blink/renderer/modules/webgl/webgl_extension.h"
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_external_texture.h b/third_party/blink/renderer/modules/webgpu/gpu_external_texture.h
index a6865f88..7adbd77 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_external_texture.h
+++ b/third_party/blink/renderer/modules/webgpu/gpu_external_texture.h
@@ -7,6 +7,7 @@
 
 #include <atomic>
 
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/video_frame.h"
 #include "third_party/blink/renderer/modules/webgpu/dawn_object.h"
 #include "third_party/blink/renderer/platform/wtf/ref_counted.h"
diff --git a/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc b/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc
index f83e299..042965e 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc
+++ b/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
diff --git a/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.cc b/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.cc
index 612351a..d792707 100644
--- a/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.cc
+++ b/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.cc
@@ -12,6 +12,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/ranges/algorithm.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "build/build_config.h"
 #include "media/audio/audio_sink_parameters.h"
diff --git a/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.h b/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.h
index 6fe4e68..45b0541d 100644
--- a/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.h
+++ b/third_party/blink/renderer/modules/webrtc/webrtc_audio_renderer.h
@@ -29,6 +29,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/platform/modules/mediastream/web_media_stream_audio_renderer.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/allow_discouraged_type.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h"
 #include "third_party/blink/renderer/platform/timer.h"
 #include "third_party/blink/renderer/platform/webrtc/webrtc_source.h"
@@ -248,7 +249,7 @@
   // Maps an audio source to a list of playing states that collectively hold
   // volume information for that source.
   typedef std::map<webrtc::AudioSourceInterface*, PlayingStates>
-      SourcePlayingStates;
+      SourcePlayingStates ALLOW_DISCOURAGED_TYPE("TODO(crbug.com/1404327");
 
   // Used to DCHECK that we are called on the correct thread.
   THREAD_CHECKER(thread_checker_);
diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
index bbaa818c..d5162d6 100644
--- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
+++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
@@ -41,6 +41,7 @@
 #include "base/feature_list.h"
 #include "base/location.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/types/strong_alias.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/websockets/websocket_connector.mojom-blink.h"
diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.h b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.h
index 4684eb04..c62a353 100644
--- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.h
+++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.h
@@ -39,6 +39,7 @@
 #include "base/containers/span.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/system/simple_watcher.h"
diff --git a/third_party/blink/renderer/modules/websockets/websocket_message_chunk_accumulator.cc b/third_party/blink/renderer/modules/websockets/websocket_message_chunk_accumulator.cc
index 497ab257..99ddd22 100644
--- a/third_party/blink/renderer/modules/websockets/websocket_message_chunk_accumulator.cc
+++ b/third_party/blink/renderer/modules/websockets/websocket_message_chunk_accumulator.cc
@@ -7,6 +7,7 @@
 #include <string.h>
 #include <algorithm>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/tick_clock.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
index 02e206c..4a45907 100644
--- a/third_party/blink/renderer/platform/BUILD.gn
+++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -158,15 +158,6 @@
     "//third_party/blink/renderer:config",
     "//third_party/blink/renderer:inside_blink",
   ]
-  cflags = []
-  if (is_clang && clang_use_chrome_plugins) {
-    cflags += [
-      "-Xclang",
-      "-plugin-arg-find-bad-constructs",
-      "-Xclang",
-      "check-blink-data-member-type",
-    ]
-  }
 }
 
 # Deps and configs required to include platform headers. Applied to all
diff --git a/third_party/blink/renderer/platform/audio/audio_destination.cc b/third_party/blink/renderer/platform/audio/audio_destination.cc
index 2523346..1d499f2 100644
--- a/third_party/blink/renderer/platform/audio/audio_destination.cc
+++ b/third_party/blink/renderer/platform/audio/audio_destination.cc
@@ -34,6 +34,7 @@
 
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/audio_bus.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string_manager.h b/third_party/blink/renderer/platform/bindings/parkable_string_manager.h
index 306dff9..5560044 100644
--- a/third_party/blink/renderer/platform/bindings/parkable_string_manager.h
+++ b/third_party/blink/renderer/platform/bindings/parkable_string_manager.h
@@ -11,6 +11,7 @@
 #include "base/feature_list.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "third_party/blink/renderer/platform/bindings/parkable_string.h"
diff --git a/third_party/blink/renderer/platform/disk_data_allocator_test_utils.h b/third_party/blink/renderer/platform/disk_data_allocator_test_utils.h
index baaef4f..0ccfa99 100644
--- a/third_party/blink/renderer/platform/disk_data_allocator_test_utils.h
+++ b/third_party/blink/renderer/platform/disk_data_allocator_test_utils.h
@@ -11,10 +11,10 @@
 #include <cstdint>
 #include <cstring>
 #include <map>
-#include <vector>
 
 #include "base/synchronization/lock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace blink {
 
@@ -22,9 +22,7 @@
  public:
   constexpr static size_t kMaxSize = 1 << 20;
 
-  InMemoryDataAllocator() : max_offset_(0), data_(kMaxSize) {
-    set_may_write_for_testing(true);
-  }
+  InMemoryDataAllocator() : data_(kMaxSize) { set_may_write_for_testing(true); }
   ~InMemoryDataAllocator() override = default;
 
   std::map<int64_t, size_t> FreeChunks() {
@@ -58,8 +56,8 @@
   }
 
  private:
-  int64_t max_offset_;
-  std::vector<char> data_;
+  int64_t max_offset_ = 0;
+  Vector<char> data_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/exported/mediastream/web_platform_media_stream_source.cc b/third_party/blink/renderer/platform/exported/mediastream/web_platform_media_stream_source.cc
index be69e8c..2cc3a9a 100644
--- a/third_party/blink/renderer/platform/exported/mediastream/web_platform_media_stream_source.cc
+++ b/third_party/blink/renderer/platform/exported/mediastream/web_platform_media_stream_source.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/exported/platform.cc b/third_party/blink/renderer/platform/exported/platform.cc
index 5bbab48..c8d72af 100644
--- a/third_party/blink/renderer/platform/exported/platform.cc
+++ b/third_party/blink/renderer/platform/exported/platform.cc
@@ -33,6 +33,7 @@
 #include <memory>
 
 #include "base/allocator/partition_allocator/memory_reclaimer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/memory_dump_manager.h"
diff --git a/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc b/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc
index 7eca28bb..7b92a6f 100644
--- a/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc
+++ b/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/fonts/font_matching_metrics.h"
 
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/metrics/public/cpp/metrics_utils.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
diff --git a/third_party/blink/renderer/platform/fonts/font_matching_metrics.h b/third_party/blink/renderer/platform/fonts/font_matching_metrics.h
index b0e4121..d62d899 100644
--- a/third_party/blink/renderer/platform/fonts/font_matching_metrics.h
+++ b/third_party/blink/renderer/platform/fonts/font_matching_metrics.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_FONT_MATCHING_METRICS_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_FONT_MATCHING_METRICS_H_
 
+#include "base/task/single_thread_task_runner.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/public/common/privacy_budget/identifiable_token_builder.h"
diff --git a/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc b/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc
index 2106ea3d..614331a 100644
--- a/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc
+++ b/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "components/viz/common/resources/release_callback.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "gpu/GLES2/gl2extchromium.h"
diff --git a/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image_test.cc b/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image_test.cc
index 237ffb3..4e130a0 100644
--- a/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image_test.cc
+++ b/third_party/blink/renderer/platform/graphics/accelerated_static_bitmap_image_test.cc
@@ -83,7 +83,7 @@
 
   cc::PaintImage stored_image = bitmap->PaintImageForCurrentFrame();
   auto stored_image2 = bitmap->PaintImageForCurrentFrame();
-  EXPECT_EQ(stored_image, stored_image2);
+  EXPECT_TRUE(stored_image.IsSameForTesting(stored_image2));
 }
 
 TEST_F(AcceleratedStaticBitmapImageTest, CopyToTextureSynchronization) {
diff --git a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc
index b77c7ba..645768f 100644
--- a/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc
+++ b/third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.cc
@@ -10,6 +10,7 @@
 #include "base/callback_helpers.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "base/timer/elapsed_timer.h"
diff --git a/third_party/blink/renderer/platform/graphics/begin_frame_provider.h b/third_party/blink/renderer/platform/graphics/begin_frame_provider.h
index 5b3cc06..4670cc1c 100644
--- a/third_party/blink/renderer/platform/graphics/begin_frame_provider.h
+++ b/third_party/blink/renderer/platform/graphics/begin_frame_provider.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/power_scheduler/power_mode_voter.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc
index 4b3d56b..49f009e 100644
--- a/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc
+++ b/third_party/blink/renderer/platform/graphics/bitmap_image_test.cc
@@ -354,7 +354,7 @@
   ASSERT_EQ(image_->SetData(partial_buffer, false), Image::kSizeAvailable);
   auto image1 = image_->PaintImageForCurrentFrame();
   auto image2 = image_->PaintImageForCurrentFrame();
-  EXPECT_EQ(image1, image2);
+  EXPECT_TRUE(image1.IsSameForTesting(image2));
   auto sk_image1 = image1.GetSwSkImage();
   auto sk_image2 = image2.GetSwSkImage();
   EXPECT_EQ(sk_image1->uniqueID(), sk_image2->uniqueID());
@@ -407,7 +407,7 @@
   // But the PaintImage should be the same.
   auto paint_image1 = default_image1->PaintImageForCurrentFrame();
   auto paint_image2 = default_image2->PaintImageForCurrentFrame();
-  EXPECT_EQ(paint_image1, paint_image2);
+  EXPECT_TRUE(paint_image1.IsSameForTesting(paint_image2));
   EXPECT_EQ(paint_image1.GetSwSkImage()->uniqueID(),
             paint_image2.GetSwSkImage()->uniqueID());
 }
diff --git a/third_party/blink/renderer/platform/graphics/box_reflection.h b/third_party/blink/renderer/platform/graphics/box_reflection.h
index 6deb297..39650b08 100644
--- a/third_party/blink/renderer/platform/graphics/box_reflection.h
+++ b/third_party/blink/renderer/platform/graphics/box_reflection.h
@@ -65,7 +65,9 @@
 
 inline bool operator==(const BoxReflection& a, const BoxReflection& b) {
   return a.Direction() == b.Direction() && a.Offset() == b.Offset() &&
-         a.Mask() == b.Mask() && a.MaskBounds() == b.MaskBounds();
+         // False negatives are allowed, but not false positives.
+         a.Mask().empty() && b.Mask().empty() &&
+         a.MaskBounds() == b.MaskBounds();
 }
 
 inline bool operator!=(const BoxReflection& a, const BoxReflection& b) {
diff --git a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc
index 0fcb0f5..0442563f 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge_test.cc
@@ -34,6 +34,7 @@
 #include "build/build_config.h"
 #include "cc/layers/texture_layer.h"
 #include "cc/paint/paint_flags.h"
+#include "cc/test/paint_image_matchers.h"
 #include "cc/test/skia_common.h"
 #include "cc/test/stub_decode_cache.h"
 #include "components/viz/common/resources/release_callback.h"
@@ -68,6 +69,10 @@
 
 #include <memory>
 
+namespace blink {
+
+namespace {
+
 using testing::_;
 using testing::AnyNumber;
 using testing::AtLeast;
@@ -77,10 +82,6 @@
 using testing::SetArgPointee;
 using testing::Test;
 
-namespace blink {
-
-namespace {
-
 class ImageTrackingDecodeCache : public cc::StubDecodeCache {
  public:
   ImageTrackingDecodeCache() = default;
@@ -833,7 +834,7 @@
       SkCanvas::kFast_SrcRectConstraint);
   bridge->NewImageSnapshot();
 
-  EXPECT_EQ(image_decode_cache_.decoded_images(), images);
+  EXPECT_THAT(image_decode_cache_.decoded_images(), cc::ImagesAreSame(images));
 }
 
 TEST_F(Canvas2DLayerBridgeTest, EnsureCCImageCacheUseWithColorConversion) {
@@ -857,7 +858,7 @@
       SkCanvas::kFast_SrcRectConstraint);
   bridge->NewImageSnapshot();
 
-  EXPECT_EQ(image_decode_cache_.decoded_images(), images);
+  EXPECT_THAT(image_decode_cache_.decoded_images(), cc::ImagesAreSame(images));
 }
 
 TEST_F(Canvas2DLayerBridgeTest, ImagesLockedUntilCacheLimit) {
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.h b/third_party/blink/renderer/platform/graphics/canvas_resource.h
index 8a74aa78..58f17cc 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource.h
@@ -7,6 +7,7 @@
 #include "base/memory/shared_memory_mapping.h"
 #include "base/memory/weak_ptr.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/viz/common/resources/release_callback.h"
 #include "components/viz/common/resources/shared_bitmap.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
index 2e2c12f35..a4a8e42 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/read_only_shared_memory_region.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/paint/paint_flags.h"
 #include "components/power_scheduler/power_mode_voter.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
diff --git a/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc b/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc
index 86fa626..9c743f1f95 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/graphics/gpu/dawn_control_client_holder.h"
 
 #include "base/check.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.h"
 #include "third_party/blink/renderer/platform/scheduler/public/event_loop.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
diff --git a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc
index 6012f7f30..d84e82f 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context_test.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/null_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "components/viz/test/test_gles2_interface.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
 #include "gpu/command_buffer/common/capabilities.h"
diff --git a/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc b/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc
index 81fcfdf7..25815ee9 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc
@@ -6,6 +6,7 @@
 
 #include "base/containers/adapters.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
diff --git a/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.h b/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.h
index 741f16d1..a2e32c5 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.h
+++ b/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.h
@@ -5,8 +5,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_GPU_WEBGPU_RESOURCE_PROVIDER_CACHE_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_GPU_WEBGPU_RESOURCE_PROVIDER_CACHE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "gpu/command_buffer/client/webgpu_interface.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/wtf/deque.h"
diff --git a/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.cc b/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.cc
index 47e36580..2715da38e 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h"
 
 #include "base/logging.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "device/vr/public/mojom/vr_service.mojom-blink.h"
diff --git a/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h b/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h
index c58dbc9..87be643f 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h
+++ b/third_party/blink/renderer/platform/graphics/gpu/xr_frame_transport.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_GPU_XR_FRAME_TRANSPORT_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_GPU_XR_FRAME_TRANSPORT_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "device/vr/public/mojom/vr_service.mojom-blink.h"
 #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h"
diff --git a/third_party/blink/renderer/platform/graphics/mailbox_ref.cc b/third_party/blink/renderer/platform/graphics/mailbox_ref.cc
index 23cd968..5ea00c3 100644
--- a/third_party/blink/renderer/platform/graphics/mailbox_ref.cc
+++ b/third_party/blink/renderer/platform/graphics/mailbox_ref.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/graphics/mailbox_ref.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/command_buffer/client/raster_interface.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h"
diff --git a/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc b/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc
index 189b2194..b2b11d70 100644
--- a/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/drawing_display_item.cc
@@ -68,17 +68,24 @@
 
   auto bounds = VisualRect();
   const auto& other_bounds = other.VisualRect();
-  if (bounds != other_bounds)
+  if (bounds != other_bounds) {
     return false;
+  }
 
   const auto& record = GetPaintRecord();
   const auto& other_record = other.GetPaintRecord();
-  if (record == other_record) {
+  if (record.empty() && other_record.empty()) {
+    return true;
+  }
+  if (record.buffer().next_op_offset() ==
+          other_record.buffer().next_op_offset() &&
+      memcmp(&record.GetFirstOp(), &other_record.GetFirstOp(),
+             record.buffer().next_op_offset()) == 0) {
     return true;
   }
 
-  // Sometimes the client may produce different records for the same visual
-  // result, which should be treated as equal.
+  // BY checking equality of bitmaps, different records for the same visual
+  // result are also treated as equal.
   return BitmapsEqual(record, other_record, bounds);
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc
index 2fad54e9..b7680302 100644
--- a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc
+++ b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc
@@ -9,6 +9,7 @@
 #include "base/barrier_closure.h"
 #include "base/callback_helpers.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/graphics/paint/paint_record.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
diff --git a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc
index dd84d90..840c30d 100644
--- a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/paint/paint_worklet_job.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/blink/renderer/platform/graphics/parkable_image.cc b/third_party/blink/renderer/platform/graphics/parkable_image.cc
index 4dea44a..7ce7f7c7 100644
--- a/third_party/blink/renderer/platform/graphics/parkable_image.cc
+++ b/third_party/blink/renderer/platform/graphics/parkable_image.cc
@@ -10,6 +10,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
diff --git a/third_party/blink/renderer/platform/graphics/parkable_image_manager.h b/third_party/blink/renderer/platform/graphics/parkable_image_manager.h
index 4135cd3..9230356 100644
--- a/third_party/blink/renderer/platform/graphics/parkable_image_manager.h
+++ b/third_party/blink/renderer/platform/graphics/parkable_image_manager.h
@@ -8,6 +8,7 @@
 #include "base/feature_list.h"
 #include "base/no_destructor.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "third_party/blink/renderer/platform/disk_data_allocator.h"
 #include "third_party/blink/renderer/platform/graphics/parkable_image.h"
diff --git a/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h b/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h
index 8f17ab0..2066bedb 100644
--- a/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h
+++ b/third_party/blink/renderer/platform/graphics/test/mock_paint_canvas.h
@@ -50,12 +50,9 @@
                     SkClipOp op,
                     bool do_anti_alias,
                     cc::UsePaintCache use_paint_cache));
-  MOCK_CONST_METHOD0(getLocalClipBounds, SkRect());
   MOCK_CONST_METHOD1(getLocalClipBounds, bool(SkRect* bounds));
-  MOCK_CONST_METHOD0(getDeviceClipBounds, SkIRect());
   MOCK_CONST_METHOD1(getDeviceClipBounds, bool(SkIRect* bounds));
   MOCK_METHOD2(drawColor, void(SkColor4f color, SkBlendMode mode));
-  MOCK_METHOD1(clearInt, void(SkColor color));
   MOCK_METHOD1(clear, void(SkColor4f color));
   MOCK_METHOD5(drawLine,
                void(SkScalar x0,
@@ -120,9 +117,6 @@
                     const cc::PaintFlags& flags));
 
   MOCK_METHOD1(drawPicture, void(PaintRecord record));
-  MOCK_CONST_METHOD0(isClipEmpty, bool());
-  MOCK_CONST_METHOD0(isClipRect, bool());
-  MOCK_CONST_METHOD0(getTotalMatrix, SkMatrix());
   MOCK_CONST_METHOD0(getLocalToDevice, SkM44());
 
   MOCK_METHOD3(Annotate,
diff --git a/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.cc b/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.cc
index d98e2b8..f859f3e6 100644
--- a/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.cc
+++ b/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.h"
 
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/renderer/platform/heap/cross_thread_handle.h"
 #include "third_party/blink/renderer/platform/scheduler/public/main_thread.h"
diff --git a/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.h b/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.h
index ba6cf6d..8fcab24b 100644
--- a/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.h
+++ b/third_party/blink/renderer/platform/graphics/web_graphics_context_3d_provider_util.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_WEB_GRAPHICS_CONTEXT_3D_PROVIDER_UTIL_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_WEB_GRAPHICS_CONTEXT_3D_PROVIDER_UTIL_H_
 
+#include "base/task/single_thread_task_runner.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/platform/platform_export.h"
diff --git a/third_party/blink/renderer/platform/heap/blink_gc_memory_dump_provider.cc b/third_party/blink/renderer/platform/heap/blink_gc_memory_dump_provider.cc
index 48f0f0a3..7b9fc5573 100644
--- a/third_party/blink/renderer/platform/heap/blink_gc_memory_dump_provider.cc
+++ b/third_party/blink/renderer/platform/heap/blink_gc_memory_dump_provider.cc
@@ -11,6 +11,7 @@
 
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "third_party/blink/renderer/platform/heap/thread_state.h"
diff --git a/third_party/blink/renderer/platform/heap/test/cross_thread_handle_test.cc b/third_party/blink/renderer/platform/heap/test/cross_thread_handle_test.cc
index 1ffdecc6..632f914 100644
--- a/third_party/blink/renderer/platform/heap/test/cross_thread_handle_test.cc
+++ b/third_party/blink/renderer/platform/heap/test/cross_thread_handle_test.cc
@@ -4,6 +4,8 @@
 
 #include "third_party/blink/renderer/platform/heap/cross_thread_handle.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/platform/json/json_parser.cc b/third_party/blink/renderer/platform/json/json_parser.cc
index c94f2740..074a1ba 100644
--- a/third_party/blink/renderer/platform/json/json_parser.cc
+++ b/third_party/blink/renderer/platform/json/json_parser.cc
@@ -272,7 +272,7 @@
 template <typename CharType>
 Error SkipWhitespaceAndComments(Cursor<CharType>* cursor,
                                 const CharType* end,
-                                bool* has_comments) {
+                                JSONCommentState& comment_state) {
   while (cursor->pos < end) {
     CharType c = *(cursor->pos);
     if (c == '\n') {
@@ -281,8 +281,8 @@
       cursor->line_start = cursor->pos;
     } else if (c == ' ' || c == '\r' || c == '\t') {
       ++(cursor->pos);
-    } else if (c == '/') {
-      *has_comments = true;
+    } else if (c == '/' && comment_state != JSONCommentState::kDisallowed) {
+      comment_state = JSONCommentState::kAllowedAndPresent;
       Error error = SkipComment(cursor, end);
       if (error != Error::kNoError)
         return error;
@@ -298,8 +298,8 @@
                  const CharType* end,
                  Token* token,
                  Cursor<CharType>* token_start,
-                 bool* has_comments) {
-  Error error = SkipWhitespaceAndComments(cursor, end, has_comments);
+                 JSONCommentState& comment_state) {
+  Error error = SkipWhitespaceAndComments(cursor, end, comment_state);
   if (error != Error::kNoError)
     return error;
   *token_start = *cursor;
@@ -457,14 +457,14 @@
 Error BuildValue(Cursor<CharType>* cursor,
                  const CharType* end,
                  int max_depth,
-                 std::unique_ptr<JSONValue>* result,
-                 bool* has_comments) {
+                 JSONCommentState& comment_state,
+                 std::unique_ptr<JSONValue>* result) {
   if (max_depth == 0)
     return Error::kTooMuchNesting;
 
   Cursor<CharType> token_start;
   Token token;
-  Error error = ParseToken(cursor, end, &token, &token_start, has_comments);
+  Error error = ParseToken(cursor, end, &token, &token_start, comment_state);
   if (error != Error::kNoError)
     return error;
 
@@ -506,25 +506,25 @@
     case kArrayBegin: {
       auto array = std::make_unique<JSONArray>();
       Cursor<CharType> before_token = *cursor;
-      error = ParseToken(cursor, end, &token, &token_start, has_comments);
+      error = ParseToken(cursor, end, &token, &token_start, comment_state);
       if (error != Error::kNoError)
         return error;
       while (token != kArrayEnd) {
         *cursor = before_token;
         std::unique_ptr<JSONValue> array_node;
         error =
-            BuildValue(cursor, end, max_depth - 1, &array_node, has_comments);
+            BuildValue(cursor, end, max_depth - 1, comment_state, &array_node);
         if (error != Error::kNoError)
           return error;
         array->PushValue(std::move(array_node));
 
         // After a list value, we expect a comma or the end of the list.
-        error = ParseToken(cursor, end, &token, &token_start, has_comments);
+        error = ParseToken(cursor, end, &token, &token_start, comment_state);
         if (error != Error::kNoError)
           return error;
         if (token == kListSeparator) {
           before_token = *cursor;
-          error = ParseToken(cursor, end, &token, &token_start, has_comments);
+          error = ParseToken(cursor, end, &token, &token_start, comment_state);
           if (error != Error::kNoError)
             return error;
           if (token == kArrayEnd) {
@@ -546,7 +546,7 @@
     }
     case kObjectBegin: {
       auto object = std::make_unique<JSONObject>();
-      error = ParseToken(cursor, end, &token, &token_start, has_comments);
+      error = ParseToken(cursor, end, &token, &token_start, comment_state);
       if (error != Error::kNoError)
         return error;
       while (token != kObjectEnd) {
@@ -561,25 +561,25 @@
           return error;
         }
 
-        error = ParseToken(cursor, end, &token, &token_start, has_comments);
+        error = ParseToken(cursor, end, &token, &token_start, comment_state);
         if (token != kObjectPairSeparator) {
           *cursor = token_start;
           return Error::kUnexpectedToken;
         }
 
         std::unique_ptr<JSONValue> value;
-        error = BuildValue(cursor, end, max_depth - 1, &value, has_comments);
+        error = BuildValue(cursor, end, max_depth - 1, comment_state, &value);
         if (error != Error::kNoError)
           return error;
         object->SetValue(key, std::move(value));
 
         // After a key/value pair, we expect a comma or the end of the
         // object.
-        error = ParseToken(cursor, end, &token, &token_start, has_comments);
+        error = ParseToken(cursor, end, &token, &token_start, comment_state);
         if (error != Error::kNoError)
           return error;
         if (token == kListSeparator) {
-          error = ParseToken(cursor, end, &token, &token_start, has_comments);
+          error = ParseToken(cursor, end, &token, &token_start, comment_state);
           if (error != Error::kNoError)
             return error;
           if (token == kObjectEnd) {
@@ -606,22 +606,22 @@
       return Error::kUnexpectedToken;
   }
 
-  return SkipWhitespaceAndComments(cursor, end, has_comments);
+  return SkipWhitespaceAndComments(cursor, end, comment_state);
 }
 
 template <typename CharType>
 JSONParseError ParseJSONInternal(const CharType* start_ptr,
                                  unsigned length,
                                  int max_depth,
-                                 std::unique_ptr<JSONValue>* result,
-                                 bool* has_comments) {
+                                 JSONCommentState& comment_state,
+                                 std::unique_ptr<JSONValue>* result) {
   Cursor<CharType> cursor;
   cursor.pos = start_ptr;
   cursor.line = 0;
   cursor.line_start = start_ptr;
   const CharType* end = start_ptr + length;
   JSONParseError error;
-  error.type = BuildValue(&cursor, end, max_depth, result, has_comments);
+  error.type = BuildValue(&cursor, end, max_depth, comment_state, result);
   error.line = cursor.line;
   error.column = static_cast<int>(cursor.pos - cursor.line_start);
   if (error.type != Error::kNoError) {
@@ -636,15 +636,29 @@
 }  // anonymous namespace
 
 std::unique_ptr<JSONValue> ParseJSON(const String& json,
-                                     JSONParseError* opt_error,
-                                     bool* opt_has_comments) {
-  return ParseJSON(json, kMaxStackLimit, opt_error, opt_has_comments);
+                                     JSONParseError* opt_error) {
+  JSONCommentState comments = JSONCommentState::kDisallowed;
+  auto result = ParseJSON(json, comments, kMaxStackLimit, opt_error);
+  DCHECK_EQ(comments, JSONCommentState::kDisallowed);
+  return result;
+}
+
+std::unique_ptr<JSONValue> ParseJSONWithCommentsDeprecated(
+    const String& json,
+    JSONParseError* opt_error,
+    bool* opt_has_comments) {
+  JSONCommentState comment_state = JSONCommentState::kAllowedButAbsent;
+  auto result = ParseJSON(json, comment_state, kMaxStackLimit, opt_error);
+  if (opt_has_comments) {
+    *opt_has_comments = (comment_state == JSONCommentState::kAllowedAndPresent);
+  }
+  return result;
 }
 
 std::unique_ptr<JSONValue> ParseJSON(const String& json,
+                                     JSONCommentState& comment_state,
                                      int max_depth,
-                                     JSONParseError* opt_error,
-                                     bool* opt_has_comments) {
+                                     JSONParseError* opt_error) {
   if (max_depth < 0)
     max_depth = 0;
   if (max_depth > kMaxStackLimit)
@@ -652,7 +666,6 @@
 
   std::unique_ptr<JSONValue> result;
   JSONParseError error;
-  bool has_comments = false;
 
   if (json.empty()) {
     error.type = Error::kSyntaxError;
@@ -660,10 +673,10 @@
     error.column = 0;
   } else if (json.Is8Bit()) {
     error = ParseJSONInternal(json.Characters8(), json.length(), max_depth,
-                              &result, &has_comments);
+                              comment_state, &result);
   } else {
     error = ParseJSONInternal(json.Characters16(), json.length(), max_depth,
-                              &result, &has_comments);
+                              comment_state, &result);
   }
 
   if (opt_error) {
@@ -673,8 +686,6 @@
       error.message = FormatErrorMessage(error.type, error.line, error.column);
     *opt_error = error;
   }
-  if (opt_has_comments)
-    *opt_has_comments = has_comments;
   return result;
 }
 
diff --git a/third_party/blink/renderer/platform/json/json_parser.h b/third_party/blink/renderer/platform/json/json_parser.h
index bc0037e3..5fa5f03e 100644
--- a/third_party/blink/renderer/platform/json/json_parser.h
+++ b/third_party/blink/renderer/platform/json/json_parser.h
@@ -31,22 +31,35 @@
   String message;
 };
 
+enum class JSONCommentState {
+  kDisallowed = 0,
+  kAllowedButAbsent,
+  kAllowedAndPresent,
+};
+
 // Parses |json| string and returns a value it represents.
 // In case of parsing failure, returns nullptr.
 // Optional error struct may be passed in, which will contain
 // error details or |kNoError| if parsing succeeded.
-// Optional boolean |opt_has_comments| may be passed in, which will contain
-// whether |json| string contains comments.
 PLATFORM_EXPORT std::unique_ptr<JSONValue> ParseJSON(
     const String& json,
+    JSONParseError* opt_error = nullptr);
+
+// Do not introduce new uses of this function; JSON comments are not standard.
+//
+// If provided, |opt_has_comments| will indicate whether comments were found.
+PLATFORM_EXPORT std::unique_ptr<JSONValue> ParseJSONWithCommentsDeprecated(
+    const String& json,
     JSONParseError* opt_error = nullptr,
     bool* opt_has_comments = nullptr);
 
+// Exposed for testing.
 PLATFORM_EXPORT std::unique_ptr<JSONValue> ParseJSON(
     const String& json,
+    JSONCommentState& comment_state,
     int max_depth,
-    JSONParseError* opt_error = nullptr,
-    bool* opt_has_comments = nullptr);
+    JSONParseError* opt_error = nullptr);
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_JSON_JSON_PARSER_H_
diff --git a/third_party/blink/renderer/platform/json/json_parser_fuzzer.cc b/third_party/blink/renderer/platform/json/json_parser_fuzzer.cc
index 0a999405..c3be70e 100644
--- a/third_party/blink/renderer/platform/json/json_parser_fuzzer.cc
+++ b/third_party/blink/renderer/platform/json/json_parser_fuzzer.cc
@@ -13,6 +13,8 @@
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   static blink::BlinkFuzzerTestSupport test_support =
       blink::BlinkFuzzerTestSupport();
-  blink::ParseJSON(WTF::String(data, size), 500);
+  blink::JSONCommentState comment_state =
+      blink::JSONCommentState::kAllowedButAbsent;
+  blink::ParseJSON(WTF::String(data, size), comment_state, 500);
   return 0;
 }
diff --git a/third_party/blink/renderer/platform/json/json_parser_test.cc b/third_party/blink/renderer/platform/json/json_parser_test.cc
index 39bc078..5255565 100644
--- a/third_party/blink/renderer/platform/json/json_parser_test.cc
+++ b/third_party/blink/renderer/platform/json/json_parser_test.cc
@@ -20,20 +20,16 @@
   int int_val = 0;
 
   // Successful parsing returns kNoError.
-  root = ParseJSON("1", &error, &has_comments);
-  EXPECT_EQ(has_comments, false);
+  root = ParseJSON("1", &error);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONParseErrorType::kNoError, error.type);
-  root = ParseJSON("\"string\"", &error, &has_comments);
-  EXPECT_EQ(has_comments, false);
+  root = ParseJSON("\"string\"", &error);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONParseErrorType::kNoError, error.type);
-  root = ParseJSON("[]", &error, &has_comments);
-  EXPECT_EQ(has_comments, false);
+  root = ParseJSON("[]", &error);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONParseErrorType::kNoError, error.type);
-  root = ParseJSON("{}", &error, &has_comments);
-  EXPECT_EQ(has_comments, false);
+  root = ParseJSON("{}", &error);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONParseErrorType::kNoError, error.type);
 
@@ -62,37 +58,43 @@
   EXPECT_EQ(JSONValue::kTypeBoolean, root->GetType());
 
   // Embedded comment
-  root = ParseJSON("40 /*/", &error, &has_comments);
+  root = ParseJSONWithCommentsDeprecated("40 /*/", &error, &has_comments);
   EXPECT_EQ(has_comments, true);
-  // EXPECT_FALSE(root.get());
+  EXPECT_FALSE(root.get());
   EXPECT_EQ("Line: 1, column: 4, Syntax error.", error.message);
-  root = ParseJSON("/* comment */null", &error, &has_comments);
+  root = ParseJSONWithCommentsDeprecated("/* comment */null", &error,
+                                         &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONValue::kTypeNull, root->GetType());
-  root = ParseJSON("40 /* comment */", &error, &has_comments);
+  root = ParseJSONWithCommentsDeprecated("40 /* comment */", &error,
+                                         &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONValue::kTypeInteger, root->GetType());
   EXPECT_TRUE(root->AsInteger(&int_val));
   EXPECT_EQ(40, int_val);
-  root = ParseJSON("/**/ 40 /* multi-line\n comment */ // more comment", &error,
-                   &has_comments);
+  root = ParseJSONWithCommentsDeprecated(
+      "/**/ 40 /* multi-line\n comment */ // more comment", &error,
+      &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONValue::kTypeInteger, root->GetType());
   EXPECT_TRUE(root->AsInteger(&int_val));
   EXPECT_EQ(40, int_val);
-  root = ParseJSON("true // comment", &error, &has_comments);
+  root =
+      ParseJSONWithCommentsDeprecated("true // comment", &error, &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONValue::kTypeBoolean, root->GetType());
-  root = ParseJSON("/* comment */\"sample string\"", &error, &has_comments);
+  root = ParseJSONWithCommentsDeprecated("/* comment */\"sample string\"",
+                                         &error, &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   EXPECT_TRUE(root->AsString(&str_val));
   EXPECT_EQ("sample string", str_val);
-  root = ParseJSON("[1, /* comment, 2 ] */ \n 3]", &error, &has_comments);
+  root = ParseJSONWithCommentsDeprecated("[1, /* comment, 2 ] */ \n 3]", &error,
+                                         &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   JSONArray* list = JSONArray::Cast(root.get());
@@ -106,19 +108,21 @@
   ASSERT_TRUE(tmp_value);
   EXPECT_TRUE(tmp_value->AsInteger(&int_val));
   EXPECT_EQ(3, int_val);
-  root = ParseJSON("[1, /*a*/2, 3]", &error, &has_comments);
+  root =
+      ParseJSONWithCommentsDeprecated("[1, /*a*/2, 3]", &error, &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   list = JSONArray::Cast(root.get());
   ASSERT_TRUE(list);
   EXPECT_EQ(3u, list->size());
-  root = ParseJSON("/* comment **/42", &error, &has_comments);
+  root = ParseJSONWithCommentsDeprecated("/* comment **/42", &error,
+                                         &has_comments);
   EXPECT_EQ(has_comments, true);
   ASSERT_TRUE(root.get());
   EXPECT_EQ(JSONValue::kTypeInteger, root->GetType());
   EXPECT_TRUE(root->AsInteger(&int_val));
   EXPECT_EQ(42, int_val);
-  root = ParseJSON(
+  root = ParseJSONWithCommentsDeprecated(
       "/* comment **/\n"
       "// */ 43\n"
       "44",
@@ -129,6 +133,18 @@
   EXPECT_TRUE(root->AsInteger(&int_val));
   EXPECT_EQ(44, int_val);
 
+  // Comments are otherwise rejected.
+  root = ParseJSON("/* comment */null", &error);
+  EXPECT_FALSE(root.get());
+  EXPECT_EQ("Line: 1, column: 1, Syntax error.", error.message);
+  root = ParseJSON("40 /* comment */", &error);
+  EXPECT_FALSE(root.get());
+  EXPECT_EQ("Line: 1, column: 4, Unexpected data after root element.",
+            error.message);
+  root = ParseJSON("[1, /*a*/2, 3]", &error);
+  EXPECT_FALSE(root.get());
+  EXPECT_EQ("Line: 1, column: 5, Syntax error.", error.message);
+
   // Test number formats
   root = ParseJSON("43");
   ASSERT_TRUE(root.get());
@@ -662,6 +678,7 @@
 // cannot be extended past that maximum.
 TEST(JSONParserTest, LimitedDepth) {
   std::unique_ptr<JSONValue> root;
+  JSONCommentState comment_state = JSONCommentState::kDisallowed;
   JSONParseError error;
 
   // Test cases. Each pair is a JSON string, and the minimum depth required
@@ -679,22 +696,22 @@
     EXPECT_TRUE(root.get());
 
     // ... and should parse successfully at the minimum depth
-    root = ParseJSON(test_case.first, test_case.second);
+    root = ParseJSON(test_case.first, comment_state, test_case.second);
     EXPECT_TRUE(root.get());
 
     // ... but should fail to parse at a shallower depth.
-    root = ParseJSON(test_case.first, test_case.second - 1);
+    root = ParseJSON(test_case.first, comment_state, test_case.second - 1);
     EXPECT_FALSE(root.get());
   }
 
   // Test that everything fails to parse with depth 0
-  root = ParseJSON("", 0, &error);
+  root = ParseJSON("", comment_state, 0, &error);
   EXPECT_FALSE(root.get());
   EXPECT_EQ("Line: 1, column: 1, Syntax error.", error.message);
-  root = ParseJSON("", -1, &error);
+  root = ParseJSON("", comment_state, -1, &error);
   EXPECT_FALSE(root.get());
   EXPECT_EQ("Line: 1, column: 1, Syntax error.", error.message);
-  root = ParseJSON("true", 0, &error);
+  root = ParseJSON("true", comment_state, 0, &error);
   EXPECT_FALSE(root.get());
   EXPECT_EQ("Line: 1, column: 1, Too much nesting.", error.message);
 
@@ -707,7 +724,7 @@
     evil.Append(']');
   root = ParseJSON(evil.ToString());
   EXPECT_TRUE(root.get());
-  root = ParseJSON(evil.ToString(), 1000);
+  root = ParseJSON(evil.ToString(), comment_state, 1000);
   EXPECT_TRUE(root.get());
 
   // Test that the limit cannot be set higher than the constant maximum.
@@ -719,7 +736,7 @@
   root = ParseJSON(evil.ToString(), &error);
   EXPECT_FALSE(root.get());
   EXPECT_EQ("Line: 1, column: 1001, Too much nesting.", error.message);
-  root = ParseJSON(evil.ToString(), 1001, &error);
+  root = ParseJSON(evil.ToString(), comment_state, 1001, &error);
   EXPECT_FALSE(root.get());
   EXPECT_EQ("Line: 1, column: 1001, Too much nesting.", error.message);
 }
diff --git a/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.cc b/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.cc
index fd35793..16ff233 100644
--- a/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.cc
@@ -7,6 +7,7 @@
 #include "base/feature_list.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.h b/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.h
index 8bb372a..ad2e7f7 100644
--- a/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.h
+++ b/third_party/blink/renderer/platform/loader/fetch/buffering_bytes_consumer.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_BUFFERING_BYTES_CONSUMER_H_
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/types/pass_key.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_deque.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc
index 10636682..360c46eb 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.cc
@@ -37,23 +37,15 @@
 // static
 FetchParameters FetchParameters::CreateForTest(
     ResourceRequest resource_request) {
-  return FetchParameters(std::move(resource_request), nullptr);
+  return FetchParameters(std::move(resource_request),
+                         ResourceLoaderOptions(/*world=*/nullptr));
 }
 
 FetchParameters::FetchParameters(ResourceRequest resource_request,
-                                 scoped_refptr<const DOMWrapperWorld> world)
+                                 ResourceLoaderOptions options)
     : resource_request_(std::move(resource_request)),
       decoder_options_(TextResourceDecoderOptions::kPlainTextContent),
-      options_(std::move(world)),
-      speculative_preload_type_(SpeculativePreloadType::kNotSpeculative),
-      defer_(kNoDefer),
-      image_request_behavior_(ImageRequestBehavior::kNone) {}
-
-FetchParameters::FetchParameters(ResourceRequest resource_request,
-                                 const ResourceLoaderOptions& options)
-    : resource_request_(std::move(resource_request)),
-      decoder_options_(TextResourceDecoderOptions::kPlainTextContent),
-      options_(options),
+      options_(std::move(options)),
       speculative_preload_type_(SpeculativePreloadType::kNotSpeculative),
       defer_(kNoDefer),
       image_request_behavior_(ImageRequestBehavior::kNone) {}
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h
index 1e1f604..7fcbfa2 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h
@@ -42,7 +42,6 @@
 
 namespace blink {
 
-class DOMWrapperWorld;
 class SecurityOrigin;
 
 // A FetchParameters is a "parameter object" for
@@ -79,8 +78,7 @@
 
   static FetchParameters CreateForTest(ResourceRequest);
 
-  FetchParameters(ResourceRequest, scoped_refptr<const DOMWrapperWorld> world);
-  FetchParameters(ResourceRequest, const ResourceLoaderOptions&);
+  FetchParameters(ResourceRequest, ResourceLoaderOptions);
   FetchParameters(const FetchParameters&) = delete;
   FetchParameters& operator=(const FetchParameters&) = delete;
   FetchParameters(FetchParameters&&);
diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc b/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc
index e2469b7c..8122c12a 100644
--- a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc
@@ -27,6 +27,7 @@
 #include "base/auto_reset.h"
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/visitor.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h
index ce5bef7..6b7c4b8 100644
--- a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h
+++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h
@@ -26,6 +26,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_MEMORY_CACHE_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_MEMORY_CACHE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc b/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc
index 6191b9c8..0475fed 100644
--- a/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/raw_resource.cc
@@ -27,6 +27,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/raw_resource.h b/third_party/blink/renderer/platform/loader/fetch/raw_resource.h
index 05e23c9..b251a06 100644
--- a/third_party/blink/renderer/platform/loader/fetch/raw_resource.h
+++ b/third_party/blink/renderer/platform/loader/fetch/raw_resource.h
@@ -25,6 +25,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/blob/blob_data.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_client.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_client.cc b/third_party/blink/renderer/platform/loader/fetch/resource_client.cc
index 6538479..4414ec3 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_client.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_client.cc
@@ -25,6 +25,7 @@
 
 #include "third_party/blink/renderer/platform/loader/fetch/resource_client.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
index 94e0c35..f51fcc6b 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -37,6 +37,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/unguessable_token.h"
 #include "services/network/public/cpp/request_mode.h"
@@ -2504,7 +2505,10 @@
   // requests.
   ResourceRequest request;
   request.CopyHeadFrom(stale_resource->GetResourceRequest());
-  FetchParameters params(std::move(request), nullptr /* world */);
+  // TODO(https://crbug.com/1405800): investigate whether it's correct to use a
+  // null `world` in the ResourceLoaderOptions below.
+  FetchParameters params(std::move(request),
+                         ResourceLoaderOptions(/*world=*/nullptr));
   params.SetStaleRevalidation(true);
   params.MutableResourceRequest().SetSkipServiceWorker(true);
   // Stale revalidation resource requests should be very low regardless of
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc
index 19a45cf..763f16d 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc
@@ -32,6 +32,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "services/network/public/mojom/ip_address_space.mojom-blink.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
index 7f3e049..b7f6fd9 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -37,6 +37,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/unguessable_token.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/metrics/public/cpp/metrics_utils.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc
index 03ccccc..689898a 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/debug/stack_trace.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/base/big_buffer.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.cc
index 4ea4ed39b..9b373657 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.cc
@@ -51,6 +51,12 @@
 ResourceLoaderOptions& ResourceLoaderOptions::operator=(
     const ResourceLoaderOptions& other) = default;
 
+ResourceLoaderOptions::ResourceLoaderOptions(ResourceLoaderOptions&& other) =
+    default;
+
+ResourceLoaderOptions& ResourceLoaderOptions::operator=(
+    ResourceLoaderOptions&& other) = default;
+
 ResourceLoaderOptions::~ResourceLoaderOptions() = default;
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h b/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h
index 91af63f..92dcd51f 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h
@@ -79,6 +79,8 @@
   explicit ResourceLoaderOptions(scoped_refptr<const DOMWrapperWorld> world);
   ResourceLoaderOptions(const ResourceLoaderOptions& other);
   ResourceLoaderOptions& operator=(const ResourceLoaderOptions& other);
+  ResourceLoaderOptions(ResourceLoaderOptions&& other);
+  ResourceLoaderOptions& operator=(ResourceLoaderOptions&& other);
   ~ResourceLoaderOptions();
 
   FetchInitiatorInfo initiator_info;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc
index dd43068d..efddecc 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_test.cc
@@ -7,6 +7,7 @@
 #include <string>
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc
index 4397d63..fe3fd75e 100644
--- a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc
@@ -9,6 +9,7 @@
 
 #include "base/auto_reset.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "services/network/public/cpp/features.h"
 #include "third_party/blink/public/common/features.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc b/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc
index fda2c77..0e70330a 100644
--- a/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/response_body_loader_test.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <utility>
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "services/network/public/cpp/features.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc
index 64a03d9d..23b48dd 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc
@@ -8,9 +8,9 @@
 
 #include "base/bind.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "services/network/public/cpp/wrapper_shared_url_loader_factory.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/loader/loader_constants.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.h
index 84ed583..44809c4b 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.h
@@ -7,6 +7,7 @@
 
 #include "base/strings/string_piece.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc
index 145ac7e..bc560de 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <vector>
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
index 81b1cf2..6581caca 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
@@ -10,6 +10,8 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
+#include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/record_ontransfersizeupdate_utils.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc
index 89ddfde..d852b0e 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc
@@ -10,6 +10,7 @@
 #include "base/check_op.h"
 #include "base/memory/ptr_util.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "net/url_request/redirect_info.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc
index 99e13e3..0639e43 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.h"
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
index 0ed7f5d..8a1fa01 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
@@ -24,7 +24,6 @@
 #include "base/strings/string_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc b/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc
index 38da218a..1d07e83 100644
--- a/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc
+++ b/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/public/platform/internet_disconnected_web_url_loader.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/resource_load_info_notifier_wrapper.h"
diff --git a/third_party/blink/renderer/platform/loader/testing/test_loader_factory.h b/third_party/blink/renderer/platform/loader/testing/test_loader_factory.h
index 860a637..d84cad3 100644
--- a/third_party/blink/renderer/platform/loader/testing/test_loader_factory.h
+++ b/third_party/blink/renderer/platform/loader/testing/test_loader_factory.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include <utility>
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/public/platform/web_back_forward_cache_loader_helper.h"
diff --git a/third_party/blink/renderer/platform/loader/tracked_child_url_loader_factory_bundle.cc b/third_party/blink/renderer/platform/loader/tracked_child_url_loader_factory_bundle.cc
index 84c38fd6..1e13a2ef 100644
--- a/third_party/blink/renderer/platform/loader/tracked_child_url_loader_factory_bundle.cc
+++ b/third_party/blink/renderer/platform/loader/tracked_child_url_loader_factory_bundle.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/platform/wtf/wtf.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/media/cdm_session_adapter.cc b/third_party/blink/renderer/platform/media/cdm_session_adapter.cc
index d8e0d0f..58f6dae 100644
--- a/third_party/blink/renderer/platform/media/cdm_session_adapter.cc
+++ b/third_party/blink/renderer/platform/media/cdm_session_adapter.cc
@@ -12,7 +12,6 @@
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/cdm_factory.h"
 #include "media/base/cdm_key_information.h"
diff --git a/third_party/blink/renderer/platform/media/multi_buffer.cc b/third_party/blink/renderer/platform/media/multi_buffer.cc
index 5d5432e4..cd99c97 100644
--- a/third_party/blink/renderer/platform/media/multi_buffer.cc
+++ b/third_party/blink/renderer/platform/media/multi_buffer.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/platform/media/video_decode_stats_reporter.cc b/third_party/blink/renderer/platform/media/video_decode_stats_reporter.cc
index 4cce4fe5..26d67843 100644
--- a/third_party/blink/renderer/platform/media/video_decode_stats_reporter.cc
+++ b/third_party/blink/renderer/platform/media/video_decode_stats_reporter.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/capabilities/bucket_utility.h"
 #include "media/mojo/mojom/media_types.mojom.h"
 
diff --git a/third_party/blink/renderer/platform/media/video_frame_compositor.cc b/third_party/blink/renderer/platform/media/video_frame_compositor.cc
index 582b4c4..8a6882e9 100644
--- a/third_party/blink/renderer/platform/media/video_frame_compositor.cc
+++ b/third_party/blink/renderer/platform/media/video_frame_compositor.cc
@@ -10,6 +10,7 @@
 #include "base/callback_helpers.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
diff --git a/third_party/blink/renderer/platform/media/web_content_decryption_module_access_impl.h b/third_party/blink/renderer/platform/media/web_content_decryption_module_access_impl.h
index 3eedb1f..f581f71 100644
--- a/third_party/blink/renderer/platform/media/web_content_decryption_module_access_impl.h
+++ b/third_party/blink/renderer/platform/media/web_content_decryption_module_access_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "media/base/cdm_config.h"
 #include "third_party/blink/public/platform/web_content_decryption_module_access.h"
 #include "third_party/blink/public/platform/web_content_decryption_module_result.h"
diff --git a/third_party/blink/renderer/platform/media/web_media_player_builder.cc b/third_party/blink/renderer/platform/media/web_media_player_builder.cc
index 7499445b..c059828 100644
--- a/third_party/blink/renderer/platform/media/web_media_player_builder.cc
+++ b/third_party/blink/renderer/platform/media/web_media_player_builder.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "components/viz/common/gpu/raster_context_provider.h"
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc b/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc
index d53f75ef..b9d0cd0 100644
--- a/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc
+++ b/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc
@@ -11,7 +11,6 @@
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
diff --git a/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.cc b/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.cc
index bb72643..c2fe6bb 100644
--- a/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.cc
+++ b/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.cc
@@ -8,6 +8,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.h b/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.h
index 08024046..0467c5f 100644
--- a/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.h
+++ b/third_party/blink/renderer/platform/mediastream/webaudio_media_stream_source.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "media/base/audio_bus.h"
 #include "media/base/audio_push_fifo.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver.h b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver.h
index 9fd125f..bd579ec4 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver.h
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/gtest_prod_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver_set.h b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver_set.h
index 4f8bcc3..67ef716 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver_set.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver_set.h
@@ -9,6 +9,7 @@
 
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_receiver_set.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote.h b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote.h
index 0bbaf20..94ede9098 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote.h
@@ -7,6 +7,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote_set.h b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote_set.h
index cc0c72f..c0eadf9 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote_set.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote_set.h
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/gtest_prod_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h
index f36d73a7..fae1803 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_HEAP_MOJO_RECEIVER_H_
 
 #include "base/gtest_prod_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h
index ef5f8be5..c6c0dee 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_HEAP_MOJO_RECEIVER_SET_H_
 
 #include "base/gtest_prod_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h b/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h
index 95f1c59..fe6e648 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h
@@ -7,6 +7,7 @@
 
 #include <utility>
 
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h b/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h
index c52ad9a..c95e346c4 100644
--- a/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h
+++ b/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_HEAP_MOJO_UNIQUE_RECEIVER_SET_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_HEAP_MOJO_UNIQUE_RECEIVER_SET_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/unique_receiver_set.h"
 #include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
diff --git a/third_party/blink/renderer/platform/network/network_state_notifier.cc b/third_party/blink/renderer/platform/network/network_state_notifier.cc
index db94920..fef760a9 100644
--- a/third_party/blink/renderer/platform/network/network_state_notifier.cc
+++ b/third_party/blink/renderer/platform/network/network_state_notifier.cc
@@ -28,6 +28,7 @@
 #include <memory>
 
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "net/nqe/effective_connection_type.h"
 #include "net/nqe/network_quality_estimator_params.h"
 #include "services/network/public/cpp/client_hints.h"
diff --git a/third_party/blink/renderer/platform/network/network_state_notifier.h b/third_party/blink/renderer/platform/network/network_state_notifier.h
index 7159ec4..9bb47a2 100644
--- a/third_party/blink/renderer/platform/network/network_state_notifier.h
+++ b/third_party/blink/renderer/platform/network/network_state_notifier.h
@@ -42,6 +42,7 @@
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/blink/renderer/platform/wtf/threading_primitives.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
diff --git a/third_party/blink/renderer/platform/p2p/empty_network_manager.cc b/third_party/blink/renderer/platform/p2p/empty_network_manager.cc
index 3cf29961..bc6ab36f 100644
--- a/third_party/blink/renderer/platform/p2p/empty_network_manager.cc
+++ b/third_party/blink/renderer/platform/p2p/empty_network_manager.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/check_op.h"
 #include "base/location.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/peerconnection/low_precision_timer_test.cc b/third_party/blink/renderer/platform/peerconnection/low_precision_timer_test.cc
index dc02018..35a6ce6 100644
--- a/third_party/blink/renderer/platform/peerconnection/low_precision_timer_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/low_precision_timer_test.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/webrtc_overrides/low_precision_timer.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc b/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc
index a3d6f65..c9443afe 100644
--- a/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/metronome_source_test.cc
@@ -13,7 +13,6 @@
 #include "base/task/thread_pool.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_dtmf_sender_handler.cc b/third_party/blink/renderer/platform/peerconnection/rtc_dtmf_sender_handler.cc
index 4f70e54..940adc2 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_dtmf_sender_handler.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_dtmf_sender_handler.cc
@@ -6,6 +6,7 @@
 
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 
 #include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_stats.cc b/third_party/blink/renderer/platform/peerconnection/rtc_stats.cc
index bf3f671b0..5a4f4b8 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_stats.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_stats.cc
@@ -187,8 +187,10 @@
   return String::FromUTF8(stats_->type());
 }
 
-double RTCStats::Timestamp() const {
-  return stats_->timestamp_us() /
+double RTCStats::TimestampMs() const {
+  // The timestamp unit is milliseconds but we want decimal
+  // precision so we convert ourselves.
+  return stats_->timestamp().us() /
          static_cast<double>(base::Time::kMicrosecondsPerMillisecond);
 }
 
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_stats.h b/third_party/blink/renderer/platform/peerconnection/rtc_stats.h
index be30d226..e6b4204 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_stats.h
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_stats.h
@@ -81,7 +81,7 @@
 
   String Id() const;
   String GetType() const;
-  double Timestamp() const;
+  double TimestampMs() const;
 
   size_t MembersCount() const;
   std::unique_ptr<RTCStatsMember> GetMember(size_t i) const;
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter_test.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter_test.cc
index 1e31997..acf0f1ed 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter_test.cc
@@ -12,6 +12,7 @@
 #include "base/check.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/mock_callback.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.h b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.h
index 3c2bc1d..a02fff8 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.h
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_RTC_VIDEO_DECODER_FACTORY_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_RTC_VIDEO_DECODER_FACTORY_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/platform/peerconnection/gpu_codec_support_waiter.h"
 #include "third_party/webrtc/api/video_codecs/video_decoder_factory.h"
 #include "third_party/webrtc/modules/video_coding/include/video_codec_interface.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.h b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.h
index a129594..03b301a 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.h
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.h
@@ -14,6 +14,7 @@
 #include "base/metrics/single_sample_metrics.h"
 #include "base/sequence_checker.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/decoder_status.h"
 #include "media/base/media_switches.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter_test.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter_test.cc
index 7699e575..f327dda 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter_test.cc
@@ -13,6 +13,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/mock_callback.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
index 97742fa..fa4ce0b 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_test.cc
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/notreached.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc
index 908ab3d..498188f9 100644
--- a/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc
+++ b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc
@@ -6,6 +6,7 @@
 
 #include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/sequenced_task_runner.h"
 #include "build/build_config.h"
 #include "media/base/media_switches.h"
 #include "media/video/gpu_video_accelerator_factories.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/vsync_provider.cc b/third_party/blink/renderer/platform/peerconnection/vsync_provider.cc
index 8436e67..79728e72 100644
--- a/third_party/blink/renderer/platform/peerconnection/vsync_provider.cc
+++ b/third_party/blink/renderer/platform/peerconnection/vsync_provider.cc
@@ -7,6 +7,7 @@
 
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/platform/graphics/video_frame_sink_bundle.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/peerconnection/webrtc_audio_sink.cc b/third_party/blink/renderer/platform/peerconnection/webrtc_audio_sink.cc
index f5deb46..2f39ed9 100644
--- a/third_party/blink/renderer/platform/peerconnection/webrtc_audio_sink.cc
+++ b/third_party/blink/renderer/platform/peerconnection/webrtc_audio_sink.cc
@@ -12,6 +12,7 @@
 #include "base/location.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/audio_timestamp_helper.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index ea7059c..6736aac 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -873,6 +873,13 @@
       base_feature: "CssSelectorFragmentAnchor",
     },
     {
+      // Support for :nth-child(An + B of S).
+      //
+      // https://drafts.csswg.org/selectors-4/#the-nth-child-pseudo
+      name: "CSSSelectorNthChildComplexSelector",
+      status: "experimental"
+    },
+    {
       // Support for CSS ::spelling-error, ::grammar-error, and the
       // spelling-error and grammar-error values in text-decoration-line.
       //
diff --git a/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc b/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc
index af235fe9..87dbde5 100644
--- a/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/idle_helper.cc
@@ -10,6 +10,7 @@
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
 #include "base/task/sequence_manager/time_domain.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
diff --git a/third_party/blink/renderer/platform/scheduler/common/post_cancellable_task.cc b/third_party/blink/renderer/platform/scheduler/common/post_cancellable_task.cc
index c7758af..32e6b8d 100644
--- a/third_party/blink/renderer/platform/scheduler/common/post_cancellable_task.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/post_cancellable_task.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h"
 
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.cc b/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.cc
index a4929b3..5b4691e7 100644
--- a/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.cc
@@ -8,6 +8,7 @@
 
 #include "base/task/sequence_manager/sequence_manager_impl.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
diff --git a/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h b/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h
index e5a66fe..688206cc 100644
--- a/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h
+++ b/third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h
@@ -10,6 +10,7 @@
 #include "base/logging.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/simple_task_executor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/tick_clock.h"
 #include "third_party/blink/public/platform/task_type.h"
diff --git a/third_party/blink/renderer/platform/scheduler/common/simple_main_thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/common/simple_main_thread_scheduler.h
index 6c23de21b..9a52b120 100644
--- a/third_party/blink/renderer/platform/scheduler/common/simple_main_thread_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/common/simple_main_thread_scheduler.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h b/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h
index 875c992..d286bb94 100644
--- a/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h
+++ b/third_party/blink/renderer/platform/scheduler/common/thread_scheduler_base.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/platform/platform_export.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
 #include "third_party/blink/renderer/platform/scheduler/public/virtual_time_controller.h"
diff --git a/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc b/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc
index 684c0fe..c9db96e9 100644
--- a/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/task/common/lazy_now.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/test/sequence_manager_for_test.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/time/time.h"
diff --git a/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.cc b/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.cc
index 7565562..c257a3b1 100644
--- a/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.cc
@@ -1,6 +1,7 @@
 #include "third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.h"
 
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.h b/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.h
index 12fc65f8..07edd29 100644
--- a/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.h
+++ b/third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/common/web_resource_loading_task_runner_handle.cc b/third_party/blink/renderer/platform/scheduler/common/web_resource_loading_task_runner_handle.cc
index ced9281..d5a36772 100644
--- a/third_party/blink/renderer/platform/scheduler/common/web_resource_loading_task_runner_handle.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/web_resource_loading_task_runner_handle.cc
@@ -1,5 +1,6 @@
 #include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/common/unprioritized_resource_loading_task_runner_handle.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
index 8a5f880..7db1549 100644
--- a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
@@ -8,6 +8,7 @@
 
 #include "base/feature_list.h"
 #include "base/message_loop/message_pump_type.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "third_party/blink/public/common/input/web_input_event_attribution.h"
diff --git a/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
index 600ae14..eb38a13 100644
--- a/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h"
 
 #include "base/location.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc
index fcf3aa6..0968f0d 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/main_thread/agent_group_scheduler_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/deadline_task_runner.cc b/third_party/blink/renderer/platform/scheduler/main_thread/deadline_task_runner.cc
index ba8f29e1..519b196f 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/deadline_task_runner.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/deadline_task_runner.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/scheduler/main_thread/deadline_task_runner.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
index 14311476..6146468 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
@@ -13,6 +13,7 @@
 #include "base/task/common/lazy_now.h"
 #include "base/task/common/scoped_defer_task_posting.h"
 #include "base/task/common/task_annotator.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/power_scheduler/power_mode.h"
 #include "components/power_scheduler/power_mode_arbiter.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/idle_time_estimator_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/idle_time_estimator_unittest.cc
index 20921657..852e86c 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/idle_time_estimator_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/idle_time_estimator_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/task/sequence_manager/test/sequence_manager_for_test.h"
 #include "base/task/sequence_manager/test/test_task_queue.h"
 #include "base/task/sequence_manager/test/test_task_time_observer.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_impl.cc
index e3fdea27..bb80968 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/location.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.cc
index 064db76..435f68c 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.h
index a3eb8f650..82dafda 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
index f2c5064..fbab19e 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
@@ -22,6 +22,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/common/scoped_defer_task_posting.h"
 #include "base/task/common/task_annotator.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_event.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
index dec34d06..e1867d2d 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
@@ -19,8 +19,8 @@
 #include "base/synchronization/lock.h"
 #include "base/task/sequence_manager/task_queue.h"
 #include "base/task/sequence_manager/task_time_observer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_log.h"
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_unittest.cc
index 15b3909..4f550958 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_web_scheduling_task_queue_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_web_scheduling_task_queue_impl.cc
index 4d9689f7..8775fb4 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_web_scheduling_task_queue_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_web_scheduling_task_queue_impl.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_web_scheduling_task_queue_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager.cc b/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager.cc
index 81ce60ef..5f6b5da1 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager.cc
@@ -8,6 +8,7 @@
 #include "base/memory/memory_pressure_listener.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/rand_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "third_party/blink/public/common/features.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.cc
index 3d21f17..d901d49 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.cc
@@ -4,6 +4,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.h
index 80acdf9..0913d71 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.h"
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/web_agent_group_scheduler.cc b/third_party/blink/renderer/platform/scheduler/main_thread/web_agent_group_scheduler.cc
index 06f34bf8..76cd963 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/web_agent_group_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/web_agent_group_scheduler.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/public/agent_group_scheduler.h"
 
 namespace blink::scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.cc
index 036690f..e7a86813 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
 
 namespace blink::scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.h
index e1b89362..8e29659 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/widget_scheduler_impl.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/scheduler/public/widget_scheduler.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/public/main_thread.h b/third_party/blink/renderer/platform/scheduler/public/main_thread.h
index 71534f6..f6a6ac4 100644
--- a/third_party/blink/renderer/platform/scheduler/public/main_thread.h
+++ b/third_party/blink/renderer/platform/scheduler/public/main_thread.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_MAIN_THREAD_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_MAIN_THREAD_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h
index 732c388..54ccc006 100644
--- a/third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/public/main_thread_scheduler.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/input/web_input_event_attribution.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
diff --git a/third_party/blink/renderer/platform/scheduler/public/non_main_thread.h b/third_party/blink/renderer/platform/scheduler/public/non_main_thread.h
index f60ca81..0a9fba62 100644
--- a/third_party/blink/renderer/platform/scheduler/public/non_main_thread.h
+++ b/third_party/blink/renderer/platform/scheduler/public/non_main_thread.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_NON_MAIN_THREAD_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_NON_MAIN_THREAD_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/test/fake_agent_group_scheduler_scheduler.h b/third_party/blink/renderer/platform/scheduler/test/fake_agent_group_scheduler_scheduler.h
index f736f40..2b70d90 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fake_agent_group_scheduler_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/test/fake_agent_group_scheduler_scheduler.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_AGENT_GROUP_SCHEDULER_SCHEDULER_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_AGENT_GROUP_SCHEDULER_SCHEDULER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
 #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
diff --git a/third_party/blink/renderer/platform/scheduler/test/fake_frame_scheduler.h b/third_party/blink/renderer/platform/scheduler/test/fake_frame_scheduler.h
index f67bd28..0070ec7 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fake_frame_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/test/fake_frame_scheduler.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_FRAME_SCHEDULER_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_FRAME_SCHEDULER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.h"
 #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
diff --git a/third_party/blink/renderer/platform/scheduler/test/fake_widget_scheduler.h b/third_party/blink/renderer/platform/scheduler/test/fake_widget_scheduler.h
index e163da6f..139d8c8 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fake_widget_scheduler.h
+++ b/third_party/blink/renderer/platform/scheduler/test/fake_widget_scheduler.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_WIDGET_SCHEDULER_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_FAKE_WIDGET_SCHEDULER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/public/widget_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/test/fake_task_runner.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler_impl.cc
index b9911b0cb..07b53c4 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler_impl.cc
@@ -9,8 +9,8 @@
 
 #include "base/callback.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/scheduler/common/features.h"
 #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.cc
index 71366fc..a523cd5 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/platform.h"
 
 namespace blink::scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.h b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.h
index 5872283..07fc90b 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.h
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_base.h
@@ -7,6 +7,7 @@
 
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
 #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc
index 555c63d6..4fe0b237 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h
index 4d10f52..94673ea 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h
@@ -8,6 +8,7 @@
 #include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.cc
index b6bd6cc..94ae1124 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/platform/scheduler/common/blink_scheduler_single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool.h"
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h
index ffebcbd7..d2069986 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h
@@ -8,6 +8,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/task/common/lazy_now.h"
 #include "base/task/sequence_manager/task_queue_impl.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
diff --git a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_web_scheduling_task_queue_impl.cc b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_web_scheduling_task_queue_impl.cc
index ff24e75..8833a20b 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_web_scheduling_task_queue_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_web_scheduling_task_queue_impl.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_web_scheduling_task_queue_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl.cc
index 9ecbbb1..cdca1c5 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/platform/back_forward_cache_utils.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/cpu_time_budget_pool.h"
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl_unittest.cc
index b6c6962..b7fc2f76 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_impl_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequence_manager/test/sequence_manager_for_test.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/test/test_mock_time_task_runner.h"
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc
index f261962..ac4f8ba 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.cc
@@ -12,8 +12,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/task/sequence_manager/sequence_manager.h"
 #include "base/task/sequence_manager/task_queue.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/third_party/blink/renderer/platform/testing/noop_web_url_loader.h b/third_party/blink/renderer/platform/testing/noop_web_url_loader.h
index 874d2d0..9f2dda5 100644
--- a/third_party/blink/renderer/platform/testing/noop_web_url_loader.h
+++ b/third_party/blink/renderer/platform/testing/noop_web_url_loader.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_NOOP_WEB_URL_LOADER_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_NOOP_WEB_URL_LOADER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.cc b/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.cc
index de872c6..990064c 100644
--- a/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.cc
+++ b/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/wtf/wtf.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.h b/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.h
index 12210374..53797638 100644
--- a/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.h
+++ b/third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_SCOPED_SCHEDULER_OVERRIDER_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_SCOPED_SCHEDULER_OVERRIDER_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
 #include "third_party/blink/renderer/platform/testing/scoped_main_thread_overrider.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc b/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc
index 805e6bf3..ee0b5d8 100644
--- a/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc
+++ b/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/task/single_thread_task_runner.h"
 #include "net/cookies/site_for_cookies.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/blink/public/platform/resource_load_info_notifier_wrapper.h"
diff --git a/third_party/blink/renderer/platform/testing/weburl_loader_mock.h b/third_party/blink/renderer/platform/testing/weburl_loader_mock.h
index 2cf77016..077fb89 100644
--- a/third_party/blink/renderer/platform/testing/weburl_loader_mock.h
+++ b/third_party/blink/renderer/platform/testing/weburl_loader_mock.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/platform/web_url_error.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
diff --git a/third_party/blink/renderer/platform/timer.cc b/third_party/blink/renderer/platform/timer.cc
index 0b6bda43..85513279 100644
--- a/third_party/blink/renderer/platform/timer.cc
+++ b/third_party/blink/renderer/platform/timer.cc
@@ -28,6 +28,7 @@
 
 #include <algorithm>
 #include "base/task/delay_policy.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/tick_clock.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
diff --git a/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.cc b/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.cc
index ece357b..e4c19d8 100644
--- a/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.cc
+++ b/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.cc
@@ -9,6 +9,7 @@
 
 #include "base/check_op.h"
 #include "base/strings/stringprintf.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "media/base/audio_bus.h"
diff --git a/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.h b/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.h
index 2f493aba..c447522 100644
--- a/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.h
+++ b/third_party/blink/renderer/platform/webrtc/peer_connection_remote_audio_source.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/synchronization/lock.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_track.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
diff --git a/third_party/blink/renderer/platform/webrtc/track_observer.cc b/third_party/blink/renderer/platform/webrtc/track_observer.cc
index b60cd1e..5c8f0ee 100644
--- a/third_party/blink/renderer/platform/webrtc/track_observer.cc
+++ b/third_party/blink/renderer/platform/webrtc/track_observer.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/task/single_thread_task_runner.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
diff --git a/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc b/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc
index cfbf99c4..432a9d6 100644
--- a/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc
+++ b/third_party/blink/renderer/platform/widget/compositing/android_webview/synchronous_layer_tree_frame_sink.cc
@@ -13,7 +13,6 @@
 #include "base/location.h"
 #include "base/notreached.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "cc/trees/layer_tree_frame_sink_client.h"
 #include "components/power_scheduler/power_mode.h"
 #include "components/power_scheduler/power_mode_arbiter.h"
diff --git a/third_party/blink/renderer/platform/widget/compositing/categorized_worker_pool.cc b/third_party/blink/renderer/platform/widget/compositing/categorized_worker_pool.cc
index 9bb81f47..26f8c7e 100644
--- a/third_party/blink/renderer/platform/widget/compositing/categorized_worker_pool.cc
+++ b/third_party/blink/renderer/platform/widget/compositing/categorized_worker_pool.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/sequence_manager/task_time_observer.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/threading/platform_thread.h"
diff --git a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view_unittest.cc b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view_unittest.cc
index d5bfc3c..122af6f9 100644
--- a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view_unittest.cc
+++ b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "cc/test/fake_layer_tree_frame_sink.h"
diff --git a/third_party/blink/renderer/platform/widget/compositing/queue_report_time_swap_promise.cc b/third_party/blink/renderer/platform/widget/compositing/queue_report_time_swap_promise.cc
index fc186e9..85c6e5b 100644
--- a/third_party/blink/renderer/platform/widget/compositing/queue_report_time_swap_promise.cc
+++ b/third_party/blink/renderer/platform/widget/compositing/queue_report_time_swap_promise.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/widget/compositing/queue_report_time_swap_promise.h"
 
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 
diff --git a/third_party/blink/renderer/platform/widget/compositing/widget_compositor.cc b/third_party/blink/renderer/platform/widget/compositing/widget_compositor.cc
index d5df1fe9..6c09dc5 100644
--- a/third_party/blink/renderer/platform/widget/compositing/widget_compositor.cc
+++ b/third_party/blink/renderer/platform/widget/compositing/widget_compositor.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/widget/compositing/widget_compositor.h"
 
 #include "base/callback_helpers.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/trees/layer_tree_host.h"
 #include "third_party/blink/renderer/platform/widget/compositing/queue_report_time_swap_promise.h"
 #include "third_party/blink/renderer/platform/widget/widget_base.h"
diff --git a/third_party/blink/renderer/platform/widget/compositing/widget_compositor.h b/third_party/blink/renderer/platform/widget/compositing/widget_compositor.h
index c226e9c..6e919800 100644
--- a/third_party/blink/renderer/platform/widget/compositing/widget_compositor.h
+++ b/third_party/blink/renderer/platform/widget/compositing/widget_compositor.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_WIDGET_COMPOSITING_WIDGET_COMPOSITOR_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WIDGET_COMPOSITING_WIDGET_COMPOSITOR_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/mojom/widget/platform_widget.mojom-blink.h"
diff --git a/third_party/blink/renderer/platform/widget/compositing/widget_compositor_unittest.cc b/third_party/blink/renderer/platform/widget/compositing/widget_compositor_unittest.cc
index 99412c1..eebcca3 100644
--- a/third_party/blink/renderer/platform/widget/compositing/widget_compositor_unittest.cc
+++ b/third_party/blink/renderer/platform/widget/compositing/widget_compositor_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <tuple>
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/task_environment.h"
 #include "cc/test/layer_tree_test.h"
 #include "cc/trees/layer_tree_host.h"
diff --git a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc
index c09540c..8b6e832 100644
--- a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc
+++ b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/check.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
index aa93ea121..b874b55 100644
--- a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
+++ b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
@@ -18,7 +18,6 @@
 #include "base/notreached.h"
 #include "base/profiler/sample_metadata.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
diff --git a/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc b/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc
index 6da7138a..ba57ab3 100644
--- a/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc
+++ b/third_party/blink/renderer/platform/widget/input/main_thread_event_queue.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/containers/circular_deque.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/metrics/event_metrics.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/input/web_coalesced_input_event.h"
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
index ca1e953b..24a74486 100644
--- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
+++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
@@ -12,6 +12,7 @@
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "cc/base/features.h"
 #include "cc/metrics/event_metrics.h"
diff --git a/third_party/blink/renderer/platform/widget/widget_base.h b/third_party/blink/renderer/platform/widget/widget_base.h
index 142f19fb..2f4a912 100644
--- a/third_party/blink/renderer/platform/widget/widget_base.h
+++ b/third_party/blink/renderer/platform/widget/widget_base.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_WIDGET_WIDGET_BASE_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WIDGET_WIDGET_BASE_H_
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "cc/animation/animation_timeline.h"
 #include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
diff --git a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
index bce5953f..28b6452 100644
--- a/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
+++ b/third_party/blink/renderer/platform/wtf/allocator/partitions.cc
@@ -43,6 +43,7 @@
 #include "base/feature_list.h"
 #include "base/no_destructor.h"
 #include "base/strings/safe_sprintf.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "build/build_config.h"
 #include "components/crash/core/common/crash_key.h"
diff --git a/third_party/blink/renderer/platform/wtf/allocator/partitions.h b/third_party/blink/renderer/platform/wtf/allocator/partitions.h
index 1a723f9..84bda7b 100644
--- a/third_party/blink/renderer/platform/wtf/allocator/partitions.h
+++ b/third_party/blink/renderer/platform/wtf/allocator/partitions.h
@@ -35,6 +35,7 @@
 #include "base/check.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/checked_math.h"
+#include "base/task/sequenced_task_runner.h"
 #include "third_party/blink/renderer/platform/wtf/wtf_export.h"
 
 namespace WTF {
diff --git a/third_party/blink/renderer/platform/wtf/sequence_bound.h b/third_party/blink/renderer/platform/wtf/sequence_bound.h
index 2214f68..ae1004c 100644
--- a/third_party/blink/renderer/platform/wtf/sequence_bound.h
+++ b/third_party/blink/renderer/platform/wtf/sequence_bound.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_SEQUENCE_BOUND_H_
 
 #include "base/bind.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/sequence_bound.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
diff --git a/third_party/blink/renderer/platform/wtf/vector.h b/third_party/blink/renderer/platform/wtf/vector.h
index 9fb9104f..dcce6ef 100644
--- a/third_party/blink/renderer/platform/wtf/vector.h
+++ b/third_party/blink/renderer/platform/wtf/vector.h
@@ -2288,7 +2288,7 @@
           typename U>
 wtf_size_t Erase(Vector<T, inline_capacity, Allocator>& v, const U& value) {
   auto it = std::remove(v.begin(), v.end(), value);
-  wtf_size_t removed = v.end() - it;
+  wtf_size_t removed = base::checked_cast<wtf_size_t>(v.end() - it);
   v.erase(it, v.end());
   return removed;
 }
@@ -2298,7 +2298,7 @@
           typename Pred>
 wtf_size_t EraseIf(Vector<T, inline_capacity, Allocator>& v, Pred pred) {
   auto it = std::remove_if(v.begin(), v.end(), pred);
-  wtf_size_t removed = v.end() - it;
+  wtf_size_t removed = base::checked_cast<wtf_size_t>(v.end() - it);
   v.erase(it, v.end());
   return removed;
 }
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index b35d372e..0a5559dc 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -649,10 +649,12 @@
             # STL containers such as std::string and std::vector are discouraged
             # but still needed for interop with blink/common. Note that other
             # STL types such as std::unique_ptr are encouraged.
+            # Discouraged usages for data members are checked in clang plugin.
             'std::.+',
 
             # Similarly, GURL is allowed to interoperate with blink/common and
             # other common code shared between browser and renderer.
+            # Discouraged usages for data members are checked in clang plugin.
             'GURL',
 
             # UI Cursor
@@ -727,11 +729,6 @@
         'disallowed': [
             ('base::Bind(|Once|Repeating)',
              'Use WTF::Bind or WTF::BindRepeating.'),
-            ('std::(deque|map|multimap|set|vector|unordered_set|unordered_map)',
-             'Use WTF containers like WTF::Deque, WTF::HashMap, WTF::HashSet or WTF::Vector instead of the banned std containers. '
-             'However, it is fine to use std containers at the boundary layer between Blink and Chromium. '
-             'If you are in this case, you can use --bypass-hooks option to avoid the presubmit check when uploading your CL.'
-             ),
             _DISALLOW_NON_BLINK_MOJOM,
         ],
         # These task runners are generally banned in blink to ensure
@@ -1053,9 +1050,6 @@
     {
         'paths': ['third_party/blink/renderer/core/inspector'],
         'allowed': [
-            # Devtools binary protocol uses std::vector<uint8_t> for serialized
-            # objects.
-            'std::vector',
             # [C]h[R]ome [D]ev[T]ools [P]rotocol implementation support library
             # (see third_party/inspector_protocol/crdtp).
             'crdtp::.+',
@@ -1214,8 +1208,6 @@
             # Required to initialize WebGraphicsContext3DVideoFramePool.
             'gpu::GpuMemoryBufferManager',
             'media::.+',
-            # Some media APIs require std::vector.
-            "std::vector",
         ]
     },
     {
@@ -1380,8 +1372,6 @@
         ],
         'allowed': [
             'gin::.+',
-            # gin::NamedPropertyInterceptor uses std::vector.
-            'std::vector',
         ],
     },
     {
@@ -1501,17 +1491,6 @@
     },
     {
         'paths': [
-            'third_party/blink/renderer/modules/accessibility',
-        ],
-        # These are necessary because BlinkAXTreeSource inherits from
-        # ui::AXTreeSource, which has these in its interface.
-        'allowed': [
-            'std::vector',
-            'std::set',
-        ],
-    },
-    {
-        'paths': [
             'third_party/blink/renderer/modules/animationworklet/',
         ],
         'allowed': [
@@ -1542,9 +1521,6 @@
             # //third_party/liburlpattern
             'liburlpattern::.+',
 
-            # The liburlpattern API requires using std::vector.
-            'std::vector',
-
             # Internal namespace used by url_pattern module.
             'url_pattern::.+',
         ],
diff --git a/third_party/blink/tools/blinkpy/tool/commands/update_metadata.py b/third_party/blink/tools/blinkpy/tool/commands/update_metadata.py
index d4bb4c0ea..291e24ca 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/update_metadata.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/update_metadata.py
@@ -5,6 +5,7 @@
 """Update WPT metadata from builder results."""
 
 from concurrent.futures import ThreadPoolExecutor
+import collections
 import contextlib
 import io
 import json
@@ -13,6 +14,7 @@
 import optparse
 import re
 from typing import (
+    ClassVar,
     Collection,
     Iterable,
     Iterator,
@@ -444,6 +446,11 @@
 
 
 class MetadataUpdater:
+    # When using wptreports from builds, only update expectations for tests
+    # that exhaust all retries. Unexpectedly passing tests and occasional
+    # flakes/timeouts will not cause an update.
+    min_results_for_update: ClassVar[int] = 4
+
     def __init__(
             self,
             test_files: TestFileMap,
@@ -517,13 +524,27 @@
         updater = metadata.ExpectedUpdater(self._test_files)
         test_ids = set()
         for report in reports:
-            for retry_report in map(json.loads, report):
-                test_ids.update(result['test']
-                                for result in retry_report['results']
-                                if 'test' in result)
-                updater.update_from_wptreport_log(retry_report)
+            report = self._merge_retry_reports(map(json.loads, report))
+            test_ids.update(result['test'] for result in report['results'])
+            updater.update_from_wptreport_log(report)
         return test_ids
 
+    def _merge_retry_reports(self, retry_reports):
+        report, results_by_test = {}, collections.defaultdict(list)
+        for retry_report in retry_reports:
+            run_info = report.get('run_info', retry_report['run_info'])
+            if run_info != retry_report['run_info']:
+                raise ValueError('run info values should be identical '
+                                 'across retries')
+            report.update(retry_report)
+            for result in retry_report['results']:
+                results_by_test[result['test']].append(result)
+        report['results'] = []
+        for test_id, results in results_by_test.items():
+            if len(results) >= self.min_results_for_update:
+                report['results'].extend(results)
+        return report
+
     def test_files_to_update(self) -> List[metadata.TestFileData]:
         test_files = {
             test_file
diff --git a/third_party/blink/tools/blinkpy/tool/commands/update_metadata_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/update_metadata_unittest.py
index 2827d0b..88fdf6de 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/update_metadata_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/update_metadata_unittest.py
@@ -31,6 +31,8 @@
     def setUp(self):
         super().setUp()
         self.maxDiff = None
+        # Lower this threshold so that test results do not need to be repeated.
+        MetadataUpdater.min_results_for_update = 1
 
         self.tool = MockBlinkTool()
         self.finder = path_finder.PathFinder(self.tool.filesystem)
@@ -686,6 +688,34 @@
               expected: [FAIL, CRASH]
             """)
 
+    def test_no_change_without_enough_results(self):
+        """The updater does not modify metadata without enough test results.
+
+        A single test run cannot surface flakiness, and therefore does not
+        suffice to update or remove existing expectations confidently. In
+        Chromium/Blink, a WPT test is not retried when it runs as expected or
+        unexpectedly passes. Unexpected passes should be removed separately
+        using long-term test history.
+        """
+        MetadataUpdater.min_results_for_update = 2
+        self.write_contents(
+            'external/wpt/fail.html.ini', """\
+            [fail.html]
+              expected: FAIL
+            """)
+        self.update({
+            'results': [{
+                'test': '/fail.html',
+                'status': 'PASS',
+                'expected': 'FAIL',
+            }],
+        })
+        self.assert_contents(
+            'external/wpt/fail.html.ini', """\
+            [fail.html]
+              expected: FAIL
+            """)
+
     def test_remove_stale_expectation(self):
         """The updater removes stale expectations by default."""
         self.write_contents(
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py
index 6e6f2f26..e8076fd 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py
@@ -1119,7 +1119,8 @@
                     line.test = new_file_name
                 self._test_expectations.add_expectations(
                     path, [line], lineno=line.lineno)
-            elif not root_file or not self.port.test_isfile(root_file):
+            elif not root_file or not self.host.filesystem.isfile(
+                    self.finder.path_from_web_tests(root_file)):
                 if not self.options.clean_up_affected_tests_only:
                     self._test_expectations.remove_expectations(path, [line])
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base.py b/third_party/blink/tools/blinkpy/web_tests/port/base.py
index a688462..a887be6 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/base.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/base.py
@@ -1005,6 +1005,12 @@
         """Find all real tests in paths, using results saved in dict."""
         files = []
         for path in paths:
+            # Some WPT files can expand to multiple tests, and the file itself
+            # is not a test so it is not in tests_by_dir. Do special handling
+            # when we found a WPT file in virtual bases.
+            if self.is_wpt_file(path):
+                files.extend(self._wpt_test_urls_matching_paths([path]))
+                continue
             if self._has_supported_extension_for_all(path):
                 # only append the file when it is in tests_by_dir
                 dirname = self._filesystem.dirname(path) + '/'
@@ -1108,6 +1114,13 @@
             WPTManifest.ensure_manifest(self, path)
         return WPTManifest(self.host, manifest_path)
 
+    def is_wpt_file(self, path):
+        """Returns whether a path is a WPT test file."""
+
+        if self.WPT_REGEX.match(path):
+            return self._filesystem.isfile(self.abspath_for_test(path))
+        return False
+
     def is_wpt_crash_test(self, test_name):
         """Returns whether a WPT test is a crashtest.
 
@@ -1279,10 +1292,12 @@
         return [tryint(chunk) for chunk in re.split(r'(\d+)', string_to_split)]
 
     def read_test(self, test_name, encoding="utf8"):
-        """Returns the contents of the given test according to the given encoding.
+        """Returns the contents of the given Non WPT test according to the given encoding.
         If no corresponding file can be found, returns None instead.
         Warning: some tests are in utf8-incompatible encodings.
         """
+        assert not self.WPT_REGEX.match(
+            test_name), "read_test only works with legacy layout test"
         path = self.abspath_for_test(test_name)
         if self._filesystem.isfile(path):
             return self._filesystem.read_binary_file(path).decode(encoding)
@@ -2302,6 +2317,10 @@
             for base in suite.bases:
                 if real_path.startswith(base) or base.startswith(real_path):
                     bases.add(base)
+                if (self.is_wpt_file(base) and base.endswith('.js')
+                        and real_path in self._wpt_test_urls_matching_paths(
+                            [base])):
+                    bases.add(base)
 
         return list(bases)
 
@@ -2333,6 +2352,11 @@
     def _virtual_tests_matching_paths(self, paths):
         tests = []
         normalized_paths = [self.normalize_test_name(p) for p in paths]
+        # Remove the 'js' suffix so that the startswith test can pass
+        modified_paths = [
+            p[:-2] if self.is_wpt_test(p) and p.endswith('.js') else p
+            for p in normalized_paths
+        ]
         for suite in self.virtual_test_suites():
             virtual_paths = [
                 p for p in normalized_paths if p.startswith(suite.full_prefix)
@@ -2341,7 +2365,7 @@
                 continue
             for test in self._virtual_tests_for_suite_with_paths(
                     suite, virtual_paths):
-                if any(test.startswith(p) for p in normalized_paths):
+                if any(test.startswith(p) for p in modified_paths):
                     tests.append(test)
 
         if any(self._path_has_wildcard(path) for path in paths):
@@ -2457,6 +2481,12 @@
             test_name[len(suite.full_prefix):])
         for base in suite.bases:
             normalized_base = self.normalize_test_name(base)
+            # Wpt js file can expand to multiple tests. Remove the "js"
+            # suffix so that the startswith test can pass. This could
+            # be inaccurate but is computationally cheap.
+            if (self.is_wpt_test(normalized_base)
+                    and normalized_base.endswith(".js")):
+                normalized_base = normalized_base[:-2]
             if normalized_base.startswith(maybe_base) or maybe_base.startswith(
                     normalized_base):
                 return maybe_base
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
index 2cdfd59..591d820 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
@@ -883,6 +883,12 @@
             sorted(port.tests(['virtual/virtual_wpt_dom/'])),
             dom_wpt + ['virtual/virtual_wpt_dom/wpt_internal/dom/bar.html'])
 
+        all_virtual_console = set([
+            'virtual/virtual_console/external/wpt/console/console-is-a-namespace.any.html',
+            'virtual/virtual_console/external/wpt/console/console-is-a-namespace.any.worker.html'
+        ])
+        self.assertLessEqual(all_virtual_console, set(port.tests()))
+
     def test_virtual_test_paths(self):
         port = self.make_port(with_tests=True)
         add_manifest_to_mock_filesystem(port)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/test.py b/third_party/blink/tools/blinkpy/web_tests/port/test.py
index 37c4df0d..29cbbaa 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/test.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/test.py
@@ -848,6 +848,11 @@
 
     def virtual_test_suites(self):
         return [
+            VirtualTestSuite(
+                prefix='virtual_console',
+                platforms=['Linux', 'Mac', 'Win'],
+                bases=['external/wpt/console/console-is-a-namespace.any.js'],
+                args=['--virtual-console']),
             VirtualTestSuite(prefix='virtual_passes',
                              platforms=['Linux', 'Mac', 'Win'],
                              bases=['passes', 'passes_two'],
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 0b0d2780e..64c2d5a 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1771,33 +1771,9 @@
 crbug.com/248894 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-justify.html [ Failure ]
 crbug.com/248894 external/wpt/web-animations/responsive/textIndent.html [ Failure ]
 
-
 # nth-* selectors
-crbug.com/304163 external/wpt/css/selectors/nth-child-and-nth-last-child.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-attribute.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-classname-002.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-classname.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-complex-selector.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-compound-selector.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-has.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-not.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-nth-child.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-tagname.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-of-universal-selector.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-specificity-1.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-specificity-2.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-specificity-3.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-child-specificity-4.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-of-classname.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-of-complex-selector.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-of-compound-selector.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-of-style-sharing-1.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-of-style-sharing-2.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-of-tagname.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-specificity-1.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-specificity-2.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-specificity-3.html [ Failure ]
-crbug.com/304163 external/wpt/css/selectors/nth-last-child-specificity-4.html [ Failure ]
+crbug.com/304163 external/wpt/css/selectors/nth-child-of-no-space-after-of.html [ Failure ]
+crbug.com/304163 external/wpt/css/selectors/nth-last-child-of-no-space-after-of.html [ Failure ]
 
 crbug.com/1377648 external/wpt/css/selectors/media/media-loading-state.html [ Skip Timeout ]
 crbug.com/1377648 external/wpt/css/selectors/media/media-playback-state.html [ Timeout ]
@@ -1867,7 +1843,7 @@
 # of the test is skipped in NeverFixTests. The VirtualTestSuite version must
 # explicitly be marked Pass in order to bypass the expected Skip of the default
 # version.
-crbug.com/1393294 virtual/webgl-oversized-printing/printing/webgl-oversized-printing.html [ Crash Pass Failure ]
+crbug.com/1393294 virtual/webgl-oversized-printing/printing/webgl-oversized-printing.html [ Crash Failure Pass ]
 
 crbug.com/904592 css3/filters/backdrop-filter-svg.html [ Failure ]
 crbug.com/904592 [ Linux ] virtual/scalefactor200/css3/filters/backdrop-filter-svg.html [ Pass ]
@@ -3030,44 +3006,11 @@
 crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
-crbug.com/626703 external/wpt/css/selectors/nth-child-of-no-space-after-of.html [ Failure ]
-crbug.com/626703 external/wpt/css/selectors/nth-last-child-of-no-space-after-of.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-block-001.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-block-002.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-block-end-001.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-block-end-002.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-block-start-001.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-block-start-002.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-replaced-block-end.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-replaced-block-start.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-replaced-block.html [ Failure ]
-crbug.com/626703 [ Win11 ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
-crbug.com/626703 [ Linux ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
-crbug.com/626703 [ Mac10.15 ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
-crbug.com/626703 [ Mac11 ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
-crbug.com/626703 [ Mac11-arm64 ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
-crbug.com/626703 [ Mac12 ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
-crbug.com/626703 [ Mac12-arm64 ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
-crbug.com/626703 [ Win10.20h2 ] external/wpt/html/semantics/forms/the-input-element/email-set-value.html [ Failure ]
 crbug.com/626703 external/wpt/webcodecs/videoFrame-serialization.crossAgentCluster.https.html [ Timeout ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-center.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-end.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-left.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-right.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-text/text-group-align/text-group-align-start.html [ Failure ]
-crbug.com/626703 [ Mac11-arm64 ] external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
-crbug.com/626703 [ Mac12-arm64 ] external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/density-size-correction/density-corrected-image-in-canvas.html [ Failure Timeout ]
 crbug.com/626703 [ Mac12-arm64 ] external/wpt/density-size-correction/density-corrected-image-in-canvas.html [ Failure Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] virtual/fenced-frame-mparch/wpt_internal/fenced_frame/background-sync.https.html [ Timeout ]
 crbug.com/626703 [ Mac12-arm64 ] virtual/fenced-frame-mparch/wpt_internal/fenced_frame/background-sync.https.html [ Timeout ]
-crbug.com/626703 [ Mac11-arm64 ] virtual/threaded/external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
-crbug.com/626703 [ Mac12-arm64 ] virtual/threaded/external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] wpt_internal/webxr/ar/iframe-oopif.sub.https.html [ Failure Timeout ]
 crbug.com/626703 [ Mac12-arm64 ] wpt_internal/webxr/ar/iframe-oopif.sub.https.html [ Failure Timeout ]
 crbug.com/626703 [ Mac12 ] external/wpt/html/cross-origin-opener-policy/resource-popup.https.html [ Timeout ]
@@ -3483,6 +3426,29 @@
 crbug.com/1223979 external/wpt/css/css-text/text-align/text-align-match-parent-05.html [ Failure ]
 crbug.com/1223979 external/wpt/css/css-text/word-spacing/word-spacing-001.html [ Failure ]
 
+# Implement text-group-align
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-center-vlr.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-center.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-end-vlr.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-end.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-left-vlr.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-left.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-right-vlr.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-right.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-start-vlr.html [ Failure ]
+crbug.com/1405830 external/wpt/css/css-text/text-group-align/text-group-align-start.html [ Failure ]
+
+# Implement margin-trim
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-block-001.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-block-002.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-block-end-001.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-block-end-002.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-block-start-001.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-block-start-002.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-replaced-block-end.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-replaced-block-start.html [ Failure ]
+crbug.com/1405835 external/wpt/css/css-box/margin-trim/block-container-replaced-block.html [ Failure ]
+
 crbug.com/481431 external/wpt/css/css-break/box-decoration-break-clone-001.html [ Failure ]
 crbug.com/481431 external/wpt/css/css-break/box-decoration-break-clone-002.html [ Failure ]
 crbug.com/481431 external/wpt/css/css-break/box-decoration-break-clone-004.html [ Failure ]
@@ -4440,6 +4406,10 @@
 crbug.com/1008483 external/wpt/css/css-transforms/backface-visibility-hidden-004.tentative.html [ Failure ]
 crbug.com/1008483 external/wpt/css/css-transforms/backface-visibility-hidden-005.tentative.html [ Failure ]
 crbug.com/1008483 external/wpt/css/css-transforms/backface-visibility-hidden-animated-002.html [ Failure ]
+crbug.com/1405829 [ Mac11-arm64 ] external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
+crbug.com/1405829 [ Mac12-arm64 ] external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
+crbug.com/1405829 [ Mac11-arm64 ] virtual/threaded/external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
+crbug.com/1405829 [ Mac12-arm64 ] virtual/threaded/external/wpt/css/css-transforms/animation/canvas-webgl-translate-in-animation.html [ Failure Timeout ]
 
 crbug.com/1008483 virtual/backface-visibility-interop/external/wpt/css/css-transforms/backface-visibility-hidden-004.tentative.html [ Pass ]
 crbug.com/1008483 virtual/backface-visibility-interop/external/wpt/css/css-transforms/backface-visibility-hidden-005.tentative.html [ Pass ]
@@ -6369,10 +6339,6 @@
 # Sheriff 2022-10-03
 crbug.com/1368767 wpt_internal/webmidi/requestmidiaccess-basic.https.html [ Failure Pass ]
 
-# TODO(crbug.com/1403318): Disable until further investigation.
-crbug.com/1394227 [ Linux ] external/wpt/element-timing/image-src-change.html [ Failure Pass Skip Timeout ]
-crbug.com/1394227 [ Mac ] external/wpt/element-timing/image-src-change.html [ Failure Pass Skip Timeout ]
-
 # These tests are optional and not reliably supported in Chrome.
 crbug.com/1370307 external/wpt/encoding-detection/ar-ISO-8859-6-late.tentative.html [ Failure Pass ]
 crbug.com/1370307 external/wpt/encoding-detection/ar-windows-1256-late.tentative.html [ Failure Pass ]
@@ -6714,7 +6680,6 @@
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/controls-page-zoom-out.html [ Failure Skip ]
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/doubletap-on-play-button.html [ Failure Skip ]
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/doubletap-to-toggle-fullscreen.html [ Failure Skip ]
-crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/immersive-doubletap.html [ Failure Skip ]
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/overflow-button-disabled-no-source.html [ Failure Skip ]
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/overflow-menu-always-visible.html [ Failure Skip ]
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/controls/overflow-menu-hide-on-click-item.html [ Failure Skip ]
@@ -6999,9 +6964,6 @@
 crbug.com/1400930 external/wpt/content-security-policy/embedded-enforcement/subsumption_algorithm-general.html [ Pass Timeout ]
 crbug.com/1399780 external/wpt/content-security-policy/embedded-enforcement/subsumption_algorithm-nonces.html [ Pass Timeout ]
 
-# TODO(crbug.com/1403318): Re-enable this test
-virtual/scalefactor200/external/wpt/element-timing/image-src-change.html [ Failure Skip ]
-
 # TODO(crbug.com/1403877): Deflake this test.
 virtual/portals/http/tests/devtools/portals/portals-elements-nesting.js [ Failure Pass ]
 
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 073e4ea6..4fc449ae0 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1414,14 +1414,6 @@
     ],
     "expires": "Jul 1, 2023"
   },
-  {
-    "prefix": "document-pip",
-    "platforms": ["Linux", "Mac", "Win"],
-    "bases": [],
-    "args": ["--enable-features=DocumentPictureInPictureAPI",
-             "--enable-blink-features=DocumentPictureInPictureAPI"],
-    "expires": "Jul 1, 2023"
-  },
 
   "Tests URL processing in IDNA 2008 Transitional Mode. Explicitly disables ",
   "the Non-Transitional Mode feature flag to do so.",
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index dcf4bde7..f5bc9373 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -239362,6 +239362,19 @@
        {}
       ]
      ],
+     "nth-child-of-complex-selector-many-children.html": [
+      "72f58cd93a0476cec88dad5c4b79cdc36f949437",
+      [
+       null,
+       [
+        [
+         "/css/selectors/nth-child-of-complex-selector-many-children-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "nth-child-of-complex-selector.html": [
       "b751d83de2228ccfe6ed25e53d80b34be76732b2",
       [
@@ -239402,12 +239415,12 @@
       ]
      ],
      "nth-child-of-no-space-after-of.html": [
-      "57ab3acbbb8c026c91e7f8fa5fa52c5464cffdeb",
+      "613593ce668db7a97220d08932dbd2281c2bca4d",
       [
        null,
        [
         [
-         "/css/selectors/nth-child-and-nth-last-child-ref.html",
+         "/css/selectors/nth-child-of-no-space-after-of-ref.html",
          "=="
         ]
        ],
@@ -239558,12 +239571,12 @@
       ]
      ],
      "nth-last-child-of-no-space-after-of.html": [
-      "2538a2efb71ad5ec22198d5e6ddcd86ab96c81ac",
+      "d79d5733a5c3986e0c3560420471a24dba313052",
       [
        null,
        [
         [
-         "/css/selectors/nth-child-and-nth-last-child-ref.html",
+         "/css/selectors/nth-child-of-no-space-after-of-ref.html",
          "=="
         ]
        ],
@@ -261554,16 +261567,6 @@
    }
   },
   "support": {
-   ".cache": {
-    "gitignore2.json": [
-     "343954430785a7a73834244daed00a29497db4b3",
-     []
-    ],
-    "mtime.json": [
-     "1fda2ecc648e71c18c718dcf986a2b48b3f17272",
-     []
-    ]
-   },
    ".gitignore": [
     "d93e645d547894b50149d3726de2654957b6e06f",
     []
@@ -261829,10 +261832,6 @@
      "e9ec6bf98544bbbf3bf03b0aca3ccbfdef063eb6",
      []
     ],
-    "bindings-inject-values-bypass-chain.html.ini": [
-     "321c5fd871101c24af92dc6ca1007ec604c8e8f2",
-     []
-    ],
     "database-names-by-origin.html.ini": [
      "21e89fe0a7caf86946c6fe5d345b6fb4b68defa9",
      []
@@ -261904,7 +261903,7 @@
      []
     ],
     "structured-clone.any.js.ini": [
-     "84a7a80b7b0e50c69c8a71563a83c4b181fcaad6",
+     "2760a198d8e929157f447a1d7bfe490419c85328",
      []
     ],
     "transaction-abort-generator-revert.html.ini": [
@@ -268280,7 +268279,7 @@
      []
     ],
     "cookieStore_set_arguments.https.any.js.ini": [
-     "03e6a9c65d6b287d6d336528088c47bf3e396205",
+     "b14ebae4e4faa8aa20b86ae3ed9c03fd49611a2a",
      []
     ],
     "resources": {
@@ -268573,7 +268572,7 @@
     },
     "samesite": {
      "form-post-blank-reload.https.html.ini": [
-      "474bdcb939113d28f9ec5d5eeedd78f0f3c471d7",
+      "88a8c05668de05637cc3c8d69e020dffe46a564c",
       []
      ],
      "form-post-blank.https.html.ini": [
@@ -268760,7 +268759,7 @@
      ]
     },
     "fedcm-network-requests.https.html.ini": [
-     "d272c84b67bc4561fd50bf58934390465d720f31",
+     "12ce602cecbfe3da3820b5c1b611c02d8f99e59f",
      []
     ],
     "federatedcredential-framed-get.sub.https-expected.txt": [
@@ -277591,7 +277590,7 @@
       []
      ],
      "Element-getAnimations-dynamic-changes.tentative.html.ini": [
-      "42b61d6f41cfdf580f6218af564a8fd3b594a116",
+      "cd79bce0007ca0a053223c57c0ae0e86b094c20e",
       []
      ],
      "KeyframeEffect-getKeyframes.tentative-expected.txt": [
@@ -283736,7 +283735,7 @@
        []
       ],
       "nested-query-containers.html.ini": [
-       "e92a5bb1a4fa7e9a60bb42f506d455adf8c71d9a",
+       "076a237cb6ed39fb8a51cd6b9ce67f6cbdab5f88",
        []
       ],
       "percentage-padding-orthogonal-expected.txt": [
@@ -288383,7 +288382,7 @@
       []
      ],
      "image-as-flexitem-size-003v.html.ini": [
-      "62147f62cd9adbafdd25dc2d11b84ede3083de68",
+      "8b88ef426223c96dab4f90eddff8d6dc7e7d1b5d",
       []
      ],
      "image-as-flexitem-size-004.html.ini": [
@@ -301694,7 +301693,7 @@
        []
       ],
       "Initial-letter-breaking-rtl.html.ini": [
-       "46ebc05b8e015794e21ad5efbbb278c2a1c4a978",
+       "9451204c3f8e54260349e0a2b1aaf03911bce7bd",
        []
       ],
       "Initial-letter-breaking-vlr-ref.html": [
@@ -301710,11 +301709,11 @@
        []
       ],
       "Initial-letter-breaking-vrl.html.ini": [
-       "5e2b2a74cc4d9e4f8705bcd7b03560faf6b02136",
+       "e5040afd3078b86080090466669e3b0db6411fad",
        []
       ],
       "Initial-letter-breaking.html.ini": [
-       "c538947bb95a3cb9f4aee1f6b45950e699c272dd",
+       "67a027dcd9150f66f7c2f3eea1e335ae78f371cc",
        []
       ],
       "initial-letter-block-position-drop-over-ruby-ref.html": [
@@ -301726,7 +301725,7 @@
        []
       ],
       "initial-letter-block-position-drop-over-ruby-tall.html.ini": [
-       "6c2775276ea718ec41d046d428e706a9d6b35dfa",
+       "c971ae336f29936e17db2f18d4d396216a7c1f69",
        []
       ],
       "initial-letter-block-position-drop-over-ruby.html.ini": [
@@ -301742,11 +301741,11 @@
        []
       ],
       "initial-letter-block-position-drop-under-ruby-tall.html.ini": [
-       "8a8fc7e35d6c2844ddcb99c6fb2a940718703711",
+       "38527a1d13f5fb3341c71066d7067a196d846034",
        []
       ],
       "initial-letter-block-position-drop-under-ruby.html.ini": [
-       "0cde71b8671f96fb1bf248107ba2b6ac54e7b44f",
+       "7357bcde9dde90a385361409acfd96ede1c811ef",
        []
       ],
       "initial-letter-block-position-margins-ref.html": [
@@ -301758,7 +301757,7 @@
        []
       ],
       "initial-letter-block-position-margins-rtl.html.ini": [
-       "4954d8f4a8db0b1d5b0d823b6afc0a867f54d895",
+       "59e19d6cc6bdf6b9f0ccad40c043f6fe13f248e2",
        []
       ],
       "initial-letter-block-position-margins-vlr-ref.html": [
@@ -301766,7 +301765,7 @@
        []
       ],
       "initial-letter-block-position-margins-vlr.html.ini": [
-       "7634056a1e6ca0245394199993d863525e382431",
+       "42eebbaaf54f98d3f17fa9d2bc36d703e934af17",
        []
       ],
       "initial-letter-block-position-margins-vrl-ref.html": [
@@ -301794,7 +301793,7 @@
        []
       ],
       "initial-letter-block-position-raise-over-ruby.html.ini": [
-       "222f169ade480a02df5c82b976fa48ae818f4d4e",
+       "d0e63cbe55940c116e42193bc820d14f37b81d4d",
        []
       ],
       "initial-letter-block-position-raise-under-ruby-ref.html": [
@@ -301806,11 +301805,11 @@
        []
       ],
       "initial-letter-block-position-raise-under-ruby-tall.html.ini": [
-       "9de6f5239f65c9b9304e7e3cde450b6955382295",
+       "60f3521d23121d823dd9aa9651134b35bc1ba7ef",
        []
       ],
       "initial-letter-block-position-raise-under-ruby.html.ini": [
-       "1136475e22104014fed3be82b9c07d8e27771af5",
+       "eede05d174440899bdc8f37125124321ef974f11",
        []
       ],
       "initial-letter-computed.html.ini": [
@@ -301826,7 +301825,7 @@
        []
       ],
       "initial-letter-drop-initial-rtl.html.ini": [
-       "87b705faac38dfa92828e92d52e4453959c7db5f",
+       "78b44088d937d10093ff2f6ee912ace65c88a3ee",
        []
       ],
       "initial-letter-drop-initial-vlr-ref.html": [
@@ -301846,7 +301845,7 @@
        []
       ],
       "initial-letter-drop-initial.html.ini": [
-       "497ccbc87b10a361c6b9e430069b7a98ab683bcf",
+       "bda49d3ccb569063ca848311b14c11d0f95c0743",
        []
       ],
       "initial-letter-float-001-ref.html": [
@@ -301858,7 +301857,7 @@
        []
       ],
       "initial-letter-float-001-rtl.html.ini": [
-       "d350ddf83f1e17d4136d8752eb9a1968572ec2f3",
+       "339ba097181503a01941c72029c50429997669b5",
        []
       ],
       "initial-letter-float-001-vlr-ref.html": [
@@ -301910,7 +301909,7 @@
        []
       ],
       "initial-letter-float-005.html.ini": [
-       "e71bd47b8463f6d2fc0774151440f4a915526894",
+       "3a202330395249fa458027618aae33361521910f",
        []
       ],
       "initial-letter-indentation-ref.html": [
@@ -301922,7 +301921,7 @@
        []
       ],
       "initial-letter-indentation-rtl.html.ini": [
-       "9cd2cdc3b127278f137aa55c1f97d78f9a2b21e8",
+       "495a53a6ef2d7a4f80602738e4b7058d62834041",
        []
       ],
       "initial-letter-indentation.html.ini": [
@@ -301982,7 +301981,7 @@
        []
       ],
       "initial-letter-raised-sunken-caps-sunken.html.ini": [
-       "0c64a2fddcfde3da4a10a9ed49a4be090dade4ea",
+       "b0631f923a6cf89fe35ed7628a5a15b4d75443bf",
        []
       ],
       "initial-letter-short-para-initial-letter-clears-ref.html": [
@@ -301998,7 +301997,7 @@
        []
       ],
       "initial-letter-short-para-initial-letter-wraps.html.ini": [
-       "322c6d7af1b0763dff3d28573395ad1007c14fee",
+       "f6b2dff151eef1ae4b8f6dcbd82438d80aed3abf",
        []
       ],
       "initial-letter-sunk-initial-ref.html": [
@@ -302026,7 +302025,7 @@
        []
       ],
       "initial-letter-sunk-initial-vrl.html.ini": [
-       "145423c11791d55ae88c994d027a2d62c7a4c7e1",
+       "77a501b58596bd661170dd5bd74ceaac0d7c228d",
        []
       ],
       "initial-letter-sunk-initial.html.ini": [
@@ -302042,7 +302041,7 @@
        []
       ],
       "initial-letter-with-first-line.html.ini": [
-       "56e94a8670efbccb3863be467419c218b0835400",
+       "7f69acbb5b8b735f2cc960f4832090c3f085738a",
        []
       ],
       "initial-letter-with-tab-ref.html": [
@@ -302058,7 +302057,7 @@
        []
       ],
       "initial-letter-with-tab.html.ini": [
-       "f5d901abf3445f2afae935465204fbd3edb613d1",
+       "50911265f400c0642670afd19b2c58a309ac2678",
        []
       ]
      },
@@ -302265,6 +302264,10 @@
       ]
      },
      "fallback-layout": {
+      "constructor-error.https.html.ini": [
+       "3ab53016c15110c81b40cdd928fc8f072afb021c",
+       []
+      ],
       "fallback-layout-fallback-ref.html": [
        "63bb91e90ca00f02d108f562ed857058df2443ca",
        []
@@ -303505,6 +303508,10 @@
        "c6de6191dbe6187ee9dc69ef78d1e6f3419bca37",
        []
       ],
+      "clip-path-reference-box-004.html.ini": [
+       "ff4cde4a1479d5c1703a5ca027c20046efe0934b",
+       []
+      ],
       "clip-path-rotated-will-change-transform-ref.html": [
        "ddbf0e9812cf432486f22a22cb2680343d5be298",
        []
@@ -304637,7 +304644,7 @@
       []
      ],
      "getclientrects-000.html.ini": [
-      "bd86605e287c9b4a3dfe74fac4e272ad55466e21",
+      "7dcf0d3a46bae8805415235e70dd9f01a80e94c5",
       []
      ],
      "hit-test-transformed-child.html.ini": [
@@ -306527,7 +306534,7 @@
       []
      ],
      "scrollable-overflow-input-001.html.ini": [
-      "6351a3d300d23195dab2184d6186ddabe934b9f4",
+      "0fd1d59cb6c19d9b4b5345ed50e850ffaa5eafd8",
       []
      ],
      "scrollable-overflow-input-002-ref.html": [
@@ -307127,7 +307134,7 @@
       []
      ],
      "parse-input-arguments-018.https.html.ini": [
-      "9ce8bf5d92b5e91556c07be7df9253535d6e68f5",
+      "22442cac7c4522c7439015e699e2f7ceeaa8aff9",
       []
      ],
      "parse-input-arguments-019.https.html.ini": [
@@ -317287,10 +317294,6 @@
        "83483d77631ebaa0a77a19d292f9ff840793b675",
        []
       ],
-      "text-transform-capitalize-003.html.ini": [
-       "38e66a2dc4a6c69a3dd79df3f84abe55bd072294",
-       []
-      ],
       "text-transform-capitalize-005.html.ini": [
        "c06d2b0fcf72d84e5512352f5f74279544c73498",
        []
@@ -317307,6 +317310,10 @@
        "f0b7504e565abdf6d671ad61ed287bc662140cf7",
        []
       ],
+      "text-transform-capitalize-016.html.ini": [
+       "869d3178e27f1539e32ecd49339a5d6b2db5956f",
+       []
+      ],
       "text-transform-capitalize-018.html.ini": [
        "87e51404e16bbebfa59694f95dfaa34426e0f4b4",
        []
@@ -331377,7 +331384,7 @@
       []
      ],
      "scroll-behavior-main-frame-root.html.ini": [
-      "d5fe958db40f7f781b73cd31f82757a981f171da",
+      "be6a3ebdb03f8aa3ae33812a7098cd8f286c5fd5",
       []
      ],
      "scroll-behavior-scrollintoview-nested.html.ini": [
@@ -333182,6 +333189,10 @@
       "0c90c1838deb62c46840c9786d2052f9b290cbcf",
       []
      ],
+     "nth-child-of-complex-selector-many-children-ref.html": [
+      "031f3f1785019cb73fe25dd739a36a5a248d0b8a",
+      []
+     ],
      "nth-child-of-complex-selector-ref.html": [
       "ba38f685c64c1200173eec9094ead353d7a1742b",
       []
@@ -333893,7 +333904,7 @@
       []
      ],
      "ElementInternals-target-element-is-held-strongly.html.ini": [
-      "5b9453dd9a3d2a8c803f0b5fe89945e2ee94ea3d",
+      "0ff46fe1bff3fb5458c21dda904bb4b5a46bdfb2",
       []
      ],
      "ElementInternals-validation-expected.txt": [
@@ -335558,6 +335569,10 @@
       "0e746ed6c443ce99a3290661fc44474be6e236a8",
       []
      ],
+     "Range-mutations-dataChange.html.ini": [
+      "c1f1d46ce54df403fe78ec637233281dbb7e2fef",
+      []
+     ],
      "Range-mutations-deleteData.html.ini": [
       "8a4d2feb07a10de291aaf74a7996c09fef195942",
       []
@@ -335566,10 +335581,6 @@
       "68d21f87b4c182cc3cf799202ad5c108fd19f577",
       []
      ],
-     "Range-mutations-replaceData.html.ini": [
-      "8b10363f77b3f47c8589ad7e1ef5a45b0fcff496",
-      []
-     ],
      "Range-mutations.js": [
       "23c013ac6a1d7a1563739afe50f151af49b4ffa6",
       []
@@ -335770,11 +335781,7 @@
       "7b02fab1c30bd46ecd3e278b1925186495d40249",
       []
      ]
-    },
-    "xml-serialization.xhtml.ini": [
-     "dddc0796b38fef11387ff8bee81c7a1a9a7e642e",
-     []
-    ]
+    }
    },
    "domxpath": {
     "DIR_METADATA": [
@@ -335851,6 +335858,10 @@
       []
      ]
     },
+    "xml_xpath_runner.html.ini": [
+     "b9af709d743120691862162d43e765066c8ab218",
+     []
+    ],
     "xml_xpath_tests.xml": [
      "91d6428f48a15056fb6d7f4a3d567dcfe580511d",
      []
@@ -337053,7 +337064,7 @@
       []
      ],
      "formatblock.html.ini": [
-      "cf2a6f46cc2706010a1b8f94a9ce7e9176ca2784",
+      "30bfc30518a4282aeb3a469eac7107127c5697db",
       []
      ],
      "formatblock_1-1000-expected.txt": [
@@ -337460,7 +337471,7 @@
      []
     ],
     "image-src-change.html.ini": [
-     "c150b54d01a277fde18b18d7f44be79863f04320",
+     "1def2aab988ef9e3bb5fe57cd3fbe47d47a3ff21",
      []
     ],
     "images-repeated-resource.html.ini": [
@@ -337610,7 +337621,7 @@
     "legacy-mb-japanese": {
      "euc-jp": {
       "eucjp-decode.html.ini": [
-       "db39b753038645dca84a2a47ec6bc6ffa68765bd",
+       "63b640ea3ae48cf7ca1c675c6e0696558364332d",
        []
       ],
       "eucjp-decoder.js": [
@@ -337654,7 +337665,7 @@
        []
       ],
       "eucjp-encode-href-errors-han.html.ini": [
-       "3bb505461e2afbd5f8546d72d77fabf47a57fc84",
+       "52bdec1938f056f3b01a9cb16216130747227c5c",
        []
       ],
       "eucjp-encode-href-errors-hangul.html.headers": [
@@ -338484,7 +338495,7 @@
      []
     ],
     "unsupported-labels.window.js.ini": [
-     "1265cf960e08f21df7a0d451b3ae4dfac29b56b1",
+     "e63fc0b0f847873060a29b280e7844da176f69b9",
      []
     ]
    },
@@ -340330,7 +340341,7 @@
      },
      "cors": {
       "cors-cookies.any.js.ini": [
-       "319b1b751831ac2ae7a7c0fb6519f3ebf37fb754",
+       "181259549f0d699163fb9815e9626f2b817cb1b5",
        []
       ],
       "cors-preflight-redirect.any-expected.txt": [
@@ -341808,7 +341819,7 @@
        []
       ],
       "header-link.https.sub.html.ini": [
-       "6346c6dbf6c79c320848bfcc5299e8d88b5a5600",
+       "fc325202c44ca5216a1a31540d119cc996cddb59",
        []
       ],
       "header-link.https.sub.tentative-expected.txt": [
@@ -341836,7 +341847,7 @@
        []
       ],
       "window-history.https.sub.html.ini": [
-       "3eccd7efd3cf28b8b63e384e1f5eecaceea3260d",
+       "bb261f491e741c28dd68a9eb563c64f62abee9bb",
        []
       ],
       "worker-dedicated-constructor.sub.html.ini": [
@@ -342393,7 +342404,7 @@
       ]
      },
      "service-worker-background-fetch.https.window.js.ini": [
-      "069415ffac3e0f0f1590b21cd141a4feb5125e72",
+      "d2b92041b809f31419c6f5e929dfa5dd4b03bb50",
       []
      ],
      "shared-worker.window.js.ini": [
@@ -342682,7 +342693,7 @@
      []
     ],
     "activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html.ini": [
-     "8f3aec5177fde386634340ca0db48b467d9ca825",
+     "cbac094b845394bd32b4e63d94eb847dd24eb584",
      []
     ],
     "activeelement-after-focusing-different-site-iframe.html.ini": [
@@ -342726,7 +342737,7 @@
      []
     ],
     "focus-already-focused-iframe-same-site.html.ini": [
-     "cd78228dd3869ed7ac233ad82d076832dd8df95e",
+     "c8cb0f97f7b02f70990a80ee9fe25f1d9b8db7a2",
      []
     ],
     "focus-event-after-focusing-iframes-expected.txt": [
@@ -344257,6 +344268,18 @@
      "5f74d8ebc6ef94e16b7e2dbe24ee4d2345293d4d",
      []
     ],
+    "FileSystemDirectoryHandle-removeEntry.https.any-expected.txt": [
+     "cc38797fcf4c0281d60a289a06c01a0d17c3b236",
+     []
+    ],
+    "FileSystemDirectoryHandle-removeEntry.https.any.js.ini": [
+     "520d00feaec82704d376c619984df6df0b69fde7",
+     []
+    ],
+    "FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt": [
+     "cc38797fcf4c0281d60a289a06c01a0d17c3b236",
+     []
+    ],
     "FileSystemFileHandle-create-sync-access-handle.https.tentative.window.js.ini": [
      "257370ceef560084c7ffb7c0d85dbf28cd33f0eb",
      []
@@ -344397,7 +344420,7 @@
       []
      ],
      "FileSystemDirectoryHandle-removeEntry.js": [
-      "93b03ef6ade2b44b5160dc8e42494b46a63d295f",
+      "83d8eef7900247014dc491500dc21bc23aab3955",
       []
      ],
      "FileSystemDirectoryHandle-resolve.js": [
@@ -344413,7 +344436,7 @@
       []
      ],
      "FileSystemFileHandle-move.js": [
-      "fba0929d4155dfe233243ec1bb3565359433b9ab",
+      "dd848626e4a747f8c74dff65157704952fbff6c0",
       []
      ],
      "FileSystemSyncAccessHandle-flush.js": [
@@ -345091,10 +345114,6 @@
      "f365b22e8cbe20444fc1fb1c6fd42211afc4e246",
      []
     ],
-    "clamped-time-origin.html.ini": [
-     "c8e07f70cdbec3ba656045716a32d4b06b0d6082",
-     []
-    ],
     "cross-origin-isolated-timing-attack.https.html.headers": [
      "5f8621ef83660c66f0d037ea28fafefb558140f1",
      []
@@ -345165,7 +345184,7 @@
       []
      ],
      "embedding.tentative.https.window.js.ini": [
-      "4363cfd739a7ec6c1e1ab04182843c40797054ac",
+      "123aa8a7964886575c5510cec746518d74d867f7",
       []
      ],
      "fenced-frame-bypass.tentative.https.window-expected.txt": [
@@ -345510,7 +345529,7 @@
          []
         ],
         "srcdoc-history-entries.html.ini": [
-         "4b9af48826eaf06fffa1f1337317f080795bc93c",
+         "db51e3d70fb5b6fa6fe519e58ae63ec61e36a696",
          []
         ]
        },
@@ -346005,7 +346024,7 @@
         []
        ],
        "cross-document-traversal-cross-document-traversal.html.ini": [
-        "8452eaf736003e12ee2fa8edbdc844ffbdb6fc95",
+        "74045416bef0012819d0fbb50e7b16173619129d",
         []
        ],
        "cross-document-traversal-same-document-traversal.html.ini": [
@@ -346051,7 +346070,7 @@
         []
        ],
        "same-document-traversal-cross-document-traversal.html.ini": [
-        "7040e50bccb7d404af8e62d84deb5300db03b428",
+        "2ff88dbb4d2cd2746227b2b7e11436d22ae3cc27",
         []
        ],
        "same-document-traversal-same-document-traversal-hashchange.html.ini": [
@@ -346745,7 +346764,7 @@
         []
        ],
        "location-protocol-setter-non-broken.html.ini": [
-        "d9dc93d4aea3cd89841296a81761e2cddc517a3e",
+        "6cf1e4ac0715797ad6f631f8ba5707e21810554f",
         []
        ],
        "location-prototype-setting-cross-origin-domain.sub-expected.txt": [
@@ -347050,7 +347069,7 @@
          []
         ],
         "parent-yes-child-no-same.sub.https.html.ini": [
-         "c5662b40305800686cf263cc61750628ee4e991c",
+         "7683c127a6934937d22bf2eaaaba2f8789fd25fa",
          []
         ],
         "parent-yes-child-no-subdomain.sub.https.html.headers": [
@@ -347058,7 +347077,7 @@
          []
         ],
         "parent-yes-child-no-subdomain.sub.https.html.ini": [
-         "89421e999b786096450f9971d4c5cf3a42b8c83d",
+         "f65910aaef611eb253a16962d65bc67f84abfbe1",
          []
         ],
         "parent-yes-child-yes-port.sub.https.html.headers": [
@@ -347066,7 +347085,7 @@
          []
         ],
         "parent-yes-child-yes-port.sub.https.html.ini": [
-         "2c3782b364adde0e5fecca73eec09a86c377271f",
+         "1fe764980cdb004b33f17ae5ae9329436157fe58",
          []
         ],
         "parent-yes-child-yes-same.sub.https.html.headers": [
@@ -347088,7 +347107,7 @@
        },
        "2-iframes": {
         "parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini": [
-         "34daf54380b283fd4761d93f7c1f80655b3ee3bb",
+         "9be6e053e2e35fc8317599a32e5bc7ec77d05524",
          []
         ],
         "parent-no-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
@@ -347096,7 +347115,7 @@
          []
         ],
         "parent-no-child1-no-subdomain1-child2-yes-subdomain2.sub.https.html.ini": [
-         "ff06302c1d7e9e24e4913d2105fff02c1c570c2b",
+         "8d6437a2bc36ae118e40acab1deaf8005272e01d",
          []
         ],
         "parent-no-child1-yes-subdomain-child2-no-port.sub.https.html.ini": [
@@ -347104,7 +347123,7 @@
          []
         ],
         "parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini": [
-         "291c5ea0cf687a0e46c981cb4d8ef76b4e2a792c",
+         "e915931eaed33708778870e2217074d8cf6b8314",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html.headers": [
@@ -347128,7 +347147,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini": [
-         "55c9507947dd54f89a1ba668d8a092793a789cc8",
+         "e77ac91c4531d403826da7b9bb6c47c2ef63b7b1",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.headers": [
@@ -347136,7 +347155,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini": [
-         "9bcd06566805156e9c14fabd814b7d34a3a803aa",
+         "22c892623efadcaa7c28ad944d7cc94494cdd611",
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.headers": [
@@ -347144,7 +347163,7 @@
          []
         ],
         "parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
-         "ce259823becd55217b53ed2a8347f27771d28166",
+         "55806ef001609af9235592387679abd651d7046f",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html.headers": [
@@ -347168,7 +347187,7 @@
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini": [
-         "3be8b66c60fbd9a158e332ffde611ae30634ba03",
+         "3735ac72c3449fd8f75119de464ed3f0c7ac7b2d",
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html.headers": [
@@ -347184,7 +347203,7 @@
          []
         ],
         "parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini": [
-         "e3b0508f4657609580638d04ce6d4902d3c18ee9",
+         "9fafc5f99defb2cf8ba5f83f381449ac758c86c1",
          []
         ]
        },
@@ -347213,7 +347232,7 @@
         []
        ],
        "document-domain.sub.https.html.ini": [
-        "5aea7439ae8df1f00db6ee19fb761cc0396419f1",
+        "992e8c132f865885bd378d05691a7f3a29fe11af",
         []
        ],
        "getter-special-cases": {
@@ -347249,10 +347268,6 @@
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
-        "removed-iframe.sub.https.html.ini": [
-         "c8a2756f9be9a1cc50ecb71b60812307eb78c13c",
-         []
-        ],
         "resources": {
          "data-to-javascript-test.mjs": [
           "3a88253ee3053465472ef7d6ecba74b92fab79ce",
@@ -347306,27 +347321,27 @@
        ],
        "iframe-navigation": {
         "parent-no-1-no-same-2-yes-port.sub.https.html.ini": [
-         "c6771c46dd616d86d46a1f7e8ca9ceca024bfca7",
+         "d6a944ec1ae3679aab07a974cb20f9e88fab3258",
          []
         ],
         "parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini": [
-         "63bab1a60df28a9abc0ddd02c0e0e6db76916581",
+         "42a9ff44888082d3a45be7346fe92310faab136a",
          []
         ],
         "parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini": [
-         "00a1ce153428bdc447cc03bbd137824c0263393d",
+         "220392e8d71d8d3696062a55ebe1c4ebfd5788d7",
          []
         ],
         "parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini": [
-         "9c69f1dbd06855c6a039117f554417536d28726a",
+         "5a34e4665a2e3083214c1d0c0850f2c90c441f0a",
          []
         ],
         "parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini": [
-         "632bbf12b45e00dad9ef087d703b3fd74386ce9a",
+         "29817d3ce6772f9d9a9547561e709cbe471d006f",
          []
         ],
         "parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini": [
-         "e41b3bd0b47941b083f0e4647d5e0959aa99a226",
+         "609e2e46c30d1609537c5da55640c4b9f0a099be",
          []
         ],
         "parent-yes-1-no-same-2-no-port.sub.https.html.headers": [
@@ -347334,7 +347349,7 @@
          []
         ],
         "parent-yes-1-no-same-2-no-port.sub.https.html.ini": [
-         "8215e4ce046000d54a9b788291bfafdfa4509367",
+         "71e78121c5c99762e18b2ddc4e92ad966a493b76",
          []
         ],
         "parent-yes-1-no-same-2-no-subdomain.sub.https.html.headers": [
@@ -347342,7 +347357,7 @@
          []
         ],
         "parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini": [
-         "f4649ba84c3c891f64804a36a123f242a01b7f0e",
+         "6c1b6d6ba2726e018254c20fe3c9fd1c7a3a533b",
          []
         ]
        },
@@ -347356,11 +347371,11 @@
        ],
        "popups": {
         "opener-no-openee-yes-same.sub.https.html.ini": [
-         "b16002c80371d662b529186931ec77cee41448b5",
+         "dd90d39ed0eeea78f8f58518e5b9be4701eeab5d",
          []
         ],
         "opener-no-openee-yes-subdomain.sub.https.html.ini": [
-         "f3dfa02d7c70ab1e4d210a49f70ac1e98537d815",
+         "5a5800face151ffeef0054d10d6876ce7bb34fa8",
          []
         ],
         "opener-yes-openee-no-port.sub.https.html.headers": [
@@ -347368,7 +347383,7 @@
          []
         ],
         "opener-yes-openee-no-port.sub.https.html.ini": [
-         "dd8f7aa6d6d1bdcf58bff1affba4bf69d1fbc14f",
+         "79f3072f26cd657327f05482367ad496398c04d8",
          []
         ],
         "opener-yes-openee-no-same.sub.https.html.headers": [
@@ -347383,16 +347398,12 @@
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
-        "opener-yes-openee-no-subdomain.sub.https.html.ini": [
-         "2c29a681a0ccddbd5b12b0a391b97ed9dfb39a14",
-         []
-        ],
         "opener-yes-openee-yes-port.sub.https.html.headers": [
          "79a20f30fc0f486014c8b93edef7483605101504",
          []
         ],
         "opener-yes-openee-yes-port.sub.https.html.ini": [
-         "e1431348cca8f106345fbafd820354e60e87f00c",
+         "9f1c64b95be44d2188f1edc5dd3368ce3fbe45ea",
          []
         ],
         "opener-yes-openee-yes-same.sub.https.html.headers": [
@@ -347400,7 +347411,7 @@
          []
         ],
         "opener-yes-openee-yes-same.sub.https.html.ini": [
-         "34df7b455cff017a2274b536779957faa688ce7d",
+         "b6a98657923c945fa98d6cb43ce69180ac9beee1",
          []
         ],
         "opener-yes-openee-yes-subdomain.sub.https.html.headers": [
@@ -347408,7 +347419,7 @@
          []
         ],
         "opener-yes-openee-yes-subdomain.sub.https.html.ini": [
-         "a5171045401718ed8f9e73c8e75a691191366999",
+         "b9b27ce23b679b1d6af78bf2ebc905eddbd71a75",
          []
         ]
        },
@@ -347786,10 +347797,6 @@
         "fd9e95fc68d91e1ab0ff21fa185882009e1a106b",
         []
        ],
-       "open-features-non-integer-innerwidth.html.ini": [
-        "d2bec7bce012cc9eda5fc1ba960ac77a68732034",
-        []
-       ],
        "open-features-non-integer-left-expected.txt": [
         "62b1506da1c9b363345ccfdd989590ac6ec30d5c",
         []
@@ -347822,12 +347829,8 @@
         "97ab60773abb587368339945de01df4af993a54b",
         []
        ],
-       "open-features-non-integer-width.html.ini": [
-        "a5e915f153cbd3443322a1fe6c1f31f09a5687bd",
-        []
-       ],
        "open-features-tokenization-innerheight-innerwidth.html.ini": [
-        "ccc3a0fcdab0bbdab115f67504c21ed44cde45d4",
+        "646e2a2a5f3a2712dae2be6b6a4b27cd508ea2b8",
         []
        ],
        "open-features-tokenization-noopener.html.ini": [
@@ -347851,7 +347854,7 @@
         []
        ],
        "open-features-tokenization-top-left.html.ini": [
-        "dc5fb3e0c6cc729507fa8c6ce9a177ce7ff3a58b",
+        "21394d1c9324b1f8c17e10e1f7f4c7e73070c15f",
         []
        ],
        "open-features-tokenization-width-height.html.ini": [
@@ -347928,7 +347931,7 @@
        []
       ],
       "window-open-noopener.html.ini": [
-       "e38b841a40eaeac50b91c15ba8698ca6965116cd",
+       "a4aab5a8178307613314861a5b75afbca1d9452e",
        []
       ],
       "window-open-popup-behavior.html.ini": [
@@ -347936,7 +347939,7 @@
        []
       ],
       "window-open-windowfeatures-values.html.ini": [
-       "d9e0e4f30172d211e80db333678752d7aedbe94b",
+       "ef909a9fbff128dcd041f2de23ab974043d2a261",
        []
       ],
       "window-properties.https-expected.txt": [
@@ -349225,7 +349228,7 @@
           []
          ],
          "canvas-filter-object-turbulence.html.ini": [
-          "64be7110e67eac2c7834a43514d9090fecd9343a",
+          "77a860fe49368ed9f936960a067797b65d7ebebe",
           []
          ],
          "idl-conversions": {
@@ -349470,7 +349473,7 @@
          []
         ],
         "canvas-display-p3-drawImage-ImageBitmap-video.html.ini": [
-         "4e33b7bc2caededf09a470986c23186ae5bbb6aa",
+         "d0813311ac79b34102f29c4bb252f2d696c98bb7",
          []
         ],
         "canvas-display-p3-drawImage-expected.txt": [
@@ -350031,12 +350034,6 @@
        "d0524194c9186da948d150da7b36f0f1144a61f9",
        []
       ],
-      "drawing-images-to-the-canvas": {
-       "2d.drawImage.animated.poster.html.ini": [
-        "55cf49a5996f364b25c55a553a419b2ee026a4e9",
-        []
-       ]
-      },
       "fill-and-stroke-styles": {
        "2d.pattern.paint.repeat.basic.html.ini": [
         "59c6d7d3f9c14d3dd9470bb82563a12804617949",
@@ -350064,7 +350061,7 @@
          []
         ],
         "offscreencanvas.resize.html.ini": [
-         "c4623437e7282fe2d655a69bfc58aaad6b0f079e",
+         "bd417e81debbb4a42aa4802299d98c6f65106769",
          []
         ],
         "offscreencanvas.transferrable-expected.txt": [
@@ -350609,8 +350606,8 @@
        "e304d0e0960858efc7d195958082dceb869c61b5",
        []
       ],
-      "iframe-coep-credentialless.https.window.js.ini": [
-       "eb8b86f62fd9177bcdddd3de2274bc7a5241d8f9",
+      "fetch.https.window.js.ini": [
+       "c09e71df0b62c417476c9d28c395c743593e3f54",
        []
       ],
       "iframe-coep-none.https.window.js.ini": [
@@ -350643,10 +350640,6 @@
        "d7201edc866ca2463e8e9d0a0acc6a772dff942b",
        []
       ],
-      "service-worker-coep-none-proxy.https.window.js.ini": [
-       "e44966b97b0a132107eeb3081f50f6b4a64e8a16",
-       []
-      ],
       "shared-worker.https.window.js.ini": [
        "21fe7167878786d38c262d1c38f638ba6124b3c6",
        []
@@ -350689,7 +350682,7 @@
       []
      ],
      "dedicated-worker.https.html.ini": [
-      "af2cc24df8874e298804aacc3f13f9c80517fea2",
+      "dd9391b4781ce4c78e976f9ecfeff33007e91255",
       []
      ],
      "iframe-history-none-require-corp.https.html.ini": [
@@ -351147,7 +351140,7 @@
       []
      ],
      "header-parsing-failures.https.html.ini": [
-      "bed1359b0f8affd86394e29981969ef238940cc8",
+      "0617f30ef4535bb735e7a780fabb346374b9ac35",
       []
      ],
      "header-parsing-non-ascii.https.html.headers": [
@@ -351175,14 +351168,14 @@
        "a19f4400cea33a60c99807330704a23ee363b146",
        []
       ],
-      "popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini": [
-       "8eb49f5a212bff324d3cda1f2fdce6305ecef148",
-       []
-      ],
       "popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.headers": [
        "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2",
        []
       ],
+      "popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.ini": [
+       "e5f17f9505c6f62917ea16c5fc78add6a4d97015",
+       []
+      ],
       "popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html.headers": [
        "ab7b28948150ff64101ef080b0d9c7cc9a6a34d2",
        []
@@ -351192,7 +351185,7 @@
        []
       ],
       "popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.ini": [
-       "8d718f6b6ce27cf4718657f1f6228bc0e16210fd",
+       "596920f4928fd12de33820295d77abde57b89138",
        []
       ],
       "popup-same-site-with-cross-origin.https.html.headers": [
@@ -351216,7 +351209,7 @@
        []
       ],
       "popup-same-site-with-same-site.https.html.ini": [
-       "536e2c0b58482bac177e94efbe612cc3b60d62cf",
+       "69a79d91493cba8c3a03888d7dd7a9c37a887452",
        []
       ]
      },
@@ -351225,7 +351218,7 @@
       []
      ],
      "iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini": [
-      "c563da96ae7db292b99ebc70c87b9edccad35854",
+      "9813f106a943082c0ada51f0901e211e4976fda1",
       []
      ],
      "iframe-popup-same-origin-allow-popups-to-same-origin.https.html.headers": [
@@ -351233,7 +351226,7 @@
       []
      ],
      "iframe-popup-same-origin-allow-popups-to-same-origin.https.html.ini": [
-      "108522d64182da1943e6c4933075380ac3f4e9a2",
+      "fbb8b7ea360ac444a02016d6e916050745585372",
       []
      ],
      "iframe-popup-same-origin-allow-popups-to-unsafe-none.https.html.headers": [
@@ -351249,7 +351242,7 @@
       []
      ],
      "iframe-popup-same-origin-to-same-origin.https.html.ini": [
-      "223c26b5d730d933a5f58b18a1597c67a0aac633",
+      "c6cd6b730183649c8f3a41dd1e35837e05470862",
       []
      ],
      "iframe-popup-same-origin-to-unsafe-none.https.html.headers": [
@@ -351257,7 +351250,7 @@
       []
      ],
      "iframe-popup-same-origin-to-unsafe-none.https.html.ini": [
-      "0334c03e07eea5a403abfd0eb9eb17ed0464c90d",
+      "872be04701bdb2dcc3fb9da108f1f23edaa18c0b",
       []
      ],
      "iframe-popup-unsafe-none-to-same-origin.https.html.headers": [
@@ -351265,7 +351258,7 @@
       []
      ],
      "iframe-popup-unsafe-none-to-same-origin.https.html.ini": [
-      "69d18ba491050ae07cfe15dd2a33f95540146399",
+      "abf40f58e03b266e340765df187fdd1fbfcbcf3f",
       []
      ],
      "iframe-popup-unsafe-none-to-unsafe-none.https.html.headers": [
@@ -351273,11 +351266,11 @@
       []
      ],
      "iframe-popup-unsafe-none-to-unsafe-none.https.html.ini": [
-      "2bb70ff43355fb116d5dffa59ef8b4960d9f0bac",
+      "c1f50620461237a83c2f199dfa2b83c85c300407",
       []
      ],
      "javascript-url.https.html.ini": [
-      "7bb1eb2a4fe6581389c8109c7fe1edb7827339f5",
+      "bb3f7ca47d1ea60329b822378abd97423d79c5ef",
       []
      ],
      "navigate-to-aboutblank.https.html.ini": [
@@ -351300,10 +351293,6 @@
       "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
       []
      ],
-     "popup-redirect-same-origin-allow-popups.https.html.ini": [
-      "bfc9a64a42e9f3926c011624f5047fc26792c230",
-      []
-     ],
      "popup-same-origin-allow-popups-with-cross-origin.https.html.headers": [
       "d83ed86fb9b5d159b9f380424887402edc96cb75",
       []
@@ -351316,10 +351305,6 @@
       "d83ed86fb9b5d159b9f380424887402edc96cb75",
       []
      ],
-     "popup-same-origin-allow-popups-with-same-origin.https.html.ini": [
-      "71b155721706a2908af395ee24e85a18bca0787c",
-      []
-     ],
      "popup-same-origin-allow-popups-with-same-site.https.html.headers": [
       "d83ed86fb9b5d159b9f380424887402edc96cb75",
       []
@@ -351352,6 +351337,10 @@
       "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
       []
      ],
+     "popup-same-origin-with-same-site.https.html.ini": [
+      "ef3655a482107a3d7f9f5dea04a0b3b74bed9fa3",
+      []
+     ],
      "popup-unsafe-none-with-cross-origin.https.html.headers": [
       "073ce7adfbd81cb7c0b2f91f96c8349b6677f26c",
       []
@@ -351376,10 +351365,6 @@
       "6f1e872520590723fb96d2c67837a02d78f18977",
       []
      ],
-     "popup-unspecified-with-same-origin.https.html.ini": [
-      "0d2dc3b16bd511d0412a206007cdf2a888350dab",
-      []
-     ],
      "popup-unspecified-with-same-site.https.html.ini": [
       "ccfbd06e94ece9ba5235adb3de7db4a300584ec4",
       []
@@ -351411,19 +351396,19 @@
         []
        ],
        "access-from-coop-page-to-opener_coop-ro_cross-origin.https.html.ini": [
-        "7e47b2b087718e36e4eb39f8f05e9e258cacf00e",
+        "9638f4b5c6ca2a04abe1be4b91a1b77c5563b631",
         []
        ],
        "access-from-coop-page-to-other_coop-ro.https.html.ini": [
-        "dd923b49d338c61b1c701f72a0fe7c9d21a51306",
+        "ad1f3046344665f83be193b63ccc46c1a691c671",
         []
        ],
        "access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini": [
-        "56b8e031cc1caaee836abb34f380ea522c92155c",
+        "dd5c96b2e6d713af4e5402595b2b6e459a64352e",
         []
        ],
        "access-to-coop-page-from-openee_coop-ro.https.html.ini": [
-        "45761bcac8beb541cddf6110a9432b612089da0b",
+        "7f632e5e85b754de97f0c0d100e8412ab1b5707c",
         []
        ],
        "access-to-coop-page-from-openee_coop-ro_cross-origin.https.html.ini": [
@@ -351435,7 +351420,7 @@
         []
        ],
        "access-to-coop-page-from-opener_coop-ro_cross-origin.https.html.ini": [
-        "9e0d21c428dd877d354da9a9f4064a357e3f95dc",
+        "098e5d0f5b837238225a9a09095f23d4a1dfcee6",
         []
        ],
        "access-to-coop-page-from-other_coop-ro.https.html.ini": [
@@ -351455,7 +351440,7 @@
         []
        ],
        "property-closed.https.html.ini": [
-        "3ee2c65727bbe62139956bca2812b7f5ca1986eb",
+        "ad0e9b09c8038704d41611c2b79cea264d3166a5",
         []
        ],
        "property-focus.https.html.ini": [
@@ -351463,7 +351448,7 @@
         []
        ],
        "property-frames.https.html.ini": [
-        "f6d2d333bad5ce93e388b23469807f3f04336d18",
+        "01f4fcd2960d85861b72c469942031529268ec2f",
         []
        ],
        "property-indexed-getter.https.html.headers": [
@@ -351471,15 +351456,15 @@
         []
        ],
        "property-indexed-getter.https.html.ini": [
-        "4186abaa2b3e6224e09a8c01ede807a9f1651fa8",
+        "9f7656cb32626312d13c4eee33831b29d2edf760",
         []
        ],
        "property-length.https.html.ini": [
-        "abdad6591d9aa8cca9c3ac6dcf93f7d7a1fdd478",
+        "c054f77b2cdebfb1475ba4ad06b48c3f07ecf975",
         []
        ],
        "property-location-get.https.html.ini": [
-        "dcfc817f31fcf4a341eb76091e727fe7c65216a4",
+        "1f008e25bc4317dad69192fed7a7aead887ef98b",
         []
        ],
        "property-location-set.https.html.ini": [
@@ -351490,16 +351475,8 @@
         "64f4d5fedffd208b7174c7d8e0bce4e99ce1ac0f",
         []
        ],
-       "property-named-getter.https.html.ini": [
-        "a713a5f1fd7eea7cfad4e994ae94b6f4efea9a42",
-        []
-       ],
        "property-opener-get.https.html.ini": [
-        "7eb4dc078196329e3db68324a5db3190d7b485ae",
-        []
-       ],
-       "property-opener-set.https.html.ini": [
-        "5111ef2d847cd0803ce419b5c105a4cc5201287d",
+        "76173f058e7af335f35213295dd3b1a188840c64",
         []
        ],
        "property-postmessage-1.https.html.ini": [
@@ -351507,23 +351484,23 @@
         []
        ],
        "property-postmessage-2.https.html.ini": [
-        "586bba13313b39313f8fbebcc6071a2c38596100",
+        "b1ed4b5a7ff364d4ee2adb7ef231892245f3929a",
         []
        ],
        "property-self.https.html.ini": [
-        "911a48fe0d6eaeb845e1ec91e968d70a1ba6b4f2",
+        "189215bc7f4f6a65585c207e1ea409f9b0320ac5",
         []
        ],
        "property-top.https.html.ini": [
-        "86f71d5893d8e032d15760e6ac85681db9a1350a",
+        "e3a7586a247307c588eb7e9c9a3cdb75dbe2b04c",
         []
        ],
        "property-window.https.html.ini": [
-        "78ab09d6a8d589bf1883847508b9769c9cd037dc",
+        "799db67cf15e60af5be3156b0c11c7bb738c4426",
         []
        ],
        "report-to-both_coop-ro.https.html.ini": [
-        "cfda1f96c55cd572eb1ee67fd74a62182fdeb79d",
+        "46d3e2453d8b141994297fa9ca23abea51bbb623",
         []
        ],
        "reporting-observer.html.ini": [
@@ -351541,7 +351518,7 @@
         []
        ],
        "report-to-both_coop-ro.https.html.ini": [
-        "46d3e2453d8b141994297fa9ca23abea51bbb623",
+        "3533c77b1462c6bc0e3dc3c640117c164f1fdd91",
         []
        ],
        "reporting-redirect-with-same-origin-allow-popups.https.html.ini": [
@@ -351667,7 +351644,7 @@
       }
      },
      "resource-popup.https.html.ini": [
-      "42c5e121e9312563360c5306e0342c21256e52af",
+      "4a6e628bd9ea7effff8846792bb3b69676b43c4e",
       []
      ],
      "resources": {
@@ -351743,7 +351720,7 @@
         []
        ],
        "iframe-popup-to-so.https.html.ini": [
-        "f8a499bad12ec011584e053acd36ac42680e7d1c",
+        "b62b4dc0b58bdd2d5f8e6f25de66a5f79fd881ac",
         []
        ],
        "iframe-popup-to-soap.https.html.headers": [
@@ -351751,7 +351728,7 @@
         []
        ],
        "iframe-popup-to-soap.https.html.ini": [
-        "f6ec1bf26df4ba233be628595b5d9a3b57fceb23",
+        "f8661d582e1632d4967a02fc2a63c594f5c87a44",
         []
        ],
        "iframe-popup-to-un.https.html.headers": [
@@ -351787,7 +351764,7 @@
         []
        ],
        "iframe-popup.https.html.ini": [
-        "f3681f22e7aaacd0c447883a6d4c2e4b530cfde0",
+        "4f6dc509504b25a91462730fcac2315ccc823f69",
         []
        ],
        "iframe-popup.https_1-2-expected.txt": [
@@ -351843,7 +351820,7 @@
         []
        ],
        "popup-u.https.html.ini": [
-        "d559eb64d610b064449741c83a2d92c703e4b238",
+        "e594813511b6d8b463f199e677c6a2cc6c849b30",
         []
        ],
        "popup-un.https-expected.txt": [
@@ -351879,7 +351856,7 @@
         []
        ],
        "popup-with-same-origin.https.html.ini": [
-        "5e23173a1ad96fa1cc19ae9e7649a3afd97de59d",
+        "a2bc292d5496bafa25dc8d092a25dc18e19e6747",
         []
        ],
        "popup-with-same-site.https-expected.txt": [
@@ -352451,14 +352428,6 @@
       []
      ],
      "render-blocking": {
-      "parser-inserted-async-script.tentative.html.ini": [
-       "632b0b9d9583e1f5040e25fd4ff40981355387d4",
-       []
-      ],
-      "script-inserted-script.html.ini": [
-       "7ee50e3dc4f8cebfc5515d08640415842a998bed",
-       []
-      ],
       "support": {
        "dummy-1.js": [
         "597772cf641d83b41f0e4238a1fa74a050f29d3c",
@@ -355539,6 +355508,12 @@
         []
        ]
       },
+      "the-draggable-attribute": {
+       "draggable-enumerated-ascii-case-insensitive.html.ini": [
+        "0de297a83119d7d6228f12fc8ae2a5cd103600f8",
+        []
+       ]
+      },
       "the-dropzone-attribute": {
        "dropzone_attribute-expected.txt": [
         "14fd21b68b5e5a4be7740f9724b6697b3bc9cea4",
@@ -355783,7 +355758,7 @@
         []
        ],
        "nested-sharedworker-success.https.html.ini": [
-        "a1bc56f0296a661ac2df23322fe39a3e8613a3ed",
+        "5a66574c42bf7a931d1aaf76e732d9392d30545c",
         []
        ],
        "nested-worker-success-sharedworker-expected.txt": [
@@ -358158,7 +358133,7 @@
          []
         ],
         "resource-selection-invoke-audio-constructor.html.ini": [
-         "0fb6a8301e84fda502c54a63dd632e2fed3fe47a",
+         "832554d322a83d49960e5586a1b22eb166cf8708",
          []
         ],
         "resource-selection-invoke-in-sync-event-expected.txt": [
@@ -358186,11 +358161,11 @@
          []
         ],
         "resource-selection-invoke-insert-source-not-in-document.html.ini": [
-         "3829b48f202acb68af288d247d939330120d0793",
+         "943c9efafb146407dcaeb3b8900f0f3b4e5fba7a",
          []
         ],
         "resource-selection-invoke-insert-source.html.ini": [
-         "5e49a00b82fc89743dcc0069127766610ae786fa",
+         "90bfb401de4601bdb01e22caa517ec61f3a10f98",
          []
         ],
         "resource-selection-invoke-load.html.ini": [
@@ -358213,16 +358188,12 @@
          "b7a901442cf2baea2b46b83419ad4c92a689d6f8",
          []
         ],
-        "resource-selection-invoke-remove-src.html.ini": [
-         "38fb5bfc4375bdb3b0c606e8f9b09c694243a19b",
-         []
-        ],
         "resource-selection-invoke-set-src-not-in-document.html.ini": [
-         "f2a0952fa4b84343754824487d5708104d347cfc",
+         "f899a9366be9f983fbc89724f1d069187f2a455e",
          []
         ],
         "resource-selection-invoke-set-src.html.ini": [
-         "c0581652ef344bf42e125cffdd9d6761b9b91d4b",
+         "cebb3a9f667b20dab115a3b861e67fdf5f5059e4",
          []
         ],
         "resource-selection-pointer-control-expected.txt": [
@@ -358709,7 +358680,7 @@
           []
          ],
          "track-cue-rendering-after-controls-removed.html.ini": [
-          "b8c518756115d3539b607029e542f0518beb6eef",
+          "e839e1a5276987b282d7fc781f63bee58c28387e",
           []
          ],
          "track-cue-rendering-line-doesnt-fit-ref.html": [
@@ -359175,19 +359146,19 @@
         []
        ],
        "sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini": [
-        "3c610425a3dba4d6fdce657feede7e73d1fffac3",
+        "35055d35d6f6cfe27703b0291525e13449e746bb",
         []
        ],
        "sandbox-top-navigation-child.tentative.sub.window.js.ini": [
-        "dcc3ec0c3b19b9c3a6b8c5390405822959fe447a",
+        "7ce20ab053fa6451af680a7ff5762f6dec0d70b5",
         []
        ],
        "sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini": [
-        "51b5920089b5c879430e9c8c220ebfefcd733e34",
+        "337e2b638447c92986876ad4246a6f77882a27d6",
         []
        ],
        "sandbox-top-navigation-grandchild.tentative.sub.window.js.ini": [
-        "39e00b4308f126efa49b3b75eebbec03b2b5d72e",
+        "6be4ba0ff40ea09a5777d53521601f10358a48b7",
         []
        ],
        "sandbox_026.htm.ini": [
@@ -359809,7 +359780,7 @@
         []
        ],
        "resize-during-playback.html.ini": [
-        "ec7d98f7afe7c8d8007a6bac2c5fb7c52450c427",
+        "ce1e80b1785cd8fd35e88b3c7ade06baff70c291",
         []
        ],
        "video-poster-shown-preload-auto-ref.html": [
@@ -359909,7 +359880,7 @@
         ]
        },
        "text-plain.window.js.ini": [
-        "75afcf0469f4c87abe58f6459804b0144aee7380",
+        "ad962b9d1ae959d707df24eb681830a4c7af1cdd",
         []
        ],
        "urlencoded2.window.js.ini": [
@@ -359926,6 +359897,10 @@
         "bbc3b71e9423b6a17b07c065e20b8435e4c492f4",
         []
        ],
+       "rel-base-target.html.ini": [
+        "99e045045ebcae4490b9a2af36f6c0eebcd60acb",
+        []
+       ],
        "rel-button-target.html.ini": [
         "12a80ad04dadb978f7708cf81d7932098afc3487",
         []
@@ -360279,7 +360254,7 @@
         []
        ],
        "selectmenu-form-state-restore.tentative.html.ini": [
-        "e0974531cf07503a3a92a2c30dbf871fba1988a8",
+        "f8bbcfcc89834770313edff7f0868cd84011fc9b",
         []
        ],
        "selectmenu-keyboard.tentative.html.ini": [
@@ -364590,12 +364565,6 @@
        ]
       }
      },
-     "microtask-queuing": {
-      "queue-microtask-exceptions.any.js.ini": [
-       "a61a58d6c0735e924769042c58361f08f0df83d2",
-       []
-      ]
-     },
      "scripting": {
       "event-loops": {
        "fully_active_document.window-expected.txt": [
@@ -364603,7 +364572,7 @@
         []
        ],
        "fully_active_document.window.js.ini": [
-        "d233bac6267a51f880ce0632bef99e5cefb74707",
+        "50da5827c5b4a5a4ea4cc8ddc67d96a834e076a0",
         []
        ],
        "resources": {
@@ -365026,7 +364995,7 @@
      []
     ],
     "idle-detection-allowed-by-permissions-policy.https.sub.html.ini": [
-     "6f363c189c39ce8e2921eb7be18b2a9a306423f7",
+     "72ab7077d7a9e7e0aad9701c1e76f6b97b70ffa8",
      []
     ],
     "idle-detection-default-permissions-policy.https.sub.html.ini": [
@@ -366127,7 +366096,7 @@
       []
      ],
      "webtransport-h3.https.sub.any.js.ini": [
-      "667aadcf01418289fbe5842a37335b9cdddd9b56",
+      "66e623f8d70d32122d5a1abe3b40c9baf4ed21c2",
       []
      ],
      "wpt-server-wpt-flags.sub.html.ini": [
@@ -367534,7 +367503,7 @@
      []
     ],
     "cross-origin-iframe.sub.html.ini": [
-     "28a82ffef94dbd40cda67e0b6d0ec421e09a3d81",
+     "2fedf3a6de5dab451e913e9d9cf7d9f55155ae99",
      []
     ],
     "idlharness.window-expected.txt": [
@@ -367638,6 +367607,10 @@
     "META.yml": [
      "b738239a16f9110ac148b4d3c0bcfecb7eca25bd",
      []
+    ],
+    "idlharness.any.js.ini": [
+     "a807bac881dd72c20da610b6e38121c92fa16f20",
+     []
     ]
    },
    "is-input-pending": {
@@ -367850,7 +367823,7 @@
      []
     ],
     "first-paint-equals-lcp-text.html.ini": [
-     "7c7305314dda8cf79437b64015c2fb978161e960",
+     "946a331fc778d09a7848fd5fa1ec93e827b04b47",
      []
     ],
     "image-upscaling-expected.txt": [
@@ -368043,7 +368016,7 @@
       []
      ],
      "csp-early-hints-absent-final-absent.h2.window.js.ini": [
-      "d55450eb4c7914d8ff9bed827e0009b15be332c1",
+      "08b5950f319480f7afd6b22093dfb2596c90661c",
       []
      ],
      "csp-early-hints-absent-final-allowed.h2.window.js.ini": [
@@ -368151,7 +368124,7 @@
       []
      ],
      "referrer-policy-origin.h2.window.js.ini": [
-      "e7c48849670186399d3eb28eafaf83b601b2f8fe",
+      "afb4eab4a896559b5757bcec8080bb1451aebb4b",
       []
      ],
      "referrer-policy-same-origin.h2.window.js.ini": [
@@ -368159,7 +368132,7 @@
       []
      ],
      "referrer-policy-unsafe-url.h2.window.js.ini": [
-      "a432caa2324441ba258a7c9a2bbbf2386baf373f",
+      "b282f0012b050882834afc5235da63f23fa47926",
       []
      ],
      "resources": {
@@ -368402,7 +368375,7 @@
      []
     ],
     "longtask-in-sibling-iframe-crossorigin.html.ini": [
-     "1281282548f76eb5fca264b5a580bc9f37e8275d",
+     "29ede04c48735a05b38f3c19d7ef1a44d44088c6",
      []
     ],
     "longtask-sync-xhr.html.ini": [
@@ -368895,6 +368868,10 @@
        "f72fdc8403719b0d07a283ad725975ce72dfe056",
        []
       ],
+      "operator-dictionary-arabic-002.html.ini": [
+       "f0fa72f41bfa4a4f79b8af912e2e1b3857c5b907",
+       []
+      ],
       "operator-dictionary-empty-and-three-chars-ref.html": [
        "2cbed129401e721fccfeb12874d6b7223bff8def",
        []
@@ -370136,10 +370113,6 @@
       "2e70d99418173d5ade9347c38e1a77ed0e44709a",
       []
      ],
-     "mediasource-worker-play-terminate-worker.html.ini": [
-      "3dcfcc60414b340509f7915f51af67a999148fa3",
-      []
-     ],
      "mediasource-worker-play-terminate-worker.js": [
       "b45381819106faf51a0d359d15cb1bf2dfda4042",
       []
@@ -370190,7 +370163,7 @@
      []
     ],
     "mediasource-avtracks.html.ini": [
-     "abbfe94cbedc1c97d139955a48c94049661ab855",
+     "554fc5fb959026607aff0c8080c31674ff48be58",
      []
     ],
     "mediasource-buffered-expected.txt": [
@@ -370262,7 +370235,7 @@
      []
     ],
     "mediasource-duration.html.ini": [
-     "4afb20d6ab46b60b3e37d93e43a7cf2bebf13e34",
+     "e23991a44d05dc947b282963b19b18ecddc52cab",
      []
     ],
     "mediasource-endofstream-expected.txt": [
@@ -370270,7 +370243,7 @@
      []
     ],
     "mediasource-endofstream.html.ini": [
-     "eb2f72db20e269e593f8790db2f3821f655ac224",
+     "79c1fce0e99f98da47eed21a4f6812aea11abd01",
      []
     ],
     "mediasource-invalid-codec.html.ini": [
@@ -371586,10 +371559,6 @@
      ]
     },
     "focus-reset": {
-     "change-focus-again-in-blur-during-intercept.html.ini": [
-      "271473b9068edcba83e0c4b3607b577358c90e31",
-      []
-     ],
      "change-focus-then-remove-during-intercept.html.ini": [
       "a22054980eaa5c4b7ee1d36cb25f5a4c42dad740",
       []
@@ -371873,10 +371842,6 @@
        "580dc21c19e71cbc51833c5d458ee34bc5e66717",
        []
       ],
-      "navigate-initial-about-blank.html.ini": [
-       "17bbb6807df8d984b8bfc0c694c2908ea96342a5",
-       []
-      ],
       "navigate-intercept-interrupted.html.ini": [
        "5df966b3082d4dd15b10bad9ef94202e51794b84",
        []
@@ -372005,7 +371970,7 @@
     },
     "scroll-behavior": {
      "after-transition-intercept-handler-modifies.html.ini": [
-      "e8a3f009076ecfd7f9dde4a3416cbe98015747f7",
+      "108e4607e4b50845c5558e745adadf61b6352bc9",
       []
      ]
     },
@@ -372152,7 +372117,7 @@
      ]
     },
     "test-performance-attributes.sub.html.ini": [
-     "a1042757dac2ccac85c9286fcc85895756652eaa",
+     "a805bf5b9ad6dc7e516f2e9a170a435a803260fe",
      []
     ]
    },
@@ -372924,7 +372889,7 @@
      []
     ],
     "pending_beacon-sendondiscard.tentative.https.window.js.ini": [
-     "8ff16688de5b554c38ade14776ca0f72ae40634c",
+     "ee3b2e1bb1ec1d3fe4d52c7e8fcd1c8bae61e666",
      []
     ],
     "pending_beacon-sendonhidden.tentative.https.window.js.ini": [
@@ -372935,6 +372900,10 @@
      "1b93fe17917716e7ff5c56ebd48b84dbfd981047",
      []
     ],
+    "pending_post_beacon-cors.tentative.https.window.js.ini": [
+     "448d1719f2d4bd43558811a3a05dd8d15bcb8463",
+     []
+    ],
     "resources": {
      "get_beacon.py": [
       "32cb9a9ba30638bf0e5c7e54655ae87e7085978d",
@@ -372972,7 +372941,7 @@
      []
     ],
     "navigation-id-element-timing.tentative.html.ini": [
-     "0859b395696db39e7a84a974887edbf337a07fd2",
+     "11ce5f11dc3b16e622a686bf00f6e4ae217ad769",
      []
     ],
     "navigation-id-long-task-task-attribution.tentative.html.ini": [
@@ -373013,7 +372982,7 @@
       []
      ],
      "performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini": [
-      "ee8993974680d7969b956307d2f8d0dbb903534d",
+      "9d137351f5cc93dc66ca41b8db92923bb3b88d06",
       []
      ],
      "performance-navigation-timing-same-origin-replace.tentative.window.js.ini": [
@@ -373256,10 +373225,6 @@
       "a54ad04c8585af431bd123c07479959332908ee2",
       []
      ],
-     "unload-allowed-by-default.tentative.window.js.ini": [
-      "6360a03d9b2e0a9a6e94ac5a30cf26dc57b5e32c",
-      []
-     ],
      "vertical-scroll-main-frame-manual.tentative.html.headers": [
       "8d9c01e14835acbc0af74b5b9157a4a8b95243f8",
       []
@@ -376647,8 +376612,8 @@
      "6e630458efedb5ffa2d5d210613a29492a2738a3",
      []
     ],
-    "callback-invoked.html.ini": [
-     "0637665cbe46d1134a8ec9b5248de16cb3d5855b",
+    "callback-iframe.html.ini": [
+     "2c234a543927877ad35b1dc5d40c115f745149a3",
      []
     ],
     "callback-suspended.html.ini": [
@@ -376675,16 +376640,8 @@
      "ebfee37e9c02750e4c7a06f36b465abad1f1e82f",
      []
     ],
-    "deadline-max-rAF-dynamic.html.ini": [
-     "e29584eb69759f0176744afedcdee6d6a3940dd8",
-     []
-    ],
-    "deadline-max-rAF.html.ini": [
-     "c2a9bbc2d2bfc59f1c6b4b8823275c23b7419994",
-     []
-    ],
     "deadline-max-timeout-dynamic.html.ini": [
-     "960c1ca90fcd104ba5ca057ea87e3748c9cf863c",
+     "cf4da5d9282b7f7279a891518a6e9202800dd2e8",
      []
     ],
     "deadline-max.html.ini": [
@@ -376788,7 +376745,7 @@
      []
     ],
     "content-type-parsing.html.ini": [
-     "2560f131355799e3d202e6c909e320904f935618",
+     "3413a64a9f0c462c20d8d986d40ff411ee1b9381",
      []
     ],
     "frameset-timing.html": [
@@ -376836,7 +376793,7 @@
      []
     ],
     "no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini": [
-     "cd53228b8fe15796d357a5a752a44705a354f92e",
+     "b507125fd58d886223608175d27813d314e35dbc",
      []
     ],
     "ping-rt-entries-expected.txt": [
@@ -377238,7 +377195,7 @@
      ]
     },
     "response-status-code.html.ini": [
-     "12a6a9283ea65a0616d11b915e0744a5e5548362",
+     "02ebcad6adf0e381b246153cafc5f06d82ef8656",
      []
     ],
     "sleep.py": [
@@ -377604,11 +377561,11 @@
      []
     ],
     "getdisplaymedia.https-expected.txt": [
-     "212bc3859682da32fd4e78e943475004b60e9d7a",
+     "ba1d56a7b63883a3ea4bd62afd17f1c90bdf7e0d",
      []
     ],
     "getdisplaymedia.https.html.ini": [
-     "e0a8b697cb945408d81dfb1b785b9b19622e303e",
+     "1a220b5c2052f4dc086b147923f38c6226354bcc",
      []
     ],
     "permissions-policy-audio+video.https.sub.html.ini": [
@@ -379213,7 +379170,7 @@
       []
      ],
      "cache-add.https.any.js.ini": [
-      "92a423597c59309a9d2401cd57abed929dfde843",
+      "3bc5319ed5616bb60fd7a70c37e17fa1b5e6a0ae",
       []
      ],
      "cache-add.https.any.serviceworker-expected.txt": [
@@ -379598,6 +379555,10 @@
       "968409903e3391f0f9d5d48e6b1212b91c3b8fa4",
       []
      ],
+     "getregistrations.https.html.ini": [
+      "c8e862708c6146e6f09648465fbc6f4fbce47ff1",
+      []
+     ],
      "idlharness-sw.https-expected.txt": [
       "f3ad33fb2ad58ef798d7b30185d4cb0bbf20d1a1",
       []
@@ -381367,7 +381328,7 @@
       []
      ],
      "unregister-immediately-during-extendable-events.https.html.ini": [
-      "48187be6cf659c80f88dd2bbf4828e0763dd24f2",
+      "4507f109d4a7c9681a8acaa819e15213d5906200",
       []
      ],
      "unregister-then-register-new-script.https-expected.txt": [
@@ -382317,11 +382278,11 @@
       []
      ],
      "csp-script-src-self.html.ini": [
-      "a85027a5d037376f15157105b98757de136b2a7e",
+      "40253a355faac6aa4eb45e8a1ef66e0b265f8078",
       []
      ],
      "csp-script-src-unsafe-inline.html.ini": [
-      "032e95a7e07b7a6a1eff8e88040c11acf1dc9c93",
+      "9e5ce71e3c72602826f1b37c79dbe9dd885a83e4",
       []
      ],
      "fetch-blob.html.ini": [
@@ -382333,7 +382294,7 @@
       []
      ],
      "iframe-added-post-activation.html.ini": [
-      "6b9bf4fd20cef688bed633eea961bafe048aa419",
+      "4c72df7d4b76f031e55dea9962c4ae6f57ba15fd",
       []
      ],
      "indexeddb.html.ini": [
@@ -382341,7 +382302,7 @@
       []
      ],
      "local-storage.html.ini": [
-      "bf8cd1fa617147ed516fe74addffcfdb8fd951e2",
+      "89b7f0be6303658803d9a963a03328bd3fdc2919",
       []
      ],
      "media-autoplay-expected.txt": [
@@ -382369,11 +382330,11 @@
       []
      ],
      "referrer-policy-mismatch.html.ini": [
-      "d0a82641be6c3575ae46f38f68f51a8cfb4ecd4d",
+      "ef3bb68bc966bcd52a244833f72ce896fbc277b0",
       []
      ],
      "referrer-policy-no-referrer.html.ini": [
-      "9c2d1085fbbd59397e4aa1bd782ed2d8edf8d454",
+      "0a70c55e029e0ec01b921fcaafc4aa3b4752c4ae",
       []
      ],
      "referrer-policy-origin.html.ini": [
@@ -382799,11 +382760,11 @@
       ]
      },
      "response-code-non-successful.html.ini": [
-      "d5071e498431466bc413743ae9e2e02ad21af646",
+      "095715c0e911a0e60db65631ce9f9b2356ccc4d4",
       []
      ],
      "response-code-successful.html.ini": [
-      "199fd91ef9fdac9003c19325459e0c33ca45a193",
+      "a63cd661ba88acfb8d059971210dfc820f380cf2",
       []
      ],
      "restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini": [
@@ -382811,7 +382772,7 @@
       []
      ],
      "restriction-audio-setSinkId.https.tentative.html.ini": [
-      "ddd97ff411cd87bb009b2f317d20aec59a8f6a7f",
+      "e54044024d5bbf9454e1666659e2f72596a33431",
       []
      ],
      "restriction-background-fetch.https.html.ini": [
@@ -382855,7 +382816,7 @@
       []
      ],
      "restriction-local-file-system-access.https.html.ini": [
-      "8a6d179864aa39d4489cb91a3e778da3c4afeb10",
+      "0e13ca067d9a4efde27e28b31e7cd1f940b1f689",
       []
      ],
      "restriction-media-auto-play-attribute.html.ini": [
@@ -382863,7 +382824,7 @@
       []
      ],
      "restriction-media-camera.https.html.ini": [
-      "591023622258a14009844ba4319751027e3d104d",
+      "f2b8f0c656ec7e8f559732df8628b96f7f40a018",
       []
      ],
      "restriction-media-device-info.https.html.ini": [
@@ -382911,7 +382872,7 @@
       []
      ],
      "restriction-request-picture-in-picture.html.ini": [
-      "32004d9c3e0882ddf1626a064294901da9c192c3",
+      "745c20dc1c7da6527d59ddd93af071fed58d22c6",
       []
      ],
      "restriction-screen-capture.https.html.ini": [
@@ -382947,7 +382908,7 @@
       []
      ],
      "restriction-service-worker-update.https.html.ini": [
-      "f0afa05263b0f0e6cf6d67fa8dc79e0298784281",
+      "f959936dc9c6c1a5b6c7043e506be3b5b2f89a5b",
       []
      ],
      "restriction-speech-synthesis.html.ini": [
@@ -382979,7 +382940,7 @@
       []
      ],
      "restriction-web-share.https.html.ini": [
-      "f0101a566f68838984b93135e83d7b5434335db8",
+      "9e705b807a47eb8a7ae02e2c4c116679250d9b98",
       []
      ],
      "restriction-web-usb.https.html.ini": [
@@ -383035,7 +382996,7 @@
       []
      ],
      "session-history-subframe-navigation.https.html.ini": [
-      "a18dab5e083176b932ac9925ace656a983fc1e2d",
+      "ff00e55636afe27f0cbbc2f55f6f17bcddde7d85",
       []
      ],
      "session-history-subframe-reload.https.html.ini": [
@@ -383043,7 +383004,7 @@
       []
      ],
      "state-and-event.html.ini": [
-      "75d453dc9bb5bb6e8ccf8bd5372a5572131f3d28",
+      "10410264ece5324dbc0f91e883b83d5e318f0db6",
       []
      ],
      "visibility-state.html.ini": [
@@ -383166,7 +383127,7 @@
      []
     ],
     "partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini": [
-     "170ea0c9c96523415eaff669f923856888c00a25",
+     "daed983f3ae8b1ecf1e2a73cf7dc2708ca36faf5",
      []
     ],
     "partitioned-estimate-usage-details-indexeddb.tentative.https.sub.html.ini": [
@@ -386872,7 +386833,7 @@
      []
     ],
     "a-element-xhtml.xhtml.ini": [
-     "ad1664140779eb94429437b34eef61cfcde427ad",
+     "b02fb24f6442a4afefa2d283e9810a43da5454b4",
      []
     ],
     "a-element-xhtml_include=javascript-expected.txt": [
@@ -386884,7 +386845,7 @@
      []
     ],
     "a-element.html.ini": [
-     "cb39d800351a080169f2f24251f289479d78f031",
+     "291c587673ba45df92f7d949c42ab39edfee2c0f",
      []
     ],
     "a-element_include=javascript-expected.txt": [
@@ -386896,7 +386857,7 @@
      []
     ],
     "failure.html.ini": [
-     "97ce9874698c763da51039b3e9d709d2bb581aff",
+     "5f3314da573f67b736b3308e0d9a782c3778fde1",
      []
     ],
     "idlharness-shadowrealm.window-expected.txt": [
@@ -386907,6 +386868,10 @@
      "1fb49415db04546f898a6416b2794ee4d1c1e4ad",
      []
     ],
+    "percent-encoding.window.js.ini": [
+     "1091bffa2c6ebfc3c45547eb4ba0f53edaab55cc",
+     []
+    ],
     "resources": {
      "a-element-origin.js": [
       "cb7d4a895c40c456c3f4c0ade050115319ad410c",
@@ -386970,7 +386935,7 @@
      []
     ],
     "url-setters-a-area.window.js.ini": [
-     "41689a5ee6109c8c849a62335a5a5d19d6e78b47",
+     "40ad4af958c95f39160a720e0e61ece1595060cf",
      []
     ],
     "url-setters-a-area.window_include=javascript-expected.txt": [
@@ -386994,7 +386959,7 @@
      []
     ],
     "url-setters.any.js.ini": [
-     "51787b791efbe3762ce212b7427c13170ed2767f",
+     "2cdb9571d4477e1a7b3ab2e4d56c4cb80477b6da",
      []
     ],
     "url-setters.any.worker_include=javascript-expected.txt": [
@@ -387026,11 +386991,11 @@
      []
     ],
     "urlsearchparams-get.any.js.ini": [
-     "9c74fd4fd8d68e549eeced0730dbb78e09125ef9",
+     "e0afce635f0b70de1d746af7d99c52f03a2f4aab",
      []
     ],
     "urlsearchparams-stringifier.any.js.ini": [
-     "dfe6af0115dc8ee4d2978a8bd7281626c7119d94",
+     "acdd4a89a63a0eb390ff0ae47d16c4300f74b64c",
      []
     ]
    },
@@ -387128,6 +387093,10 @@
     "request-video-frame-callback-webrtc.https.html.ini": [
      "447e1523bdef4f7e5ddb4c4907807f1302add84c",
      []
+    ],
+    "request-video-frame-callback.html.ini": [
+     "5fa8925da2dd13e104ed658633b5c8832371245e",
+     []
     ]
    },
    "virtual-keyboard": {
@@ -387283,10 +387252,6 @@
       ]
      },
      "functions": {
-      "entry.html.ini": [
-       "fafd6d7f11089eaec6f9d35dc85ed40ffa30a270",
-       []
-      ],
       "helper.js": [
        "487791c69ad43043985e38ae7ea37d540695fde4",
        []
@@ -387950,12 +387915,6 @@
        []
       ]
      },
-     "combining-effects": {
-      "applying-interpolated-transform.html.ini": [
-       "bc645ca0158fa3bd353d0ef223541ae6a19ef575",
-       []
-      ]
-     },
      "keyframe-effects": {
       "computed-keyframes-shorthands-expected.txt": [
        "03400ec387856e7c7a2a1d30508bc5e52a08bf20",
@@ -388020,11 +387979,11 @@
      },
      "Animation": {
       "finished.html.ini": [
-       "70c2d215fd881826cae6c806b6501fee688f67ce",
+       "c9d9c08aa9b2f26859871adbc19f5e81bd7011e1",
        []
       ],
       "onremove.html.ini": [
-       "0b9009cc56b5710626afa0c7f7987d403f7decce",
+       "b77dcd32d6654de3af56d5c4ce31bb77f6466fdf",
        []
       ]
      },
@@ -388240,7 +388199,7 @@
        []
       ],
       "sibling-iframe-timeline.html.ini": [
-       "1a24dbb77431c43d983761c568f3cbac1ab5598c",
+       "fda793bb285bae3f6cddefbd47036b789da06e18",
        []
       ],
       "timelines.html.ini": [
@@ -388665,7 +388624,7 @@
       ]
      },
      "reuse-web-bundle-resource.https.tentative.html.ini": [
-      "e2544cac366ae92c2b11f33a7b02ec6b8ebf2bba",
+      "ffa17e97b5ec0c00e2ede58ad68011546e77569d",
       []
      ]
     },
@@ -388723,6 +388682,10 @@
      "4423c326ffe912062124a75cc712052f08b5a15e",
      []
     ],
+    "query-ordering.tentative.https.html.ini": [
+     "b63d722ab7dd33bb4eac37228311c006f2ed749b",
+     []
+    ],
     "query.tentative.https.any.js.ini": [
      "ce2966b3d29a183be238c0953ecf1f9b92275f21",
      []
@@ -389125,10 +389088,6 @@
        "5574a563d6f48095e521ecc4aaf7060541d3c725",
        []
       ],
-      "audioworkletnode-output-channel-count.https.html.ini": [
-       "97f1aa6933157db4fc4564d7095f4c274919d1ec",
-       []
-      ],
       "audioworkletprocessor-promises.https-expected.txt": [
        "ecc24fe05e8a87fcd79a9de92e21f7e38207ca0f",
        []
@@ -389306,6 +389265,12 @@
        []
       ]
      },
+     "the-mediaelementaudiosourcenode-interface": {
+      "mediaElementAudioSourceToScriptProcessorTest.html.ini": [
+       "c9987cad278dfcf204f42662a2c945bc355f0ce2",
+       []
+      ]
+     },
      "the-pannernode-interface": {
       "distance-exponential.html.ini": [
        "a3874a7ad801efe775a3b2413439dc447ba78e67",
@@ -390924,7 +390889,7 @@
      []
     ],
     "RTCDTMFSender-ontonechange.https.html.ini": [
-     "51687de2f6382d78b0405f7bfc338fd63917f432",
+     "7f85bcb60e81dc7eacbe1f70e19e66fc60d77b48",
      []
     ],
     "RTCDataChannel-binaryType.window-expected.txt": [
@@ -393440,6 +393405,10 @@
         "d4bd2b74c2db0e560114109af960c7f38cb38575",
         []
        ],
+       "audio_has_no_subtitles.html.ini": [
+        "6a131e93824e3d10701a21726ed463f487d76d3d",
+        []
+       ],
        "background.png": [
         "6d16cc84c4dd3b8777bd83d97888eaf8d351f6b5",
         []
@@ -396210,7 +396179,7 @@
      []
     ],
     "xrReferenceSpace_originOffset_viewer.https.html.ini": [
-     "2e107029f1b1c7b0a57b036355376773986dfea9",
+     "38a9b7ccd122cced2aaac436e768c0a40125de1d",
      []
     ],
     "xrReferenceSpace_relationships.https.html.ini": [
@@ -396266,7 +396235,7 @@
      []
     ],
     "xrSession_requestAnimationFrame_getViewerPose.https.html.ini": [
-     "fd22b34a0c12a853179814f71a3c2bcc1eca2838",
+     "13ee403018cff6c6a876a924f21469c64bebaf7a",
      []
     ],
     "xrSession_requestAnimationFrame_timestamp.https.html.ini": [
@@ -396278,7 +396247,7 @@
      []
     ],
     "xrSession_requestReferenceSpace_features.https.html.ini": [
-     "2e02a8cdd773669852af2fbffb2c8a445e254dc2",
+     "b50a90bc3ad35ac02e15939116e6ae784cf4ebb2",
      []
     ],
     "xrSession_requestSessionDuringEnd.https.html.ini": [
@@ -396302,7 +396271,7 @@
      []
     ],
     "xrStationaryReferenceSpace_floorlevel_updates.https.html.ini": [
-     "8408f7a51d95913b0f75c7a289a8053262c3e034",
+     "5011c0dba50647a08d3ef0786348647351abe8aa",
      []
     ],
     "xrView_eyes.https.html.ini": [
@@ -396366,7 +396335,7 @@
      []
     ],
     "xr_viewport_scale.https.html.ini": [
-     "8a751a367a48c7ddfb5b18f15405b7ee5ac54b2b",
+     "e5cc78a90636b0bf1c0afa6c0edadedc31c42879",
      []
     ]
    },
@@ -396434,7 +396403,7 @@
        []
       ],
       "sharedworker-in-worker.html.ini": [
-       "9b715377e1acb916f27a459fa7a726effeb78546",
+       "d21b77c2a5f77e5b26b1293634f441c026a8e0fd",
        []
       ]
      },
@@ -396748,10 +396717,6 @@
         "95a094234b7f4876ca8793858cb12c3eff7bd8e3",
         []
        ],
-       "second-argument-null.html.ini": [
-        "e1a5b91e8ec7806da3a96cb8bb7b7c720cb8bbab",
-        []
-       ],
        "second-argument-null.js": [
         "6f6f9e799ff176630b29302ab3d03d28ac9349ac",
         []
@@ -396780,6 +396745,10 @@
         "acf89ca6f678bf0b1d7b9d92605ee8554bf65674",
         []
        ],
+       "setting.html.ini": [
+        "2244b2520510040380164b5f6493cd398b797de9",
+        []
+       ],
        "setting.js": [
         "c705e9c40a6dd6d4e733bf60c017e91b07d56e6e",
         []
@@ -396888,6 +396857,10 @@
         "a96c08844202e430201d9b9e32f6fef6b36f46ac",
         []
        ],
+       "003.html.ini": [
+        "a724a8c2de86b803ca7aaec68b9da645014b4a9b",
+        []
+       ],
        "003.js": [
         "e64e4e2179f0fb51347eea052f889b025af8e70a",
         []
@@ -397568,7 +397541,7 @@
      []
     ],
     "shared-worker-in-data-url-context.window.js.ini": [
-     "e0d2ea3da3267420c2716d5c8b4fc826e331f0c1",
+     "5f4813ffa460d69a9f767322ae29502df3cdc1c1",
      []
     ],
     "shared-worker-parse-error-failure.html.ini": [
@@ -398047,12 +398020,16 @@
      "8fbe615bf648fa185224d67fd1e74c33c882a980",
      []
     ],
+    "XMLHttpRequest-withCredentials.any.js.ini": [
+     "5a6d805f6a3ec3a5ae8d5356907909e0176c0630",
+     []
+    ],
     "abort-after-send.any-expected.txt": [
      "0f10f7ee18013666b3206dddc19955439d9d162c",
      []
     ],
     "abort-after-send.any.js.ini": [
-     "3433e6f812667febadec2fca3ced68fdacac5724",
+     "a0be80752e1abc36ff12ec082de76186d44a3711",
      []
     ],
     "abort-after-send.any.worker-expected.txt": [
@@ -465273,6 +465250,13 @@
        {}
       ]
      ],
+     "nth-of-type-namespace.html": [
+      "aa67afd00a4347a0d651a6fc93573d0b4553478b",
+      [
+       null,
+       {}
+      ]
+     ],
      "only-child.html": [
       "590c07ba2b519ee61127be68774de94f6d39031c",
       [
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/bindings-inject-values-bypass-chain.html.ini b/third_party/blink/web_tests/external/wpt/IndexedDB/bindings-inject-values-bypass-chain.html.ini
deleted file mode 100644
index 321c5fd..0000000
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/bindings-inject-values-bypass-chain.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[bindings-inject-values-bypass-chain.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/structured-clone.any.js.ini b/third_party/blink/web_tests/external/wpt/IndexedDB/structured-clone.any.js.ini
index 84a7a80..2760a19 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/structured-clone.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/structured-clone.any.js.ini
@@ -3,12 +3,14 @@
 [structured-clone.any.html?81-100]
 
 [structured-clone.any.worker.html?101-last]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
 
 [structured-clone.any.worker.html?41-60]
 
 [structured-clone.any.html?101-last]
   expected:
-    if os == "win": [OK, TIMEOUT]
+    if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
 
 [structured-clone.any.html?21-40]
 
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/device/forget/getDevices.https.window.js b/third_party/blink/web_tests/external/wpt/bluetooth/device/forget/getDevices.https.window.js
index e9ce656..0594a6f 100644
--- a/third_party/blink/web_tests/external/wpt/bluetooth/device/forget/getDevices.https.window.js
+++ b/third_party/blink/web_tests/external/wpt/bluetooth/device/forget/getDevices.https.window.js
@@ -15,4 +15,12 @@
   assert_equals(
     devicesAfterForget.length, 0,
       'getDevices() is empty after device.forget().');
+
+  // Call forget() again getDevices() should return the same result of empty
+  // list.
+  await device.forget();
+  const devicesAfterForgetCalledAgain = await navigator.bluetooth.getDevices();
+  assert_equals(
+      devicesAfterForgetCalledAgain.length, 0,
+      'getDevices() is still empty after device.forget().');
 }, 'forget() removes devices from getDevices().');
diff --git a/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_set_arguments.https.any.js.ini b/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_set_arguments.https.any.js.ini
index 03e6a9c..b14ebae4 100644
--- a/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_set_arguments.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/cookie-store/cookieStore_set_arguments.https.any.js.ini
@@ -1,10 +1,18 @@
 [cookieStore_set_arguments.https.any.serviceworker.html]
+  [cookieStore.set with expires set to a future timestamp]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [cookieStore.set with expires set to a future Date]
+    expected:
+      if os == "win": [FAIL, PASS]
+
 
 [cookieStore_set_arguments.https.any.html]
   [cookieStore.set with expires set to a future timestamp]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
 
   [cookieStore.set with expires set to a future Date]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/cookies/samesite/form-post-blank-reload.https.html.ini b/third_party/blink/web_tests/external/wpt/cookies/samesite/form-post-blank-reload.https.html.ini
index 474bdcb9..88a8c05 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/samesite/form-post-blank-reload.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/cookies/samesite/form-post-blank-reload.https.html.ini
@@ -1,3 +1,5 @@
 [form-post-blank-reload.https.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [Reloaded cross-site top-level form POSTs are strictly same-site]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
index d272c84..12ce602c 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-network-requests.https.html.ini
@@ -1,7 +1,8 @@
 [fedcm-network-requests.https.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": TIMEOUT
+    if (flag_specific == "") and (os == "linux") and (product == "chrome"): TIMEOUT
+    if (flag_specific == "") and (os == "win"): TIMEOUT
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [nonce is not required in FederatedIdentityProvider.]
     expected:
       if product == "chrome": NOTRUN
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini
index 42b61d6f..cd79bce 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html.ini
@@ -7,7 +7,3 @@
 
   [Animation state is preserved when interleaving animations in list]
     expected: FAIL
-
-  [Animations preserve their startTime when changed]
-    expected:
-      if product == "chrome": [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/nested-query-containers.html.ini b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/nested-query-containers.html.ini
index e92a5bb1..076a237 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/nested-query-containers.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/nested-query-containers.html.ini
@@ -1,4 +1,2 @@
 [nested-query-containers.html]
-  expected:
-    if os == "win": [TIMEOUT, CRASH]
-    CRASH
+  expected: CRASH
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-003v.html.ini b/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-003v.html.ini
index 62147f62..8b88ef42 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-003v.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/image-as-flexitem-size-003v.html.ini
@@ -18,23 +18,3 @@
   [.flexbox > img 8]
     expected:
       if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 9]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 10]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 14]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 11]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [.flexbox > img 12]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini
index 46ebc05b..9451204 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-rtl.html.ini
@@ -1,3 +1,4 @@
 [Initial-letter-breaking-rtl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini
index 5e2b2a7..e5040af 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking-vrl.html.ini
@@ -1,4 +1,3 @@
 [Initial-letter-breaking-vrl.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking.html.ini
index c538947..67a027d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/Initial-letter-breaking.html.ini
@@ -1,4 +1,3 @@
 [Initial-letter-breaking.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-over-ruby-tall.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-over-ruby-tall.html.ini
index 6c27752..c971ae3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-over-ruby-tall.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-over-ruby-tall.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-block-position-drop-over-ruby-tall.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini
index 8a8fc7e3..38527a1d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby-tall.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-drop-under-ruby-tall.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby.html.ini
index 0cde71b8..7357bcde9 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-drop-under-ruby.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-drop-under-ruby.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-rtl.html.ini
index 4954d8f..59e19d6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-rtl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-rtl.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-margins-rtl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr.html.ini
index 7634056..42eebbaa 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-margins-vlr.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby.html.ini
index 222f169a..d0e63cbe 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-raise-over-ruby.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall.html.ini
index 9de6f52..60f3521d2 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-block-position-raise-under-ruby-tall.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
index 1136475..eede05d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-block-position-raise-under-ruby.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-rtl.html.ini
index 87b705fa..78b4408 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-rtl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial-rtl.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-drop-initial-rtl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
index 497ccbc..bda49d3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-drop-initial.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-drop-initial.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-rtl.html.ini
index d350ddf..339ba097 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-rtl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-001-rtl.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-float-001-rtl.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-005.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-005.html.ini
index e71bd47..3a20233 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-005.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-float-005.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-float-005.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini
index 9cd2cdc..495a53a6 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-indentation-rtl.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-indentation-rtl.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini
index 0c64a2fd..b0631f92 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-raised-sunken-caps-sunken.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-short-para-initial-letter-wraps.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-short-para-initial-letter-wraps.html.ini
index 322c6d7..f6b2dff15 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-short-para-initial-letter-wraps.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-short-para-initial-letter-wraps.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-short-para-initial-letter-wraps.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini
index 145423c1..77a501b5 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-sunk-initial-vrl.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini
index 56e94a867..7f69acb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-first-line.html.ini
@@ -1,4 +1,3 @@
 [initial-letter-with-first-line.html]
   expected:
-    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
-    if (os == "linux") and (product == "chrome"): FAIL
+    if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-tab.html.ini b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-tab.html.ini
index f5d901a..5091126 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-tab.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-inline/initial-letter/initial-letter-with-tab.html.ini
@@ -1,3 +1,4 @@
 [initial-letter-with-tab.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-layout-api/fallback-layout/constructor-error.https.html.ini b/third_party/blink/web_tests/external/wpt/css/css-layout-api/fallback-layout/constructor-error.https.html.ini
new file mode 100644
index 0000000..3ab53016
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-layout-api/fallback-layout/constructor-error.https.html.ini
@@ -0,0 +1,3 @@
+[constructor-error.https.html]
+  expected:
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-reference-box-004.html.ini b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-reference-box-004.html.ini
new file mode 100644
index 0000000..ff4cde4a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-reference-box-004.html.ini
@@ -0,0 +1,3 @@
+[clip-path-reference-box-004.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini b/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini
index bd86605e..7dcf0d3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/getclientrects-000.html.ini
@@ -1,24 +1,24 @@
 [getclientrects-000.html]
   [horizontal-tb ltr]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [vertical-lr ltr]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [vertical-rl ltr]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [horizontal-tb rtl]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [vertical-lr rtl]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [vertical-rl rtl]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini
index 6351a3d..0fd1d59 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollable-overflow-input-001.html.ini
@@ -1,3 +1,4 @@
 [scrollable-overflow-input-001.html]
   expected:
-    if flag_specific == "disable-layout-ng": FAIL
+    if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): FAIL
+    if (os == "linux") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini b/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
index 9ce8bf5..22442cac 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-paint-api/parse-input-arguments-018.https.html.ini
@@ -1,3 +1,5 @@
 [parse-input-arguments-018.https.html]
   expected:
-    if (os == "linux") and (product == "content_shell"): CRASH
+    if (os == "linux") and (flag_specific == "") and (product == "chrome"): [PASS, CRASH]
+    if (os == "linux") and (flag_specific == "disable-layout-ng"): CRASH
+    if os == "win": [PASS, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-003.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-003.html.ini
deleted file mode 100644
index 38e66a2..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-003.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[text-transform-capitalize-003.html]
-  expected:
-    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-016.html.ini b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-016.html.ini
new file mode 100644
index 0000000..869d317
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-016.html.ini
@@ -0,0 +1,3 @@
+[text-transform-capitalize-016.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini
index d5fe958..be6a3eb 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html.ini
@@ -1,3 +1,75 @@
 [scroll-behavior-main-frame-root.html]
   [Main frame with smooth scroll-behavior ; scrollIntoView() with instant behavior]
     expected: FAIL
+
+  [Main frame with auto scroll-behavior ; scrollIntoView() with smooth behavior]
+    expected:
+      if os == "win": FAIL
+
+  [Main frame with smooth scroll-behavior ; scrollIntoView() with auto behavior]
+    expected:
+      if os == "win": FAIL
+
+  [Main frame with auto scroll-behavior ; scroll() with smooth behavior]
+    expected:
+      if os == "win": [PASS, FAIL]
+
+  [Main frame with smooth scroll-behavior ; scroll() with smooth behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scrollTo() with smooth behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Set scrollLeft to frame with smooth scroll-behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scroll() with auto behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scrollTo() with default behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scrollTo() with auto behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scrollIntoView() with default behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scroll() with default behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with auto scroll-behavior ; scrollTo() with smooth behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Set scrollTop to frame with smooth scroll-behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with auto scroll-behavior ; scrollBy() with smooth behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scrollBy() with smooth behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scrollBy() with default behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
+
+  [Main frame with smooth scroll-behavior ; scrollBy() with auto behavior]
+    expected:
+      if os == "win": FAIL
+
+  [Main frame with smooth scroll-behavior ; scrollIntoView() with smooth behavior]
+    expected:
+      if os == "win": [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-complex-selector-many-children-ref.html b/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-complex-selector-many-children-ref.html
new file mode 100644
index 0000000..031f3f1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-complex-selector-many-children-ref.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+<body>
+    <p>This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say "green" should have a green background.</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p style="background-color: lime">Green</p>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-complex-selector-many-children.html b/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-complex-selector-many-children.html
new file mode 100644
index 0000000..72f58cd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-complex-selector-many-children.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html>
+<head>
+<title>:nth-child with complex selector list argument and more than 32 elements</title>
+<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index">
+<link rel="match" href="nth-child-of-complex-selector-many-children-ref.html">
+<style>
+/* At least 4 pair of <p> above, can be overlapping. The other selectors of the list are useless. */
+p:nth-child(4n of html:root>body>p+p:not(empty), :not(*), p:not(p), span, .notthere) {
+    background-color: lime;
+}
+</style>
+</head>
+<body>
+    <p>This test the styling of paragraphs with :nth-child(An+B of selector). If the test succeed, paragraphs that say "green" should have a green background.</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+    <p>White</p>
+    <p>White</p>
+    <p>White</p>
+    <p>Green</p>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-no-space-after-of.html b/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-no-space-after-of.html
index 57ab3acb..613593c 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-no-space-after-of.html
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/nth-child-of-no-space-after-of.html
@@ -5,7 +5,7 @@
 <title>:nth-child with no space between "of" and the selector list</title>
 <link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index">
 <link rel=author href="mailto:zach@zrhoffman.net" title="Zach Hoffman">
-<link rel="match" href="nth-child-and-nth-last-child-ref.html">
+<link rel="match" href="nth-child-of-no-space-after-of-ref.html">
 <style>
     target {
         color: red;
@@ -54,5 +54,3 @@
     <div target>Success</div>
 </body>
 </html>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-no-space-after-of.html b/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-no-space-after-of.html
index 2538a2efb..d79d573 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-no-space-after-of.html
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/nth-last-child-of-no-space-after-of.html
@@ -5,7 +5,7 @@
 <title>:nth-last-child with no space between "of" and the selector list</title>
 <link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index">
 <link rel=author href="mailto:zach@zrhoffman.net" title="Zach Hoffman">
-<link rel="match" href="nth-child-and-nth-last-child-ref.html">
+<link rel="match" href="nth-child-of-no-space-after-of-ref.html">
 <style>
     target {
         color: red;
@@ -54,5 +54,3 @@
     <div target>Success</div>
 </body>
 </html>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini b/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
index 5b9453d..0ff46fe 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html.ini
@@ -1,3 +1,4 @@
 [ElementInternals-target-element-is-held-strongly.html]
   expected:
-    if os == "win": [OK, TIMEOUT]
+    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, TIMEOUT]
+    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/document-picture-in-picture/META.yml b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/META.yml
new file mode 100644
index 0000000..879c0880
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/META.yml
@@ -0,0 +1,5 @@
+spec: https://wicg.github.io/document-picture-in-picture/
+suggested_reviewers:
+  - steimel
+  - liberato
+  - beaufortfrancois
diff --git a/third_party/blink/web_tests/external/wpt/document-picture-in-picture/clears-session-on-close.https.html b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/clears-session-on-close.https.html
new file mode 100644
index 0000000..8b1d549d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/clears-session-on-close.https.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<title>Test that documentPictureInPicture.window
+  is cleared when the PiP window in closed.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<body>
+<script>
+async_test((t) => {
+  test_driver.bless('request PiP window').then(t.step_func(_ => {
+    documentPictureInPicture.requestWindow().then( () => {
+      const pipWindow = documentPictureInPicture.window;
+      assert_true(!!pipWindow, "pipWindow should exist with PiP is opened");
+      pipWindow.addEventListener('unload', () => {
+        // `window` is still set until event processing is complete.
+        scheduler.postTask(t.step_func_done( () => {
+          assert_true(!documentPictureInPicture.window,
+                      "window should be cleared when PiP is closed");
+        }))
+      });
+      pipWindow.close();
+    });
+  }));
+});
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/document-picture-in-picture/enter-event.https.html b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/enter-event.https.html
new file mode 100644
index 0000000..1cac0ff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/enter-event.https.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>Test that enter event is fired at documentPictureInPicture
+  when the PiP window in opened.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<body>
+<script>
+async_test((t) => {
+  test_driver.bless('request PiP window').then(t.step_func(_ => {
+    documentPictureInPicture.onenter = t.step_func_done();
+    documentPictureInPicture.requestWindow();
+  }));
+});
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/document-picture-in-picture/iframe-document-pip.https.html b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/iframe-document-pip.https.html
new file mode 100644
index 0000000..b978a2d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/iframe-document-pip.https.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>Test that document pip is not allowed in iframes.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<body>
+  <iframe></iframe>
+</body>
+<script>
+promise_test(t => {
+  const frame = document.querySelector('iframe');
+  const frameDOMException = frame.contentWindow.DOMException;
+  return test_driver.bless('request PiP window from iframe', frame.contentWindow).then(t.step_func(_ => {
+    return promise_rejects_dom(t, 'NotAllowedError', frameDOMException,
+      frame.contentWindow.documentPictureInPicture.requestWindow());
+  }));
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/document-picture-in-picture/open-pip-window-from-pip-window.https.html b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/open-pip-window-from-pip-window.https.html
new file mode 100644
index 0000000..2c5d1170
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/open-pip-window-from-pip-window.https.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>Test that documentPictureInPicture.requestWindow()
+  rejects from a PiP window</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<body>
+<script>
+promise_test(async (t) => {
+  await test_driver.bless('request PiP window from top window');
+  const pipWindow = await documentPictureInPicture.requestWindow();
+
+  await test_driver.bless('request PiP window from PiP window', pipWindow);
+  await promise_rejects_dom(t, 'NotAllowedError', pipWindow.DOMException,
+      pipWindow.documentPictureInPicture.requestWindow());
+});
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/document-picture-in-picture/requires-secure-context.html b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/requires-secure-context.html
new file mode 100644
index 0000000..494bc2a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/requires-secure-context.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>Test that documentPictureInPicture is not available in insecure contexts</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+test(() => {
+  assert_equals(undefined, window.documentPictureInPicture);
+},
+    "documentPictureInPicture should not be available in insecure contexts");
+</script>
+</body>
diff --git a/third_party/blink/web_tests/virtual/document-pip/document-pip-requires-user-gesture.html b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/requires-user-gesture.https.html
similarity index 73%
rename from third_party/blink/web_tests/virtual/document-pip/document-pip-requires-user-gesture.html
rename to third_party/blink/web_tests/external/wpt/document-picture-in-picture/requires-user-gesture.https.html
index 71ce27c4..01a14184 100644
--- a/third_party/blink/web_tests/virtual/document-pip/document-pip-requires-user-gesture.html
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/requires-user-gesture.https.html
@@ -1,8 +1,8 @@
 <!DOCTYPE html>
 <title>Test that documentPictureInPicture.requestWindow()
   fails without a user gesture</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <body>
 <script>
 promise_test(t => {
diff --git a/third_party/blink/web_tests/external/wpt/document-picture-in-picture/returns-window-with-document.https.html b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/returns-window-with-document.https.html
new file mode 100644
index 0000000..a1d7363
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/document-picture-in-picture/returns-window-with-document.https.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>Test that documentPictureInPicture.requestWindow()
+  returns a Window object</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<body>
+  <div id="div"></div>
+<script>
+const div = document.getElementById('div');
+
+async_test((t) => {
+  test_driver.bless('request PiP window').then(t.step_func(_ => {
+    documentPictureInPicture.requestWindow().then(t.step_func_done((pipWindow) => {
+      assert_true(!!pipWindow.document,
+          'Window should contain a document');
+      assert_true(documentPictureInPicture.window === pipWindow,
+          'DocumentPictureInPicture.window should match the current window');
+
+      // We should be able to move an element to that document.
+      assert_true(document.body.contains(div),
+          'The original document should start with the div');
+      assert_false(pipWindow.document.body.contains(div),
+          'The PiP document should not start with the div');
+      pipWindow.document.body.append(div);
+      assert_false(document.body.contains(div),
+          'The div should have moved away from the original document');
+      assert_true(pipWindow.document.body.contains(div),
+          'The div should have moved to the PiP document');
+    }));
+  }));
+});
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini b/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini
new file mode 100644
index 0000000..c1f1d46
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-dataChange.html.ini
@@ -0,0 +1,3 @@
+[Range-mutations-dataChange.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-replaceData.html.ini b/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-replaceData.html.ini
deleted file mode 100644
index 8b10363..0000000
--- a/third_party/blink/web_tests/external/wpt/dom/ranges/Range-mutations-replaceData.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[Range-mutations-replaceData.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
diff --git a/third_party/blink/web_tests/external/wpt/domparsing/xml-serialization.xhtml.ini b/third_party/blink/web_tests/external/wpt/domparsing/xml-serialization.xhtml.ini
deleted file mode 100644
index dddc079..0000000
--- a/third_party/blink/web_tests/external/wpt/domparsing/xml-serialization.xhtml.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[xml-serialization.xhtml]
-  expected:
-    if flag_specific == "disable-layout-ng": CRASH
diff --git a/third_party/blink/web_tests/external/wpt/domxpath/xml_xpath_runner.html.ini b/third_party/blink/web_tests/external/wpt/domxpath/xml_xpath_runner.html.ini
new file mode 100644
index 0000000..b9af709d7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/domxpath/xml_xpath_runner.html.ini
@@ -0,0 +1,3 @@
+[xml_xpath_runner.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini b/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini
index cf2a6f46..30bfc305 100644
--- a/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini
+++ b/third_party/blink/web_tests/external/wpt/editing/run/formatblock.html.ini
@@ -97,8 +97,6 @@
 
 
 [formatblock.html?1001-2000]
-  expected:
-    if os == "win": [OK, CRASH]
   [[["defaultparagraphseparator","p"\],["formatblock","<div>"\]\] "<del>[foobar\]</del>" queryCommandValue("formatblock") after]
     expected: FAIL
 
@@ -197,6 +195,8 @@
 
 
 [formatblock.html?4001-last]
+  expected:
+    if os == "win": [OK, CRASH]
   [[["defaultparagraphseparator","p"\],["formatblock","<p>"\]\] "<h1>[foo<br>bar\]</h1>" compare innerHTML]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html b/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html
index b5d3753..99271210 100644
--- a/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html
+++ b/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html
@@ -14,13 +14,15 @@
   <script src="resources/element-timing-helpers.js"></script>
   <img elementtiming='my_image' id='my_id' />
   <script>
-    const getObservedEntry = async (pathname) => {
-      return await new Promise(resolve => {
-        new PerformanceObserver(entryList => {
+    const performanceEntryPromise = (pathname) => {
+      return new Promise(resolve => {
+        new PerformanceObserver((entryList, observer) => {
+          assert_equals(entryList.getEntries().length, 1);
           if (entryList.getEntries()[0].url == pathname) {
+            observer.disconnect();
             resolve(entryList.getEntries()[0]);
           }
-        }).observe({ type: 'element', buffered: true });
+        }).observe({ type: 'element' });
       });
     }
 
@@ -28,32 +30,41 @@
       assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented");
 
       // Take beforeRender timestamp.
-      let beforeRender = performance.now();
+      const beforeRender1 = performance.now();
 
-      //Load image
       const img = document.getElementById('my_id');
 
       const url1 = 'resources/square100.png';
+
+      const pathname1 = (new URL(url1, document.location)).href
+
+      // Register performance observer.
+      const promise1 = performanceEntryPromise(pathname1);
+
+      //Load image
       await new Promise(resolve => {
         img.addEventListener('load', resolve);
         img.src = url1;
       });
 
       // Get element entry.
-      let pathname = window.location.origin + '/element-timing/' + url1;
-      let entry = await getObservedEntry(pathname);
+      const entry1 = await promise1;
 
       // Check entry.
-      checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
-      checkRect(entry, [0, 100, 0, 100]);
-      checkNaturalSize(entry, 100, 100);
+      checkElement(entry1, pathname1, 'my_image', 'my_id', beforeRender1, img);
+      checkRect(entry1, [0, 100, 0, 100]);
+      checkNaturalSize(entry1, 100, 100);
 
       // Take beforeRender timestamp before changing image src.
-      beforeRender = performance.now();
+      const beforeRender2 = performance.now();
 
       // Set the src to trigger another entry.
       const url2 = '/images/black-rectangle.png';
 
+      const pathname2 = (new URL(url2, document.location)).href;
+
+      const promise2 = performanceEntryPromise(pathname2);
+
       //Load image with changed src.
       await new Promise(resolve => {
         img.addEventListener('load', resolve);
@@ -61,13 +72,12 @@
       });
 
       // Get the corresponding element entry.
-      pathname = window.location.origin + url2;
-      entry = await getObservedEntry(pathname);
+      const entry2 = await promise2;
 
       // Check entry.
-      checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
-      checkRect(entry, [0, 100, 0, 50]);
-      checkNaturalSize(entry, 100, 50);
+      checkElement(entry2, pathname2, 'my_image', 'my_id', beforeRender2, img);
+      checkRect(entry2, [0, 100, 0, 50]);
+      checkNaturalSize(entry2, 100, 50);
     }, 'Element Timing: changing src causes a new entry to be dispatched.')
   </script>
 
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini b/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini
index c150b54..1def2aa 100644
--- a/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini
+++ b/third_party/blink/web_tests/external/wpt/element-timing/image-src-change.html.ini
@@ -1,3 +1,3 @@
 [image-src-change.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/resources/element-timing-helpers.js b/third_party/blink/web_tests/external/wpt/element-timing/resources/element-timing-helpers.js
index cd0a023..8175b0f3 100644
--- a/third_party/blink/web_tests/external/wpt/element-timing/resources/element-timing-helpers.js
+++ b/third_party/blink/web_tests/external/wpt/element-timing/resources/element-timing-helpers.js
@@ -31,9 +31,9 @@
     expectedElement) {
   checkElementInternal(entry, expectedUrl, expectedIdentifier, expectedID, beforeRender,
       expectedElement);
-  assert_equals(entry.name, 'image-paint');
+  assert_equals(entry.name, 'image-paint', 'The entry name should be image-paint.');
   const rt_entries = performance.getEntriesByName(expectedUrl, 'resource');
-  assert_equals(rt_entries.length, 1);
+  assert_equals(rt_entries.length, 1, 'There should be only 1 resource entry.');
   assert_greater_than_equal(entry.loadTime, rt_entries[0].responseEnd,
     'Image loadTime is after the resource responseEnd');
 }
@@ -44,7 +44,7 @@
       expectedElement);
   assert_equals(entry.name, 'image-paint');
   // No associated resource from ResourceTiming, so not much to compare loadTime with.
-  assert_greater_than(entry.loadTime, 0);
+  assert_greater_than(entry.loadTime, 0, 'The entry loadTime should be greater than 0.');
 }
 
 // Checks that the rect matches the desired values [left right top bottom].
@@ -61,14 +61,14 @@
 
 // Checks that the intrinsic size matches the desired values.
 function checkNaturalSize(entry, width, height) {
-  assert_equals(entry.naturalWidth, width);
-  assert_equals(entry.naturalHeight, height);
+  assert_equals(entry.naturalWidth, width, 'The entry naturalWidth is not as expected.');
+  assert_equals(entry.naturalHeight, height, 'The entry naturalHeight is not as expected.');
 }
 
 function checkTextElement(entry, expectedIdentifier, expectedID, beforeRender,
     expectedElement) {
   checkElementInternal(entry, '', expectedIdentifier, expectedID, beforeRender,
       expectedElement);
-  assert_equals(entry.name, 'text-paint');
-  assert_equals(entry.loadTime, 0);
+  assert_equals(entry.name, 'text-paint', 'The entry name should be text-paint.');
+  assert_equals(entry.loadTime, 0, 'The entry loadTime should be 0.');
 }
diff --git a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html.ini b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html.ini
index db39b75..63b640ea 100644
--- a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-decode.html.ini
@@ -5,6 +5,8 @@
 [eucjp-decode.html?11001-12000]
 
 [eucjp-decode.html?4001-5000]
+  expected:
+    if os == "win": [OK, CRASH]
 
 [eucjp-decode.html?10001-11000]
 
@@ -21,8 +23,6 @@
 [eucjp-decode.html?12001-13000]
 
 [eucjp-decode.html?2001-3000]
-  expected:
-    if os == "win": [OK, CRASH]
 
 [eucjp-decode.html?3001-4000]
 
diff --git a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.ini b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.ini
index 3bb5054..52bdec19 100644
--- a/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding/legacy-mb-japanese/euc-jp/eucjp-encode-href-errors-han.html.ini
@@ -33,12 +33,12 @@
 [eucjp-encode-href-errors-han.html?5001-6000]
 
 [eucjp-encode-href-errors-han.html?1001-2000]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
 
 [eucjp-encode-href-errors-han.html?8001-9000]
 
 [eucjp-encode-href-errors-han.html?16001-17000]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
 
 [eucjp-encode-href-errors-han.html?18001-19000]
 
diff --git a/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini b/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini
index 1265cf9..e63fc0b 100644
--- a/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/encoding/unsupported-labels.window.js.ini
@@ -1,7 +1,5 @@
 [unsupported-labels.window.html]
-  expected:
-    if product == "chrome": [OK, TIMEOUT]
-    TIMEOUT
+  expected: TIMEOUT
   [x-mac-japanese is not supported by the Encoding Standard]
     expected: [PASS, TIMEOUT]
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini b/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini
index 319b1b75..18125954 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/api/cors/cors-cookies.any.js.ini
@@ -1,6 +1,20 @@
 [cors-cookies.any.html]
   [Include mode: remote cookies are not sent with local request]
     expected:
+      if product == "chrome": FAIL
+
+  [Include mode: 1 cookie]
+    expected:
+      if product == "chrome": FAIL
+
+  [Include mode: local cookies are not sent with remote request]
+    expected:
+      if product == "chrome": FAIL
+
+
+[cors-cookies.any.worker.html]
+  [Include mode: remote cookies are not sent with local request]
+    expected:
       if product == "chrome": [PASS, FAIL]
 
   [Include mode: 1 cookie]
@@ -10,6 +24,3 @@
   [Include mode: local cookies are not sent with remote request]
     expected:
       if product == "chrome": [PASS, FAIL]
-
-
-[cors-cookies.any.worker.html]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/header-link.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/header-link.https.sub.html.ini
index 6346c6db..fc32520 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/header-link.https.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/header-link.https.sub.html.ini
@@ -1,4 +1,6 @@
 [header-link.https.sub.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [sec-fetch-site rel=icon - Same origin]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/window-history.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/window-history.https.sub.html.ini
index 3eccd7ef..bb261f4 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/window-history.https.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/generated/window-history.https.sub.html.ini
@@ -1,3 +1,3 @@
 [window-history.https.sub.html]
   expected:
-    if (os == "linux") and (flag_specific == "disable-layout-ng"): [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
index 069415f..d2b92041 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini
@@ -5,8 +5,6 @@
 
   [private to local: success.]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [private to private: success.]
@@ -15,13 +13,12 @@
 
   [public to local: success.]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [public to private: success.]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if product == "chrome": FAIL
 
   [public to public: success.]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html.ini b/third_party/blink/web_tests/external/wpt/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html.ini
index 8f3aec51..cbac094b 100644
--- a/third_party/blink/web_tests/external/wpt/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html.ini
+++ b/third_party/blink/web_tests/external/wpt/focus/activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html.ini
@@ -1,3 +1,5 @@
 [activeelement-after-focusing-different-site-iframe-then-immediately-focusing-back.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Check focus event and active element after focusing different site iframe then immediately focusing back]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini b/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
index cd78228..c8cb0f97 100644
--- a/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
+++ b/third_party/blink/web_tests/external/wpt/focus/focus-already-focused-iframe-same-site.html.ini
@@ -1,4 +1,4 @@
 [focus-already-focused-iframe-same-site.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [TIMEOUT, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
     TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any-expected.txt
new file mode 100644
index 0000000..cc38797f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+PASS removeEntry() to remove a file
+PASS removeEntry() on an already removed file should fail
+PASS removeEntry() to remove an empty directory
+PASS removeEntry() on a non-empty directory should fail
+PASS removeEntry() on a directory recursively should delete all sub-items
+PASS removeEntry() with empty name should fail
+PASS removeEntry() with "." name should fail
+PASS removeEntry() with ".." name should fail
+PASS removeEntry() with a path separator should fail.
+PASS removeEntry() while the file has an open writable fails
+PASS removeEntry() of a directory while a containing file has an open writable fails
+FAIL createWritable after removeEntry succeeds but doesnt recreate the file assert_array_equals: lengths differ, expected array [] length 0, got ["file-to-remove.crswap"] length 1
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any.js.ini b/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any.js.ini
new file mode 100644
index 0000000..520d00fe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any.js.ini
@@ -0,0 +1,8 @@
+[FileSystemDirectoryHandle-removeEntry.https.any.html]
+  [createWritable after removeEntry succeeds but doesnt recreate the file]
+    expected: FAIL
+
+
+[FileSystemDirectoryHandle-removeEntry.https.any.worker.html]
+  [createWritable after removeEntry succeeds but doesnt recreate the file]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt
new file mode 100644
index 0000000..cc38797f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fs/FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt
@@ -0,0 +1,15 @@
+This is a testharness.js-based test.
+PASS removeEntry() to remove a file
+PASS removeEntry() on an already removed file should fail
+PASS removeEntry() to remove an empty directory
+PASS removeEntry() on a non-empty directory should fail
+PASS removeEntry() on a directory recursively should delete all sub-items
+PASS removeEntry() with empty name should fail
+PASS removeEntry() with "." name should fail
+PASS removeEntry() with ".." name should fail
+PASS removeEntry() with a path separator should fail.
+PASS removeEntry() while the file has an open writable fails
+PASS removeEntry() of a directory while a containing file has an open writable fails
+FAIL createWritable after removeEntry succeeds but doesnt recreate the file assert_array_equals: lengths differ, expected array [] length 0, got ["file-to-remove.crswap"] length 1
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js
index 93b03ef..83d8eef 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js
@@ -121,3 +121,15 @@
   await dir.removeEntry('file-to-remove');
   assert_array_equals(await getSortedDirectoryEntries(dir), ['file-to-keep']);
 }, 'removeEntry() of a directory while a containing file has an open writable fails');
+
+directory_test(async (t, root) => {
+  const handle =
+      await createFileWithContents(t, 'file-to-remove', '12345', root);
+  await root.removeEntry('file-to-remove');
+
+  await promise_rejects_dom(t, 'NotFoundError', cleanup_writable(t, handle.createWritable({keepExistingData: true})));
+
+  assert_array_equals(
+      await getSortedDirectoryEntries(root),
+      []);
+}, 'createWritable after removeEntry succeeds but doesnt recreate the file');
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-move.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-move.js
index fba0929..dd848626 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-move.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-move.js
@@ -350,3 +350,20 @@
   assert_equals(await getFileContents(file), 'abc');
   assert_equals(await getFileContents(file_dest), 'abc');
 }, 'move(dir, name) can overwrite an existing file');
+
+directory_test(async (t, root) => {
+  const handle =
+      await createFileWithContents(t, 'file-to-move', '12345', root);
+  const handle2 = handle;
+
+  await handle.move('file-was-moved');
+
+  assert_equals(await getFileContents(handle), '12345');
+  assert_equals(await getFileSize(handle), 5);
+  assert_equals(await getFileContents(handle2), '12345');
+  assert_equals(await getFileSize(handle2), 5);
+
+  assert_array_equals(
+      await getSortedDirectoryEntries(root),
+      ['file-was-moved']);
+}, 'FileSystemFileHandles are references, not paths');
diff --git a/third_party/blink/web_tests/external/wpt/hr-time/clamped-time-origin.html.ini b/third_party/blink/web_tests/external/wpt/hr-time/clamped-time-origin.html.ini
deleted file mode 100644
index c8e07f7..0000000
--- a/third_party/blink/web_tests/external/wpt/hr-time/clamped-time-origin.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[clamped-time-origin.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
index 4363cfd7..123aa8a 100644
--- a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/embedding.tentative.https.window.js.ini
@@ -17,14 +17,10 @@
     if product == "chrome": ERROR
 
 [embedding.tentative.https.window.html?11-11]
-  expected:
-    if product == "chrome": [ERROR, OK]
 
 [embedding.tentative.https.window.html?5-5]
 
 [embedding.tentative.https.window.html?1-1]
-  expected:
-    if product == "chrome": [OK, ERROR]
 
 [embedding.tentative.https.window.html?6-6]
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/srcdoc/srcdoc-history-entries.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/srcdoc/srcdoc-history-entries.html.ini
index 4b9af48..db51e3d 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/srcdoc/srcdoc-history-entries.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/srcdoc/srcdoc-history-entries.html.ini
@@ -1,5 +1,6 @@
 [srcdoc-history-entries.html]
-  expected: [OK, ERROR]
+  expected:
+    if product == "chrome": ERROR
   [srcdoc history entries: the iframe itself navigates]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini
index 8452eaf..7404541 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini
@@ -1,3 +1,7 @@
 [cross-document-traversal-cross-document-traversal.html]
   [cross-document traversals in opposite directions, second traversal invalid at queuing time but valid at the time it is run: the result is going nowhere]
     expected: FAIL
+
+  [cross-document traversals in the same (back) direction: the result is going -2 with only one load event]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
index 7040e50..2ff88db 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/same-document-traversal-cross-document-traversal.html.ini
@@ -1,6 +1,6 @@
 [same-document-traversal-cross-document-traversal.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": TIMEOUT
   [traversals in the same (back) direction: queued up]
     expected: [PASS, TIMEOUT]
 
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index d9dc93d4..6cf1e4a 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -1,8 +1,10 @@
 [location-protocol-setter-non-broken.html]
   [Set HTTP URL frame location.protocol to data]
-    expected: FAIL
+    expected:
+      if os == "win": PASS
+      FAIL
 
   [Set data URL frame location.protocol to data]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
-      FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-same.sub.https.html.ini
index c5662b4..7683c12 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-same.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-same.sub.https.html.ini
@@ -1,10 +1,10 @@
 [parent-yes-child-no-same.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child: originAgentCluster must equal true]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if (flag_specific == "") and (product == "chrome"): FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
index 89421e99..f65910a 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-no-subdomain.sub.https.html.ini
@@ -1,8 +1,11 @@
 [parent-yes-child-no-subdomain.sub.https.html]
   [setting document.domain must not give sync access]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if product == "chrome": FAIL
 
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
index 2c3782b..1fe7649 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/1-iframe/parent-yes-child-yes-port.sub.https.html.ini
@@ -1,5 +1,4 @@
 [parent-yes-child-yes-port.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
index 34daf543..9be6e053 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
@@ -10,11 +10,3 @@
       if (flag_specific == "") and (product == "chrome"): PASS
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
-
-  [child1: originAgentCluster must equal false]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-
-  [child2: originAgentCluster must equal false]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain1-child2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain1-child2-yes-subdomain2.sub.https.html.ini
index ff06302c..8d6437a2 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain1-child2-yes-subdomain2.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-no-subdomain1-child2-yes-subdomain2.sub.https.html.ini
@@ -2,8 +2,5 @@
   [Parent to child1: setting document.domain must give sync access]
     expected:
       if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
-
-  [parent: originAgentCluster must equal false]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
index 291c5ea..e915931 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html.ini
@@ -1,12 +1,4 @@
 [parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html]
-  [child1: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [child2: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
   [parent: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
index 55c95079..e77ac91 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html.ini
@@ -10,3 +10,11 @@
   [parent: originAgentCluster must equal true]
     expected:
       if product == "chrome": FAIL
+
+  [child2: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [child1: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini
index 9bcd0656..22c89262 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html.ini
@@ -1,24 +1,12 @@
 [parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html]
-  [Parent to child1: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [Parent to child2: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
   [child1 to child2: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child2 to child1: setting document.domain must not give sync access]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [parent: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [child2: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
index ce25982..55806ef 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html.ini
@@ -6,3 +6,7 @@
   [parent: originAgentCluster must equal true]
     expected:
       if product == "chrome": FAIL
+
+  [child1: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini
index 3be8b66c..3735ac72c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html.ini
@@ -1,12 +1,21 @@
 [parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [child2: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [Parent to child2: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [Parent to child1: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
index e3b0508..9fafc5f9 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html.ini
@@ -1,8 +1,14 @@
 [parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html]
   [parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [child1: originAgentCluster must equal true]
     expected:
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if os == "win": FAIL
+
+  [Parent to child1: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
index 5aea743..992e8c13 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/document-domain.sub.https.html.ini
@@ -1,9 +1,4 @@
 [document-domain.sub.https.html]
   [Setting document.domain must not change same-originness]
     expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
-      if product == "chrome": FAIL
-
-  [Having an origin-keyed subdomain child try to set document.domain must not change the document.domain value it sees]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/removed-iframe.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/removed-iframe.sub.https.html.ini
deleted file mode 100644
index c8a2756..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/getter-special-cases/removed-iframe.sub.https.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[removed-iframe.sub.https.html]
-  [Removing the iframe does not change originAgentCluster]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
index c6771c46d..d6a944e 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html.ini
@@ -1,15 +1,12 @@
 [parent-no-1-no-same-2-yes-port.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [before child: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
index 63bab1a6..42a9ff4 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html.ini
@@ -1,23 +1,15 @@
 [parent-no-1-no-same-2-yes-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
+      if os == "win": FAIL
 
   [before child: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
+      if os == "win": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [After: parent to child: setting document.domain must not give sync access]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [after child: originAgentCluster must equal true]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
index 00a1ce1..220392e 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini
@@ -1,22 +1,30 @@
 [parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html]
   [Before: parent to child: setting document.domain must give sync access]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": PASS
       FAIL
 
   [After: parent to child: setting document.domain must give sync access]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": PASS
       FAIL
 
   [before parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [PASS, FAIL]
-      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (flag_specific == "") and (product == "content_shell"): FAIL
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [PASS, FAIL]
-      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (flag_specific == "") and (product == "content_shell"): FAIL
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+
+  [before child: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [after child: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
index 9c69f1db..5a34e46 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini
@@ -7,16 +7,21 @@
 
   [after child: originAgentCluster must equal true]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [before child: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
 
   [before parent: originAgentCluster must equal false]
     expected:
-      if os == "win": [PASS, FAIL]
+      if os == "win": FAIL
+
+  [After: parent to child: setting document.domain must not give sync access]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
index 632bbf12..29817d3c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html.ini
@@ -4,17 +4,3 @@
       if (flag_specific == "") and (product == "chrome"): PASS
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
-
-  [after parent: originAgentCluster must equal false]
-    expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [before parent: originAgentCluster must equal false]
-    expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": FAIL
-
-  [before child: originAgentCluster must equal true]
-    expected:
-      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
index e41b3bd..609e2e4 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html.ini
@@ -1,20 +1,16 @@
 [parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html]
   [before parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
       if flag_specific == "disable-layout-ng": FAIL
 
   [after parent: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
       if flag_specific == "disable-layout-ng": FAIL
 
   [before child: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
       if flag_specific == "disable-layout-ng": FAIL
 
   [after child: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
       if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini
index 8215e4c..71e78121 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html.ini
@@ -1,10 +1,14 @@
 [parent-yes-1-no-same-2-no-port.sub.https.html]
   [before parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [before child: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [After: parent to child: setting document.domain must not give sync access]
@@ -13,4 +17,11 @@
 
   [after parent: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
+      if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
       if product == "chrome": FAIL
+
+  [after child: originAgentCluster must equal false]
+    expected:
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
index f4649ba..6c1b6d6 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini
@@ -1,24 +1,16 @@
 [parent-yes-1-no-same-2-no-subdomain.sub.https.html]
   [after child: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-
-  [After: parent to child: setting document.domain must not give sync access]
-    expected:
-      if product == "chrome": FAIL
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [after parent: originAgentCluster must equal true]
     expected:
-      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if os == "win": FAIL
 
   [before parent: originAgentCluster must equal true]
     expected:
-      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if os == "win": FAIL
 
   [before child: originAgentCluster must equal true]
     expected:
-      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if product == "chrome": FAIL
+      if os == "win": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini
index b16002c8..dd90d39e 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-same.sub.https.html.ini
@@ -1,8 +1,10 @@
 [opener-no-openee-yes-same.sub.https.html]
   [opener: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
 
   [openee: originAgentCluster must equal false]
     expected:
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini
index f3dfa02d..5a5800fa 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-no-openee-yes-subdomain.sub.https.html.ini
@@ -1,5 +1,10 @@
 [opener-no-openee-yes-subdomain.sub.https.html]
   [opener: originAgentCluster must equal false]
     expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": FAIL
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if (os == "linux") and (flag_specific == "disable-layout-ng"): FAIL
+      if os == "win": [PASS, FAIL]
+
+  [openee: originAgentCluster must equal true]
+    expected:
+      if os == "win": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
index dd8f7aa6..79f3072f 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-port.sub.https.html.ini
@@ -2,11 +2,7 @@
   [setting document.domain must not give sync access]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
 
   [opener: originAgentCluster must equal true]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-subdomain.sub.https.html.ini
deleted file mode 100644
index 2c29a68..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-no-subdomain.sub.https.html.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[opener-yes-openee-no-subdomain.sub.https.html]
-  [setting document.domain must not give sync access]
-    expected:
-      if product == "chrome": FAIL
-
-  [opener: originAgentCluster must equal true]
-    expected:
-      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
index e143134..9f1c64b9 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-port.sub.https.html.ini
@@ -1,5 +1,4 @@
 [opener-yes-openee-yes-port.sub.https.html]
   [opener: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini
index 34df7b45..b6a9865 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-same.sub.https.html.ini
@@ -1,8 +1,10 @@
 [opener-yes-openee-yes-same.sub.https.html]
   [opener: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
       if product == "chrome": FAIL
 
   [openee: originAgentCluster must equal true]
     expected:
+      if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
index a51710454..b9b27ce 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/origin-keyed-agent-clusters/popups/opener-yes-openee-yes-subdomain.sub.https.html.ini
@@ -1,5 +1,4 @@
 [opener-yes-openee-yes-subdomain.sub.https.html]
-  [openee: originAgentCluster must equal true]
+  [opener: originAgentCluster must equal true]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
-      if flag_specific == "disable-layout-ng": FAIL
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-innerwidth.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-innerwidth.html.ini
deleted file mode 100644
index d2bec7b..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-innerwidth.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[open-features-non-integer-innerwidth.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-width.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-width.html.ini
deleted file mode 100644
index a5e915f..0000000
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-width.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[open-features-non-integer-width.html]
-  expected:
-    if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-innerheight-innerwidth.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-innerheight-innerwidth.html.ini
index ccc3a0f..646e2a2a 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-innerheight-innerwidth.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-innerheight-innerwidth.html.ini
@@ -1,3 +1,3 @@
 [open-features-tokenization-innerheight-innerwidth.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini
index dc5fb3e..21394d1c 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-tokenization-top-left.html.ini
@@ -1,4 +1,6 @@
 [open-features-tokenization-top-left.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [",,top= 152, left=152" should set top and left position of opened window]
     expected:
       if product == "chrome": PASS
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
index e38b841..a4aab5a8 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-noopener.html.ini
@@ -4,6 +4,6 @@
 
 [window-open-noopener.html?indexed]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [window-open-noopener.html?_self]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini
index d9e0e4f..ef909a9 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/window-open-windowfeatures-values.html.ini
@@ -1,3 +1,3 @@
 [window-open-windowfeatures-values.html]
   expected:
-    if product == "chrome": [ERROR, TIMEOUT]
+    if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/filters/tentative/canvas-filter-object-turbulence.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/filters/tentative/canvas-filter-object-turbulence.html.ini
index 64be7110..77a860fe 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/filters/tentative/canvas-filter-object-turbulence.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/filters/tentative/canvas-filter-object-turbulence.html.ini
@@ -1,4 +1,4 @@
 [canvas-filter-object-turbulence.html]
   expected:
-    if flag_specific == "disable-layout-ng": [FAIL, TIMEOUT]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [FAIL, TIMEOUT]
     FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini
index 4e33b7b..d081331 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage-ImageBitmap-video.html.ini
@@ -1,4 +1,6 @@
 [canvas-display-p3-drawImage-ImageBitmap-video.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
   [Rec2020-3FF000000, Context srgb, ImageData srgb, cropSource=false]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "chrome"): PASS
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini
deleted file mode 100644
index 55cf49a5..0000000
--- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[2d.drawImage.animated.poster.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
index c462343..bd417e8 100644
--- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html.ini
@@ -1,13 +1,14 @@
 [offscreencanvas.resize.html]
   [Verify that resizing an OffscreenCanvas with a webgl context propagates the new size to its placeholder canvas asynchronously.]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
       if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
+      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
 
   [Verify that drawImage uses the size of the frame as the intinsic size of a placeholder canvas.]
     expected:
       if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [FAIL, PASS]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if (flag_specific == "") and (os == "win"): [FAIL, PASS]
 
   [Verify that resizing an OffscreenCanvas with a 2d context propagates the new size to its placeholder canvas asynchronously.]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.js.ini
new file mode 100644
index 0000000..c09e71d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.js.ini
@@ -0,0 +1,3 @@
+[fetch.https.window.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/iframe-coep-credentialless.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/iframe-coep-credentialless.https.window.js.ini
deleted file mode 100644
index eb8b86f..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/iframe-coep-credentialless.https.window.js.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[iframe-coep-credentialless.https.window.html?5-9]
-
-[iframe-coep-credentialless.https.window.html?9-last]
-  expected:
-    if product == "chrome": ERROR
-
-[iframe-coep-credentialless.https.window.html?1-4]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/service-worker-coep-none-proxy.https.window.js.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/service-worker-coep-none-proxy.https.window.js.ini
deleted file mode 100644
index e44966b97..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/credentialless/service-worker-coep-none-proxy.https.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[service-worker-coep-none-proxy.https.window.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini
index af2cc24d..dd9391b4 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html.ini
@@ -1,6 +1,6 @@
 [dedicated-worker.https.html]
   expected:
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
   [COEP: require-corp worker in COEP: none frame]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini
index bed1359b0..0617f30e 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini
@@ -1,10 +1,12 @@
 [header-parsing-failures.https.html?12-last]
 
 [header-parsing-failures.https.html?5-8]
+  expected:
+    if product == "chrome": [OK, ERROR]
 
 [header-parsing-failures.https.html?9-12]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [header-parsing-failures.https.html?1-4]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini
deleted file mode 100644
index 8eb49f5..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.ini
new file mode 100644
index 0000000..e5f17f95
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html.ini
@@ -0,0 +1,3 @@
+[popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.ini
index 8d718f6b6..596920f 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html.ini
@@ -1,3 +1,3 @@
 [popup-same-site-unsafe-allow-outgoing-with-same-site.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.ini
index 536e2c0..69a79d9 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html.ini
@@ -1,3 +1,3 @@
 [popup-same-site-with-same-site.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini
index c563da9..9813f106 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html.ini
@@ -16,4 +16,4 @@
 
 [iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html?9-last]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin.https.html.ini
index 108522d6..fbb8b7e 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin.https.html.ini
@@ -4,7 +4,7 @@
 
 [iframe-popup-same-origin-allow-popups-to-same-origin.https.html?9-last]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [iframe-popup-same-origin-allow-popups-to-same-origin.https.html?3-4]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
index 223c26b..c6cd6b7 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html.ini
@@ -7,8 +7,6 @@
     if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-same-origin.https.html?9-last]
-  expected:
-    if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-same-origin.https.html?7-8]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
index 0334c03e0..872be04 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html.ini
@@ -7,10 +7,12 @@
     if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-unsafe-none.https.html?1-2]
+  expected:
+    if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-unsafe-none.https.html?9-last]
   expected:
-    if product == "chrome": [ERROR, OK]
+    if product == "chrome": ERROR
 
 [iframe-popup-same-origin-to-unsafe-none.https.html?3-4]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
index 69d18ba4..abf40f5 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html.ini
@@ -4,7 +4,7 @@
 
 [iframe-popup-unsafe-none-to-same-origin.https.html?9-last]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [iframe-popup-unsafe-none-to-same-origin.https.html?7-8]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini
index 2bb70ff43..c1f50620 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html.ini
@@ -7,10 +7,12 @@
     if product == "chrome": ERROR
 
 [iframe-popup-unsafe-none-to-unsafe-none.https.html?5-6]
+  expected:
+    if product == "chrome": ERROR
 
 [iframe-popup-unsafe-none-to-unsafe-none.https.html?9-last]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
 
 [iframe-popup-unsafe-none-to-unsafe-none.https.html?1-2]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
index 7bb1eb2..bb3f7ca 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/javascript-url.https.html.ini
@@ -17,14 +17,14 @@
     if product == "chrome": ERROR
 
 [javascript-url.https.html?17-last]
-  expected:
-    if product == "chrome": ERROR
 
 [javascript-url.https.html?5-6]
   expected:
     if product == "chrome": ERROR
 
 [javascript-url.https.html?7-8]
+  expected:
+    if product == "chrome": [ERROR, OK]
 
 [javascript-url.https.html?9-10]
   expected:
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini
deleted file mode 100644
index bfc9a64..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-redirect-same-origin-allow-popups.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.ini
deleted file mode 100644
index 71b1557..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-same-origin-allow-popups-with-same-origin.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini
new file mode 100644
index 0000000..ef3655a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html.ini
@@ -0,0 +1,3 @@
+[popup-same-origin-with-same-site.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html.ini
deleted file mode 100644
index 0d2dc3b..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[popup-unspecified-with-same-origin.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro_cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro_cross-origin.https.html.ini
index 7e47b2b0..9638f4b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro_cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro_cross-origin.https.html.ini
@@ -1,3 +1,8 @@
 [access-from-coop-page-to-opener_coop-ro_cross-origin.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [access-from-coop-page-to-opener, cross-origin]
+    expected:
+      if product == "chrome": FAIL
+
+  [access-from-coop-page-to-opener, cross-origin + redirect]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini
index dd923b49..ad1f304 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html.ini
@@ -1,3 +1,6 @@
 [access-from-coop-page-to-other_coop-ro.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [access-from-coop-page-to-other (COOP-RO)]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini
index 56b8e03..dd5c96b2 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html.ini
@@ -1,6 +1,3 @@
 [access-from-coop-page-to-other_coop-ro_cross-origin.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [access-from-coop-page-to-other (COOP-RO)]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini
index 45761bca..7f632e5e 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html.ini
@@ -1,3 +1,8 @@
 [access-to-coop-page-from-openee_coop-ro.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [access-to-coop-page-from-openee, same-origin + redirect]
+    expected:
+      if product == "chrome": FAIL
+
+  [access-to-coop-page-from-openee, same-origin]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-opener_coop-ro_cross-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-opener_coop-ro_cross-origin.https.html.ini
index 9e0d21c..098e5d0 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-opener_coop-ro_cross-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-opener_coop-ro_cross-origin.https.html.ini
@@ -1,3 +1,10 @@
 [access-to-coop-page-from-opener_coop-ro_cross-origin.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [access-to-coop-page-from-opener, cross-origin + redirect]
+    expected:
+      if product == "chrome": FAIL
+
+  [access-to-coop-page-from-opener, cross-origin]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini
index 3ee2c657..ad0e9b0 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html.ini
@@ -1,10 +1,3 @@
 [property-closed.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [same-origin > w => w.closed]
-    expected:
-      if product == "chrome": FAIL
-
-  [cross-origin > w => w.closed]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini
index f6d2d33..01f4fcd 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html.ini
@@ -1,10 +1,3 @@
 [property-frames.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [cross-origin > w => w.frames]
-    expected:
-      if product == "chrome": FAIL
-
-  [same-origin > w => w.frames]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html.ini
index 4186abaa..9f7656c 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html.ini
@@ -1,3 +1,3 @@
 [property-indexed-getter.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini
index abdad65..c054f77 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html.ini
@@ -1,6 +1,4 @@
 [property-length.https.html]
-  expected:
-    if product == "chrome": [ERROR, OK]
   [cross-origin > w => w.length]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-get.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-get.https.html.ini
index dcfc817..1f008e25 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-get.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-get.https.html.ini
@@ -1,3 +1,10 @@
 [property-location-get.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, CRASH]
+  [cross-origin > w => w.location]
+    expected:
+      if product == "chrome": FAIL
+
+  [same-origin > w => w.location]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-named-getter.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-named-getter.https.html.ini
deleted file mode 100644
index a713a5f..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-named-getter.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[property-named-getter.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
index 7eb4dc0..76173f05 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html.ini
@@ -1,10 +1,3 @@
 [property-opener-get.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [same-origin > w => w.opener]
-    expected:
-      if product == "chrome": FAIL
-
-  [cross-origin > w => w.opener]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html.ini
deleted file mode 100644
index 5111ef2..0000000
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[property-opener-set.https.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini
index 586bba13..b1ed4b5 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html.ini
@@ -1,3 +1,10 @@
 [property-postmessage-2.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [same-origin > w => w.postMessage("")]
+    expected:
+      if product == "chrome": FAIL
+
+  [cross-origin > w => w.postMessage("")]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini
index 911a48f..189215bc 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html.ini
@@ -1,10 +1,3 @@
 [property-self.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [cross-origin > w => w.self]
-    expected:
-      if product == "chrome": FAIL
-
-  [same-origin > w => w.self]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
index 86f71d589..e3a7586a 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html.ini
@@ -1,10 +1,3 @@
 [property-top.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [same-origin > w => w.top]
-    expected:
-      if product == "chrome": FAIL
-
-  [cross-origin > w => w.top]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini
index 78ab09d..799db67 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html.ini
@@ -1,3 +1,10 @@
 [property-window.https.html]
   expected:
-    if product == "chrome": ERROR
+    if product == "chrome": [OK, ERROR]
+  [same-origin > w => w.window]
+    expected:
+      if product == "chrome": FAIL
+
+  [cross-origin > w => w.window]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
index cfda1f96..46d3e245 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html.ini
@@ -1,10 +1,3 @@
 [report-to-both_coop-ro.https.html]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [Access from opener]
-    expected:
-      if product == "chrome": FAIL
-
-  [Access from openee]
-    expected:
-      if product == "chrome": FAIL
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/report-to-both_coop-ro.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/report-to-both_coop-ro.https.html.ini
index 46d3e245..3533c77b 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/report-to-both_coop-ro.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/reporting/document-reporting/report-to-both_coop-ro.https.html.ini
@@ -1,3 +1,8 @@
 [report-to-both_coop-ro.https.html]
-  expected:
-    if product == "chrome": ERROR
+  [Access from opener]
+    expected:
+      if product == "chrome": FAIL
+
+  [Access from openee]
+    expected:
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
index 42c5e121..4a6e628 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/resource-popup.https.html.ini
@@ -1,3 +1,4 @@
 [resource-popup.https.html]
   expected:
-    if product == "chrome": [ERROR, OK]
+    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
index f8a499ba..b62b4dc 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-so.https.html.ini
@@ -15,3 +15,5 @@
     if product == "chrome": ERROR
 
 [iframe-popup-to-so.https.html?9-last]
+  expected:
+    if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini
index f6ec1bf..f8661d5 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-soap.https.html.ini
@@ -12,8 +12,6 @@
 
 [iframe-popup-to-soap.https.html?5-6]
   expected:
-    if product == "chrome": [ERROR, CRASH]
+    if product == "chrome": ERROR
 
 [iframe-popup-to-soap.https.html?9-last]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
index f3681f2..4f6dc5095 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html.ini
@@ -9,8 +9,6 @@
 
 
 [iframe-popup.https.html?9-last]
-  expected:
-    if product == "chrome": ERROR
   [COOP: restrict-properties to popup COOP: restrict-properties via an iframe, with cross origin iframe, cross origin popup with window_open]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-u.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-u.https.html.ini
index d559eb64..e594813 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-u.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-u.https.html.ini
@@ -1,6 +1,4 @@
 [popup-u.https.html]
-  expected:
-    if product == "chrome": ERROR
   [SAME_ORIGIN popup with coop restrict-properties]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini
index 5e23173a..a2bc292 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html.ini
@@ -1,4 +1,6 @@
 [popup-with-same-origin.https.html]
+  expected:
+    if product == "chrome": [OK, ERROR]
   [Same-origin popup with coop restrict-properties]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/parser-inserted-async-script.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/parser-inserted-async-script.tentative.html.ini
deleted file mode 100644
index 632b0b9..0000000
--- a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/parser-inserted-async-script.tentative.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[parser-inserted-async-script.tentative.html]
-  [Rendering is blocked before render-blocking resources are loaded]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/script-inserted-script.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/script-inserted-script.html.ini
deleted file mode 100644
index 7ee50e3..0000000
--- a/third_party/blink/web_tests/external/wpt/html/dom/render-blocking/script-inserted-script.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[script-inserted-script.html]
-  [Rendering is blocked before render-blocking resources are loaded]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/dnd/the-draggable-attribute/draggable-enumerated-ascii-case-insensitive.html.ini b/third_party/blink/web_tests/external/wpt/html/editing/dnd/the-draggable-attribute/draggable-enumerated-ascii-case-insensitive.html.ini
new file mode 100644
index 0000000..0de297a8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/editing/dnd/the-draggable-attribute/draggable-enumerated-ascii-case-insensitive.html.ini
@@ -0,0 +1,3 @@
+[draggable-enumerated-ascii-case-insensitive.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini
index a1bc56f..5a66574c 100644
--- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html.ini
@@ -1,6 +1,4 @@
 [nested-sharedworker-success.https.html]
-  expected:
-    if os == "win": TIMEOUT
   [postMessaging to a dedicated sub-worker allows them to see each others' modifications]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
index 0fb6a830..832554d 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html.ini
@@ -1,5 +1,3 @@
 [resource-selection-invoke-audio-constructor.html]
   [invoking resource selection with new Audio(src)]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": PASS
-      FAIL
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini
index 3829b48..943c9efa 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html.ini
@@ -1,5 +1,5 @@
 [resource-selection-invoke-insert-source-not-in-document.html]
   [invoking resource selection by inserting <source> in video not in a document]
     expected:
-      if flag_specific == "disable-site-isolation-trials": PASS
+      if flag_specific == "disable-site-isolation-trials": [FAIL, PASS]
       FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
index 5e49a00..90bfb40 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html.ini
@@ -1,3 +1,5 @@
 [resource-selection-invoke-insert-source.html]
   [invoking resource selection by inserting <source>]
-    expected: FAIL
+    expected:
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini
deleted file mode 100644
index 38fb5bf..0000000
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[resource-selection-invoke-remove-src.html]
-  [NOT invoking media load or resource selection when removing the src attribute]
-    expected:
-      if flag_specific == "disable-site-isolation-trials": FAIL
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini
index f2a0952f..f899a93 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html.ini
@@ -1,6 +1,5 @@
 [resource-selection-invoke-set-src-not-in-document.html]
   [invoking load by setting src on video not in a document]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): PASS
-      if flag_specific == "disable-layout-ng": PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini
index c0581652..cebb3a9 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html.ini
@@ -1,3 +1,6 @@
 [resource-selection-invoke-set-src.html]
   [invoking load by setting src]
-    expected: FAIL
+    expected:
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-layout-ng": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
index b8c5187..e839e1a5 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html.ini
@@ -1,3 +1,4 @@
 [track-cue-rendering-after-controls-removed.html]
   expected:
-    if (flag_specific == "") and (product == "content_shell"): FAIL
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+    if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
index 3c61042..35055d35 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child-special-cases.tentative.sub.window.js.ini
@@ -1,3 +1,5 @@
 [sandbox-top-navigation-child-special-cases.tentative.sub.window.html]
   expected:
-    if (flag_specific == "") and (product == "chrome"): ERROR
+    if (product == "content_shell") and (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [TIMEOUT, OK]
+    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini
index dcc3ec0c..7ce20ab 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-child.tentative.sub.window.js.ini
@@ -1,5 +1,3 @@
 [sandbox-top-navigation-child.tentative.sub.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
-    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): TIMEOUT
-    if product == "chrome": ERROR
+    if (os == "linux") and (product == "chrome"): ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini
index 51b5920..337e2b6 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-escalate-privileges.tentative.sub.window.js.ini
@@ -1,4 +1,4 @@
 [sandbox-top-navigation-escalate-privileges.tentative.sub.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
-    if product == "chrome": ERROR
+    if (flag_specific == "") and (os == "linux") and (product == "chrome"): ERROR
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini
index 39e00b4..6be4ba0f 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-grandchild.tentative.sub.window.js.ini
@@ -1,5 +1,4 @@
 [sandbox-top-navigation-grandchild.tentative.sub.window.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
-    if (product == "content_shell") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT]
-    if product == "chrome": ERROR
+    if (flag_specific == "") and (os == "linux") and (product == "chrome"): ERROR
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-video-element/resize-during-playback.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-video-element/resize-during-playback.html.ini
index ec7d98f7..ce1e80b1 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-video-element/resize-during-playback.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-video-element/resize-during-playback.html.ini
@@ -4,4 +4,4 @@
 
   [webm video]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.js.ini
index 75afcf0..ad962b9 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-0/text-plain.window.js.ini
@@ -1,110 +1,3 @@
 [text-plain.window.html]
   expected:
-    if product == "chrome": [OK, TIMEOUT]
-  [text/plain: \\n\\r in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, TIMEOUT]
-
-  [text/plain: double quote in name (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: double quote in name (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: double quote in value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: double quote in value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: double quote in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: double quote in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: single quote in name (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: single quote in name (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: single quote in value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: single quote in value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: single quote in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: single quote in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: backslash in name (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: backslash in name (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: backslash in value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: backslash in value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: backslash in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: backslash in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: non-ASCII in name and value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: non-ASCII in name and value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: non-ASCII in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: non-ASCII in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: characters not in encoding in name and value (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: characters not in encoding in name and value (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: character not in encoding in filename (normal form)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
-
-  [text/plain: character not in encoding in filename (formdata event)]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html.ini
new file mode 100644
index 0000000..99e0450
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html.ini
@@ -0,0 +1,3 @@
+[rel-base-target.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
index e097453..f8bbcfc 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-form-state-restore.tentative.html.ini
@@ -1,4 +1,4 @@
 [selectmenu-form-state-restore.tentative.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": ERROR
-    if flag_specific == "disable-layout-ng": ERROR
+    if (os == "linux") and (product == "chrome"): [OK, ERROR]
+    if os == "win": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/idlharness.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/idlharness.tentative.html
new file mode 100644
index 0000000..478dec8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/idlharness.tentative.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<link rel=author href="mailto:masonf@chromium.org">
+<link rel=help href="https://open-ui.org/components/popup.research.explainer">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/WebIDLParser.js></script>
+<script src=/resources/idlharness.js></script>
+
+<div id=p1 popover></div>
+<div id=p2 popover=auto></div>
+<div id=p3 popover=manual></div>
+<button id=b1 popovertoggletarget=p1></button>
+<button id=b2 popoverhidetarget=p2></button>
+<button id=b3 popovershowtarget=p3></button>
+<input id=i1 type=button popovertoggletarget=p1></input>
+<input id=i2 type=button popoverhidetarget=p2></input>
+<input id=i3 type=button popovershowtarget=p3></input>
+
+<script type="module">
+'use strict';
+
+idl_test(
+  ['popover.tentative'],
+  ['html','dom'],
+  idl_array => {
+    idl_array.add_objects({
+      HTMLElement: [
+        'document.getElementById("p1")',
+        'document.getElementById("p2")',
+        'document.getElementById("p3")',
+      ],
+      HTMLInputElement: [
+        'document.getElementById("i1")',
+        'document.getElementById("i2")',
+        'document.getElementById("i3")',
+      ],
+      HTMLButtonElement: [
+        'document.getElementById("b1")',
+        'document.getElementById("b2")',
+        'document.getElementById("b3")',
+      ],
+      BeforeToggleEvent: [
+        'new BeforeToggleEvent("beforetoggle")',
+        'new BeforeToggleEvent("beforetoggle", {currentState: "open"})',
+        'new BeforeToggleEvent("beforetoggle", {currentState: "open",newState: "open"})',
+      ],
+    });
+  }
+);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-events.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-events.tentative.html
index 7d63ce74..c88dc21 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-events.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-events.tentative.html
@@ -63,7 +63,7 @@
       assert_false(popover.matches(':open'));
       assert_equals(1,showCount);
       assert_equals(1,hideCount);
-    }, `Toggle event (${method}) get properly dispatched for popovers`);
+    }, `Beforetoggle event (${method}) get properly dispatched for popovers`);
   }
 
   promise_test(async t => {
@@ -86,6 +86,24 @@
     assert_true(popover.matches(':open'));
     popover.hidePopover();
     assert_false(popover.matches(':open'));
-  }, 'Toggle event is cancelable for the "opening" transition');
+  }, 'Beforetoggle event is cancelable for the "opening" transition');
+
+  promise_test(async t => {
+    const popover = document.querySelector('[popover]');
+    const controller = new AbortController();
+    const signal = controller.signal;
+    t.add_cleanup(() => {controller.abort();});
+    popover.addEventListener('beforetoggle',(e) => {
+      assert_not_equals(e.newState,"closed",'The "beforetoggle" event was fired for the closing transition');
+    }, {signal});
+    assert_false(popover.matches(':open'));
+    popover.showPopover();
+    assert_true(popover.matches(':open'));
+    t.add_cleanup(() => {document.body.appendChild(popover);});
+    popover.remove();
+    await waitForRender(); // Check for async events also
+    await waitForRender(); // Check for async events also
+    assert_false(popover.matches(':open'));
+  }, 'Beforetoggle event is not fired for element removal');
 };
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini
deleted file mode 100644
index a61a58d6..0000000
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.js.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[queue-microtask-exceptions.any.worker.html]
-  expected:
-    if product == "chrome": ERROR
-
-[queue-microtask-exceptions.any.html]
-
-[queue-microtask-exceptions.any.sharedworker.html]
-
-[queue-microtask-exceptions.any.serviceworker.html]
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini
index d233bac6..50da5827 100644
--- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.js.ini
@@ -1,6 +1,6 @@
 [fully_active_document.window.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, CRASH]
-    if product == "chrome": ERROR
+    if (os == "linux") and (product == "content_shell") and (flag_specific == ""): [OK, CRASH]
+    if (os == "linux") and (product == "chrome"): ERROR
   [Tasks for documents that are not fully active are stored, and run when the documents becomes fully-active]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini
index 6f363c1..72ab707 100644
--- a/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.ini
@@ -14,3 +14,6 @@
 
   [Permissions-Policy idle-detection=* explicity set by top-level frame allows workers in cross-origin iframes.]
     expected: NOTRUN
+
+  [Inherited header permissions policy allows dedicated workers.]
+    expected: [FAIL, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini b/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
index 667aadcf..66e623f8 100644
--- a/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/infrastructure/server/webtransport-h3.https.sub.any.js.ini
@@ -11,9 +11,8 @@
 
 
 [webtransport-h3.https.sub.any.sharedworker.html]
+
+[webtransport-h3.https.sub.any.html]
   [WebTransport server should be running and should handle a bidirectional stream]
     expected:
       if os == "win": FAIL
-
-
-[webtransport-h3.https.sub.any.html]
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/popover.tentative.idl b/third_party/blink/web_tests/external/wpt/interfaces/popover.tentative.idl
new file mode 100644
index 0000000..3d7fdcff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/interfaces/popover.tentative.idl
@@ -0,0 +1,27 @@
+partial interface HTMLElement {
+  undefined togglePopover(optional boolean force);
+  undefined showPopover();
+  undefined hidePopover();
+  [CEReactions] attribute DOMString? popover;
+};
+
+interface mixin PopoverTargetElement {
+  // TODO(crbug.com/1405856): These might change to `Element`, or additional
+  // attributes like `popoverToggleTargetElement` might be added for that.
+  [CEReactions] attribute DOMString? popoverToggleTarget;
+  [CEReactions] attribute DOMString? popoverHideTarget;
+  [CEReactions] attribute DOMString? popoverShowTarget;
+};
+HTMLInputElement includes PopoverTargetElement;
+HTMLButtonElement includes PopoverTargetElement;
+
+interface BeforeToggleEvent : Event {
+    constructor(DOMString type, optional BeforeToggleEventInit eventInitDict = {});
+    readonly attribute DOMString currentState;
+    readonly attribute DOMString newState;
+};
+
+dictionary BeforeToggleEventInit : EventInit {
+    DOMString currentState = "";
+    DOMString newState = "";
+};
diff --git a/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini b/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
index 28a82ff..2fedf3a 100644
--- a/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/intersection-observer/cross-origin-iframe.sub.html.ini
@@ -1,9 +1,14 @@
 [cross-origin-iframe.sub.html]
   [topDocument.scrollingElement.scrollTop = 200]
     expected:
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "chrome"): FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
       if flag_specific == "disable-site-isolation-trials": FAIL
 
   [topDocument.scrollingElement.scrollTop = 100]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+
+  [iframeDocument.scrollingElement.scrollTop = 250]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/intervention-reporting/idlharness.any.js.ini b/third_party/blink/web_tests/external/wpt/intervention-reporting/idlharness.any.js.ini
new file mode 100644
index 0000000..a807bac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/intervention-reporting/idlharness.any.js.ini
@@ -0,0 +1,5 @@
+[idlharness.any.worker.html]
+
+[idlharness.any.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
index 7c73053..946a331 100644
--- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
+++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html.ini
@@ -1,5 +1,6 @@
 [first-paint-equals-lcp-text.html]
   [FCP and LCP are the same when there is a single text element in the page.]
     expected:
+      if (flag_specific == "") and (os == "win"): PASS
       if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
index d55450e..08b5950 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/csp-early-hints-absent-final-absent.h2.window.js.ini
@@ -1,4 +1,2 @@
 [csp-early-hints-absent-final-absent.h2.window.html]
-  expected:
-    if product == "chrome": [OK, ERROR]
-    ERROR
+  expected: ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-origin.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-origin.h2.window.js.ini
index e7c4884..afb4eab4 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-origin.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-origin.h2.window.js.ini
@@ -1,2 +1,4 @@
 [referrer-policy-origin.h2.window.html]
-  expected: ERROR
+  expected:
+    if product == "chrome": OK
+    ERROR
diff --git a/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-unsafe-url.h2.window.js.ini b/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-unsafe-url.h2.window.js.ini
index a432caa..b282f00 100644
--- a/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-unsafe-url.h2.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/loading/early-hints/referrer-policy-unsafe-url.h2.window.js.ini
@@ -1,2 +1,4 @@
 [referrer-policy-unsafe-url.h2.window.html]
-  expected: ERROR
+  expected:
+    if product == "chrome": OK
+    ERROR
diff --git a/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini b/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini
index 1281282..29ede04c 100644
--- a/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini
+++ b/third_party/blink/web_tests/external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html.ini
@@ -1,4 +1,4 @@
 [longtask-in-sibling-iframe-crossorigin.html]
   [Performance longtask entries from cross-origin iframe are observable in its sibling.]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-layout-ng": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html.ini b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html.ini
new file mode 100644
index 0000000..f0fa72f4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html.ini
@@ -0,0 +1,3 @@
+[operator-dictionary-arabic-002.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/media-source/dedicated-worker/mediasource-worker-play-terminate-worker.html.ini b/third_party/blink/web_tests/external/wpt/media-source/dedicated-worker/mediasource-worker-play-terminate-worker.html.ini
deleted file mode 100644
index 3dcfcc60..0000000
--- a/third_party/blink/web_tests/external/wpt/media-source/dedicated-worker/mediasource-worker-play-terminate-worker.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[mediasource-worker-play-terminate-worker.html]
-  [Test worker MediaSource termination after at least 7 main thread setTimeouts, starting counting before setting srcObject]
-    expected:
-      if flag_specific == "disable-layout-ng": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini b/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
index abbfe94c..554fc5fb9 100644
--- a/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-avtracks.html.ini
@@ -4,5 +4,6 @@
 
   [Media tracks must be removed when the SourceBuffer is removed from the MediaSource]
     expected:
-      if (flag_specific == "") and (os == "linux"): PASS
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
       FAIL
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini b/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
index 4afb20d..e23991a4 100644
--- a/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-duration.html.ini
@@ -1,8 +1,5 @@
 [mediasource-duration.html]
   expected:
-    if (product == "content_shell") and (os == "linux") and (flag_specific == "disable-site-isolation-trials"): ERROR
-    if (product == "content_shell") and (os == "linux") and (flag_specific == "disable-layout-ng"): [OK, ERROR]
-    if (product == "content_shell") and (os == "linux") and (flag_specific == ""): ERROR
-  [Test endOfStream completes previous seek to truncated duration]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+    if (flag_specific == "") and (os == "linux") and (product == "chrome"): OK
+    if (flag_specific == "") and (os == "win"): OK
+    ERROR
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-endofstream.html.ini b/third_party/blink/web_tests/external/wpt/media-source/mediasource-endofstream.html.ini
index eb2f72d..79c1fce 100644
--- a/third_party/blink/web_tests/external/wpt/media-source/mediasource-endofstream.html.ini
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-endofstream.html.ini
@@ -1,3 +1,5 @@
 [mediasource-endofstream.html]
+  expected:
+    if os == "win": [OK, TIMEOUT]
   [MediaSource.endOfStream(): duration truncated to 0 when there are no buffered coded frames]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-again-in-blur-during-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-again-in-blur-during-intercept.html.ini
deleted file mode 100644
index 271473b..0000000
--- a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-again-in-blur-during-intercept.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[change-focus-again-in-blur-during-intercept.html]
-  expected:
-    if flag_specific == "disable-layout-ng": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini
deleted file mode 100644
index 17bbb680..0000000
--- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-initial-about-blank.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[navigate-initial-about-blank.html]
-  expected:
-    if flag_specific == "disable-layout-ng": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini
index e8a3f009..108e460 100644
--- a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini
+++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-intercept-handler-modifies.html.ini
@@ -1,5 +1,4 @@
 [after-transition-intercept-handler-modifies.html]
   [scroll: state should be saved before intercept handlers run]
     expected:
-      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if (flag_specific == "") and (product == "content_shell") and (os == "linux"): [PASS, FAIL]
+      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini b/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini
index a1042757..a805bf5 100644
--- a/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/navigation-timing/test-performance-attributes.sub.html.ini
@@ -1,4 +1,4 @@
 [test-performance-attributes.sub.html]
   [Check that performance.timing has reasonable values for secureConnectionStart and other attributes]
     expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
+      if (flag_specific == "") and (product == "chrome"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
index 8ff16688..ee3b2e1b 100644
--- a/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_beacon-sendondiscard.tentative.https.window.js.ini
@@ -3,9 +3,13 @@
     if product == "chrome": ERROR
   [A discarded document does not send an already sent beacon.]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
-      if flag_specific == "disable-site-isolation-trials": FAIL
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if os == "win": FAIL
 
   [A discarded document sends all its beacons of which timeouts are not\n    default.]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [A discarded document sends all its beacons of which backgroundTimeouts are\n    not default.]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/pending-beacon/pending_post_beacon-cors.tentative.https.window.js.ini b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_post_beacon-cors.tentative.https.window.js.ini
new file mode 100644
index 0000000..448d171
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/pending-beacon/pending_post_beacon-cors.tentative.https.window.js.ini
@@ -0,0 +1,3 @@
+[pending_post_beacon-cors.tentative.https.window.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/performance-timeline/navigation-id-element-timing.tentative.html.ini b/third_party/blink/web_tests/external/wpt/performance-timeline/navigation-id-element-timing.tentative.html.ini
index 0859b39..11ce5f1 100644
--- a/third_party/blink/web_tests/external/wpt/performance-timeline/navigation-id-element-timing.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/performance-timeline/navigation-id-element-timing.tentative.html.ini
@@ -1,4 +1,5 @@
 [navigation-id-element-timing.tentative.html]
   [Element Timing navigation id test]
     expected:
+      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
index ee899397..9d13735 100644
--- a/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini
@@ -1,5 +1,5 @@
 [performance-navigation-timing-same-origin-bfcache.tentative.window.html]
   [RemoteContextHelper navigation using BFCache]
     expected:
-      if (os == "linux") and (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
-      if (os == "linux") and (product == "chrome"): FAIL
+      if (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if (flag_specific == "") and (product == "chrome"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/experimental-features/unload-allowed-by-default.tentative.window.js.ini b/third_party/blink/web_tests/external/wpt/permissions-policy/experimental-features/unload-allowed-by-default.tentative.window.js.ini
deleted file mode 100644
index 6360a03d..0000000
--- a/third_party/blink/web_tests/external/wpt/permissions-policy/experimental-features/unload-allowed-by-default.tentative.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[unload-allowed-by-default.tentative.window.html]
-  expected:
-    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-iframe.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-iframe.html.ini
new file mode 100644
index 0000000..2c234a5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-iframe.html.ini
@@ -0,0 +1,3 @@
+[callback-iframe.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-invoked.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-invoked.html.ini
deleted file mode 100644
index 0637665..0000000
--- a/third_party/blink/web_tests/external/wpt/requestidlecallback/callback-invoked.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[callback-invoked.html]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF-dynamic.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF-dynamic.html.ini
deleted file mode 100644
index e29584e..0000000
--- a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF-dynamic.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[deadline-max-rAF-dynamic.html]
-  [Check that the deadline is changed if there is a new requestAnimationFrame from within requestIdleCallback.]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini
deleted file mode 100644
index c2a9bbc..0000000
--- a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-rAF.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[deadline-max-rAF.html]
-  expected:
-    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-timeout-dynamic.html.ini b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-timeout-dynamic.html.ini
index 960c1ca9..cf4da5d 100644
--- a/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-timeout-dynamic.html.ini
+++ b/third_party/blink/web_tests/external/wpt/requestidlecallback/deadline-max-timeout-dynamic.html.ini
@@ -1,5 +1,5 @@
 [deadline-max-timeout-dynamic.html]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
   [Check that the deadline is changed if there is a new timeout from within requestIdleCallback.]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
index 2560f131..3413a64a 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/content-type-parsing.html.ini
@@ -3,7 +3,9 @@
     expected: FAIL
 
   [content-type 1 : text/plain,]
-    expected: FAIL
+    expected:
+      if flag_specific == "disable-layout-ng": [FAIL, PASS]
+      FAIL
 
   [content-type 4 : text/plain;charset=gbk,text/html;charset=windows-1254]
     expected: FAIL
@@ -22,30 +24,29 @@
 
   [content-type 9 : text/html;charset=gbk,text/plain,text/html]
     expected:
-      if (flag_specific == "") and (os == "win"): PASS
-      if flag_specific == "disable-layout-ng": PASS
+      if os == "win": PASS
       FAIL
 
   [content-type 10 : text/plain,*/*]
     expected:
-      if (flag_specific == "") and (os == "win"): PASS
-      if flag_specific == "disable-layout-ng": PASS
+      if os == "win": PASS
       FAIL
 
   [content-type 11 : text/html,*/*]
     expected:
-      if (flag_specific == "") and (os == "win"): PASS
+      if os == "win": PASS
       FAIL
 
   [content-type 13 : text/plain,*/*;charset=gbk]
     expected:
-      if (flag_specific == "") and (os == "win"): PASS
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if os == "win": PASS
       FAIL
 
   [content-type 14 : text/html,*/*;charset=gbk]
     expected:
-      if (flag_specific == "") and (os == "win"): PASS
-      if flag_specific == "disable-layout-ng": PASS
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if os == "win": PASS
       FAIL
 
   [content-type 15 : text/html;x=",text/plain]
@@ -164,12 +165,9 @@
 
   [content-type 12 : */*,text/html]
     expected:
-      if (flag_specific == "") and (os == "win"): FAIL
+      if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [PASS, FAIL]
+      if os == "win": FAIL
 
   [content-type 2 : text/html,text/plain]
     expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
-
-  [content-type 3 : text/plain;charset=gbk,text/html]
-    expected:
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
+      if (os == "linux") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
index cd53228b..b507125f 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html.ini
@@ -1,7 +1,6 @@
 [no-entries-for-cross-origin-css-fetched-memory-cache.sub.html]
   [Make sure that resources fetched by cross origin CSS are not in the timeline.]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "chrome"): [PASS, FAIL]
-      if (flag_specific == "") and (os == "win"): [PASS, FAIL]
-      if flag_specific == "disable-layout-ng": PASS
-      FAIL
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): FAIL
+      if flag_specific == "disable-layout-ng": [FAIL, PASS]
+      if flag_specific == "disable-site-isolation-trials": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini b/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
index 12a6a928..02ebcad 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/response-status-code.html.ini
@@ -524,26 +524,14 @@
   [This test validates the response status of resources. 191]
     expected: [PASS, NOTRUN]
 
-  [This test validates the response status of resources. 292]
+  [This test validates the response status of resources. 274]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if (flag_specific == "") and (product == "content_shell"): [FAIL, PASS]
 
-  [This test validates the response status of resources. 276]
+  [This test validates the response status of resources. 277]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if (flag_specific == "") and (product == "content_shell"): [PASS, FAIL]
 
-  [This test validates the response status of resources. 294]
+  [This test validates the response status of resources. 272]
     expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
-
-  [This test validates the response status of resources. 275]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
-
-  [This test validates the response status of resources. 296]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
-
-  [This test validates the response status of resources. 89]
-    expected:
-      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https.html.ini b/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https.html.ini
index e0a8b69..1a220b5 100644
--- a/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https.html.ini
@@ -1,6 +1,3 @@
 [getdisplaymedia.https.html]
   [getDisplayMedia() must require user activation]
     expected: FAIL
-
-  [getDisplayMedia({"video":{"frameRate":{"max":0}}}) must fail with OverconstrainedError]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini b/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
index 92a4235..3bc5319 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/cache-storage/cache-add.https.any.js.ini
@@ -2,24 +2,20 @@
   [Cache.addAll called with the same Request object specified twice]
     expected: FAIL
 
-  [Cache.addAll should succeed when entries differ by vary header]
-    expected:
-      if product == "chrome": [PASS, FAIL]
-
 
 [cache-add.https.any.sharedworker.html]
   [Cache.addAll called with the same Request object specified twice]
     expected: FAIL
 
+  [Cache.addAll should succeed when entries differ by vary header]
+    expected:
+      if product == "chrome": [PASS, FAIL]
+
 
 [cache-add.https.any.serviceworker.html]
   [Cache.addAll called with the same Request object specified twice]
     expected: FAIL
 
-  [Cache.addAll should succeed when entries differ by vary header]
-    expected:
-      if product == "chrome": FAIL
-
 
 [cache-add.https.any.html]
   [Cache.addAll called with the same Request object specified twice]
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/getregistrations.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/getregistrations.https.html.ini
new file mode 100644
index 0000000..c8e8627
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/getregistrations.https.html.ini
@@ -0,0 +1,15 @@
+[getregistrations.https.html]
+  [Register then Unregister then getRegistrations]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [Register then Unregister with controlled frame then getRegistrations]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
+
+  [getRegistrations promise resolves only with same origin registrations.]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
index 48187be..4507f10 100644
--- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
@@ -1,8 +1,4 @@
 [unregister-immediately-during-extendable-events.https.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): OK
-    TIMEOUT
+  expected: TIMEOUT
   [Clear-Site-Data must fail pending subresource fetch events.]
-    expected:
-      if product == "chrome": TIMEOUT
-      FAIL
+    expected: TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
index a85027a5..40253a3 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-self.html.ini
@@ -1,3 +1,3 @@
 [csp-script-src-self.html]
   expected:
-    if os == "win": ERROR
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-unsafe-inline.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-unsafe-inline.html.ini
index 032e95a7..9e5ce71 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-unsafe-inline.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/csp-script-src-unsafe-inline.html.ini
@@ -1,7 +1,7 @@
 [csp-script-src-unsafe-inline.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, ERROR]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": ERROR
   [Test if CSP script-src unsafe-inline permits inline speculationrules.]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
index 6b9bf4fd..4c72df7 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/iframe-added-post-activation.html.ini
@@ -1,5 +1,6 @@
 [iframe-added-post-activation.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [iframe added after activation has false document.prerendering]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/local-storage.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/local-storage.html.ini
index bf8cd1f..89b7f0be 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/local-storage.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/local-storage.html.ini
@@ -1,7 +1,6 @@
 [local-storage.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": TIMEOUT
+    if product == "chrome": TIMEOUT
   [prerendering page should be able to access local storage]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini
index d0a8264..ef3bb68 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-mismatch.html.ini
@@ -1,7 +1,6 @@
 [referrer-policy-mismatch.html]
   expected:
-    if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": TIMEOUT
+    if product == "chrome": TIMEOUT
   [prerendered with "strict-origin-when-cross-origin", activated with "no-referrer"]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-no-referrer.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-no-referrer.html.ini
index 9c2d108..0a70c55e 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-no-referrer.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/referrer-policy-no-referrer.html.ini
@@ -1,7 +1,7 @@
 [referrer-policy-no-referrer.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [no referrer]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
index d5071e4..095715c 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-non-successful.html.ini
@@ -5,9 +5,9 @@
 [response-code-non-successful.html?code=204]
 
 [response-code-non-successful.html?code=404]
+  expected:
+    if product == "chrome": [OK, ERROR]
 
 [response-code-non-successful.html?code=402]
 
 [response-code-non-successful.html?code=503]
-  expected:
-    if product == "chrome": [OK, ERROR]
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
index 199fd91..a63cd66 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/response-code-successful.html.ini
@@ -1,6 +1,4 @@
 [response-code-successful.html?code=203]
-  expected:
-    if product == "chrome": [OK, ERROR]
   [Responses with code 203 should be activated]
     expected:
       if product == "chrome": FAIL
@@ -14,11 +12,7 @@
 
 [response-code-successful.html?code=201]
   expected:
-    if product == "chrome": [OK, ERROR]
-  [Responses with code 201 should be activated]
-    expected:
-      if product == "chrome": FAIL
-
+    if product == "chrome": ERROR
 
 [response-code-successful.html?code=202]
   [Responses with code 202 should be activated]
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId.https.tentative.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId.https.tentative.html.ini
index ddd97ff4..e5404402 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId.https.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-audio-setSinkId.https.tentative.html.ini
@@ -1,5 +1,6 @@
 [restriction-audio-setSinkId.https.tentative.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [the access to the setSinkId of Audio API should be deferred until the\n    prerendered page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-local-file-system-access.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-local-file-system-access.https.html.ini
index 8a6d1798..0e13ca06 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-local-file-system-access.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-local-file-system-access.https.html.ini
@@ -1,5 +1,6 @@
 [restriction-local-file-system-access.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [prerendering pages should not be able to access the local file system via the File System Access API]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini
index 5910236..f2b8f0c 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-media-camera.https.html.ini
@@ -1,5 +1,6 @@
 [restriction-media-camera.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, ERROR]
     if product == "chrome": TIMEOUT
   [the access to the camera of the user media should be deferred until the\n    prerendered page is activated]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-request-picture-in-picture.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-request-picture-in-picture.html.ini
index 32004d9..745c20d 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-request-picture-in-picture.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-request-picture-in-picture.html.ini
@@ -1,7 +1,7 @@
 [restriction-request-picture-in-picture.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": TIMEOUT
   [prerendering page cannot invokeHTMLVideoElement.requestPictureInPicture]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini
index f0afa05..f959936 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-service-worker-update.https.html.ini
@@ -1,7 +1,7 @@
 [restriction-service-worker-update.https.html]
   expected:
-    if (product == "content_shell") and (os == "win"): [OK, ERROR]
-    if product == "chrome": TIMEOUT
+    if (os == "linux") and (product == "chrome"): TIMEOUT
+    if os == "win": ERROR
   [ServiceWorkerRegistration.update() should be deferred in a prerendered page]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini
index f0101a56..9e705b8 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-web-share.https.html.ini
@@ -1,5 +1,6 @@
 [restriction-web-share.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [prerendering pages should not be able to invoke the Web Share API]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
index a18dab5e..ff00e5563 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/session-history-subframe-navigation.https.html.ini
@@ -1,5 +1,6 @@
 [session-history-subframe-navigation.https.html]
   expected:
+    if (product == "content_shell") and (os == "win"): [OK, TIMEOUT]
     if product == "chrome": TIMEOUT
   [Subframe navigation in prerender replaces the session entry]
     expected:
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini
index 75d453d..10410264 100644
--- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/state-and-event.html.ini
@@ -1,7 +1,7 @@
 [state-and-event.html]
   expected:
     if (os == "linux") and (product == "chrome"): TIMEOUT
-    if os == "win": [OK, TIMEOUT]
+    if os == "win": [OK, ERROR]
   [Test document.prerendering and its change event.]
     expected:
       if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini b/third_party/blink/web_tests/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini
index 170ea0c9..daed983f 100644
--- a/third_party/blink/web_tests/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini
+++ b/third_party/blink/web_tests/external/wpt/storage/partitioned-estimate-usage-details-caches.tentative.https.sub.html.ini
@@ -1,4 +1,4 @@
 [partitioned-estimate-usage-details-caches.tentative.https.sub.html]
   expected:
     if (flag_specific == "") and (os == "linux") and (product == "content_shell"): TIMEOUT
-    if flag_specific == "disable-layout-ng": [OK, TIMEOUT]
+    if flag_specific == "disable-layout-ng": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini b/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
index ad16641..b02fb24 100644
--- a/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
+++ b/third_party/blink/web_tests/external/wpt/url/a-element-xhtml.xhtml.ini
@@ -963,9 +963,7 @@
 
 [a-element-xhtml.xhtml?include=file]
   expected:
-    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
-    if flag_specific == "disable-layout-ng": CRASH
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
   [Parsing: <file://example%/> against <about:blank>]
     expected: FAIL
 
@@ -1213,6 +1211,8 @@
 
 
 [a-element-xhtml.xhtml?exclude=(file|javascript|mailto)]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
   [Parsing: <non-special://test:@test/x> against <about:blank>]
     expected: FAIL
 
@@ -2063,13 +2063,14 @@
 
 
 [a-element-xhtml.xhtml?include=mailto]
+  expected:
+    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
   [Parsing: <mailto:/../> against <about:blank>]
     expected: FAIL
 
 
 [a-element-xhtml.xhtml?include=javascript]
-  expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): CRASH
-    if os == "win": TIMEOUT
   [Parsing: <javascript:/../> against <about:blank>]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/url/a-element.html.ini b/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
index cb39d80..291c587 100644
--- a/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
+++ b/third_party/blink/web_tests/external/wpt/url/a-element.html.ini
@@ -1072,11 +1072,6 @@
 
 
 [a-element.html?include=file]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
-    if flag_specific == "highdpi": [OK, CRASH]
-    if flag_specific == "disable-site-isolation-trials": CRASH
   [Parsing: <file://example%/> against <about:blank>]
     expected: FAIL
 
@@ -1325,7 +1320,7 @@
 
 [a-element.html?include=mailto]
   expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, CRASH]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
   [Parsing: <mailto:/../> against <about:blank>]
     expected: FAIL
 
@@ -2181,5 +2176,8 @@
 
 
 [a-element.html?include=javascript]
+  expected:
+    if (flag_specific == "") and (os == "win"): [OK, TIMEOUT]
+    if flag_specific == "highdpi": [OK, CRASH]
   [Parsing: <javascript:/../> against <about:blank>]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/url/failure.html.ini b/third_party/blink/web_tests/external/wpt/url/failure.html.ini
index 97ce987..5f3314da 100644
--- a/third_party/blink/web_tests/external/wpt/url/failure.html.ini
+++ b/third_party/blink/web_tests/external/wpt/url/failure.html.ini
@@ -1,7 +1,6 @@
 [failure.html]
   expected:
-    if (flag_specific == "") and (product == "chrome"): TIMEOUT
-    if flag_specific == "disable-layout-ng": CRASH
+    if product == "chrome": TIMEOUT
   [Location's href: file://example:1/ should throw]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini b/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini
new file mode 100644
index 0000000..1091bffa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/url/percent-encoding.window.js.ini
@@ -0,0 +1,3 @@
+[percent-encoding.window.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini b/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
index 41689a5..40ad4af 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/url-setters-a-area.window.js.ini
@@ -585,8 +585,6 @@
 
 
 [url-setters-a-area.window.html?include=file]
-  expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
   [<a>: Setting <file://localhost/>.protocol = 'http' Can’t switch from file URL with no host]
     expected: FAIL
 
@@ -1164,7 +1162,7 @@
 
 [url-setters-a-area.window.html?include=javascript]
   expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): CRASH
   [<a>: Setting <javascript://x/>.username = 'wario']
     expected: FAIL
 
@@ -1186,7 +1184,9 @@
 
 [url-setters-a-area.window.html?include=mailto]
   expected:
-    if os == "win": [OK, TIMEOUT]
+    if (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [OK, CRASH]
+    if (os == "linux") and (flag_specific == "disable-layout-ng"): [OK, CRASH]
+    if os == "win": TIMEOUT
   [<a>: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini b/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini
index 51787b7..2cdb957 100644
--- a/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/url-setters.any.js.ini
@@ -845,6 +845,8 @@
 
 
 [url-setters.any.worker.html?exclude=(file|javascript|mailto)]
+  expected:
+    if os == "win": [OK, TIMEOUT]
   [URL: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged.]
     expected:
       if os == "win": FAIL
@@ -1183,8 +1185,6 @@
 
 
 [url-setters.any.worker.html?include=javascript]
-  expected:
-    if os == "win": [OK, TIMEOUT]
   [URL: Setting <javascript://x/>.username = 'wario']
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini
index 9c74fd4f..e0afce6 100644
--- a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-get.any.js.ini
@@ -1,5 +1,5 @@
 [urlsearchparams-get.any.worker.html]
-  expected:
-    if flag_specific == "disable-layout-ng": [OK, CRASH]
 
 [urlsearchparams-get.any.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
index dfe6af01..acdd4a89 100644
--- a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-stringifier.any.js.ini
@@ -1,5 +1,5 @@
 [urlsearchparams-stringifier.any.worker.html]
-  expected:
-    if (os == "linux") and (flag_specific == "") and (product == "content_shell"): [OK, CRASH]
 
 [urlsearchparams-stringifier.any.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/video-rvfc/request-video-frame-callback.html.ini b/third_party/blink/web_tests/external/wpt/video-rvfc/request-video-frame-callback.html.ini
new file mode 100644
index 0000000..5fa8925
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/video-rvfc/request-video-frame-callback.html.ini
@@ -0,0 +1,3 @@
+[request-video-frame-callback.html]
+  expected:
+    if product == "chrome": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/wasm/jsapi/functions/entry.html.ini b/third_party/blink/web_tests/external/wpt/wasm/jsapi/functions/entry.html.ini
deleted file mode 100644
index fafd6d7..0000000
--- a/third_party/blink/web_tests/external/wpt/wasm/jsapi/functions/entry.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[entry.html]
-  expected:
-    if product == "chrome": ERROR
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/combining-effects/applying-interpolated-transform.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/animation-model/combining-effects/applying-interpolated-transform.html.ini
deleted file mode 100644
index bc645ca..0000000
--- a/third_party/blink/web_tests/external/wpt/web-animations/animation-model/combining-effects/applying-interpolated-transform.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[applying-interpolated-transform.html]
-  expected:
-    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
index 70c2d21..c9d9c08a 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
@@ -1,4 +1,5 @@
 [finished.html]
   [Test finished promise changes for animation duration changes]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if (product == "content_shell") and (os == "win"): [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini
index 0b9009cc..b77dcd3 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/onremove.html.ini
@@ -1,4 +1,4 @@
 [onremove.html]
   [onremove events are fired in the correct order]
     expected:
-      if product == "chrome": [PASS, FAIL]
+      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
index 1a24dbb77..fda793b 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-animations/timing-model/timelines/sibling-iframe-timeline.html.ini
@@ -1,4 +1,6 @@
 [sibling-iframe-timeline.html]
   [animation tied to another frame's timeline runs properly]
     expected:
-      if (flag_specific == "") and (product == "content_shell"): FAIL
+      if (flag_specific == "") and (product == "chrome"): PASS
+      if flag_specific == "disable-site-isolation-trials": PASS
+      FAIL
diff --git a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
index e2544ca..ffa17e9 100644
--- a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
+++ b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/reuse-web-bundle-resource.https.tentative.html.ini
@@ -1,16 +1,4 @@
 [reuse-web-bundle-resource.https.tentative.html]
   ['remove(), then append()' should reuse webbundle resources]
     expected:
-      if (product == "content_shell") and (flag_specific == "disable-layout-ng"): [PASS, FAIL]
-
-  [A webbundle should be fetched again when new script element is appended.]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-
-  [Multiple 'remove(), then append()' for the same element should reuse webbundle resources]
-    expected:
-      if product == "chrome": [PASS, FAIL]
-
-  ['remove(), then append() in a separate task' should not reuse webbundle resources]
-    expected:
-      if product == "chrome": [PASS, FAIL]
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html.ini b/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html.ini
new file mode 100644
index 0000000..b63d722
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html.ini
@@ -0,0 +1,3 @@
+[query-ordering.tentative.https.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini
deleted file mode 100644
index 97f1aa6..0000000
--- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[audioworkletnode-output-channel-count.https.html]
-  [X The expected output channel count is not equal to 17. Got 1.]
-    expected: FAIL
-
-  [< [Dynamically change the channel count to if unspecified.\] 1 out of 1 assertions were failed.]
-    expected: FAIL
-
-  [# AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed.]
-    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
new file mode 100644
index 0000000..c9987cad
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html.ini
@@ -0,0 +1,4 @@
+[mediaElementAudioSourceToScriptProcessorTest.html]
+  [All data processed correctly]
+    expected:
+      if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html.ini b/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html.ini
index 51687de..7f85bcb 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html.ini
@@ -1,11 +1,3 @@
 [RTCDTMFSender-ontonechange.https.html]
   [Tone change event init optional parameters]
     expected: FAIL
-
-  [Setting transceiver.currentDirection to recvonly in the middle of tonechange events should stop future tonechange events from firing]
-    expected:
-      if product == "chrome": FAIL
-
-  [Calling insertDTMF('') in the middle of tonechange events should stop future tonechange events from firing]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html.ini b/third_party/blink/web_tests/external/wpt/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html.ini
new file mode 100644
index 0000000..6a131e9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webvtt/rendering/cues-with-video/processing-model/audio_has_no_subtitles.html.ini
@@ -0,0 +1,3 @@
+[audio_has_no_subtitles.html]
+  expected:
+    if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html.ini
index 2e10702..38a9b7c 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html.ini
@@ -1,6 +1,6 @@
 [xrReferenceSpace_originOffset_viewer.https.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, CRASH]
+    if flag_specific == "disable-site-isolation-trials": CRASH
   [Creating XRReferenceSpace origin offset off of `viewer` space works. - webgl]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini
index fd22b34a..13ee403 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html.ini
@@ -2,7 +2,3 @@
   [XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl]
     expected:
       if product == "chrome": FAIL
-
-  [XRFrame getViewerPose updates on the next frame for non-immersive sessions - webgl2]
-    expected:
-      if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini
index 2e02a8c..b50a90b 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html.ini
@@ -1,6 +1,54 @@
 [xrSession_requestReferenceSpace_features.https.html]
   expected:
-    if (product == "content_shell") and (flag_specific == "") and (os == "linux"): [OK, TIMEOUT]
+    if product == "chrome": [OK, TIMEOUT]
   [Non-immersive session supports viewer space by default - webgl]
     expected:
       if product == "chrome": FAIL
+
+  [Immersive session supports local-floor space when required - webgl2]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Non-immersive session rejects local space if not requested - webgl2]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Immersive session supports local-floor space when optional - webgl2]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Non-immersive session rejects local space if not requested - webgl]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Non-immersive session rejects bounded-floor space even when requested - webgl2]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Immersive session rejects local-floor space if not requested - webgl]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Non-immersive session rejects unbounded space even when requested - webgl]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Non-immersive session rejects unbounded space even when requested - webgl2]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Immersive session supports local-floor space when required - webgl]
+    expected:
+      if product == "chrome": [PASS, TIMEOUT]
+
+  [Immersive session rejects local-floor space if not requested - webgl2]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Non-immersive session rejects bounded-floor space even when requested - webgl]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
+
+  [Immersive session supports local-floor space when optional - webgl]
+    expected:
+      if product == "chrome": [PASS, NOTRUN]
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html.ini
index 8408f7a..5011c0d 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html.ini
@@ -5,4 +5,8 @@
 
   ['floor-level' XRStationaryReferenceSpace updates properly when the transform changes for non-immersive sessions - webgl2]
     expected:
-      if product == "chrome": FAIL
+      if product == "chrome": [PASS, FAIL]
+
+  ['floor-level' XRStationaryReferenceSpace updates properly when the transform changes for non-immersive sessions - webgl]
+    expected:
+      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/webxr/xr_viewport_scale.https.html.ini b/third_party/blink/web_tests/external/wpt/webxr/xr_viewport_scale.https.html.ini
index 8a751a3..e5cc78a 100644
--- a/third_party/blink/web_tests/external/wpt/webxr/xr_viewport_scale.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/webxr/xr_viewport_scale.https.html.ini
@@ -1,6 +1,4 @@
 [xr_viewport_scale.https.html]
-  expected:
-    if product == "chrome": [OK, TIMEOUT]
   [requestViewportScale valid viewport for inline session - webgl]
     expected:
       if product == "chrome": FAIL
@@ -24,14 +22,10 @@
     expected: [PRECONDITION_FAILED, NOTRUN]
 
   [recommendedViewportScale for immersive-vr session - webgl]
-    expected:
-      if product == "chrome": [NOTRUN, PRECONDITION_FAILED]
-      PRECONDITION_FAILED
+    expected: PRECONDITION_FAILED
 
   [recommendedViewportScale for immersive-vr session - webgl2]
-    expected:
-      if product == "chrome": [NOTRUN, PRECONDITION_FAILED]
-      PRECONDITION_FAILED
+    expected: PRECONDITION_FAILED
 
   [requestViewportScale valid viewport w/ null scale for immersive-vr session - webgl]
     expected: [PASS, NOTRUN]
@@ -41,11 +35,3 @@
 
   [requestViewportScale valid viewport for immersive-vr session - webgl]
     expected: [PASS, NOTRUN]
-
-  [requestViewportScale same frame for immersive-vr session - webgl]
-    expected:
-      if product == "chrome": [PASS, TIMEOUT]
-
-  [requestViewportScale same frame for immersive-vr session - webgl2]
-    expected:
-      if product == "chrome": [PASS, NOTRUN]
diff --git a/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini
index 9b71537..d21b77c 100644
--- a/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini
+++ b/third_party/blink/web_tests/external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html.ini
@@ -1,3 +1,5 @@
 [sharedworker-in-worker.html]
+  expected:
+    if product == "chrome": ERROR
   [Base URL in workers: new SharedWorker()]
     expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html.ini
deleted file mode 100644
index e1a5b91e..0000000
--- a/third_party/blink/web_tests/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[second-argument-null.html]
-  expected:
-    if os == "win": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/setting.html.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/setting.html.ini
new file mode 100644
index 0000000..2244b252
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/setting.html.ini
@@ -0,0 +1,3 @@
+[setting.html]
+  expected:
+    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/WindowTimers/003.html.ini b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/WindowTimers/003.html.ini
new file mode 100644
index 0000000..a724a8c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/workers/interfaces/WorkerUtils/WindowTimers/003.html.ini
@@ -0,0 +1,3 @@
+[003.html]
+  expected:
+    if os == "win": [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini b/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini
index e0d2ea3d..5f4813ff 100644
--- a/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini
+++ b/third_party/blink/web_tests/external/wpt/workers/shared-worker-in-data-url-context.window.js.ini
@@ -1,4 +1,6 @@
 [shared-worker-in-data-url-context.window.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
   [Create a shared worker in a data url frame]
     expected: FAIL
 
diff --git a/third_party/blink/web_tests/external/wpt/xhr/XMLHttpRequest-withCredentials.any.js.ini b/third_party/blink/web_tests/external/wpt/xhr/XMLHttpRequest-withCredentials.any.js.ini
new file mode 100644
index 0000000..5a6d805
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/xhr/XMLHttpRequest-withCredentials.any.js.ini
@@ -0,0 +1,5 @@
+[XMLHttpRequest-withCredentials.any.worker.html]
+  expected:
+    if flag_specific == "disable-layout-ng": [OK, CRASH]
+
+[XMLHttpRequest-withCredentials.any.html]
diff --git a/third_party/blink/web_tests/external/wpt/xhr/abort-after-send.any.js.ini b/third_party/blink/web_tests/external/wpt/xhr/abort-after-send.any.js.ini
index 3433e6f..a0be8075 100644
--- a/third_party/blink/web_tests/external/wpt/xhr/abort-after-send.any.js.ini
+++ b/third_party/blink/web_tests/external/wpt/xhr/abort-after-send.any.js.ini
@@ -4,7 +4,5 @@
 
 
 [abort-after-send.any.worker.html]
-  expected:
-    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): TIMEOUT
   [XMLHttpRequest: abort() after send()]
     expected: FAIL
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/media/controls-after-reload-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/media/controls-after-reload-expected.png
index ab339a3..ae054e67 100644
--- a/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/media/controls-after-reload-expected.png
+++ b/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/media/controls/immersive-cast-button.html b/third_party/blink/web_tests/media/controls/immersive-cast-button.html
deleted file mode 100644
index 4858fd1..0000000
--- a/third_party/blink/web_tests/media/controls/immersive-cast-button.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPe html>
-<title>Test that the cast button does not show up in immersive mode</title>
-<script src='../../resources/testharness.js'></script>
-<script src='../../resources/testharnessreport.js'></script>
-<script src='../media-controls.js'></script>
-<body></body>
-<script>
-async_test(t => {
-  var old_immersive = internals.settings.immersiveModeEnabled;
-  internals.settings.setImmersiveModeEnabled(true);
-  t.add_cleanup(() => {
-    internals.settings.setImmersiveModeEnabled(old_immersive);
-  });
-
-  var video = document.createElement('video');
-  video.controls = true;
-  document.body.appendChild(video);
-  video.src = '../content/test.ogv';
-  internals.mediaPlayerRemoteRouteAvailabilityChanged(video, true);
-
-  video.addEventListener('canplaythrough', t.step_func_done(e => {
-    assert_false(isCastButtonEnabled(video));
-    assert_not_equals(mediaControlsButton(video, 'panel').style.display, 'none');
-  }));
-});
-</script>
diff --git a/third_party/blink/web_tests/media/controls/immersive-doubletap.html b/third_party/blink/web_tests/media/controls/immersive-doubletap.html
deleted file mode 100644
index 6213192..0000000
--- a/third_party/blink/web_tests/media/controls/immersive-doubletap.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPe html>
-<title>Test that double tap does not trigger seeking in immersive mode</title>
-<script src='../../resources/testharness.js'></script>
-<script src='../../resources/testharnessreport.js'></script>
-<script src='../media-controls.js'></script>
-<body></body>
-<script>
-async_test(t => {
-  enableImmersiveMode(t);
-
-  const video = document.createElement('video');
-  video.controls = true;
-  document.body.appendChild(video);
-  video.src = '../content/test.ogv';
-
-  video.play().then(t.step_func(() => {
-    // Double tap in the top right hand corner
-    const coordinates = coordinatesOutsideElement(video);
-    doubleTouchAtCoordinates(
-        coordinates[0] + 10, coordinates[1] + 10, undefined,
-        t.step_func_done());
-  }));
-
-  video.addEventListener('seeking', t.unreached_func());
-  video.addEventListener('seeked', t.unreached_func());
-});
-</script>
diff --git a/third_party/blink/web_tests/media/controls/immersive-mode-adds-css-class.html b/third_party/blink/web_tests/media/controls/immersive-mode-adds-css-class.html
deleted file mode 100644
index e4c4e5f..0000000
--- a/third_party/blink/web_tests/media/controls/immersive-mode-adds-css-class.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>Test that enabling immersive mode adds the immersive mode CSS class.</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../resources/run-after-layout-and-paint.js"></script>
-<script src="../media-controls.js"></script>
-<video controls width=400 preload=metadata src="../content/60_sec_video.webm"></video>
-<script>
-async_test(t => {
-  const video = document.querySelector('video');
-  const controls = mediaControls(video);
-  const immersiveModeCSSClass = 'immersive-mode';
-
-  window.onload = t.step_func(() => {
-    assert_false(controls.classList.contains(immersiveModeCSSClass));
-    enableImmersiveMode(t);
-    assert_true(controls.classList.contains(immersiveModeCSSClass));
-    checkThatVRCSSRulesAreRespected();
-
-    // Make sure that we still respect immersive mode when enlarged.
-    video.width = 1000;
-    runAfterLayoutAndPaint(t.step_func_done(() => {
-      assert_true(controls.classList.contains(immersiveModeCSSClass));
-      checkThatVRCSSRulesAreRespected();
-    }));
-  });
-
-  function checkThatVRCSSRulesAreRespected() {
-    // Check a few styles to make sure VR rules are not being overridden.
-    const muteButtonStyle = getComputedStyle(muteButton(video));
-    const fullscreenButtonStyle = getComputedStyle(fullscreenButton(video));
-    const overflowButtonStyle = getComputedStyle(overflowButton(video));
-    const currentTimeStyle = getComputedStyle(currentTimeElement(video));
-    const buttonPanelStyle = getComputedStyle(buttonPanelElement(video));
-    const timelineStyle = getComputedStyle(timelineElement(video));
-    const thumbStyle = getComputedStyle(timelineThumb(video));
-
-    assert_equals('43px', muteButtonStyle.height, 'Mute button height is respected');
-    assert_equals('24px', fullscreenButtonStyle['background-size'], 'Fullscreen button background size is respected');
-    assert_equals('43px', overflowButtonStyle.width, 'Overflow button width is respected');
-    assert_equals('16px', currentTimeStyle['font-size'], 'Current time display font size is respected');
-    assert_equals('43px', buttonPanelStyle.height, 'Button panel height is respected');
-    assert_equals('535px', buttonPanelStyle['max-width'], 'Button panel max-width is respected');
-    assert_equals('5px', timelineStyle.height, 'Timeline height is respected');
-    assert_equals('471px', timelineStyle['max-width'], 'Timeline max-width is respected');
-    assert_equals('16px', thumbStyle.width, 'Thumb width is respected');
-
-    if (internals.runtimeFlags.mediaControlsOverlayPlayButtonEnabled) {
-      const overlayPlayButtonStyle = getComputedStyle(mediaControlsOverlayPlayButtonInternal(video));
-      assert_equals('64px', overlayPlayButtonStyle.height, 'Overlay play button height is respected');
-    }
-
-  }
-});
-</script>
-</html>
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/window.svg b/third_party/blink/web_tests/paint/invalidation/svg/window.svg
index 88f7db76..6fa19b8 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/window.svg
+++ b/third_party/blink/web_tests/paint/invalidation/svg/window.svg
@@ -22,6 +22,9 @@
         // terminate before the final window decoration is added.
         // See <https://bugs.webkit.org/show_bug.cgi?id=21531>.
         window.testIsAsync = true;
+        // Under-invalidation checking is slow for this test.
+        if (window.internals)
+            internals.runtimeFlags.paintUnderInvalidationCheckingEnabled = false;
 
         var numberOfWindows = 7;
         var createCalls = 0;
diff --git a/third_party/blink/web_tests/platform/linux/compositing/video/video-controls-layer-creation-expected.png b/third_party/blink/web_tests/platform/linux/compositing/video/video-controls-layer-creation-expected.png
index 8c55a16..08cfc0f 100644
--- a/third_party/blink/web_tests/platform/linux/compositing/video/video-controls-layer-creation-expected.png
+++ b/third_party/blink/web_tests/platform/linux/compositing/video/video-controls-layer-creation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index bca7d55..cefd667 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index abd4c0ea..c2da0c76 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
index d3abde3d..a117b78 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png b/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png
index 6ae3ca2..e5c635b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/linux/media/controls-after-reload-expected.png
index d4ebfb11..7615702 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls-after-reload-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/linux/media/controls-layout-direction-expected.png
index f81cd13..80407565 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls-layout-direction-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/linux/media/controls-strict-expected.png
index 16a8258..f862ef97 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls-strict-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/linux/media/controls-styling-expected.png
index 66be8ed6..b7f2f6c 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls-styling-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/linux/media/controls-styling-strict-expected.png
index 014c3e7..8bbdfa3 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls-styling-strict-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/linux/media/controls-without-preload-expected.png
index 0d5034e..e9109dd 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls-without-preload-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/blink/web_tests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
index 92606420..19d72bc 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/blink/web_tests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
index 68fcd1a4..a514ad3 100644
--- a/third_party/blink/web_tests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/linux/media/media-controls-clone-expected.png
index cdb24b9..85f53456 100644
--- a/third_party/blink/web_tests/platform/linux/media/media-controls-clone-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/linux/media/media-controls-grey-scrubber-expected.png
index 421560e3..15ac2a0 100644
--- a/third_party/blink/web_tests/platform/linux/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/linux/media/video-controls-rendering-expected.png
index c7952d8a..1e7133b 100644
--- a/third_party/blink/web_tests/platform/linux/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/linux/media/video-display-toggle-expected.png
index 4eccc345..ab5b88c 100644
--- a/third_party/blink/web_tests/platform/linux/media/video-display-toggle-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/linux/media/video-empty-source-expected.png
index 80304120..ce26faf 100644
--- a/third_party/blink/web_tests/platform/linux/media/video-empty-source-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/video-no-audio-expected.png b/third_party/blink/web_tests/platform/linux/media/video-no-audio-expected.png
index dbf9ca0..7aece49 100644
--- a/third_party/blink/web_tests/platform/linux/media/video-no-audio-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/linux/media/video-zoom-controls-expected.png
index a923ba92..a3cc596 100644
--- a/third_party/blink/web_tests/platform/linux/media/video-zoom-controls-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index 794e3d8..e49e9c3 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index 058e664..6876e80 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
index 1c03d7a..ad0ba66 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
index 0f4e747..102f0ee7 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-focus-ring-expected.png
index e4a35ee..bb8ea03 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/video-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/video/video-controls-layer-creation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/video/video-controls-layer-creation-expected.png
index a71a8b4..80922ca7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/video/video-controls-layer-creation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/video/video-controls-layer-creation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/overflow/overflow-of-video-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/overflow/overflow-of-video-outline-expected.png
index 76d2b83..3ade45d7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-layout-direction-expected.png
index 5bf868e6..08041b1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-layout-direction-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-clone-expected.png
index eb07114..4ed86f0 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-clone-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-grey-scrubber-expected.png
index 5bde87af..3c487c3 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-empty-source-expected.png
index f2a2c837..661420c 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-empty-source-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/video-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/video-focus-ring-expected.png
index 8dd5229..96e7947 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/video-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/video-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-dcomp/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-dcomp/media/controls-layout-direction-expected.png
new file mode 100644
index 0000000..5bf868e6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-dcomp/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-frameserver/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-frameserver/media/controls-layout-direction-expected.png
new file mode 100644
index 0000000..5bf868e6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-frameserver/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/video/video-controls-layer-creation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/video/video-controls-layer-creation-expected.png
index 0b7df5c..d15ea22 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/video/video-controls-layer-creation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/video/video-controls-layer-creation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index 29a0fd4..28f68d5b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index abb8204..e9159ac 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/overflow/overflow-of-video-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/overflow/overflow-of-video-outline-expected.png
index 279dbdb8..01a68aab 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-after-reload-expected.png
index 1a75aa03..3564715 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-after-reload-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-layout-direction-expected.png
index 041b070..59af3c57 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-layout-direction-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-strict-expected.png
index 4439ccb0..3cdbbcfc 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-strict-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-expected.png
index 08b15a7..d4ef0d3 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-strict-expected.png
index fe2d671..1634281 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-strict-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-without-preload-expected.png
index c01ca62..af12f76 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-without-preload-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls/paint-controls-webkit-appearance-none-expected.png
index b5584b1c..556f6ae9 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-clone-expected.png
index 1938e50..b0fedd4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-clone-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-grey-scrubber-expected.png
index 6e97bc9..7d4a240 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-controls-rendering-expected.png
index 26954d8..99d88ca 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-display-toggle-expected.png
index f7108ef..7a7d041 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-display-toggle-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-empty-source-expected.png
index dba91d8..d10f5ab 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-empty-source-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-no-audio-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-no-audio-expected.png
index 3958486..60f4a63 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-no-audio-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index d633685..a571446 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index 9ce5c5b..b65fe522 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
index 06ef172..22209376 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-focus-ring-expected.png
index 60a5ca9..b1f3a84 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/video-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/compositing/video/video-controls-layer-creation-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/compositing/video/video-controls-layer-creation-expected.png
deleted file mode 100644
index de2c99b9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/compositing/video/video-controls-layer-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/overflow/overflow-of-video-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/overflow/overflow-of-video-outline-expected.png
deleted file mode 100644
index a6c919c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/overflow/overflow-of-video-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/controls-layout-direction-expected.png
index 300471f2..2d8285e 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/controls-layout-direction-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-clone-expected.png
index 8d524a8..83bf7f7 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-clone-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/video-empty-source-expected.png
deleted file mode 100644
index b1b5c7c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/video-empty-source-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/video-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/video-focus-ring-expected.png
deleted file mode 100644
index 39dbfb93..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/video-focus-ring-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/media-controls-grey-scrubber-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-grey-scrubber-expected.png
rename to third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/media-controls-grey-scrubber-expected.png
similarity index 100%
copy from third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-controls-grey-scrubber-expected.png
copy to third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/compositing/video/video-controls-layer-creation-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/compositing/video/video-controls-layer-creation-expected.png
deleted file mode 100644
index de2c99b9..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/compositing/video/video-controls-layer-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/overflow/overflow-of-video-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/overflow/overflow-of-video-outline-expected.png
deleted file mode 100644
index a6c919c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/overflow/overflow-of-video-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/controls-layout-direction-expected.png
index 300471f2..2d8285e 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/controls-layout-direction-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-clone-expected.png
index 8d524a8..83bf7f7 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-clone-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/video-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/video-focus-ring-expected.png
deleted file mode 100644
index 39dbfb93..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/video-focus-ring-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/media-controls-grey-scrubber-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-grey-scrubber-expected.png
rename to third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/video-empty-source-expected.png
similarity index 100%
rename from third_party/blink/web_tests/platform/mac-mac12-arm64/media/video-empty-source-expected.png
rename to third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/media-controls-grey-scrubber-expected.png
similarity index 100%
copy from third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-controls-grey-scrubber-expected.png
copy to third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/video-empty-source-expected.png
similarity index 100%
copy from third_party/blink/web_tests/platform/mac-mac12-arm64/media/video-empty-source-expected.png
copy to third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-layer-creation-expected.png b/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-layer-creation-expected.png
index 519f7371..0141e0a7 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-layer-creation-expected.png
+++ b/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-layer-creation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index 6fd22b6..1e30c72 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index a198c6c..0cce0f8f 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
index 0059b859..d660bb3 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png b/third_party/blink/web_tests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png
index 6b71c1f..013178c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png
index 9a7d341c..03f62857 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-layout-direction-expected.png
index 8af23499..e8b3f44 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls-layout-direction-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png
index c73cfc4..40216c6d 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png
index 07eb69e8..a4313ab7 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png
index 85c04fb8..93d33857 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png
index d725832..ecd4a6443 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/blink/web_tests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png
index 26724fd0..57f567f 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/blink/web_tests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png
index f065d73..b2afc67 100644
--- a/third_party/blink/web_tests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac/media/media-controls-clone-expected.png
index 12dd813..2aefb5f 100644
--- a/third_party/blink/web_tests/platform/mac/media/media-controls-clone-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac/media/media-controls-grey-scrubber-expected.png
index e671f712..f8171f4 100644
--- a/third_party/blink/web_tests/platform/mac/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png
index 1205ce3e..3866fa0 100644
--- a/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png
index df703ba..4d8b746 100644
--- a/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac/media/video-empty-source-expected.png
index 6a09559d..fb63ea40 100644
--- a/third_party/blink/web_tests/platform/mac/media/video-empty-source-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-no-audio-expected.png b/third_party/blink/web_tests/platform/mac/media/video-no-audio-expected.png
index 3fd8880d..3da9638 100644
--- a/third_party/blink/web_tests/platform/mac/media/video-no-audio-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png
index b20f49e..97d8af2e 100644
--- a/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index 0fe02bf..88ae9a7 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index 014135e..d31848fa 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
index 8d157a87..c79f1926 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
index e695bba..fe3649f 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-focus-ring-expected.png
index 21ed154..2fd291d 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/controls-layout-direction-expected.png
new file mode 100644
index 0000000..8af23499
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/media-controls-clone-expected.png
new file mode 100644
index 0000000..12dd813
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/media-controls-grey-scrubber-expected.png
new file mode 100644
index 0000000..e671f712
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/video-empty-source-expected.png
new file mode 100644
index 0000000..6a09559d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-dcomp/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/controls-layout-direction-expected.png
new file mode 100644
index 0000000..8af23499
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/media-controls-clone-expected.png
new file mode 100644
index 0000000..12dd813
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/media-controls-grey-scrubber-expected.png
new file mode 100644
index 0000000..e671f712
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/video-empty-source-expected.png
new file mode 100644
index 0000000..6a09559d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/media-foundation-for-clear-frameserver/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index eb8bf33..4461083d 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index 8b6b71e..94cd9651 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
index a298c62..fe430a7 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/overflow/overflow-of-video-outline-expected.png b/third_party/blink/web_tests/platform/win/fast/overflow/overflow-of-video-outline-expected.png
index 48cd305..b00fcf7 100644
--- a/third_party/blink/web_tests/platform/win/fast/overflow/overflow-of-video-outline-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/overflow/overflow-of-video-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/win/media/controls-after-reload-expected.png
index 85b0847..650028e 100644
--- a/third_party/blink/web_tests/platform/win/media/controls-after-reload-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls-after-reload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls-layout-direction-expected.png b/third_party/blink/web_tests/platform/win/media/controls-layout-direction-expected.png
index a37dc7ac..9fdf0d0a 100644
--- a/third_party/blink/web_tests/platform/win/media/controls-layout-direction-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls-layout-direction-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/win/media/controls-strict-expected.png
index a540a68..90631df4 100644
--- a/third_party/blink/web_tests/platform/win/media/controls-strict-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/win/media/controls-styling-expected.png
index 36e63d5..ea0480a 100644
--- a/third_party/blink/web_tests/platform/win/media/controls-styling-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls-styling-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/win/media/controls-styling-strict-expected.png
index e7f9ef6..eaa282b 100644
--- a/third_party/blink/web_tests/platform/win/media/controls-styling-strict-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls-styling-strict-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/win/media/controls-without-preload-expected.png
index c3e88097..e64c85c 100644
--- a/third_party/blink/web_tests/platform/win/media/controls-without-preload-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls-without-preload-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/blink/web_tests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png
index af30883..9250d78c 100644
--- a/third_party/blink/web_tests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/blink/web_tests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png
index 85cc545..ba78269 100644
--- a/third_party/blink/web_tests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/win/media/media-controls-clone-expected.png
index 0c1c944..a47ccc3 100644
--- a/third_party/blink/web_tests/platform/win/media/media-controls-clone-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/media-controls-clone-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/media-controls-grey-scrubber-expected.png b/third_party/blink/web_tests/platform/win/media/media-controls-grey-scrubber-expected.png
index 5ade3bf..ce318fd1 100644
--- a/third_party/blink/web_tests/platform/win/media/media-controls-grey-scrubber-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/media-controls-grey-scrubber-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/win/media/video-controls-rendering-expected.png
index dd7b9be..6b333c2 100644
--- a/third_party/blink/web_tests/platform/win/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/win/media/video-display-toggle-expected.png
index 90a326b..e28679a 100644
--- a/third_party/blink/web_tests/platform/win/media/video-display-toggle-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/video-display-toggle-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/video-empty-source-expected.png b/third_party/blink/web_tests/platform/win/media/video-empty-source-expected.png
index 78be5a4b..f6ee66b 100644
--- a/third_party/blink/web_tests/platform/win/media/video-empty-source-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/video-empty-source-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/video-no-audio-expected.png b/third_party/blink/web_tests/platform/win/media/video-no-audio-expected.png
index 926d183..65d4ce7 100644
--- a/third_party/blink/web_tests/platform/win/media/video-no-audio-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/video-no-audio-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/win/media/video-zoom-controls-expected.png
index 51a8baff..2db4de1 100644
--- a/third_party/blink/web_tests/platform/win/media/video-zoom-controls-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
index bba4309..7742b14 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
index ffead7d..e66b4d7d 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
index 5c552c4..259ec83 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-playback-speed-menu-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
index 2d2970c..ed1ec32 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-focus-ring-expected.png
index 6dcbab3..dd749e9 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/video-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/cors-non-wildcard-request-headers/external/wpt/fetch/api/cors/cors-preflight.any-expected.txt b/third_party/blink/web_tests/virtual/cors-non-wildcard-request-headers/external/wpt/fetch/api/cors/cors-preflight.any-expected.txt
index 3c3dbc6..fadfd34 100644
--- a/third_party/blink/web_tests/virtual/cors-non-wildcard-request-headers/external/wpt/fetch/api/cors/cors-preflight.any-expected.txt
+++ b/third_party/blink/web_tests/virtual/cors-non-wildcard-request-headers/external/wpt/fetch/api/cors/cors-preflight.any-expected.txt
@@ -6,11 +6,11 @@
 PASS CORS [PUT], server refuses
 PASS CORS [PATCH], server allows
 PASS CORS [PATCH], server refuses
-FAIL CORS [patcH], server allows promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch"
+PASS CORS [patcH], server allows
 PASS CORS [patcH], server refuses
 PASS CORS [NEW], server allows
 PASS CORS [NEW], server refuses
-FAIL CORS [chicken], server allows promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch"
+PASS CORS [chicken], server allows
 PASS CORS [chicken], server refuses
 PASS CORS [GET] [x-test-header: allowed], server allows
 PASS CORS [GET] [x-test-header: refused], server refuses
diff --git a/third_party/blink/web_tests/virtual/cors-non-wildcard-request-headers/external/wpt/fetch/api/cors/cors-preflight.any.worker-expected.txt b/third_party/blink/web_tests/virtual/cors-non-wildcard-request-headers/external/wpt/fetch/api/cors/cors-preflight.any.worker-expected.txt
new file mode 100644
index 0000000..fadfd34
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/cors-non-wildcard-request-headers/external/wpt/fetch/api/cors/cors-preflight.any.worker-expected.txt
@@ -0,0 +1,25 @@
+This is a testharness.js-based test.
+PASS CORS [DELETE], server allows
+PASS CORS [DELETE], server refuses
+PASS CORS [PUT], server allows
+PASS CORS [PUT], server allows, check preflight has user agent
+PASS CORS [PUT], server refuses
+PASS CORS [PATCH], server allows
+PASS CORS [PATCH], server refuses
+PASS CORS [patcH], server allows
+PASS CORS [patcH], server refuses
+PASS CORS [NEW], server allows
+PASS CORS [NEW], server refuses
+PASS CORS [chicken], server allows
+PASS CORS [chicken], server refuses
+PASS CORS [GET] [x-test-header: allowed], server allows
+PASS CORS [GET] [x-test-header: refused], server refuses
+PASS CORS [GET] [several headers], server allows
+PASS CORS [GET] [several headers], server refuses
+PASS CORS [PUT] [several headers], server allows
+PASS CORS [PUT] [several headers], server refuses
+PASS CORS [PUT] [only safe headers], server allows
+PASS "authorization" should not be covered by the wildcard symbol
+PASS "authorization" should be covered by "authorization"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/virtual/document-pip/document-pip-clears-session-on-close.html b/third_party/blink/web_tests/virtual/document-pip/document-pip-clears-session-on-close.html
deleted file mode 100644
index b6751c5..0000000
--- a/third_party/blink/web_tests/virtual/document-pip/document-pip-clears-session-on-close.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<title>Test that documentPictureInPicture.window
-  is cleared when the PiP window in closed.</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../resources/user-gesture-utils.js"></script>
-<body>
-  <div id="div"></div>
-<script>
-const div = document.getElementById('div');
-
-async_test((t) => {
-  focusWithUserGesture(window);
-  documentPictureInPicture.requestWindow().then( () => {
-    const pipWindow = documentPictureInPicture.window;
-    assert_true(!!pipWindow, "pipWindow should exist with PiP is opened");
-    pipWindow.addEventListener('unload', () => {
-      // `window` is still set until event processing is complete.
-      scheduler.postTask(t.step_func_done( () => {
-        assert_true(!documentPictureInPicture.window,
-                    "window should be cleared when PiP is closed");
-      }))
-    });
-    pipWindow.close();
-  });
-});
-</script>
-</body>
diff --git a/third_party/blink/web_tests/virtual/document-pip/document-pip-enter-event.html b/third_party/blink/web_tests/virtual/document-pip/document-pip-enter-event.html
deleted file mode 100644
index c2b3f260..0000000
--- a/third_party/blink/web_tests/virtual/document-pip/document-pip-enter-event.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<title>Test that enter event is fired at documentPictureInPicture
-  when the PiP window in opened.</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../resources/user-gesture-utils.js"></script>
-<body>
-<script>
-promise_test((t) => {
-  focusWithUserGesture(window);
-  documentPictureInPicture.onenter = t.step_func_done();
-  return documentPictureInPicture.requestWindow();
-});
-</script>
-</body>
diff --git a/third_party/blink/web_tests/virtual/document-pip/document-pip-returns-window-with-document.html b/third_party/blink/web_tests/virtual/document-pip/document-pip-returns-window-with-document.html
deleted file mode 100644
index 75c2c17..0000000
--- a/third_party/blink/web_tests/virtual/document-pip/document-pip-returns-window-with-document.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<title>Test that documentPictureInPicture.requestWindow()
-  returns a Window object</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../resources/user-gesture-utils.js"></script>
-<body>
-  <div id="div"></div>
-<script>
-const div = document.getElementById('div');
-
-async_test((t) => {
-  focusWithUserGesture(window);
-  documentPictureInPicture.requestWindow().then(t.step_func_done(
-      (pipWindow) => {
-    assert_true(!!pipWindow.document,
-        'Window should contain a document');
-    assert_true(documentPictureInPicture.window === pipWindow,
-        'DocumentPictureInPicture.window should match the current window');
-
-    // We should be able to move an element to that document.
-    assert_true(document.body.contains(div),
-        'The original document should start with the div');
-    assert_false(pipWindow.document.body.contains(div),
-        'The PiP document should not start with the div');
-    pipWindow.document.body.append(div);
-    assert_false(document.body.contains(div),
-        'The div should have moved away from the original document');
-    assert_true(pipWindow.document.body.contains(div),
-        'The div should have moved to the PiP document');
-  }));
-});
-</script>
-</body>
diff --git a/third_party/blink/web_tests/virtual/document-pip/iframe-document-pip.html b/third_party/blink/web_tests/virtual/document-pip/iframe-document-pip.html
deleted file mode 100644
index bc2453f..0000000
--- a/third_party/blink/web_tests/virtual/document-pip/iframe-document-pip.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<title>Test that document pip is not allowed in iframes.</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<body>
-<iframe></iframe>
-</body>
-<script>
-promise_test(t => {
-  const frame = document.querySelector('iframe');
-  const frameDOMException = frame.contentWindow.DOMException;
-  return promise_rejects_dom(t, 'NotAllowedError', frameDOMException,
-    frame.contentWindow.documentPictureInPicture.requestWindow());
-});
-</script>
diff --git a/third_party/blink/web_tests/virtual/document-pip/open-pip-window-from-pip-window.html b/third_party/blink/web_tests/virtual/document-pip/open-pip-window-from-pip-window.html
deleted file mode 100644
index ecd095e..0000000
--- a/third_party/blink/web_tests/virtual/document-pip/open-pip-window-from-pip-window.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<title>Test that documentPictureInPicture.requestWindow()
-  rejects from a PiP window</title>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../resources/user-gesture-utils.js"></script>
-<body>
-<script>
-async_test((t) => {
-  focusWithUserGesture(window);
-  documentPictureInPicture.requestWindow().then(t.step_func_done(
-      (pipWindow) => {
-    focusWithUserGesture(pipWindow);
-    return promise_rejects_dom(t, 'NotAllowedError', pipWindow.DOMException,
-        pipWindow.documentPictureInPicture.requestWindow());
-  }));
-});
-</script>
-</body>
diff --git a/third_party/blink/web_tests/wpt_internal/attribution-reporting/simple-verbose-debug-report.sub.https.html b/third_party/blink/web_tests/wpt_internal/attribution-reporting/simple-verbose-debug-report.sub.https.html
index d85be7d..cc25778c 100644
--- a/third_party/blink/web_tests/wpt_internal/attribution-reporting/simple-verbose-debug-report.sub.https.html
+++ b/third_party/blink/web_tests/wpt_internal/attribution-reporting/simple-verbose-debug-report.sub.https.html
@@ -9,6 +9,7 @@
   await registerAttributionSrc(t, {
     trigger: {
       debug_reporting: true,
+      debug_key: '456',
     },
     cookie: attributionDebugCookie,
   });
@@ -20,5 +21,6 @@
   assert_equals(report[0].type, 'trigger-no-matching-source');
   assert_own_property(report[0], 'body');
   assert_equals(report[0].body.attribution_destination, `https://{{host}}`);
+  assert_equals(report[0].body.trigger_debug_key, '456');
 }, 'Verbose debug report is received.');
 </script>
diff --git a/third_party/blink/web_tests/wpt_internal/cache_storage/padding.https.html.ini b/third_party/blink/web_tests/wpt_internal/cache_storage/padding.https.html.ini
new file mode 100644
index 0000000..921fa82
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/cache_storage/padding.https.html.ini
@@ -0,0 +1,4 @@
+[padding.https.html]
+  [Code cache padding should be stable.]
+    expected:
+      if product == "chrome": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.ini b/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.ini
new file mode 100644
index 0000000..3c96a465
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/content-security-policy/reporting-api/reporting-api-report-to-overrides-report-uri-1.https.sub.html.ini
@@ -0,0 +1,3 @@
+[reporting-api-report-to-overrides-report-uri-1.https.sub.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html.ini b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html.ini
index e9d6baf9..10a1e2c 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html.ini
@@ -1,4 +1,6 @@
 [file-input-webkitdirectory-click.html]
+  expected:
+    if (flag_specific == "") and (os == "linux") and (product == "content_shell"): [OK, TIMEOUT]
   [clicking a file input with the webkitdirectory attribute launches a file chooser]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html.ini b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html.ini
index f94a6ac..c35b594 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html.ini
@@ -1,6 +1,6 @@
 [file-input-webkitdirectory-key-enter.html]
   expected:
-    if flag_specific == "disable-site-isolation-trials": [OK, TIMEOUT]
+    if flag_specific == "disable-site-isolation-trials": TIMEOUT
   [pressing Enter with focus on a webkitdirectory file input element launches a file chooser]
     expected:
       if product == "chrome": FAIL
diff --git a/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini b/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini
index 44e0a82..3f8f623 100644
--- a/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini
+++ b/third_party/blink/web_tests/wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.js.ini
@@ -1,7 +1,6 @@
 [estimate-usage-details-filesystem.https.tentative.any.worker.html]
-  [estimate() usage details reflects increase in fileSystem after write  operation]
-    expected:
-      if flag_specific == "disable-layout-ng": [PASS, FAIL]
-
 
 [estimate-usage-details-filesystem.https.tentative.any.html]
+  [estimate() usage details reflects increase in fileSystem after write  operation]
+    expected:
+      if flag_specific == "disable-site-isolation-trials": [PASS, FAIL]
diff --git a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini b/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini
index eab0b68..26d0e98 100644
--- a/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini
+++ b/third_party/blink/web_tests/wpt_internal/view-transition-on-navigation/root-and-nested-element-transition.html.ini
@@ -1,4 +1,2 @@
 [root-and-nested-element-transition.html]
-  expected:
-    if product == "chrome": ERROR
-    FAIL
+  expected: FAIL
diff --git a/third_party/grpc/BUILD.gn b/third_party/grpc/BUILD.gn
index b3cb395..d1ef212 100644
--- a/third_party/grpc/BUILD.gn
+++ b/third_party/grpc/BUILD.gn
@@ -93,6 +93,7 @@
     "-Wno-unreachable-code",
     "-Wno-unused-variable",
     "-Wno-unused-result",
+    "-Wno-deprecated-copy",
   ]
 
   # TODO(b/260740023): Remove when gRPC has CFI checks enabled.
@@ -155,10 +156,7 @@
     "src/include/grpc++/impl/codegen/completion_queue_tag.h",
     "src/include/grpc++/impl/codegen/config.h",
     "src/include/grpc++/impl/codegen/config_protobuf.h",
-    "src/include/grpc++/impl/codegen/core_codegen.h",
-    "src/include/grpc++/impl/codegen/core_codegen_interface.h",
     "src/include/grpc++/impl/codegen/create_auth_context.h",
-    "src/include/grpc++/impl/codegen/grpc_library.h",
     "src/include/grpc++/impl/codegen/metadata_map.h",
     "src/include/grpc++/impl/codegen/method_handler_impl.h",
     "src/include/grpc++/impl/codegen/proto_utils.h",
@@ -213,6 +211,7 @@
     "src/include/grpc/event_engine/endpoint_config.h",
     "src/include/grpc/event_engine/event_engine.h",
     "src/include/grpc/event_engine/internal/memory_allocator_impl.h",
+    "src/include/grpc/event_engine/internal/slice_cast.h",
     "src/include/grpc/event_engine/memory_allocator.h",
     "src/include/grpc/event_engine/memory_request.h",
     "src/include/grpc/event_engine/port.h",
@@ -232,7 +231,6 @@
     "src/include/grpc/impl/codegen/compression_types.h",
     "src/include/grpc/impl/codegen/connectivity_state.h",
     "src/include/grpc/impl/codegen/fork.h",
-    "src/include/grpc/impl/codegen/gpr_slice.h",
     "src/include/grpc/impl/codegen/gpr_types.h",
     "src/include/grpc/impl/codegen/grpc_types.h",
     "src/include/grpc/impl/codegen/log.h",
@@ -246,6 +244,11 @@
     "src/include/grpc/impl/codegen/sync_generic.h",
     "src/include/grpc/impl/codegen/sync_posix.h",
     "src/include/grpc/impl/codegen/sync_windows.h",
+    "src/include/grpc/impl/compression_types.h",
+    "src/include/grpc/impl/connectivity_state.h",
+    "src/include/grpc/impl/grpc_types.h",
+    "src/include/grpc/impl/propagation_bits.h",
+    "src/include/grpc/impl/slice_type.h",
     "src/include/grpc/load_reporting.h",
     "src/include/grpc/slice.h",
     "src/include/grpc/slice_buffer.h",
@@ -284,8 +287,10 @@
     "src/include/grpcpp/health_check_service_interface.h",
     "src/include/grpcpp/impl/call.h",
     "src/include/grpcpp/impl/call_hook.h",
+    "src/include/grpcpp/impl/call_op_set.h",
     "src/include/grpcpp/impl/call_op_set_interface.h",
     "src/include/grpcpp/impl/channel_argument_option.h",
+    "src/include/grpcpp/impl/channel_interface.h",
     "src/include/grpcpp/impl/client_unary_call.h",
     "src/include/grpcpp/impl/codegen/async_generic_service.h",
     "src/include/grpcpp/impl/codegen/async_stream.h",
@@ -305,11 +310,8 @@
     "src/include/grpcpp/impl/codegen/completion_queue_tag.h",
     "src/include/grpcpp/impl/codegen/config.h",
     "src/include/grpcpp/impl/codegen/config_protobuf.h",
-    "src/include/grpcpp/impl/codegen/core_codegen.h",
-    "src/include/grpcpp/impl/codegen/core_codegen_interface.h",
     "src/include/grpcpp/impl/codegen/create_auth_context.h",
     "src/include/grpcpp/impl/codegen/delegating_channel.h",
-    "src/include/grpcpp/impl/codegen/grpc_library.h",
     "src/include/grpcpp/impl/codegen/intercepted_channel.h",
     "src/include/grpcpp/impl/codegen/interceptor.h",
     "src/include/grpcpp/impl/codegen/interceptor_common.h",
@@ -338,15 +340,25 @@
     "src/include/grpcpp/impl/codegen/sync.h",
     "src/include/grpcpp/impl/codegen/sync_stream.h",
     "src/include/grpcpp/impl/codegen/time.h",
+    "src/include/grpcpp/impl/completion_queue_tag.h",
+    "src/include/grpcpp/impl/create_auth_context.h",
+    "src/include/grpcpp/impl/delegating_channel.h",
     "src/include/grpcpp/impl/grpc_library.h",
+    "src/include/grpcpp/impl/intercepted_channel.h",
+    "src/include/grpcpp/impl/interceptor_common.h",
+    "src/include/grpcpp/impl/metadata_map.h",
     "src/include/grpcpp/impl/method_handler_impl.h",
+    "src/include/grpcpp/impl/proto_utils.h",
     "src/include/grpcpp/impl/rpc_method.h",
     "src/include/grpcpp/impl/rpc_service_method.h",
     "src/include/grpcpp/impl/serialization_traits.h",
     "src/include/grpcpp/impl/server_builder_option.h",
     "src/include/grpcpp/impl/server_builder_plugin.h",
+    "src/include/grpcpp/impl/server_callback_handlers.h",
     "src/include/grpcpp/impl/server_initializer.h",
     "src/include/grpcpp/impl/service_type.h",
+    "src/include/grpcpp/impl/status.h",
+    "src/include/grpcpp/impl/sync.h",
     "src/include/grpcpp/resource_quota.h",
     "src/include/grpcpp/security/auth_context.h",
     "src/include/grpcpp/security/auth_metadata_processor.h",
@@ -361,10 +373,12 @@
     "src/include/grpcpp/server.h",
     "src/include/grpcpp/server_builder.h",
     "src/include/grpcpp/server_context.h",
+    "src/include/grpcpp/server_interface.h",
     "src/include/grpcpp/server_posix.h",
     "src/include/grpcpp/support/async_stream.h",
     "src/include/grpcpp/support/async_unary_call.h",
     "src/include/grpcpp/support/byte_buffer.h",
+    "src/include/grpcpp/support/callback_common.h",
     "src/include/grpcpp/support/channel_arguments.h",
     "src/include/grpcpp/support/client_callback.h",
     "src/include/grpcpp/support/client_interceptor.h",
@@ -384,6 +398,7 @@
     "src/include/grpcpp/support/sync_stream.h",
     "src/include/grpcpp/support/time.h",
     "src/include/grpcpp/support/validate_service_config.h",
+    "src/include/grpcpp/version_info.h",
     "src/include/grpcpp/xds_server_builder.h",
     "src/src/core/ext/filters/channel_idle/channel_idle_filter.h",
     "src/src/core/ext/filters/channel_idle/idle_filter_state.h",
@@ -392,12 +407,14 @@
     "src/src/core/ext/filters/client_channel/client_channel.h",
     "src/src/core/ext/filters/client_channel/client_channel_channelz.h",
     "src/src/core/ext/filters/client_channel/client_channel_factory.h",
+    "src/src/core/ext/filters/client_channel/client_channel_service_config.h",
     "src/src/core/ext/filters/client_channel/config_selector.h",
     "src/src/core/ext/filters/client_channel/connector.h",
     "src/src/core/ext/filters/client_channel/dynamic_filters.h",
     "src/src/core/ext/filters/client_channel/global_subchannel_pool.h",
     "src/src/core/ext/filters/client_channel/health/health_check_client.h",
     "src/src/core/ext/filters/client_channel/http_proxy.h",
+    "src/src/core/ext/filters/client_channel/lb_call_state_internal.h",
     "src/src/core/ext/filters/client_channel/lb_policy/address_filtering.h",
     "src/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h",
     "src/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h",
@@ -410,7 +427,6 @@
     "src/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h",
     "src/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h",
     "src/src/core/ext/filters/client_channel/resolver/polling_resolver.h",
-    "src/src/core/ext/filters/client_channel/resolver_result_parsing.h",
     "src/src/core/ext/filters/client_channel/retry_filter.h",
     "src/src/core/ext/filters/client_channel/retry_service_config.h",
     "src/src/core/ext/filters/client_channel/retry_throttle.h",
@@ -420,11 +436,10 @@
     "src/src/core/ext/filters/client_channel/subchannel_stream_client.h",
     "src/src/core/ext/filters/deadline/deadline_filter.h",
     "src/src/core/ext/filters/fault_injection/fault_injection_filter.h",
-    "src/src/core/ext/filters/fault_injection/service_config_parser.h",
+    "src/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h",
     "src/src/core/ext/filters/http/client/http_client_filter.h",
     "src/src/core/ext/filters/http/client_authority_filter.h",
-    "src/src/core/ext/filters/http/message_compress/message_compress_filter.h",
-    "src/src/core/ext/filters/http/message_compress/message_decompress_filter.h",
+    "src/src/core/ext/filters/http/message_compress/compression_filter.h",
     "src/src/core/ext/filters/http/server/http_server_filter.h",
     "src/src/core/ext/filters/message_size/message_size_filter.h",
 
@@ -432,6 +447,8 @@
     # "src/src/core/ext/filters/rbac/rbac_service_config_parser.h",
     "src/src/core/ext/filters/server_config_selector/server_config_selector.h",
     "src/src/core/ext/filters/server_config_selector/server_config_selector_filter.h",
+    "src/src/core/ext/filters/stateful_session/stateful_session_filter.h",
+    "src/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h",
     "src/src/core/ext/transport/binder/client/binder_connector.h",
     "src/src/core/ext/transport/binder/client/channel_create_impl.h",
     "src/src/core/ext/transport/binder/client/connection_id_generator.h",
@@ -474,6 +491,7 @@
     "src/src/core/ext/transport/chttp2/transport/hpack_parser.h",
     "src/src/core/ext/transport/chttp2/transport/hpack_parser_table.h",
     "src/src/core/ext/transport/chttp2/transport/http2_settings.h",
+    "src/src/core/ext/transport/chttp2/transport/http_trace.h",
     "src/src/core/ext/transport/chttp2/transport/huffsyms.h",
     "src/src/core/ext/transport/chttp2/transport/internal.h",
     "src/src/core/ext/transport/chttp2/transport/stream_map.h",
@@ -547,7 +565,9 @@
     "src/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h",
     "src/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h",
     "src/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h",
+    "src/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h",
     "src/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h",
+    "src/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h",
     "src/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h",
     "src/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h",
     "src/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h",
@@ -693,7 +713,9 @@
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h",
+    "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h",
+    "src/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h",
@@ -789,23 +811,42 @@
     "src/src/core/lib/debug/stats_data.h",
     "src/src/core/lib/debug/trace.h",
     "src/src/core/lib/event_engine/channel_args_endpoint_config.h",
+    "src/src/core/lib/event_engine/common_closures.h",
     "src/src/core/lib/event_engine/default_event_engine.h",
     "src/src/core/lib/event_engine/default_event_engine_factory.h",
     "src/src/core/lib/event_engine/executor/executor.h",
     "src/src/core/lib/event_engine/forkable.h",
     "src/src/core/lib/event_engine/handle_containers.h",
     "src/src/core/lib/event_engine/poller.h",
+    "src/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h",
+    "src/src/core/lib/event_engine/posix_engine/ev_poll_posix.h",
+    "src/src/core/lib/event_engine/posix_engine/event_poller.h",
+    "src/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h",
+    "src/src/core/lib/event_engine/posix_engine/internal_errqueue.h",
+    "src/src/core/lib/event_engine/posix_engine/lockfree_event.h",
+    "src/src/core/lib/event_engine/posix_engine/posix_endpoint.h",
     "src/src/core/lib/event_engine/posix_engine/posix_engine.h",
+    "src/src/core/lib/event_engine/posix_engine/posix_engine_closure.h",
+    "src/src/core/lib/event_engine/posix_engine/posix_engine_listener.h",
+    "src/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h",
+    "src/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h",
     "src/src/core/lib/event_engine/posix_engine/timer.h",
     "src/src/core/lib/event_engine/posix_engine/timer_heap.h",
     "src/src/core/lib/event_engine/posix_engine/timer_manager.h",
+    "src/src/core/lib/event_engine/posix_engine/traced_buffer_list.h",
+    "src/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h",
+    "src/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h",
+    "src/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h",
+    "src/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h",
     "src/src/core/lib/event_engine/socket_notifier.h",
+    "src/src/core/lib/event_engine/tcp_socket_utils.h",
     "src/src/core/lib/event_engine/thread_pool.h",
     "src/src/core/lib/event_engine/time_util.h",
     "src/src/core/lib/event_engine/trace.h",
     "src/src/core/lib/event_engine/utils.h",
     "src/src/core/lib/event_engine/windows/iocp.h",
     "src/src/core/lib/event_engine/windows/win_socket.h",
+    "src/src/core/lib/event_engine/windows/windows_endpoint.h",
     "src/src/core/lib/event_engine/windows/windows_engine.h",
     "src/src/core/lib/experiments/config.h",
     "src/src/core/lib/experiments/experiments.h",
@@ -830,6 +871,7 @@
     "src/src/core/lib/gprpp/global_config_env.h",
     "src/src/core/lib/gprpp/global_config_generic.h",
     "src/src/core/lib/gprpp/host_port.h",
+    "src/src/core/lib/gprpp/load_file.h",
     "src/src/core/lib/gprpp/manual_constructor.h",
     "src/src/core/lib/gprpp/match.h",
     "src/src/core/lib/gprpp/memory.h",
@@ -926,6 +968,7 @@
     "src/src/core/lib/iomgr/wakeup_fd_posix.h",
     "src/src/core/lib/json/json.h",
     "src/src/core/lib/json/json_args.h",
+    "src/src/core/lib/json/json_channel_args.h",
     "src/src/core/lib/json/json_object_loader.h",
     "src/src/core/lib/json/json_util.h",
     "src/src/core/lib/load_balancing/lb_policy.h",
@@ -936,23 +979,26 @@
     # "src/src/core/lib/matchers/matchers.h",
     "src/src/core/lib/promise/activity.h",
     "src/src/core/lib/promise/arena_promise.h",
-    "src/src/core/lib/promise/call_push_pull.h",
     "src/src/core/lib/promise/context.h",
     "src/src/core/lib/promise/detail/basic_seq.h",
     "src/src/core/lib/promise/detail/promise_factory.h",
     "src/src/core/lib/promise/detail/promise_like.h",
     "src/src/core/lib/promise/detail/status.h",
+    "src/src/core/lib/promise/detail/switch.h",
     "src/src/core/lib/promise/exec_ctx_wakeup_scheduler.h",
+    "src/src/core/lib/promise/for_each.h",
     "src/src/core/lib/promise/intra_activity_waiter.h",
     "src/src/core/lib/promise/latch.h",
     "src/src/core/lib/promise/loop.h",
     "src/src/core/lib/promise/map.h",
+    "src/src/core/lib/promise/map_pipe.h",
     "src/src/core/lib/promise/pipe.h",
     "src/src/core/lib/promise/poll.h",
     "src/src/core/lib/promise/promise.h",
     "src/src/core/lib/promise/race.h",
     "src/src/core/lib/promise/seq.h",
     "src/src/core/lib/promise/sleep.h",
+    "src/src/core/lib/promise/try_concurrently.h",
     "src/src/core/lib/promise/try_seq.h",
     "src/src/core/lib/resolver/resolver.h",
     "src/src/core/lib/resolver/resolver_factory.h",
@@ -1052,7 +1098,6 @@
     "src/src/core/lib/surface/server.h",
     "src/src/core/lib/surface/validate_metadata.h",
     "src/src/core/lib/transport/bdp_estimator.h",
-    "src/src/core/lib/transport/call_fragments.h",
     "src/src/core/lib/transport/connectivity_state.h",
     "src/src/core/lib/transport/error_utils.h",
     "src/src/core/lib/transport/handshaker.h",
@@ -1094,6 +1139,7 @@
     "src/src/core/tsi/ssl/session_cache/ssl_session.h",
     "src/src/core/tsi/ssl/session_cache/ssl_session_cache.h",
     "src/src/core/tsi/ssl_transport_security.h",
+    "src/src/core/tsi/ssl_transport_security_utils.h",
     "src/src/core/tsi/ssl_types.h",
     "src/src/core/tsi/transport_security.h",
     "src/src/core/tsi/transport_security_grpc.h",
@@ -1148,6 +1194,7 @@
     "src/src/core/ext/filters/client_channel/client_channel_channelz.cc",
     "src/src/core/ext/filters/client_channel/client_channel_factory.cc",
     "src/src/core/ext/filters/client_channel/client_channel_plugin.cc",
+    "src/src/core/ext/filters/client_channel/client_channel_service_config.cc",
     "src/src/core/ext/filters/client_channel/config_selector.cc",
     "src/src/core/ext/filters/client_channel/dynamic_filters.cc",
     "src/src/core/ext/filters/client_channel/global_subchannel_pool.cc",
@@ -1173,7 +1220,6 @@
     # "src/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc",
     "src/src/core/ext/filters/client_channel/resolver/polling_resolver.cc",
     "src/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc",
-    "src/src/core/ext/filters/client_channel/resolver_result_parsing.cc",
     "src/src/core/ext/filters/client_channel/retry_filter.cc",
     "src/src/core/ext/filters/client_channel/retry_service_config.cc",
     "src/src/core/ext/filters/client_channel/retry_throttle.cc",
@@ -1183,19 +1229,19 @@
     "src/src/core/ext/filters/client_channel/subchannel_stream_client.cc",
     "src/src/core/ext/filters/deadline/deadline_filter.cc",
     "src/src/core/ext/filters/fault_injection/fault_injection_filter.cc",
-    "src/src/core/ext/filters/fault_injection/service_config_parser.cc",
+    "src/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc",
     "src/src/core/ext/filters/http/client/http_client_filter.cc",
     "src/src/core/ext/filters/http/client_authority_filter.cc",
     "src/src/core/ext/filters/http/http_filters_plugin.cc",
-    "src/src/core/ext/filters/http/message_compress/message_compress_filter.cc",
-    "src/src/core/ext/filters/http/message_compress/message_decompress_filter.cc",
+    "src/src/core/ext/filters/http/message_compress/compression_filter.cc",
     "src/src/core/ext/filters/http/server/http_server_filter.cc",
     "src/src/core/ext/filters/message_size/message_size_filter.cc",
 
     # "src/src/core/ext/filters/rbac/rbac_filter.cc",
     # "src/src/core/ext/filters/rbac/rbac_service_config_parser.cc",
-    "src/src/core/ext/filters/server_config_selector/server_config_selector.cc",
     "src/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc",
+    "src/src/core/ext/filters/stateful_session/stateful_session_filter.cc",
+    "src/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc",
     "src/src/core/ext/transport/binder/client/binder_connector.cc",
     "src/src/core/ext/transport/binder/client/channel_create.cc",
     "src/src/core/ext/transport/binder/client/channel_create_impl.cc",
@@ -1234,6 +1280,7 @@
     "src/src/core/ext/transport/chttp2/transport/hpack_parser.cc",
     "src/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc",
     "src/src/core/ext/transport/chttp2/transport/http2_settings.cc",
+    "src/src/core/ext/transport/chttp2/transport/http_trace.cc",
     "src/src/core/ext/transport/chttp2/transport/huffsyms.cc",
     "src/src/core/ext/transport/chttp2/transport/parsing.cc",
     "src/src/core/ext/transport/chttp2/transport/stream_lists.cc",
@@ -1307,7 +1354,9 @@
     "src/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c",
+    "src/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c",
+    "src/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c",
@@ -1318,7 +1367,6 @@
     "src/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c",
     "src/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c",
     "src/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c",
-    "src/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c",
     "src/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c",
     "src/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c",
     "src/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c",
@@ -1435,7 +1483,9 @@
     "src/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c",
+    "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c",
+    "src/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c",
@@ -1444,7 +1494,6 @@
     "src/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c",
-    "src/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c",
@@ -1516,10 +1565,23 @@
     "src/src/core/lib/event_engine/default_event_engine_factory.cc",
     "src/src/core/lib/event_engine/forkable.cc",
     "src/src/core/lib/event_engine/memory_allocator.cc",
+    "src/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc",
+    "src/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc",
+    "src/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc",
+    "src/src/core/lib/event_engine/posix_engine/internal_errqueue.cc",
+    "src/src/core/lib/event_engine/posix_engine/lockfree_event.cc",
+    "src/src/core/lib/event_engine/posix_engine/posix_endpoint.cc",
     "src/src/core/lib/event_engine/posix_engine/posix_engine.cc",
+    "src/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc",
+    "src/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc",
+    "src/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc",
     "src/src/core/lib/event_engine/posix_engine/timer.cc",
     "src/src/core/lib/event_engine/posix_engine/timer_heap.cc",
     "src/src/core/lib/event_engine/posix_engine/timer_manager.cc",
+    "src/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc",
+    "src/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc",
+    "src/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc",
+    "src/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc",
     "src/src/core/lib/event_engine/resolved_address.cc",
     "src/src/core/lib/event_engine/slice.cc",
     "src/src/core/lib/event_engine/slice_buffer.cc",
@@ -1528,6 +1590,7 @@
     "src/src/core/lib/event_engine/utils.cc",
     "src/src/core/lib/event_engine/windows/iocp.cc",
     "src/src/core/lib/event_engine/windows/win_socket.cc",
+    "src/src/core/lib/event_engine/windows/windows_endpoint.cc",
     "src/src/core/lib/event_engine/windows/windows_engine.cc",
     "src/src/core/lib/experiments/config.cc",
     "src/src/core/lib/experiments/experiments.cc",
@@ -1568,6 +1631,7 @@
     "src/src/core/lib/gprpp/fork.cc",
     "src/src/core/lib/gprpp/global_config_env.cc",
     "src/src/core/lib/gprpp/host_port.cc",
+    "src/src/core/lib/gprpp/load_file.cc",
     "src/src/core/lib/gprpp/mpscq.cc",
     "src/src/core/lib/gprpp/stat_posix.cc",
     "src/src/core/lib/gprpp/stat_windows.cc",
@@ -1596,8 +1660,6 @@
     "src/src/core/lib/iomgr/error.cc",
     "src/src/core/lib/iomgr/error_cfstream.cc",
     "src/src/core/lib/iomgr/ev_apple.cc",
-    "src/src/core/lib/iomgr/ev_epoll1_linux.cc",
-    "src/src/core/lib/iomgr/ev_poll_posix.cc",
     "src/src/core/lib/iomgr/ev_posix.cc",
     "src/src/core/lib/iomgr/ev_windows.cc",
     "src/src/core/lib/iomgr/exec_ctx.cc",
@@ -1609,15 +1671,12 @@
     "src/src/core/lib/iomgr/gethostname_sysconf.cc",
     "src/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc",
     "src/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc",
-    "src/src/core/lib/iomgr/internal_errqueue.cc",
     "src/src/core/lib/iomgr/iocp_windows.cc",
     "src/src/core/lib/iomgr/iomgr.cc",
     "src/src/core/lib/iomgr/iomgr_internal.cc",
     "src/src/core/lib/iomgr/iomgr_posix.cc",
     "src/src/core/lib/iomgr/iomgr_posix_cfstream.cc",
     "src/src/core/lib/iomgr/iomgr_windows.cc",
-    "src/src/core/lib/iomgr/load_file.cc",
-    "src/src/core/lib/iomgr/lockfree_event.cc",
     "src/src/core/lib/iomgr/polling_entity.cc",
     "src/src/core/lib/iomgr/pollset.cc",
     "src/src/core/lib/iomgr/pollset_set.cc",
@@ -1649,9 +1708,7 @@
     "src/src/core/lib/iomgr/timer_generic.cc",
     "src/src/core/lib/iomgr/unix_sockets_posix.cc",
     "src/src/core/lib/iomgr/unix_sockets_posix_noop.cc",
-    "src/src/core/lib/iomgr/wakeup_fd_eventfd.cc",
     "src/src/core/lib/iomgr/wakeup_fd_nospecial.cc",
-    "src/src/core/lib/iomgr/wakeup_fd_pipe.cc",
     "src/src/core/lib/iomgr/wakeup_fd_posix.cc",
     "src/src/core/lib/json/json_object_loader.cc",
     "src/src/core/lib/json/json_reader.cc",
@@ -1662,6 +1719,7 @@
 
     # "src/src/core/lib/matchers/matchers.cc",
     "src/src/core/lib/promise/activity.cc",
+    "src/src/core/lib/promise/pipe.cc",
     "src/src/core/lib/promise/sleep.cc",
     "src/src/core/lib/resolver/resolver.cc",
     "src/src/core/lib/resolver/resolver_registry.cc",
@@ -1735,6 +1793,7 @@
     "src/src/core/lib/security/transport/server_auth_filter.cc",
     "src/src/core/lib/security/transport/tsi_error.cc",
     "src/src/core/lib/service_config/service_config_impl.cc",
+    "src/src/core/lib/service_config/service_config_parser.cc",
     "src/src/core/lib/slice/b64.cc",
     "src/src/core/lib/slice/percent_encoding.cc",
     "src/src/core/lib/slice/slice_string_helpers.cc",
@@ -1761,7 +1820,6 @@
     "src/src/core/lib/surface/validate_metadata.cc",
     "src/src/core/lib/surface/version.cc",
     "src/src/core/lib/transport/bdp_estimator.cc",
-    "src/src/core/lib/transport/call_fragments.cc",
     "src/src/core/lib/transport/connectivity_state.cc",
     "src/src/core/lib/transport/error_utils.cc",
     "src/src/core/lib/transport/handshaker.cc",
@@ -1803,6 +1861,7 @@
     "src/src/core/tsi/ssl/session_cache/ssl_session_cache.cc",
     "src/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc",
     "src/src/core/tsi/ssl_transport_security.cc",
+    "src/src/core/tsi/ssl_transport_security_utils.cc",
     "src/src/core/tsi/transport_security.cc",
     "src/src/core/tsi/transport_security_grpc.cc",
     "src/src/cpp/client/channel_cc.cc",
@@ -1812,15 +1871,12 @@
     "src/src/cpp/client/create_channel.cc",
     "src/src/cpp/client/create_channel_internal.cc",
     "src/src/cpp/client/create_channel_posix.cc",
-    "src/src/cpp/client/credentials_cc.cc",
     "src/src/cpp/client/secure_credentials.cc",
-    "src/src/cpp/codegen/codegen_init.cc",
     "src/src/cpp/common/alarm.cc",
     "src/src/cpp/common/auth_property_iterator.cc",
     "src/src/cpp/common/channel_arguments.cc",
     "src/src/cpp/common/channel_filter.cc",
     "src/src/cpp/common/completion_queue_cc.cc",
-    "src/src/cpp/common/core_codegen.cc",
     "src/src/cpp/common/resource_quota_cc.cc",
     "src/src/cpp/common/rpc_method.cc",
     "src/src/cpp/common/secure_auth_context.cc",
@@ -1845,7 +1901,6 @@
     "src/src/cpp/server/server_callback.cc",
     "src/src/cpp/server/server_cc.cc",
     "src/src/cpp/server/server_context.cc",
-    "src/src/cpp/server/server_credentials.cc",
     "src/src/cpp/server/server_posix.cc",
 
     # "src/src/cpp/server/xds_server_credentials.cc",
@@ -1885,6 +1940,7 @@
     "src/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c",
     "src/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c",
+    "src/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c",
     "src/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c",
     "src/src/core/ext/upb-generated/google/api/http.upb.c",
     "src/src/core/ext/upb-generated/google/protobuf/struct.upb.c",
@@ -1902,6 +1958,7 @@
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c",
+    "src/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c",
@@ -1915,16 +1972,23 @@
     "src/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c",
     "src/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c",
+    "src/src/core/lib/event_engine/tcp_socket_utils.cc",
     "src/src/core/lib/event_engine/trace.cc",
     "src/src/core/lib/gprpp/time.cc",
     "src/src/core/lib/gprpp/time_util.cc",
+    "src/src/core/lib/iomgr/ev_epoll1_linux.cc",
+    "src/src/core/lib/iomgr/ev_poll_posix.cc",
+    "src/src/core/lib/iomgr/internal_errqueue.cc",
+    "src/src/core/lib/iomgr/load_file.cc",
+    "src/src/core/lib/iomgr/lockfree_event.cc",
     "src/src/core/lib/iomgr/timer.cc",
     "src/src/core/lib/iomgr/timer_heap.cc",
     "src/src/core/lib/iomgr/timer_manager.cc",
+    "src/src/core/lib/iomgr/wakeup_fd_eventfd.cc",
+    "src/src/core/lib/iomgr/wakeup_fd_pipe.cc",
 
     # "src/src/core/lib/security/authorization/matchers.cc",
     "src/src/core/lib/security/util/json_util.cc",
-    "src/src/core/lib/service_config/service_config_parser.cc",
     "src/src/core/lib/slice/slice.cc",
     "src/src/core/lib/slice/slice_buffer.cc",
     "src/src/cpp/client/insecure_credentials.cc",
diff --git a/third_party/grpc/README.chromium b/third_party/grpc/README.chromium
index 0834fde..00d2b02 100644
--- a/third_party/grpc/README.chromium
+++ b/third_party/grpc/README.chromium
@@ -1,8 +1,8 @@
 Name: grpc
 URL: https://github.com/grpc/grpc
 License: Apache 2.0
-Version: v1.51.0-dev
-Revision: 38b9254a790320d2eaf8ac3ae4c3f3050d1ff106
+Version: v1.52.0-dev
+Revision: a017e9b7f20743c69627b94d7d101e4e6baadb44
 Security Critical: yes
 CPEPrefix: cpe:/a:grpc:grpc:1.49
 
diff --git a/third_party/grpc/plugin_registry/grpc_plugin_registry.cc b/third_party/grpc/plugin_registry/grpc_plugin_registry.cc
index 0a08891..fa743442 100644
--- a/third_party/grpc/plugin_registry/grpc_plugin_registry.cc
+++ b/third_party/grpc/plugin_registry/grpc_plugin_registry.cc
@@ -29,6 +29,13 @@
 #include "third_party/grpc/src/src/core/lib/transport/http_connect_handshaker.h"
 #include "third_party/grpc/src/src/core/lib/transport/tcp_connect_handshaker.h"
 
+namespace grpc_event_engine {
+namespace experimental {
+extern void RegisterEventEngineChannelArgPreconditioning(
+    grpc_core::CoreConfiguration::Builder* builder);
+}  // namespace experimental
+}
+
 namespace grpc_core {
 
 extern void BuildClientChannelConfiguration(
@@ -67,6 +74,8 @@
 #endif
 
 void BuildCoreConfiguration(CoreConfiguration::Builder* builder) {
+  grpc_event_engine::experimental::RegisterEventEngineChannelArgPreconditioning(
+      builder);
   // The order of the handshaker registration is crucial here.
   // We want TCP connect handshaker to be registered last so that it is added to
   // the start of the handshaker list.
diff --git a/third_party/grpc/template/BUILD.chromium.gn.template b/third_party/grpc/template/BUILD.chromium.gn.template
index 8048c5d..ab13ff3 100644
--- a/third_party/grpc/template/BUILD.chromium.gn.template
+++ b/third_party/grpc/template/BUILD.chromium.gn.template
@@ -98,6 +98,7 @@
       "-Wno-unreachable-code",
       "-Wno-unused-variable",
       "-Wno-unused-result",
+      "-Wno-deprecated-copy",
     ]
 
     # TODO(b/260740023): Remove when gRPC has CFI checks enabled.
diff --git a/third_party/ipcz/src/ipcz/router.cc b/third_party/ipcz/src/ipcz/router.cc
index ea05b2a..6c9f9219 100644
--- a/third_party/ipcz/src/ipcz/router.cc
+++ b/third_party/ipcz/src/ipcz/router.cc
@@ -1557,6 +1557,11 @@
          local_outward_peer = WrapRefCounted(&local_outward_peer),
          inward_link = WrapRefCounted(&inward_link)](
             FragmentRef<RouterLinkState> new_link_state) {
+          if (new_link_state.is_null()) {
+            // If this fails once, it's unlikely to succeed afterwards.
+            return;
+          }
+
           router->StartSelfBypassToLocalPeer(context, *local_outward_peer,
                                              *inward_link,
                                              std::move(new_link_state));
@@ -1871,6 +1876,10 @@
         [router = WrapRefCounted(this), requestor = WrapRefCounted(&requestor),
          node_link = WrapRefCounted(&node_link), context,
          bypass_target_sublink](FragmentRef<RouterLinkState> new_link_state) {
+          if (!new_link_state.is_null()) {
+            // If this fails once, it's unlikely to succeed afterwards.
+            return;
+          }
           router->BypassPeerWithNewRemoteLink(context, *requestor, *node_link,
                                               bypass_target_sublink,
                                               std::move(new_link_state));
diff --git a/third_party/jacoco/BUILD.gn b/third_party/jacoco/BUILD.gn
index a993660a..705951b 100644
--- a/third_party/jacoco/BUILD.gn
+++ b/third_party/jacoco/BUILD.gn
@@ -17,22 +17,11 @@
   ]
 }
 
-# Needed to suppress stack traces being logged in every test like:
-# java.io.FileNotFoundException: /jacoco.exec: open failed: EROFS (Read-only file system).
-# https://crbug.com/1334374
-# https://github.com/jacoco/jacoco/issues/968
-java_prebuilt("jacocoagent_properties_java") {
-  include_java_resources = true
-  supports_android = true
-  jar_path = "jacoco-agent.properties.jar"
-}
-
 java_prebuilt("jacocoagent_java") {
   include_java_resources = true
   supports_android = true
   jar_path = "lib/jacocoagent.jar"
   proguard_configs = [ "jacoco_instrument.flags" ]
-  deps = [ ":jacocoagent_properties_java" ]
 }
 
 java_prebuilt("jacocoant_java") {
diff --git a/third_party/jacoco/README.chromium b/third_party/jacoco/README.chromium
index 400704d..18ea162 100644
--- a/third_party/jacoco/README.chromium
+++ b/third_party/jacoco/README.chromium
@@ -8,7 +8,3 @@
 
 Description:
 JaCoCo is a Java code coverage tool.
-
-Local Modifications:
-* Added BUILD.gn
-* Added jacoco-agent.properties.jar
diff --git a/third_party/jacoco/jacoco-agent.properties.jar b/third_party/jacoco/jacoco-agent.properties.jar
deleted file mode 100644
index dd72d2af..0000000
--- a/third_party/jacoco/jacoco-agent.properties.jar
+++ /dev/null
Binary files differ
diff --git a/third_party/metrics_proto/README.chromium b/third_party/metrics_proto/README.chromium
index d7361da3..3343caab 100644
--- a/third_party/metrics_proto/README.chromium
+++ b/third_party/metrics_proto/README.chromium
@@ -1,8 +1,8 @@
 Name: Metrics Protos
 Short Name: metrics_proto
 URL: This is the canonical public repository
-Version: 500224236
-Date: 2023/01/06 UTC
+Version: 500333648
+Date: 2023/01/07 UTC
 License: BSD
 Security Critical: Yes
 
diff --git a/third_party/metrics_proto/ukm/source.proto b/third_party/metrics_proto/ukm/source.proto
index 90dcbe49..1e38423c 100644
--- a/third_party/metrics_proto/ukm/source.proto
+++ b/third_party/metrics_proto/ukm/source.proto
@@ -33,6 +33,7 @@
   TRUSTED_WEB_ACTIVITY = 2;
   WEB_APP = 3;
   WEB_APK = 4;
+  PRE_FIRST_TAB = 5;
 }
 
 // This signifies if the reported source is a navigation to the same origin as
diff --git a/third_party/minizip/BUILD.gn b/third_party/minizip/BUILD.gn
deleted file mode 100644
index 3d6cb8e..0000000
--- a/third_party/minizip/BUILD.gn
+++ /dev/null
@@ -1,117 +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("//testing/libfuzzer/fuzzer_test.gni")
-
-config("minizip_compiler_flags") {
-  if (is_clang) {
-    cflags = [
-      # mz_zip.c does |UINT_MAX == UINT16_MAX && ...|.
-      "-Wno-unreachable-code",
-      "-Wno-unused-but-set-variable",
-      "-Wno-unused-function",
-      "-Wno-implicit-fallthrough",
-    ]
-
-    if (!is_nacl && (target_cpu == "x86" || target_cpu == "x64")) {
-      cflags += [
-        "-maes",
-        "-msse3",
-        "-msse4.1",
-      ]
-    }
-
-    if (is_nacl) {
-      cflags += [ "-Wno-char-subscripts" ]
-    }
-  }
-}
-
-config("minizip_public_config") {
-  include_dirs = [
-    "src/lib/brg",
-    "//third_party/zlib",
-  ]
-
-  defines = [
-    "HAVE_ZLIB",
-    "HAVE_PKCRYPT",
-    "HAVE_WZAES",
-    "HAVE_STDINT_H",
-
-    # This isn't actually low entropy. It just allows for an OS-specific
-    # random number generator.
-    "FORCE_LOWQUALITY_ENTROPY",
-  ]
-}
-
-static_library("minizip") {
-  sources = [
-    "mz_os_chrome.cc",
-    "src/lib/brg/aes.h",
-    "src/lib/brg/aescrypt.c",
-    "src/lib/brg/aeskey.c",
-    "src/lib/brg/aesopt.h",
-    "src/lib/brg/aestab.c",
-    "src/lib/brg/aestab.h",
-    "src/lib/brg/brg_endian.h",
-    "src/lib/brg/brg_types.h",
-    "src/lib/brg/hmac.c",
-    "src/lib/brg/hmac.h",
-    "src/lib/brg/sha1.c",
-    "src/lib/brg/sha1.h",
-    "src/lib/brg/sha2.c",
-    "src/lib/brg/sha2.h",
-    "src/mz.h",
-    "src/mz_crypt.c",
-    "src/mz_crypt.h",
-    "src/mz_crypt_brg.c",
-    "src/mz_os.c",
-    "src/mz_os.h",
-    "src/mz_strm.c",
-    "src/mz_strm.h",
-    "src/mz_strm_mem.c",
-    "src/mz_strm_mem.h",
-    "src/mz_strm_pkcrypt.c",
-    "src/mz_strm_pkcrypt.h",
-    "src/mz_strm_wzaes.c",
-    "src/mz_strm_wzaes.h",
-    "src/mz_strm_zlib.c",
-    "src/mz_strm_zlib.h",
-    "src/mz_zip.c",
-    "src/mz_zip.h",
-    "src/mz_zip_rw.c",
-    "src/mz_zip_rw.h",
-  ]
-
-  configs += [ ":minizip_compiler_flags" ]
-
-  public_configs = [ ":minizip_public_config" ]
-
-  deps = [
-    "//base",
-    "//third_party/zlib:zlib",
-  ]
-
-  visibility = [
-    # NOTE: Modifying visibility list requires approval from security team.
-    ":minizip_compress_fuzzer",
-    ":minizip_uncompress_fuzzer",
-  ]
-}
-
-fuzzer_test("minizip_compress_fuzzer") {
-  sources = [ "minizip_compress_fuzzer.cc" ]
-  deps = [
-    ":minizip",
-    "//base",
-    "//base/test:test_support",
-  ]
-}
-
-fuzzer_test("minizip_uncompress_fuzzer") {
-  sources = [ "minizip_uncompress_fuzzer.cc" ]
-  deps = [ ":minizip" ]
-  seed_corpus = "minizip_uncompress_corpus"
-}
diff --git a/third_party/minizip/DEPS b/third_party/minizip/DEPS
deleted file mode 100644
index da38356..0000000
--- a/third_party/minizip/DEPS
+++ /dev/null
@@ -1,9 +0,0 @@
-specific_include_rules = {
-  'mz_os_chrome\.cc': [
-    '+base/rand_util.h',
-  ],
-  '.*_fuzzer\.cc': [
-    '+base',
-    '+testing/libfuzzer/fuzzers',
-  ],
-}
diff --git a/third_party/minizip/DIR_METADATA b/third_party/minizip/DIR_METADATA
deleted file mode 100644
index e9400b87..0000000
--- a/third_party/minizip/DIR_METADATA
+++ /dev/null
@@ -1 +0,0 @@
-mixins: "//ui/file_manager/COMMON_METADATA"
diff --git a/third_party/minizip/OWNERS b/third_party/minizip/OWNERS
deleted file mode 100644
index 73220a8..0000000
--- a/third_party/minizip/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://ui/file_manager/OWNERS
diff --git a/third_party/minizip/README.chromium b/third_party/minizip/README.chromium
deleted file mode 100644
index 3a30e02..0000000
--- a/third_party/minizip/README.chromium
+++ /dev/null
@@ -1,12 +0,0 @@
-Name: nmoinvaz/minizip
-Short name: minizip
-URL: https://github.com/nmoinvaz/minizip
-Version: 2.8.1
-CPEPrefix: cpe:/a:minizip_project:minizip:2.8.1
-Revision: 1ff40343b55e738d941abb51c70eddb803db16e2
-Security critical: yes
-License: Custom license
-License File: src/LICENSE
-License Android Compatible: yes
-Description: Zip library.
-Local Modifications: None.
diff --git a/third_party/minizip/minizip_compress_fuzzer.cc b/third_party/minizip/minizip_compress_fuzzer.cc
deleted file mode 100644
index caac651..0000000
--- a/third_party/minizip/minizip_compress_fuzzer.cc
+++ /dev/null
@@ -1,102 +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.
-
-#include <memory.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <fuzzer/FuzzedDataProvider.h>
-
-#include <vector>
-
-#include "base/scoped_generic.h"
-#include "third_party/minizip/src/mz.h"
-#include "third_party/minizip/src/mz_strm_mem.h"
-#include "third_party/minizip/src/mz_zip.h"
-
-const char kTestFileName[] = "test.zip";
-
-namespace {
-
-struct MzTraitsBase {
-  static void* InvalidValue() { return nullptr; }
-};
-
-struct MzStreamMemTraits : public MzTraitsBase {
-  static void Free(void* stream) { mz_stream_mem_delete(&stream); }
-};
-typedef base::ScopedGeneric<void*, MzStreamMemTraits> ScopedMzStreamMem;
-
-struct MzZipTraits : public MzTraitsBase {
-  static void Free(void* stream) {
-    mz_zip_close(stream);
-    mz_zip_delete(&stream);
-  }
-};
-typedef base::ScopedGeneric<void*, MzZipTraits> ScopedMzZip;
-
-}  // namespace
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  FuzzedDataProvider data_provider(data, size);
-
-  mz_zip_file file_info = {};
-  file_info.flag = MZ_ZIP_FLAG_UTF8;
-  if (data_provider.ConsumeIntegral<uint8_t>() < 0x08) {
-    file_info.flag = data_provider.ConsumeIntegral<uint16_t>();
-  }
-  file_info.compression_method = MZ_COMPRESS_METHOD_DEFLATE;
-  if (data_provider.ConsumeIntegral<uint8_t>() < 0x08) {
-    file_info.compression_method = MZ_COMPRESS_METHOD_STORE;
-  } else if (data_provider.ConsumeIntegral<uint8_t>() < 0x08) {
-    file_info.compression_method = data_provider.ConsumeIntegral<uint16_t>();
-  }
-  if (data_provider.ConsumeIntegral<uint8_t>() < 0x08) {
-    file_info.zip64 = data_provider.ConsumeIntegral<uint16_t>();
-  }
-  file_info.filename = kTestFileName;
-  file_info.filename_size = sizeof(kTestFileName);
-
-  int16_t compress_level = MZ_COMPRESS_LEVEL_DEFAULT;
-  if (data_provider.ConsumeIntegral<uint8_t>() < 0x08) {
-    compress_level =
-        static_cast<int16_t>(data_provider.ConsumeIntegral<uint16_t>());
-  }
-
-  ScopedMzStreamMem out_stream(mz_stream_mem_create(nullptr));
-
-  ScopedMzZip zip_file(mz_zip_create(nullptr));
-  int result = mz_zip_open(zip_file.get(), out_stream.get(),
-                           MZ_OPEN_MODE_CREATE | MZ_OPEN_MODE_WRITE);
-  if (result != MZ_OK) {
-    return 0;
-  }
-
-  result = mz_zip_entry_write_open(zip_file.get(), &file_info, compress_level,
-                                   0, nullptr);
-  if (result != MZ_OK) {
-    return 0;
-  }
-
-  std::vector<uint8_t> remaining_data =
-      data_provider.ConsumeRemainingBytes<uint8_t>();
-  result = mz_zip_entry_write(zip_file.get(), remaining_data.data(),
-                              remaining_data.size());
-  if (result != MZ_OK) {
-    return 0;
-  }
-
-  result = mz_zip_entry_close(zip_file.get());
-  if (result != MZ_OK) {
-    return 0;
-  }
-
-  result = mz_zip_close(zip_file.get());
-  if (result != MZ_OK) {
-    return 0;
-  }
-
-  return 0;
-}
diff --git a/third_party/minizip/minizip_uncompress_corpus/As.zip b/third_party/minizip/minizip_uncompress_corpus/As.zip
deleted file mode 100644
index 2ef2ada..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/As.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/comments.zip b/third_party/minizip/minizip_uncompress_corpus/comments.zip
deleted file mode 100644
index 7bc37329..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/comments.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/corpus.zip b/third_party/minizip/minizip_uncompress_corpus/corpus.zip
deleted file mode 100644
index 67244e9..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/corpus.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/empty.zip b/third_party/minizip/minizip_uncompress_corpus/empty.zip
deleted file mode 100644
index 15cb0ec..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/empty.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/encrypted.zip b/third_party/minizip/minizip_uncompress_corpus/encrypted.zip
deleted file mode 100644
index 6245a066..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/encrypted.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/encrypted_aes.zip b/third_party/minizip/minizip_uncompress_corpus/encrypted_aes.zip
deleted file mode 100644
index aa2f073a..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/encrypted_aes.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/encrypted_pkcrypt.zip b/third_party/minizip/minizip_uncompress_corpus/encrypted_pkcrypt.zip
deleted file mode 100644
index 924f933e9..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/encrypted_pkcrypt.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/gh.zip b/third_party/minizip/minizip_uncompress_corpus/gh.zip
deleted file mode 100644
index 16b8de85..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/gh.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/infozip-symlinks.zip b/third_party/minizip/minizip_uncompress_corpus/infozip-symlinks.zip
deleted file mode 100644
index 065728c..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/infozip-symlinks.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/permissions.zip b/third_party/minizip/minizip_uncompress_corpus/permissions.zip
deleted file mode 100644
index 87f777aeb..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/permissions.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/storeonly.zip b/third_party/minizip/minizip_uncompress_corpus/storeonly.zip
deleted file mode 100644
index 249a016..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/storeonly.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/unsupported_permissions.zip b/third_party/minizip/minizip_uncompress_corpus/unsupported_permissions.zip
deleted file mode 100644
index 5d3dbda..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/unsupported_permissions.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_corpus/zip64.zip b/third_party/minizip/minizip_uncompress_corpus/zip64.zip
deleted file mode 100644
index 2ebcfee..0000000
--- a/third_party/minizip/minizip_uncompress_corpus/zip64.zip
+++ /dev/null
Binary files differ
diff --git a/third_party/minizip/minizip_uncompress_fuzzer.cc b/third_party/minizip/minizip_uncompress_fuzzer.cc
deleted file mode 100644
index 19635d2..0000000
--- a/third_party/minizip/minizip_uncompress_fuzzer.cc
+++ /dev/null
@@ -1,98 +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.
-
-#include <memory.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <vector>
-
-#include "third_party/minizip/src/mz.h"
-#include "third_party/minizip/src/mz_strm_mem.h"
-#include "third_party/minizip/src/mz_zip.h"
-
-namespace {
-const char kTestPassword[] = "test123";
-const char kTestFileName[] = "foo";
-const char kTestFileNameUppercase[] = "FOO";
-const int kMaxFiles = 128;
-}
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  void* stream = mz_stream_mem_create(nullptr);
-  mz_stream_mem_set_buffer(
-      stream, reinterpret_cast<void*>(const_cast<uint8_t*>(data)), size);
-
-  constexpr int kReadBufferSize = 1024;
-  std::vector<char> read_buffer(kReadBufferSize);
-
-  void* zip_file = mz_zip_create(nullptr);
-  int result = mz_zip_open(zip_file, stream, MZ_OPEN_MODE_READ);
-  if (result == MZ_OK) {
-    // Some archive properties that are non-fatal for reading the archive.
-    const char* archive_comment = nullptr;
-    mz_zip_get_comment(zip_file, &archive_comment);
-    uint16_t version_madeby = 0;
-    mz_zip_get_version_madeby(zip_file, &version_madeby);
-    uint64_t num_entries = 0;
-    mz_zip_get_number_entry(zip_file, &num_entries);
-
-    result = mz_zip_goto_first_entry(zip_file);
-    for (int i = 0; result == MZ_OK && i < kMaxFiles; i++) {
-      mz_zip_file* file_info = nullptr;
-      result = mz_zip_entry_get_info(zip_file, &file_info);
-      if (result != MZ_OK) {
-        break;
-      }
-
-      bool is_encrypted = (file_info->flag & MZ_ZIP_FLAG_ENCRYPTED);
-      result = mz_zip_entry_read_open(zip_file, 0,
-                                      is_encrypted ? kTestPassword : nullptr);
-      if (result != MZ_OK) {
-        break;
-      }
-
-      result = mz_zip_entry_is_open(zip_file);
-      if (result != MZ_OK) {
-        break;
-      }
-
-      // Return value isn't checked here because we can't predict what the value
-      // will be.
-      mz_zip_entry_is_dir(zip_file);
-
-      result = mz_zip_get_entry(zip_file);
-      if (result < 0) {
-        break;
-      }
-
-      result = mz_zip_entry_read(zip_file, read_buffer.data(), kReadBufferSize);
-      if (result < 0) {
-        break;
-      }
-
-      result = mz_zip_entry_close(zip_file);
-      if (result != MZ_OK) {
-        break;
-      }
-
-      result = mz_zip_goto_next_entry(zip_file);
-    }
-
-    mz_zip_entry_close(zip_file);
-
-    // Return value isn't checked here because we can't predict what the value
-    // will be.
-    mz_zip_locate_entry(zip_file, kTestFileName, 0);
-    mz_zip_locate_entry(zip_file, kTestFileNameUppercase, 0);
-    mz_zip_locate_entry(zip_file, kTestFileName, 1);
-    mz_zip_locate_entry(zip_file, kTestFileNameUppercase, 1);
-
-    mz_zip_close(zip_file);
-  }
-
-  mz_zip_delete(&zip_file);
-  mz_stream_mem_delete(&stream);
-
-  return 0;
-}
diff --git a/third_party/minizip/mz_os_chrome.cc b/third_party/minizip/mz_os_chrome.cc
deleted file mode 100644
index f19b6d4..0000000
--- a/third_party/minizip/mz_os_chrome.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2018 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/rand_util.h"
-
-// This file provides chromium-specific implementations of platform abstraction
-// functions used by minizip. Minizip provides a POSIX-compatible implementation
-// in mz_os_posix.c, but pnacl-newlib has an insufficent POSIX layer such that
-// mz_os_posix.c cannot be used.
-
-extern "C" {
-
-int32_t mz_os_rand(uint8_t* buf, int32_t size) {
-  if (size < 0)
-    return 0;
-
-  base::RandBytes(buf, static_cast<size_t>(size));
-  return size;
-}
-
-}  // extern "C"
diff --git a/tools/android/dependency_analysis/js/src/load_graph.js b/tools/android/dependency_analysis/js/src/load_graph.js
index f08d8689..391cf13 100644
--- a/tools/android/dependency_analysis/js/src/load_graph.js
+++ b/tools/android/dependency_analysis/js/src/load_graph.js
@@ -4,7 +4,7 @@
 
 // For ease of development, we load the graph from this hardcoded location by
 // default. This should be changed when a snapshot picker is implemented.
-const LATEST_GRAPH = 'https://storage.googleapis.com/clank-dependency-graphs/latest/monochrome_public_bundle.json';
+const LATEST_GRAPH = 'https://storage.googleapis.com/clank-dependency-graphs/latest/all.json';
 
 // We serve our testing data on localhost:8888 as a
 // fallback that will be triggered if CORS blocks the request. In production,
diff --git a/tools/android/forwarder2/host_controller.h b/tools/android/forwarder2/host_controller.h
index 7167d88..645bc3a 100644
--- a/tools/android/forwarder2/host_controller.h
+++ b/tools/android/forwarder2/host_controller.h
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread.h"
 #include "tools/android/forwarder2/forwarders_manager.h"
 #include "tools/android/forwarder2/pipe_notifier.h"
diff --git a/tools/clang/scripts/upload_revision.py b/tools/clang/scripts/upload_revision.py
index 48e25df..63a8c08 100755
--- a/tools/clang/scripts/upload_revision.py
+++ b/tools/clang/scripts/upload_revision.py
@@ -28,6 +28,7 @@
 CLANG_UPDATE_PY_PATH = os.path.join(THIS_DIR, 'update.py')
 RUST_UPDATE_PY_PATH = os.path.join(THIS_DIR, '..', '..', 'rust',
                                    'update_rust.py')
+BUILD_RUST_PY_PATH = os.path.join(THIS_DIR, '..', '..', 'rust', 'build_rust.py')
 DEPS_PATH = os.path.join(CHROMIUM_DIR, 'DEPS')
 
 # URL prefix for LLVM git diff ranges.
@@ -224,12 +225,27 @@
 
 
 def PatchRustRevision(new_version: RustVersion) -> RustVersion:
+  verify_stage0 = subprocess.run([BUILD_RUST_PY_PATH, '--verify-stage0-hash'],
+                                 capture_output=True,
+                                 text=True)
+  if verify_stage0.returncode != 0:
+    # TODO(crbug.com/1405814): We're printing a warning that the hash has
+    # changed, but we could require a verification step of some sort here. We
+    # should do the same for both Rust and Clang if we do so.
+    print(verify_stage0.stdout)
+    lines = verify_stage0.stdout.splitlines()
+    m = re.match('Actual hash: +([0-9a-z]+)', lines[2])
+    new_stage0_hash = m.group(1)
+  else:
+    new_stage0_hash = None
+
   with open(RUST_UPDATE_PY_PATH) as f:
     content = f.read()
 
   REV = '\'([0-9]+)\''
   SUB_REV = '([0-9]+)'
   TAG = '\'([0-9]+)\''
+  STAGE0_HASH = '\'([0-9a-z]+)\''
 
   tag = re.search(f'RUST_REVISION_TAG = {TAG}', content).group(1)
   date = re.search(f'RUST_REVISION = {REV}', content).group(1)
@@ -248,6 +264,11 @@
                    f'RUST_SUB_REVISION = {new_version.sub_revision}',
                    content,
                    count=1)
+  if new_stage0_hash:
+    content = re.sub(f'STAGE0_JSON_SHA256 = {STAGE0_HASH}',
+                     f'STAGE0_JSON_SHA256 = \'{new_stage0_hash}\'',
+                     content,
+                     count=1)
 
   with open(RUST_UPDATE_PY_PATH, 'w') as f:
     f.write(content)
diff --git a/tools/ipc_fuzzer/message_replay/replay_process.cc b/tools/ipc_fuzzer/message_replay/replay_process.cc
index 29157aa7..f6a6cc0 100644
--- a/tools/ipc_fuzzer/message_replay/replay_process.cc
+++ b/tools/ipc_fuzzer/message_replay/replay_process.cc
@@ -16,6 +16,7 @@
 #include "base/logging.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/common/chrome_switches.h"
 #include "content/common/child_process.mojom-test-utils.h"
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 2032a69..13ee7fb2 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -12198,6 +12198,11 @@
   <int value="1" label="Force Disabled"/>
 </enum>
 
+<enum name="BooleanForceRequest">
+  <int value="0" label="No Force Request"/>
+  <int value="1" label="Force CSD-P ping request"/>
+</enum>
+
 <enum name="BooleanForeground">
   <int value="0" label="Background"/>
   <int value="1" label="Foreground"/>
@@ -34810,7 +34815,7 @@
   <int value="1027" label="DELETED_SEARCHENGINESPRIVATE_REMOVESEARCHENGINE"/>
   <int value="1028" label="DELETED_SEARCHENGINESPRIVATE_UPDATESEARCHENGINE"/>
   <int value="1029" label="DELETED_SEARCHENGINESPRIVATE_OPTINTOHOTWORDING"/>
-  <int value="1030" label="WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM"/>
+  <int value="1030" label="DELETED_WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM"/>
   <int value="1031" label="DELETED_WEBSTOREWIDGETPRIVATE_GETSTRINGS"/>
   <int value="1032" label="WEBRTCDESKTOPCAPTUREPRIVATE_CHOOSEDESKTOPMEDIA"/>
   <int value="1033"
@@ -36120,7 +36125,7 @@
   <int value="161" label="kWebrtcDesktopCapturePrivate"/>
   <int value="162" label="kWebrtcLoggingPrivate"/>
   <int value="163" label="kWebstorePrivate"/>
-  <int value="164" label="kWebstoreWidgetPrivate"/>
+  <int value="164" label="kDeleted_WebstoreWidgetPrivate"/>
   <int value="165" label="kWebView"/>
   <int value="166" label="kWindowShape"/>
   <int value="167" label="kDeleted_ScreenlockPrivate"/>
@@ -41733,6 +41738,9 @@
   <int value="4433" label="LinkRelPrerenderSameOrigin"/>
   <int value="4434" label="LinkRelPrerenderSameSiteCrossOrigin"/>
   <int value="4435" label="LinkRelPrerenderCrossSite"/>
+  <int value="4436" label="CSSBackgroundClipBorder"/>
+  <int value="4437" label="CSSBackgroundClipContent"/>
+  <int value="4438" label="CSSBackgroundClipPadding"/>
 </enum>
 
 <enum name="FeaturePolicyAllowlistType">
@@ -57134,7 +57142,6 @@
   <int value="-2134511704" label="CommerceCoupons:enabled"/>
   <int value="-2134333982" label="ShowArcFilesApp:enabled"/>
   <int value="-2134244069" label="HttpFormWarning:enabled"/>
-  <int value="-2134112201" label="ExtensionWorkflowJustification:enabled"/>
   <int value="-2133892372" label="ResamplingInputEvents:disabled"/>
   <int value="-2133277113" label="CCTModuleCustomHeader:disabled"/>
   <int value="-2133276662" label="EduCoexistenceConsentLog:disabled"/>
@@ -59663,7 +59670,6 @@
       label="AutofillSuggestVirtualCardsOnIncompleteForm:enabled"/>
   <int value="-726567328" label="disable-virtual-keyboard"/>
   <int value="-726485467" label="FilesArchivemount:enabled"/>
-  <int value="-725374685" label="ExtensionWorkflowJustification:disabled"/>
   <int value="-725264428" label="CompositingBasedThrottling:enabled"/>
   <int value="-723224470" label="enable-password-force-saving:enabled"/>
   <int value="-722474177" label="browser-side-navigation:disabled"/>
@@ -83918,6 +83924,14 @@
   <int value="4" label="Failed to initialize schema"/>
 </enum>
 
+<enum name="PrivacySandboxApiAllowed">
+  <int value="0" label="Allowed"/>
+  <int value="1" label="Restricted"/>
+  <int value="2" label="Incognito profile"/>
+  <int value="3" label="Apis disabled"/>
+  <int value="4" label="Site data access blocked"/>
+</enum>
+
 <enum name="PrivacySandboxPrivateAggregationBudgeterBudgetValidityStatus">
   <int value="0" label="Valid"/>
   <int value="1" label="Valid but empty; no budget data stored"/>
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml
index f207cf9..56499736 100644
--- a/tools/metrics/histograms/metadata/accessibility/histograms.xml
+++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -2338,6 +2338,15 @@
   </summary>
 </histogram>
 
+<histogram name="TextToSpeech.Utterance.Rate" units="count"
+    expires_after="2023-11-30">
+  <owner>dtseng@chromium.org</owner>
+  <owner>chrome-a11y-core@google.com</owner>
+  <summary>
+    The rate of an utterance to be spoken via synthesized text-to-speech.
+  </summary>
+</histogram>
+
 <histogram name="TextToSpeech.Utterance.Source" enum="TextToSpeechSource"
     expires_after="2023-11-30">
   <owner>joelriley@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/android/OWNERS b/tools/metrics/histograms/metadata/android/OWNERS
index 1a81445..b63d284 100644
--- a/tools/metrics/histograms/metadata/android/OWNERS
+++ b/tools/metrics/histograms/metadata/android/OWNERS
@@ -8,3 +8,4 @@
 ckitagawa@chromium.org
 mvanouwerkerk@chromium.org
 sinansahin@google.com
+jinsukkim@chromium.org
\ No newline at end of file
diff --git a/tools/metrics/histograms/metadata/commerce/OWNERS b/tools/metrics/histograms/metadata/commerce/OWNERS
index 6bd9e5b8..6706729 100644
--- a/tools/metrics/histograms/metadata/commerce/OWNERS
+++ b/tools/metrics/histograms/metadata/commerce/OWNERS
@@ -2,4 +2,5 @@
 
 # Prefer sending CLs to the owners listed below.
 # Use chromium-metrics-reviews@google.com as a backup.
+mdjones@chromium.org
 wychen@chromium.org
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml
index b0ae093..7b1b272 100644
--- a/tools/metrics/histograms/metadata/commerce/histograms.xml
+++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -278,6 +278,10 @@
 
 <histogram name="Commerce.PowerBookmarks.SubscriptionValidationResult"
     enum="CommerceSubscriptionValidationResult" expires_after="2023-04-09">
+  <obsolete>
+    Deprecated in 11/2022. The validation logic became unnecessary with the new
+    subscriptions manager implementation.
+  </obsolete>
   <owner>ayman@chromium.org</owner>
   <owner>mdjones@chromium.org</owner>
   <owner>chrome-shopping@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml
index c51e9e9..4f3d567 100644
--- a/tools/metrics/histograms/metadata/content/histograms.xml
+++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -182,54 +182,6 @@
   </summary>
 </histogram>
 
-<histogram name="ContentSettings.ExceptionScheme" enum="ContentSettingScheme"
-    expires_after="M94">
-  <owner>alexmos@chromium.org</owner>
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Records the schemes of content setting exceptions at browser start. Each
-    exception provides one sample.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.ExceptionSchemeFile.HasPath"
-    enum="BooleanHasPath" expires_after="M94">
-  <owner>alexmos@chromium.org</owner>
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Records how often a content settings exception for the file: scheme has a
-    non-empty path. Recorded once per exception at browser start.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithoutPath"
-    enum="ContentType" expires_after="M94">
-  <owner>alexmos@chromium.org</owner>
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type has a content settings exception
-    defined for a file: scheme with no path (i.e., wildcard path). Recorded once
-    per exception at browser start.
-
-    Note: The values of this metric collected for Chrome 49 (early 2016) are
-    innacurate and should not be trusted. crbug.com/589255.
-  </summary>
-</histogram>
-
-<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithPath"
-    enum="ContentType" expires_after="M94">
-  <owner>alexmos@chromium.org</owner>
-  <owner>engedy@chromium.org</owner>
-  <summary>
-    Count of how often a specific content type has a content settings exception
-    defined for a file: scheme with a valid, non-empty path. Recorded once per
-    exception at browser start.
-
-    Note: The values of this metric collected for Chrome 49 (early 2016) are
-    innacurate and should not be trusted. crbug.com/589255.
-  </summary>
-</histogram>
-
 <histogram name="ContentSettings.ExtensionEmbeddedSettingSet"
     enum="ContentType" expires_after="2023-05-01">
   <owner>engedy@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml
index a30f462b..3c254622 100644
--- a/tools/metrics/histograms/metadata/gpu/histograms.xml
+++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -1662,7 +1662,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.CaptureDuration" units="ms"
-    expires_after="2023-03-01">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1675,7 +1675,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.CaptureSucceeded"
-    enum="BooleanSuccess" expires_after="2023-03-01">
+    enum="BooleanSuccess" expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1687,7 +1687,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.FrameResurrected" enum="Boolean"
-    expires_after="2023-03-01">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1697,7 +1697,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.I420.CaptureDuration" units="ms"
-    expires_after="2023-07-02">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1711,7 +1711,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.I420.CaptureSucceeded"
-    enum="BooleanSuccess" expires_after="2023-07-02">
+    enum="BooleanSuccess" expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1723,7 +1723,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.I420.TotalDuration" units="ms"
-    expires_after="2023-07-02">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1735,7 +1735,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.NV12.CaptureDuration" units="ms"
-    expires_after="2023-07-02">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1750,7 +1750,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.NV12.CaptureSucceeded"
-    enum="BooleanSuccess" expires_after="2023-03-01">
+    enum="BooleanSuccess" expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1759,7 +1759,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.NV12.TotalDuration" units="ms"
-    expires_after="2023-07-02">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1771,7 +1771,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.ReserveFrameDuration" units="ms"
-    expires_after="2023-07-02">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
@@ -1782,8 +1782,9 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.RGBA.CaptureDuration" units="ms"
-    expires_after="2023-01-15">
+    expires_after="2023-07-15">
   <owner>jonross@chromium.org</owner>
+  <owner>bialpio@chromium.org</owner>
   <owner>viz-team-wat@google.com</owner>
   <summary>
     The time it took from when FrameSinkVideoCapturerImpl sent a request for an
@@ -1793,7 +1794,7 @@
 </histogram>
 
 <histogram name="Viz.FrameSinkVideoCapturer.TotalDuration" units="ms"
-    expires_after="2023-04-30">
+    expires_after="2023-07-15">
   <owner>bialpio@chromium.org</owner>
   <owner>media-capture-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml
index ab4c296..5251076a 100644
--- a/tools/metrics/histograms/metadata/optimization/histograms.xml
+++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -139,7 +139,7 @@
 </variants>
 
 <histogram name="OptimizationGuide.ApplyDecision.{OptimizationType}"
-    enum="OptimizationGuideOptimizationTypeDecision" expires_after="M112">
+    enum="OptimizationGuideOptimizationTypeDecision" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -150,7 +150,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.ApplyDecisionAsync.{OptimizationType}"
-    enum="OptimizationGuideOptimizationTypeDecision" expires_after="M112">
+    enum="OptimizationGuideOptimizationTypeDecision" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -230,7 +230,7 @@
 
 <histogram
     name="OptimizationGuide.HintsFetcher.GetHintsRequest.ActiveRequestCanceled.{RequestContext}"
-    units="counts" expires_after="M112">
+    units="counts" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -242,7 +242,7 @@
 
 <histogram
     name="OptimizationGuide.HintsFetcher.GetHintsRequest.DroppedHosts.{RequestContext}"
-    units="counts" expires_after="M112">
+    units="counts" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -255,7 +255,7 @@
 
 <histogram
     name="OptimizationGuide.HintsFetcher.GetHintsRequest.DroppedUrls.{RequestContext}"
-    units="counts" expires_after="M112">
+    units="counts" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -268,7 +268,7 @@
 
 <histogram
     name="OptimizationGuide.HintsFetcher.GetHintsRequest.FetchLatency.{RequestContext}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -330,7 +330,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.HintsFetcher.RequestStatus.{RequestContext}"
-    enum="OptimizationGuideHintsFetcherRequestStatus" expires_after="M112">
+    enum="OptimizationGuideHintsFetcherRequestStatus" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -342,7 +342,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.HintsManager.ActiveTabUrlsToFetchFor"
-    units="counts" expires_after="2023-03-05">
+    units="counts" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -354,7 +354,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.HintsManager.ConcurrentBatchUpdateFetches"
-    units="counts" expires_after="M112">
+    units="counts" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -378,7 +378,7 @@
 
 <histogram
     name="OptimizationGuide.HintsManager.PageNavigationHintsReturnedBeforeDataFlushed"
-    enum="BooleanStored" expires_after="M112">
+    enum="BooleanStored" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -402,7 +402,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.IsPredictionModelValid.{OptimizationTarget}"
-    enum="BooleanValid" expires_after="M112">
+    enum="BooleanValid" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -414,7 +414,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.MetadataFetchValidation.Result"
-    enum="Boolean" expires_after="M112">
+    enum="Boolean" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -425,7 +425,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.DidTimeout.{OptimizationTarget}"
-    enum="Boolean" expires_after="M112">
+    enum="Boolean" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -437,7 +437,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.ExecutionLatency.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -450,7 +450,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.ExecutionStatus.{OptimizationTarget}"
-    enum="OptimizationGuideExecutionStatus" expires_after="M112">
+    enum="OptimizationGuideExecutionStatus" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -463,7 +463,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.ExecutionThreadTime.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -478,7 +478,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.ModelAvailableToLoad.{OptimizationTarget}"
-    enum="BooleanAvailable" expires_after="M112">
+    enum="BooleanAvailable" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -495,7 +495,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.ModelLoadingDuration2.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -508,7 +508,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.TaskExecutionLatency.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -521,7 +521,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.TaskSchedulingLatency.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -534,7 +534,7 @@
 
 <histogram
     name="OptimizationGuide.ModelExecutor.TimeSincePreviousRun.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -545,7 +545,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.ModelFilesVerified.{OptimizationTarget}"
-    enum="BooleanValid" expires_after="M112">
+    enum="BooleanValid" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -560,7 +560,7 @@
 
 <histogram
     name="OptimizationGuide.ModelHandler.HandlerCreated.{OptimizationTarget}"
-    enum="BooleanCreated" expires_after="M112">
+    enum="BooleanCreated" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -573,7 +573,7 @@
 
 <histogram
     name="OptimizationGuide.ModelHandler.HandlerCreatedToModelAvailable.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -585,7 +585,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.OptimizationFilterStatus.{OptimizationType}"
-    enum="OptimizationGuideOptimizationFilterStatus" expires_after="M112">
+    enum="OptimizationGuideOptimizationFilterStatus" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -621,7 +621,7 @@
 
 <histogram
     name="OptimizationGuide.PageContentAnnotations.BatchRequestedSize.{AnnotationType}"
-    units="counts" expires_after="M112">
+    units="counts" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -633,7 +633,7 @@
 
 <histogram
     name="OptimizationGuide.PageContentAnnotations.BatchSuccess.{AnnotationType}"
-    enum="BooleanSuccess" expires_after="M112">
+    enum="BooleanSuccess" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -660,7 +660,7 @@
 
 <histogram
     name="OptimizationGuide.PageContentAnnotations.JobExecutionTime.{AnnotationType}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -672,7 +672,7 @@
 
 <histogram
     name="OptimizationGuide.PageContentAnnotations.JobScheduleTime.{AnnotationType}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -693,7 +693,7 @@
 
 <histogram
     name="OptimizationGuide.PageContentAnnotations.TemplateURLServiceLoadedAtNavigationFinish"
-    enum="BooleanLoaded" expires_after="M112">
+    enum="BooleanLoaded" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -704,7 +704,7 @@
 
 <histogram
     name="OptimizationGuide.PageContentAnnotationsService.ContentAnnotated"
-    enum="BooleanAnnotated" expires_after="M112">
+    enum="BooleanAnnotated" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -731,7 +731,7 @@
 
 <histogram
     name="OptimizationGuide.PageContentAnnotationsService.ContentAnnotationsStorageMinMagnitudeForVisitNotFound.{PageContentAnnotationsStorageType}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -762,7 +762,7 @@
 <histogram
     name="OptimizationGuide.PageContentAnnotationsService.ContentAnnotationsStorageStatus.{PageContentAnnotationsStorageType}"
     enum="OptimizationGuidePageContentAnnotationsStorageStatus"
-    expires_after="M112">
+    expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -900,7 +900,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.PageTextDump.AbandonedRequests"
-    units="count" expires_after="M112">
+    units="count" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -912,7 +912,7 @@
 
 <histogram
     name="OptimizationGuide.PageTextDump.FrameDumpLength.{PageTextDumpEvent}"
-    units="bytes" expires_after="M112">
+    units="bytes" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -925,7 +925,7 @@
 
 <histogram
     name="OptimizationGuide.PageTextDump.OutstandingRequests.DidFinishLoad"
-    units="count" expires_after="M112">
+    units="count" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -935,7 +935,7 @@
 
 <histogram
     name="OptimizationGuide.PageTextDump.TimeUntilFrameDisconnected.{PageTextDumpEvent}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -948,7 +948,7 @@
 
 <histogram
     name="OptimizationGuide.PageTextDump.TimeUntilFrameDumpCompleted.{PageTextDumpEvent}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -961,7 +961,7 @@
 
 <histogram name="OptimizationGuide.PageTopicsOverrideList.FileLoadResult"
     enum="OptimizationGuidePageTopicsOverrideListFileLoadResult"
-    expires_after="M112">
+    expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -974,7 +974,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.PageTopicsOverrideList.GotFile"
-    enum="Boolean" expires_after="M112">
+    enum="Boolean" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1006,7 +1006,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionManager.FirstModelFetchSinceServiceInit"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>rajendrant@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1032,7 +1032,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionManager.IsDownloadUrlValid.{OptimizationTarget}"
-    enum="BooleanValid" expires_after="M112">
+    enum="BooleanValid" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -1044,7 +1044,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionManager.ModelAvailableAtRegistration.{OptimizationTarget}"
-    enum="BooleanAvailable" expires_after="M112">
+    enum="BooleanAvailable" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -1058,7 +1058,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionManager.ModelDeliveryEvents.{OptimizationTarget}"
-    enum="OptimizationGuideModelDeliveryEvent" expires_after="M112">
+    enum="OptimizationGuideModelDeliveryEvent" expires_after="M117">
   <owner>rajendrant@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1088,7 +1088,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionManager.RegistrationTimeSinceServiceInit.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>rajendrant@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1102,7 +1102,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelDownloadManager.DownloadStartLatency.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>rajendrant@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1116,8 +1116,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelDownloadManager.DownloadStatus"
-    enum="OptimizationGuidePredictionModelDownloadStatus"
-    expires_after="2023-05-07">
+    enum="OptimizationGuidePredictionModelDownloadStatus" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -1128,7 +1127,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelDownloadManager.DownloadSucceeded"
-    enum="BooleanSuccess" expires_after="2023-05-07">
+    enum="BooleanSuccess" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -1139,7 +1138,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelDownloadManager.ReplaceFileError.{OptimizationTarget}"
-    enum="PlatformFileError" expires_after="M112">
+    enum="PlatformFileError" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1153,7 +1152,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelDownloadManager.State.{OptimizationTarget}"
-    enum="OptimizationGuidePredictionModelDownloadState" expires_after="M112">
+    enum="OptimizationGuidePredictionModelDownloadState" expires_after="M117">
   <owner>rajendrant@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1164,7 +1163,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.PredictionModelExpired.{OptimizationTarget}"
-    enum="BooleanExpired" expires_after="M112">
+    enum="BooleanExpired" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1178,7 +1177,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelExpiredVersion.{OptimizationTarget}"
-    units="version number" expires_after="M112">
+    units="version number" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1206,7 +1205,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.NetErrorCode.{OptimizationTarget}"
-    enum="NetErrorCodes" expires_after="M112">
+    enum="NetErrorCodes" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1236,7 +1235,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.Status.{OptimizationTarget}"
-    enum="HttpResponseCode" expires_after="M112">
+    enum="HttpResponseCode" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1252,7 +1251,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelLoadedVersion.{OptimizationTarget}"
-    units="version number" expires_after="M112">
+    units="version number" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1279,7 +1278,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelStore.ModelCount.{OptimizationTarget}"
-    units="counts" expires_after="M112">
+    units="counts" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>rajendrant@chromium.org</owner>
   <summary>
@@ -1291,7 +1290,7 @@
 
 <histogram name="OptimizationGuide.PredictionModelStore.ModelRemovalReason"
     enum="OptimizationGuidePredictionModelStoreModelRemovalReason"
-    expires_after="M112">
+    expires_after="M117">
   <owner>rajendrant@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1302,7 +1301,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelStore.TotalDirectorySize.{OptimizationTarget}"
-    units="MB" expires_after="M112">
+    units="MB" expires_after="M117">
   <owner>sophiechang@chromium.org</owner>
   <owner>rajendrant@chromium.org</owner>
   <summary>
@@ -1314,7 +1313,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelUpdateVersion.{OptimizationTarget}"
-    units="version number" expires_after="M112">
+    units="version number" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1326,7 +1325,7 @@
 
 <histogram
     name="OptimizationGuide.PredictionModelValidationLatency.{OptimizationTarget}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1350,7 +1349,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.ProcessingComponentAtShutdown"
-    enum="BooleanYesNo" expires_after="M112">
+    enum="BooleanYesNo" expires_after="M117">
   <owner>mcrouse@chromium.org</owner>
   <owner>sophiechang@chromium.org</owner>
   <summary>
@@ -1360,7 +1359,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.PushNotifications.CachedNotificationCount"
-    units="count" expires_after="M112">
+    units="count" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1372,7 +1371,7 @@
 
 <histogram
     name="OptimizationGuide.PushNotifications.CachedNotificationsHandledSuccessfully"
-    enum="BooleanSuccess" expires_after="M112">
+    enum="BooleanSuccess" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1382,7 +1381,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.PushNotifications.DidOverflow"
-    enum="Boolean" expires_after="M112">
+    enum="Boolean" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
@@ -1392,7 +1391,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.PushNotifications.GotPushNotification"
-    enum="Boolean" expires_after="M112">
+    enum="Boolean" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>Records a true sample for every incoming push notification.</summary>
@@ -1410,7 +1409,7 @@
 </histogram>
 
 <histogram name="OptimizationGuide.PushNotifications.ReadCacheResult"
-    enum="OptimizationGuideReadCacheResult" expires_after="M112">
+    enum="OptimizationGuideReadCacheResult" expires_after="M117">
   <owner>robertogden@chromium.org</owner>
   <owner>chrome-intelligence-core@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index 2db77ea..2e8c0f3 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -468,18 +468,6 @@
   </summary>
 </histogram>
 
-<histogram name="PasswordManager.AccountStorage.ClearedOptInForAllAccounts"
-    units="accounts" expires_after="2023-02-12">
-  <owner>mamir@chromium.org</owner>
-  <owner>treib@chromium.org</owner>
-  <summary>
-    Recorded whenever the opt-in for the account-scoped password storage is
-    cleared for all Google Accounts. This typically happens because the signin
-    cookies were cleared. The recorded value is the number of opt-ins that were
-    cleared.
-  </summary>
-</histogram>
-
 <histogram name="PasswordManager.AccountStorage.MoveToAccountStoreFlowAccepted"
     enum="PasswordManager.MoveToAccountStoreTrigger" expires_after="2023-06-18">
   <owner>treib@chromium.org</owner>
@@ -542,7 +530,7 @@
 
 <histogram
     name="PasswordManager.AccountStorageUserStateDuration{UserSyncingType}"
-    units="ms" expires_after="2023-02-12">
+    units="ms" expires_after="2023-08-12">
   <owner>mamir@chromium.org</owner>
   <owner>treib@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml
index d3d2c31..e1a8859 100644
--- a/tools/metrics/histograms/metadata/privacy/histograms.xml
+++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -697,6 +697,33 @@
   </summary>
 </histogram>
 
+<histogram name="PrivacySandbox.{ApiType}" enum="PrivacySandboxApiAllowed"
+    expires_after="M117">
+  <owner>linnan@chromium.org</owner>
+  <owner>johnidel@chromium.org</owner>
+  <owner>sauski@chromium.org</owner>
+  <summary>
+    Whether or not the {ApiType} operation was allowed by Privacy Sandbox
+    settings and why. Recorded at the time settings are checked when performing
+    the operation.
+  </summary>
+  <token key="ApiType">
+    <variant name="IsAttributionReportingAllowed"
+        summary="IsAttributionReportingAllowed"/>
+    <variant name="IsFledgeAllowed" summary="IsFledgeAllowed"/>
+    <variant name="IsPrivateAggregationAllowed"
+        summary="IsPrivateAggregationAllowed"/>
+    <variant name="IsSharedStorageAllowed" summary="IsSharedStorageAllowed"/>
+    <variant name="IsSharedStorageSelectURLAllowed"
+        summary="IsSharedStorageSelectURLAllowed"/>
+    <variant name="IsTopicsAllowed" summary="IsTopicsAllowed"/>
+    <variant name="IsTopicsAllowedForContext"
+        summary="IsTopicsAllowedForContext"/>
+    <variant name="MaySendAttributionReport"
+        summary="MaySendAttributionReport"/>
+  </token>
+</histogram>
+
 </histograms>
 
 </histogram-configuration>
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml
index 8e5216d..33ac3bd 100644
--- a/tools/metrics/histograms/metadata/sb_client/histograms.xml
+++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -844,6 +844,19 @@
   </summary>
 </histogram>
 
+<histogram name="SBClientPhishing.RTLookupForceRequest"
+    enum="BooleanForceRequest" expires_after="2023-11-28">
+  <owner>andysjlim@chromium.org</owner>
+  <owner>chrome-counter-abuse-alerts@google.com</owner>
+  <summary>
+    Records if the RTUrlLookupResponse contains FORCE_REQUEST in
+    client_side_detection_type, which forces the Client Side Detection -
+    Phishing ping to be sent to the server if the user also has Enhanced Safe
+    Browsing or Safe Browsing Extended Reporting opt-in. This histogram is
+    logged once on every successful classification.
+  </summary>
+</histogram>
+
 <histogram name="SBClientPhishing.ServerModelDetectsPhishing"
     enum="BooleanIsPhishing" expires_after="2023-05-27">
   <owner>drubery@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml
index 6c2e4ed..3519f8c 100644
--- a/tools/metrics/histograms/metadata/startup/histograms.xml
+++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -279,6 +279,18 @@
   </summary>
 </histogram>
 
+<histogram name="Startup.Android.IsHomepagePolicyManagerInitialized"
+    enum="Boolean" expires_after="2023-06-30">
+  <owner>hanxi@chromium.org</owner>
+  <owner>xinyiji@chromium.org</owner>
+  <summary>
+    Records whether the HompagePolicyManager is initialized with native in
+    startup when the check of whether to show Start surface when there isn't any
+    Tab happens. The histogram is recorded only on startup when Chrome is
+    launched from app icon and there isn't any Tab to restore.
+  </summary>
+</histogram>
+
 <histogram name="Startup.Android.IsLastBackgroundTimeLogged" enum="Boolean"
     expires_after="2023-06-30">
   <owner>hanxi@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml
index 8064f54..3eb0efaa 100644
--- a/tools/metrics/histograms/metadata/tab/histograms.xml
+++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -1646,7 +1646,7 @@
 
 <histogram
     name="Tabs.RecentlyClosed.EntriesRestoredInPage.{RecentlyClosedType}"
-    units="entries restored" expires_after="2023-02-05">
+    units="entries restored" expires_after="2023-08-05">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <summary>
@@ -1659,7 +1659,7 @@
 </histogram>
 
 <histogram name="Tabs.RecentlyClosed.EntriesShownInPage.{RecentlyClosedType}"
-    units="entries shown" expires_after="2023-02-05">
+    units="entries shown" expires_after="2023-08-05">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <summary>
@@ -1671,7 +1671,7 @@
 </histogram>
 
 <histogram name="Tabs.RecentlyClosed.HistoricalSaverCloseType"
-    enum="HistoricalSaverCloseType" expires_after="2023-06-11">
+    enum="HistoricalSaverCloseType" expires_after="2023-08-05">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <summary>
@@ -1685,7 +1685,7 @@
 
 <histogram
     name="Tabs.RecentlyClosed.PercentOfEntriesRestoredInPage.{RecentlyClosedType}"
-    units="percentage restored" expires_after="2023-02-05">
+    units="percentage restored" expires_after="2023-08-05">
   <owner>ckitagawa@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
   <summary>
diff --git a/tools/rust/update_rust.py b/tools/rust/update_rust.py
index 16e805e1f..96d2563 100755
--- a/tools/rust/update_rust.py
+++ b/tools/rust/update_rust.py
@@ -61,8 +61,7 @@
 # Hash of src/stage0.json, which itself contains the stage0 toolchain hashes.
 # We trust the Rust build system checks, but to ensure it is not tampered with
 # itself check the hash.
-STAGE0_JSON_SHA256 = (
-    '07f4d4ddde6910a70f16f372309525528ff42499fb50317e6ded4bfe1b6ce7cf')
+STAGE0_JSON_SHA256 = '07f4d4ddde6910a70f16f372309525528ff42499fb50317e6ded4bfe1b6ce7cf'
 
 THIS_DIR = os.path.abspath(os.path.dirname(__file__))
 CHROMIUM_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..'))
diff --git a/tools/v8_context_snapshot/v8_context_snapshot_generator.cc b/tools/v8_context_snapshot/v8_context_snapshot_generator.cc
index 8d9d1d6..ee9be745 100644
--- a/tools/v8_context_snapshot/v8_context_snapshot_generator.cc
+++ b/tools/v8_context_snapshot/v8_context_snapshot_generator.cc
@@ -8,7 +8,6 @@
 #include "base/task/single_thread_task_executor.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool/thread_pool_instance.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "gin/v8_initializer.h"
 #include "mojo/core/embedder/embedder.h"
 #include "mojo/public/cpp/bindings/binder_map.h"
diff --git a/ui/accelerated_widget_mac/window_resize_helper_mac.h b/ui/accelerated_widget_mac/window_resize_helper_mac.h
index 42e43c0..41e85836 100644
--- a/ui/accelerated_widget_mac/window_resize_helper_mac.h
+++ b/ui/accelerated_widget_mac/window_resize_helper_mac.h
@@ -7,13 +7,13 @@
 
 #include "base/lazy_instance.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ui/accelerated_widget_mac/accelerated_widget_mac_export.h"
 
 namespace base {
-class SingleThreadTaskRunner;
 class TimeDelta;
 class WaitableEvent;
-}
+}  // namespace base
 
 namespace ui {
 
diff --git a/ui/accessibility/platform/automation/automation_tree_manager_owner_unittest.cc b/ui/accessibility/platform/automation/automation_tree_manager_owner_unittest.cc
index 8c7d3c0..08f7dd1 100644
--- a/ui/accessibility/platform/automation/automation_tree_manager_owner_unittest.cc
+++ b/ui/accessibility/platform/automation/automation_tree_manager_owner_unittest.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "gin/array_buffer.h"
diff --git a/ui/aura/native_window_occlusion_tracker_win.cc b/ui/aura/native_window_occlusion_tracker_win.cc
index 9d13cc0..d32c561c 100644
--- a/ui/aura/native_window_occlusion_tracker_win.cc
+++ b/ui/aura/native_window_occlusion_tracker_win.cc
@@ -21,7 +21,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/win/scoped_gdi_object.h"
 #include "base/win/windows_version.h"
 #include "ui/aura/window_occlusion_tracker.h"
diff --git a/ui/aura/test/ui_controls_factory_aurawin.cc b/ui/aura/test/ui_controls_factory_aurawin.cc
index 887cb597..a751ebb 100644
--- a/ui/aura/test/ui_controls_factory_aurawin.cc
+++ b/ui/aura/test/ui_controls_factory_aurawin.cc
@@ -5,7 +5,6 @@
 #include "base/callback.h"
 #include "base/check.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ui/aura/test/ui_controls_factory_aura.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_tree_host.h"
diff --git a/ui/aura/test/ui_controls_ozone.cc b/ui/aura/test/ui_controls_ozone.cc
index 0c32869..2914ce9 100644
--- a/ui/aura/test/ui_controls_ozone.cc
+++ b/ui/aura/test/ui_controls_ozone.cc
@@ -7,6 +7,7 @@
 #include <tuple>
 
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "ui/events/event_utils.h"
diff --git a/ui/aura/test/ui_controls_ozone.h b/ui/aura/test/ui_controls_ozone.h
index 1d698f4..f3ed5bf3 100644
--- a/ui/aura/test/ui_controls_ozone.h
+++ b/ui/aura/test/ui_controls_ozone.h
@@ -9,7 +9,6 @@
 #include "base/logging.h"
 #include "base/memory/raw_ptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/chromeos_buildflags.h"
 #include "ui/aura/env.h"
 #include "ui/aura/test/aura_test_utils.h"
diff --git a/ui/base/clipboard/clipboard_non_backed.cc b/ui/base/clipboard/clipboard_non_backed.cc
index 558ad7d9..8e11682e 100644
--- a/ui/base/clipboard/clipboard_non_backed.cc
+++ b/ui/base/clipboard/clipboard_non_backed.cc
@@ -21,8 +21,8 @@
 #include "base/no_destructor.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/ui/base/idle/idle_linux.cc b/ui/base/idle/idle_linux.cc
index 6553bcc6..bd6e40e 100644
--- a/ui/base/idle/idle_linux.cc
+++ b/ui/base/idle/idle_linux.cc
@@ -4,6 +4,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/notreached.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/time/time.h"
 #include "ui/base/idle/idle.h"
 #include "ui/base/idle/idle_internal.h"
diff --git a/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc b/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc
index bae4a4c1..a4b1a66 100644
--- a/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc
+++ b/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/trace_event/trace_event.h"
 #include "base/win/com_init_util.h"
diff --git a/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.h b/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.h
index 443f5a9..f89b23d 100644
--- a/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.h
+++ b/ui/base/ime/win/on_screen_keyboard_display_manager_input_pane.h
@@ -14,7 +14,7 @@
 
 #include "base/component_export.h"
 #include "base/observer_list.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/win/windows_types.h"
 #include "ui/base/ime/mojom/virtual_keyboard_types.mojom-shared.h"
 #include "ui/base/ime/virtual_keyboard_controller.h"
diff --git a/ui/base/interaction/interactive_test.cc b/ui/base/interaction/interactive_test.cc
index 30ded3c2..bfd2d11 100644
--- a/ui/base/interaction/interactive_test.cc
+++ b/ui/base/interaction/interactive_test.cc
@@ -11,7 +11,6 @@
 #include "base/functional/callback_helpers.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ui/base/interaction/element_identifier.h"
 #include "ui/base/interaction/element_test_util.h"
 #include "ui/base/interaction/interaction_sequence.h"
diff --git a/ui/base/test/scoped_fake_nswindow_fullscreen.mm b/ui/base/test/scoped_fake_nswindow_fullscreen.mm
index 248bb888..c5b4209 100644
--- a/ui/base/test/scoped_fake_nswindow_fullscreen.mm
+++ b/ui/base/test/scoped_fake_nswindow_fullscreen.mm
@@ -13,7 +13,6 @@
 #import "base/mac/scoped_objc_class_swizzler.h"
 #include "base/run_loop.h"
 #include "base/task/current_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ui/base/cocoa/nswindow_test_util.h"
 
 namespace ui {
diff --git a/ui/base/test/ui_controls_mac.mm b/ui/base/test/ui_controls_mac.mm
index 82ff55a..cb95cdb 100644
--- a/ui/base/test/ui_controls_mac.mm
+++ b/ui/base/test/ui_controls_mac.mm
@@ -13,6 +13,7 @@
 #import "base/mac/foundation_util.h"
 #import "base/mac/scoped_objc_class_swizzler.h"
 #include "base/task/current_thread.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "ui/base/cocoa/cocoa_base_utils.h"
 #include "ui/events/keycodes/keyboard_code_conversion_mac.h"
diff --git a/ui/base/test/windowed_nsnotification_observer.mm b/ui/base/test/windowed_nsnotification_observer.mm
index 25a9a582..75d9b9c 100644
--- a/ui/base/test/windowed_nsnotification_observer.mm
+++ b/ui/base/test/windowed_nsnotification_observer.mm
@@ -8,6 +8,7 @@
 
 #include "base/location.h"
 #include "base/run_loop.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/test_timeouts.h"
 
diff --git a/ui/base/x/x11_shm_image_pool.cc b/ui/base/x/x11_shm_image_pool.cc
index 667274e..f6b85c9 100644
--- a/ui/base/x/x11_shm_image_pool.cc
+++ b/ui/base/x/x11_shm_image_pool.cc
@@ -16,7 +16,6 @@
 #include "base/environment.h"
 #include "base/location.h"
 #include "base/strings/string_util.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "net/base/url_util.h"
diff --git a/ui/base/x/x11_user_input_monitor.cc b/ui/base/x/x11_user_input_monitor.cc
index 29df399..045404f5 100644
--- a/ui/base/x/x11_user_input_monitor.cc
+++ b/ui/base/x/x11_user_input_monitor.cc
@@ -5,6 +5,7 @@
 #include "ui/base/x/x11_user_input_monitor.h"
 
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
 #include "ui/events/devices/x11/xinput_util.h"
 #include "ui/events/keycodes/keyboard_code_conversion_x.h"
 #include "ui/gfx/x/future.h"
diff --git a/ui/base/x/x11_whole_screen_move_loop.cc b/ui/base/x/x11_whole_screen_move_loop.cc
index 14b7a26e..40252e4 100644
--- a/ui/base/x/x11_whole_screen_move_loop.cc
+++ b/ui/base/x/x11_whole_screen_move_loop.cc
@@ -14,7 +14,6 @@
 #include "base/run_loop.h"
 #include "base/task/current_thread.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ui/base/x/x11_pointer_grab.h"
 #include "ui/base/x/x11_util.h"
 #include "ui/events/event.h"
diff --git a/ui/chromeos/events/keyboard_capability.cc b/ui/chromeos/events/keyboard_capability.cc
index a101c98..399055d 100644
--- a/ui/chromeos/events/keyboard_capability.cc
+++ b/ui/chromeos/events/keyboard_capability.cc
@@ -15,6 +15,14 @@
 
 KeyboardCapability::~KeyboardCapability() = default;
 
+void KeyboardCapability::AddObserver(Observer* observer) {
+  delegate_->AddObserver(observer);
+}
+
+void KeyboardCapability::RemoveObserver(Observer* observer) {
+  delegate_->RemoveObserver(observer);
+}
+
 bool KeyboardCapability::TopRowKeysAreFKeys() const {
   return delegate_->TopRowKeysAreFKeys();
 }
diff --git a/ui/chromeos/events/keyboard_capability.h b/ui/chromeos/events/keyboard_capability.h
index 58ab677..b8325cd 100644
--- a/ui/chromeos/events/keyboard_capability.h
+++ b/ui/chromeos/events/keyboard_capability.h
@@ -72,6 +72,14 @@
     kKbdTopRowLayoutMax = kKbdTopRowLayoutCustom
   };
 
+  class Observer {
+   public:
+    virtual ~Observer() = default;
+
+    // Called when the top_row_keys_are_fKeys prefs has changed.
+    virtual void OnTopRowKeysAreFKeysChanged() = 0;
+  };
+
   class Delegate {
    public:
     Delegate() = default;
@@ -79,6 +87,10 @@
     Delegate& operator=(const Delegate&) = delete;
     virtual ~Delegate() = default;
 
+    virtual void AddObserver(Observer* observer) = 0;
+
+    virtual void RemoveObserver(Observer* observer) = 0;
+
     virtual bool TopRowKeysAreFKeys() const = 0;
 
     virtual void SetTopRowKeysAsFKeysEnabledForTesting(bool enabled) = 0;
@@ -89,6 +101,10 @@
   KeyboardCapability& operator=(const KeyboardCapability&) = delete;
   ~KeyboardCapability();
 
+  void AddObserver(Observer* observer);
+
+  void RemoveObserver(Observer* observer);
+
   // Returns true if the target would prefer to receive raw
   // function keys instead of having them rewritten into back, forward,
   // brightness, volume, etc. or if the user has specified that they desire
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index fdb11e7..e4fde44 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -22,6 +22,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/system/sys_info.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/ui/compositor/compositor_lock.cc b/ui/compositor/compositor_lock.cc
index 095dbe18..d3e16ab 100644
--- a/ui/compositor/compositor_lock.cc
+++ b/ui/compositor/compositor_lock.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/containers/cxx20_erase.h"
+#include "base/task/single_thread_task_runner.h"
 #include "cc/trees/layer_tree_host.h"
 
 namespace ui {
diff --git a/ui/compositor/compositor_unittest.cc b/ui/compositor/compositor_unittest.cc
index c6daa5a..605f30e 100644
--- a/ui/compositor/compositor_unittest.cc
+++ b/ui/compositor/compositor_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/power_monitor_test.h"
diff --git a/ui/compositor/layer_owner_unittest.cc b/ui/compositor/layer_owner_unittest.cc
index c56c34cf..64fe4c5 100644
--- a/ui/compositor/layer_owner_unittest.cc
+++ b/ui/compositor/layer_owner_unittest.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/null_task_runner.h"
 #include "cc/animation/animation.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ui/compositor/test/direct_layer_tree_frame_sink.cc b/ui/compositor/test/direct_layer_tree_frame_sink.cc
index 3acf88a..e3c25230 100644
--- a/ui/compositor/test/direct_layer_tree_frame_sink.cc
+++ b/ui/compositor/test/direct_layer_tree_frame_sink.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "cc/tiles/image_decode_cache_utils.h"
diff --git a/ui/compositor/test/fake_context_factory.cc b/ui/compositor/test/fake_context_factory.cc
index 854200d..0f2dfb7 100644
--- a/ui/compositor/test/fake_context_factory.cc
+++ b/ui/compositor/test/fake_context_factory.cc
@@ -5,7 +5,6 @@
 #include "ui/compositor/test/fake_context_factory.h"
 
 #include "base/command_line.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "cc/base/switches.h"
 #include "cc/test/fake_layer_tree_frame_sink.h"
diff --git a/ui/compositor/test/test_compositor_host_mac.mm b/ui/compositor/test/test_compositor_host_mac.mm
index bf9feeb..d00ac76b 100644
--- a/ui/compositor/test/test_compositor_host_mac.mm
+++ b/ui/compositor/test/test_compositor_host_mac.mm
@@ -5,6 +5,7 @@
 #include "ui/compositor/test/test_compositor_host.h"
 
 #include "base/memory/raw_ptr.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 
 #import <AppKit/NSApplication.h>
diff --git a/ui/events/gesture_detection/gesture_provider_config_helper.cc b/ui/events/gesture_detection/gesture_provider_config_helper.cc
index b599f909..468641b 100644
--- a/ui/events/gesture_detection/gesture_provider_config_helper.cc
+++ b/ui/events/gesture_detection/gesture_provider_config_helper.cc
@@ -4,6 +4,7 @@
 
 #include "ui/events/gesture_detection/gesture_provider_config_helper.h"
 
+#include "base/task/sequenced_task_runner.h"
 #include "ui/display/screen.h"
 #include "ui/events/gesture_detection/gesture_configuration.h"
 
diff --git a/ui/events/gesture_detection/gesture_provider_config_helper.h b/ui/events/gesture_detection/gesture_provider_config_helper.h
index 580814f0..5de6c7b 100644
--- a/ui/events/gesture_detection/gesture_provider_config_helper.h
+++ b/ui/events/gesture_detection/gesture_provider_config_helper.h
@@ -5,6 +5,7 @@
 #ifndef UI_EVENTS_GESTURE_DETECTION_GESTURE_PROVIDER_CONFIG_HELPER_H_
 #define UI_EVENTS_GESTURE_DETECTION_GESTURE_PROVIDER_CONFIG_HELPER_H_
 
+#include "base/task/sequenced_task_runner.h"
 #include "ui/events/gesture_detection/gesture_detection_export.h"
 #include "ui/events/gesture_detection/gesture_detector.h"
 #include "ui/events/gesture_detection/gesture_provider.h"
diff --git a/ui/events/ozone/evdev/event_device_info.cc b/ui/events/ozone/evdev/event_device_info.cc
index 130fae1..20011da3 100644
--- a/ui/events/ozone/evdev/event_device_info.cc
+++ b/ui/events/ozone/evdev/event_device_info.cc
@@ -49,6 +49,7 @@
     {0x0111, 0x1854},  // SteelSeries Aerox 5 Wireless (Bluetooth)
     {0x0111, 0x185a},  // SteelSeries Aerox 9 Wireless (Bluetooth)
     {0x03f0, 0x0b97},  // HyperX Pulsefire Haste 2 Gaming Mouse
+    {0x03f0, 0x4e41},  // HP OMEN Vector Wireless Mouse
     {0x03f0, 0xa407},  // HP X4000 Wireless Mouse
     {0x045e, 0x0745},  // Microsoft Wireless Mobile Mouse 6000
     {0x045e, 0x0821},  // Microsoft Surface Precision Mouse
diff --git a/ui/events/ozone/evdev/event_factory_evdev.h b/ui/events/ozone/evdev/event_factory_evdev.h
index fef4bbd8..bba9b91 100644
--- a/ui/events/ozone/evdev/event_factory_evdev.h
+++ b/ui/events/ozone/evdev/event_factory_evdev.h
@@ -10,6 +10,7 @@
 #include "base/containers/flat_map.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
 #include "ui/events/event_modifiers.h"
 #include "ui/events/ozone/device/device_event_observer.h"
diff --git a/ui/events/ozone/evdev/event_factory_evdev_unittest.cc b/ui/events/ozone/evdev/event_factory_evdev_unittest.cc
index 30cfb1cb8..e27af86 100644
--- a/ui/events/ozone/evdev/event_factory_evdev_unittest.cc
+++ b/ui/events/ozone/evdev/event_factory_evdev_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "ui/events/ozone/evdev/event_factory_evdev.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/ui/events/test/event_generator.cc b/ui/events/test/event_generator.cc
index 93b09218..0ffac493 100644
--- a/ui/events/test/event_generator.cc
+++ b/ui/events/test/event_generator.cc
@@ -13,7 +13,6 @@
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/tick_clock.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/ui/gfx/android/android_surface_control_compat.cc b/ui/gfx/android/android_surface_control_compat.cc
index 0619152..cff2205 100644
--- a/ui/gfx/android/android_surface_control_compat.cc
+++ b/ui/gfx/android/android_surface_control_compat.cc
@@ -19,6 +19,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/system/sys_info.h"
 #include "base/task/bind_post_task.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gfx/color_space.h"
 
diff --git a/ui/gl/dcomp_presenter_unittest.cc b/ui/gl/dcomp_presenter_unittest.cc
index b6c2d5a..bd7da9f0 100644
--- a/ui/gl/dcomp_presenter_unittest.cc
+++ b/ui/gl/dcomp_presenter_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/test/power_monitor_test.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/win/hidden_window.h"
 #include "ui/gfx/buffer_format_util.h"
diff --git a/ui/gl/direct_composition_surface_win_unittest.cc b/ui/gl/direct_composition_surface_win_unittest.cc
index 072ae86..f31cdb8 100644
--- a/ui/gl/direct_composition_surface_win_unittest.cc
+++ b/ui/gl/direct_composition_surface_win_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/test/power_monitor_test.h"
 #include "base/test/scoped_feature_list.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/win/hidden_window.h"
 #include "ui/gfx/buffer_format_util.h"
diff --git a/ui/gl/gl_context_cgl.cc b/ui/gl/gl_context_cgl.cc
index dd243255..02ceca2 100644
--- a/ui/gl/gl_context_cgl.cc
+++ b/ui/gl/gl_context_cgl.cc
@@ -15,7 +15,6 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/dual_gpu_state_mac.h"
 #include "ui/gl/gl_bindings.h"
diff --git a/ui/gl/gl_surface_egl_surface_control.cc b/ui/gl/gl_surface_egl_surface_control.cc
index bf912ca..7498c0db 100644
--- a/ui/gl/gl_surface_egl_surface_control.cc
+++ b/ui/gl/gl_surface_egl_surface_control.cc
@@ -12,7 +12,7 @@
 #include "base/bind.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/strings/strcat.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
 #include "ui/gfx/geometry/rect_conversions.h"
diff --git a/ui/lottie/animation_unittest.cc b/ui/lottie/animation_unittest.cc
index 8ab23d0..ddd865c 100644
--- a/ui/lottie/animation_unittest.cc
+++ b/ui/lottie/animation_unittest.cc
@@ -22,6 +22,7 @@
 #include "cc/paint/skottie_resource_metadata.h"
 #include "cc/paint/skottie_wrapper.h"
 #include "cc/test/lottie_test_data.h"
+#include "cc/test/paint_image_matchers.h"
 #include "cc/test/skia_common.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -45,7 +46,6 @@
 using ::testing::NotNull;
 using ::testing::Pair;
 using ::testing::SizeIs;
-using ::testing::UnorderedElementsAre;
 
 // A skottie animation with solid green color for the first 2.5 seconds and then
 // a solid blue color for the next 2.5 seconds.
@@ -1338,8 +1338,7 @@
   const cc::DrawSkottieOp* op =
       paint_record.GetOpAtForTesting<cc::DrawSkottieOp>(0);
   ASSERT_THAT(op, NotNull());
-  EXPECT_THAT(op->images, UnorderedElementsAre(Pair(
-                              cc::HashSkottieResourceId("image_0"), frame_0)));
+  EXPECT_THAT(op->images, ElementsAre(cc::SkottieImageIs("image_0", frame_0)));
 
   AdvanceClock(animation_->GetAnimationDuration() * .75);
 
@@ -1349,8 +1348,7 @@
   ASSERT_THAT(paint_record.size(), Eq(1u));
   op = paint_record.GetOpAtForTesting<cc::DrawSkottieOp>(0);
   ASSERT_THAT(op, NotNull());
-  EXPECT_THAT(op->images, UnorderedElementsAre(Pair(
-                              cc::HashSkottieResourceId("image_1"), frame_1)));
+  EXPECT_THAT(op->images, ElementsAre(cc::SkottieImageIs("image_1", frame_1)));
 }
 
 TEST_F(AnimationWithImageAssetsTest, GracefullyHandlesNullImages) {
@@ -1365,9 +1363,8 @@
   const cc::DrawSkottieOp* op =
       paint_record.GetOpAtForTesting<cc::DrawSkottieOp>(0);
   ASSERT_THAT(op, NotNull());
-  EXPECT_THAT(op->images,
-              UnorderedElementsAre(Pair(cc::HashSkottieResourceId("image_0"),
-                                        cc::SkottieFrameData())));
+  EXPECT_THAT(op->images, ElementsAre(cc::SkottieImageIs(
+                              "image_0", cc::SkottieFrameData())));
 }
 
 TEST_F(AnimationWithImageAssetsTest, LoadsCorrectFrameTimestamp) {
diff --git a/ui/native_theme/scrollbar_animator_mac.cc b/ui/native_theme/scrollbar_animator_mac.cc
index f3c74774..9610a160 100644
--- a/ui/native_theme/scrollbar_animator_mac.cc
+++ b/ui/native_theme/scrollbar_animator_mac.cc
@@ -5,6 +5,7 @@
 #include "ui/native_theme/scrollbar_animator_mac.h"
 
 #include "base/cxx17_backports.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace ui {
 
diff --git a/ui/ozone/demo/demo_window.cc b/ui/ozone/demo/demo_window.cc
index bd0365b..a2063ac 100644
--- a/ui/ozone/demo/demo_window.cc
+++ b/ui/ozone/demo/demo_window.cc
@@ -7,7 +7,6 @@
 #include <utility>
 
 #include "base/logging.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "ui/events/event.h"
 #include "ui/events/keycodes/dom/dom_code.h"
diff --git a/ui/ozone/demo/surfaceless_gl_renderer.cc b/ui/ozone/demo/surfaceless_gl_renderer.cc
index 6e28b0d..94be0b9 100644
--- a/ui/ozone/demo/surfaceless_gl_renderer.cc
+++ b/ui/ozone/demo/surfaceless_gl_renderer.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/cxx17_backports.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/display/types/display_snapshot.h"
 #include "ui/gfx/frame_data.h"
diff --git a/ui/ozone/platform/drm/gpu/drm_device.cc b/ui/ozone/platform/drm/gpu/drm_device.cc
index 97f54dd..2b8e480 100644
--- a/ui/ozone/platform/drm/gpu/drm_device.cc
+++ b/ui/ozone/platform/drm/gpu/drm_device.cc
@@ -20,7 +20,6 @@
 #include "base/ranges/algorithm.h"
 #include "base/task/current_thread.h"
 #include "base/task/task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
 #include "third_party/perfetto/include/perfetto/tracing/traced_value.h"
diff --git a/ui/ozone/platform/drm/gpu/drm_thread.cc b/ui/ozone/platform/drm/gpu/drm_thread.cc
index 99425a8..d4fff48 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread.cc
+++ b/ui/ozone/platform/drm/gpu/drm_thread.cc
@@ -13,7 +13,6 @@
 #include "base/command_line.h"
 #include "base/message_loop/message_pump_type.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
diff --git a/ui/ozone/platform/drm/gpu/drm_thread_proxy.cc b/ui/ozone/platform/drm/gpu/drm_thread_proxy.cc
index aa87ffc..a4ae8ec 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread_proxy.cc
+++ b/ui/ozone/platform/drm/gpu/drm_thread_proxy.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gfx/linux/gbm_wrapper.h"
diff --git a/ui/ozone/platform/drm/gpu/drm_thread_proxy.h b/ui/ozone/platform/drm/gpu/drm_thread_proxy.h
index 362cdb8..88d1032 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread_proxy.h
+++ b/ui/ozone/platform/drm/gpu/drm_thread_proxy.h
@@ -10,6 +10,7 @@
 
 #include "base/callback.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "ui/ozone/platform/drm/gpu/drm_thread.h"
 #include "ui/ozone/platform/drm/mojom/device_cursor.mojom.h"
diff --git a/ui/ozone/platform/drm/gpu/proxy_helpers.cc b/ui/ozone/platform/drm/gpu/proxy_helpers.cc
index 9be0840f8..cf9231ff 100644
--- a/ui/ozone/platform/drm/gpu/proxy_helpers.cc
+++ b/ui/ozone/platform/drm/gpu/proxy_helpers.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 
 namespace ui {
 
diff --git a/ui/ozone/platform/drm/host/drm_cursor.cc b/ui/ozone/platform/drm/host/drm_cursor.cc
index 6562483f..3aa6cce5 100644
--- a/ui/ozone/platform/drm/host/drm_cursor.cc
+++ b/ui/ozone/platform/drm/host/drm_cursor.cc
@@ -9,6 +9,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
diff --git a/ui/ozone/platform/drm/host/host_drm_device.cc b/ui/ozone/platform/drm/host/host_drm_device.cc
index 63b1f787..aa0807e 100644
--- a/ui/ozone/platform/drm/host/host_drm_device.cc
+++ b/ui/ozone/platform/drm/host/host_drm_device.cc
@@ -13,7 +13,6 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "ui/display/types/display_snapshot.h"
 #include "ui/ozone/platform/drm/common/display_types.h"
diff --git a/ui/ozone/platform/flatland/flatland_gpu_host.cc b/ui/ozone/platform/flatland/flatland_gpu_host.cc
index 90d8187..65899050 100644
--- a/ui/ozone/platform/flatland/flatland_gpu_host.cc
+++ b/ui/ozone/platform/flatland/flatland_gpu_host.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "ui/ozone/platform/flatland/flatland_window.h"
 #include "ui/ozone/platform/flatland/flatland_window_manager.h"
diff --git a/ui/ozone/platform/flatland/flatland_surface_factory.cc b/ui/ozone/platform/flatland/flatland_surface_factory.cc
index 6b7d83c..3717e74 100644
--- a/ui/ozone/platform/flatland/flatland_surface_factory.cc
+++ b/ui/ozone/platform/flatland/flatland_surface_factory.cc
@@ -13,6 +13,7 @@
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/fuchsia/process_context.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/vulkan/vulkan_device_queue.h"
 #include "third_party/angle/src/common/fuchsia_egl/fuchsia_egl.h"
 #include "ui/gfx/geometry/skia_conversions.h"
diff --git a/ui/ozone/platform/flatland/ozone_platform_flatland.cc b/ui/ozone/platform/flatland/ozone_platform_flatland.cc
index a5226787..91b49f9f 100644
--- a/ui/ozone/platform/flatland/ozone_platform_flatland.cc
+++ b/ui/ozone/platform/flatland/ozone_platform_flatland.cc
@@ -14,6 +14,7 @@
 #include "base/no_destructor.h"
 #include "base/notreached.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "ui/base/cursor/cursor_factory.h"
diff --git a/ui/ozone/platform/scenic/ozone_platform_scenic.cc b/ui/ozone/platform/scenic/ozone_platform_scenic.cc
index 23d09d77..bb569a8 100644
--- a/ui/ozone/platform/scenic/ozone_platform_scenic.cc
+++ b/ui/ozone/platform/scenic/ozone_platform_scenic.cc
@@ -18,6 +18,7 @@
 #include "base/no_destructor.h"
 #include "base/notreached.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "ui/base/cursor/cursor_factory.h"
diff --git a/ui/ozone/platform/scenic/scenic_surface_factory.cc b/ui/ozone/platform/scenic/scenic_surface_factory.cc
index 794ee49..ed612e5 100644
--- a/ui/ozone/platform/scenic/scenic_surface_factory.cc
+++ b/ui/ozone/platform/scenic/scenic_surface_factory.cc
@@ -13,6 +13,7 @@
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/fuchsia/process_context.h"
 #include "base/memory/ptr_util.h"
+#include "base/task/single_thread_task_runner.h"
 #include "gpu/vulkan/vulkan_device_queue.h"
 #include "third_party/angle/src/common/fuchsia_egl/fuchsia_egl.h"
 #include "ui/gfx/geometry/skia_conversions.h"
diff --git a/ui/ozone/platform/scenic/sysmem_buffer_collection.cc b/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
index 98c815d0..fd92bdae 100644
--- a/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
+++ b/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
@@ -12,6 +12,7 @@
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/fuchsia/koid.h"
 #include "base/task/current_thread.h"
+#include "base/task/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "gpu/vulkan/vulkan_device_queue.h"
 #include "gpu/vulkan/vulkan_function_pointers.h"
diff --git a/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.h b/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.h
index 4a9814f..a8eac91 100644
--- a/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.h
+++ b/ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.h
@@ -12,7 +12,7 @@
 #include "base/callback_forward.h"
 #include "base/files/file_path.h"
 #include "base/synchronization/lock.h"
-#include "base/threading/sequenced_task_runner_handle.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
diff --git a/ui/ozone/platform/wayland/gpu/wayland_surface_factory.h b/ui/ozone/platform/wayland/gpu/wayland_surface_factory.h
index 3a9b8a2..e73db7f 100644
--- a/ui/ozone/platform/wayland/gpu/wayland_surface_factory.h
+++ b/ui/ozone/platform/wayland/gpu/wayland_surface_factory.h
@@ -10,7 +10,6 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "ui/gl/gl_surface.h"
 #include "ui/ozone/platform/wayland/common/wayland_util.h"
 #include "ui/ozone/public/surface_factory_ozone.h"
diff --git a/ui/ozone/platform/wayland/host/org_gnome_mutter_idle_monitor.h b/ui/ozone/platform/wayland/host/org_gnome_mutter_idle_monitor.h
index 64b94f2..ce74f24 100644
--- a/ui/ozone/platform/wayland/host/org_gnome_mutter_idle_monitor.h
+++ b/ui/ozone/platform/wayland/host/org_gnome_mutter_idle_monitor.h
@@ -8,6 +8,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc
index 556240c..06421d9 100644
--- a/ui/ozone/platform/wayland/host/wayland_connection.cc
+++ b/ui/ozone/platform/wayland/host/wayland_connection.cc
@@ -20,7 +20,6 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_util.h"
 #include "base/task/current_thread.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/events/devices/device_data_manager.h"
 #include "ui/events/devices/input_device.h"
diff --git a/ui/ozone/platform/wayland/host/wayland_keyboard_unittest.cc b/ui/ozone/platform/wayland/host/wayland_keyboard_unittest.cc
index be522a66..6b60ab31 100644
--- a/ui/ozone/platform/wayland/host/wayland_keyboard_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_keyboard_unittest.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/timer/timer.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
index ffec00a..f5d1e1c 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/nix/xdg_util.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/scoped_command_line.h"
 #include "build/chromeos_buildflags.h"
diff --git a/ui/ozone/platform/wayland/test/wayland_drag_drop_test.cc b/ui/ozone/platform/wayland/test/wayland_drag_drop_test.cc
index 4093a6b..52b0044 100644
--- a/ui/ozone/platform/wayland/test/wayland_drag_drop_test.cc
+++ b/ui/ozone/platform/wayland/test/wayland_drag_drop_test.cc
@@ -10,6 +10,7 @@
 #include <cstdint>
 
 #include "base/callback.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/ozone/platform/wayland/host/wayland_connection.h"
diff --git a/ui/ozone/platform/x11/ozone_platform_x11.cc b/ui/ozone/platform/x11/ozone_platform_x11.cc
index c51bf1fe..28a5f5e 100644
--- a/ui/ozone/platform/x11/ozone_platform_x11.cc
+++ b/ui/ozone/platform/x11/ozone_platform_x11.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/no_destructor.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
diff --git a/ui/ozone/platform/x11/x11_canvas_surface.h b/ui/ozone/platform/x11/x11_canvas_surface.h
index 200c79f..4e73a93 100644
--- a/ui/ozone/platform/x11/x11_canvas_surface.h
+++ b/ui/ozone/platform/x11/x11_canvas_surface.h
@@ -9,7 +9,6 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "third_party/skia/include/core/SkRefCnt.h"
 #include "third_party/skia/include/core/SkSurface.h"
 #include "ui/base/x/x11_software_bitmap_presenter.h"
diff --git a/ui/ozone/platform/x11/x11_user_input_monitor.cc b/ui/ozone/platform/x11/x11_user_input_monitor.cc
index a3f99051..2d81e58 100644
--- a/ui/ozone/platform/x11/x11_user_input_monitor.cc
+++ b/ui/ozone/platform/x11/x11_user_input_monitor.cc
@@ -4,6 +4,7 @@
 
 #include "ui/ozone/platform/x11/x11_user_input_monitor.h"
 
+#include "base/task/single_thread_task_runner.h"
 #include "ui/base/x/x11_user_input_monitor.h"
 
 namespace ui {
diff --git a/ui/ozone/platform/x11/x11_user_input_monitor.h b/ui/ozone/platform/x11/x11_user_input_monitor.h
index f8dad32..c892c0b 100644
--- a/ui/ozone/platform/x11/x11_user_input_monitor.h
+++ b/ui/ozone/platform/x11/x11_user_input_monitor.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "base/task/single_thread_task_runner.h"
 #include "ui/ozone/public/platform_user_input_monitor.h"
 
 namespace ui {
diff --git a/ui/ozone/public/ozone_platform.cc b/ui/ozone/public/ozone_platform.cc
index 24504763e..0243f94 100644
--- a/ui/ozone/public/ozone_platform.cc
+++ b/ui/ozone/public/ozone_platform.cc
@@ -9,6 +9,7 @@
 
 #include "base/check_op.h"
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/events/devices/device_data_manager.h"
 #include "ui/ozone/common/base_keyboard_hook.h"
diff --git a/ui/shell_dialogs/base_shell_dialog_win.cc b/ui/shell_dialogs/base_shell_dialog_win.cc
index aa20fab4..138167d4c 100644
--- a/ui/shell_dialogs/base_shell_dialog_win.cc
+++ b/ui/shell_dialogs/base_shell_dialog_win.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 
 #include "base/no_destructor.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/task/thread_pool.h"
 #include "base/win/scoped_com_initializer.h"
 
diff --git a/ui/shell_dialogs/select_file_dialog_linux_kde.cc b/ui/shell_dialogs/select_file_dialog_linux_kde.cc
index 59a4daa4..61a38e9 100644
--- a/ui/shell_dialogs/select_file_dialog_linux_kde.cc
+++ b/ui/shell_dialogs/select_file_dialog_linux_kde.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/ui/shell_dialogs/select_file_dialog_win.cc b/ui/shell_dialogs/select_file_dialog_win.cc
index 5e12843..c8fded6 100644
--- a/ui/shell_dialogs/select_file_dialog_win.cc
+++ b/ui/shell_dialogs/select_file_dialog_win.cc
@@ -15,6 +15,7 @@
 #include "base/notreached.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/win/registry.h"
 #include "ui/aura/window.h"
diff --git a/ui/snapshot/screenshot_grabber.cc b/ui/snapshot/screenshot_grabber.cc
index a9d5738..5ddb839 100644
--- a/ui/snapshot/screenshot_grabber.cc
+++ b/ui/snapshot/screenshot_grabber.cc
@@ -18,7 +18,6 @@
 #include "base/task/current_thread.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/task/task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "ui/snapshot/snapshot.h"
 
diff --git a/ui/views/animation/ink_drop_impl_unittest.cc b/ui/views/animation/ink_drop_impl_unittest.cc
index 8398235..e41a29a1 100644
--- a/ui/views/animation/ink_drop_impl_unittest.cc
+++ b/ui/views/animation/ink_drop_impl_unittest.cc
@@ -7,9 +7,9 @@
 #include "ui/views/animation/ink_drop_impl.h"
 
 #include "base/bind.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/gtest_util.h"
 #include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
diff --git a/ui/views/cocoa/drag_drop_client_mac_unittest.mm b/ui/views/cocoa/drag_drop_client_mac_unittest.mm
index 9417f261..ae74af1 100644
--- a/ui/views/cocoa/drag_drop_client_mac_unittest.mm
+++ b/ui/views/cocoa/drag_drop_client_mac_unittest.mm
@@ -4,6 +4,7 @@
 
 #include "base/memory/raw_ptr.h"
 
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #import "ui/views/cocoa/drag_drop_client_mac.h"
 
diff --git a/ui/views/controls/menu/menu_closure_animation_mac.mm b/ui/views/controls/menu/menu_closure_animation_mac.mm
index 92a5187..ec690c16 100644
--- a/ui/views/controls/menu/menu_closure_animation_mac.mm
+++ b/ui/views/controls/menu/menu_closure_animation_mac.mm
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/check_op.h"
 #include "base/notreached.h"
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #include "ui/gfx/animation/linear_animation.h"
 #include "ui/views/controls/menu/menu_item_view.h"
diff --git a/ui/views/controls/menu/menu_controller_unittest.cc b/ui/views/controls/menu/menu_controller_unittest.cc
index 23db180..6404629 100644
--- a/ui/views/controls/menu/menu_controller_unittest.cc
+++ b/ui/views/controls/menu/menu_controller_unittest.cc
@@ -15,7 +15,6 @@
 #include "base/task/current_thread.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "ui/accessibility/ax_action_data.h"
diff --git a/ui/views/controls/menu/menu_runner_cocoa_unittest.mm b/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
index a2504c8..bfb087b 100644
--- a/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
+++ b/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
@@ -4,6 +4,7 @@
 
 #include "base/memory/raw_ptr.h"
 
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #import "ui/views/controls/menu/menu_runner_impl_cocoa.h"
 
diff --git a/ui/views/test/ui_controls_factory_desktop_aura_ozone.cc b/ui/views/test/ui_controls_factory_desktop_aura_ozone.cc
index 1a183f3..73eb89e 100644
--- a/ui/views/test/ui_controls_factory_desktop_aura_ozone.cc
+++ b/ui/views/test/ui_controls_factory_desktop_aura_ozone.cc
@@ -14,7 +14,6 @@
 #include "base/location.h"
 #include "base/ranges/algorithm.h"
 #include "base/task/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "ui/aura/client/screen_position_client.h"
diff --git a/ui/views/test/view_skia_gold_pixel_diff.cc b/ui/views/test/view_skia_gold_pixel_diff.cc
index d71a2a0..a6720a6 100644
--- a/ui/views/test/view_skia_gold_pixel_diff.cc
+++ b/ui/views/test/view_skia_gold_pixel_diff.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
diff --git a/ui/views/widget/native_widget_mac_unittest.mm b/ui/views/widget/native_widget_mac_unittest.mm
index 10f4596..1ebda200 100644
--- a/ui/views/widget/native_widget_mac_unittest.mm
+++ b/ui/views/widget/native_widget_mac_unittest.mm
@@ -4,6 +4,7 @@
 
 #include "base/memory/raw_ptr.h"
 
+#import "base/task/single_thread_task_runner.h"
 #include "base/task/single_thread_task_runner.h"
 #import "ui/views/widget/native_widget_mac.h"
 
diff --git a/weblayer/browser/autofill_client_impl.cc b/weblayer/browser/autofill_client_impl.cc
index f0f8835..9877195 100644
--- a/weblayer/browser/autofill_client_impl.cc
+++ b/weblayer/browser/autofill_client_impl.cc
@@ -248,20 +248,17 @@
   return false;
 }
 
-bool AutofillClientImpl::IsFastCheckoutTriggerForm(
+bool AutofillClientImpl::TryToShowFastCheckout(
     const autofill::FormData& form,
-    const autofill::FormFieldData& field) {
+    const autofill::FormFieldData& field,
+    autofill::AutofillDriver* driver) {
   return false;
 }
 
-bool AutofillClientImpl::ShowFastCheckout(
-    base::WeakPtr<autofill::FastCheckoutDelegate> delegate) {
-  NOTREACHED();
-  return false;
-}
+void AutofillClientImpl::HideFastCheckout(bool allow_further_runs) {}
 
-void AutofillClientImpl::HideFastCheckout() {
-  NOTREACHED();
+bool AutofillClientImpl::IsShowingFastCheckoutUI() {
+  return false;
 }
 
 bool AutofillClientImpl::IsTouchToFillCreditCardSupported() {
diff --git a/weblayer/browser/autofill_client_impl.h b/weblayer/browser/autofill_client_impl.h
index 3737723..5d9e87a 100644
--- a/weblayer/browser/autofill_client_impl.h
+++ b/weblayer/browser/autofill_client_impl.h
@@ -110,12 +110,12 @@
       AddressProfileSavePromptCallback callback) override;
   bool HasCreditCardScanFeature() override;
   void ScanCreditCard(CreditCardScanCallback callback) override;
+  bool TryToShowFastCheckout(const autofill::FormData& form,
+                             const autofill::FormFieldData& field,
+                             autofill::AutofillDriver* driver) override;
+  void HideFastCheckout(bool allow_further_runs) override;
   bool IsFastCheckoutSupported() override;
-  bool IsFastCheckoutTriggerForm(const autofill::FormData& form,
-                                 const autofill::FormFieldData& field) override;
-  bool ShowFastCheckout(
-      base::WeakPtr<autofill::FastCheckoutDelegate> delegate) override;
-  void HideFastCheckout() override;
+  bool IsShowingFastCheckoutUI() override;
   bool IsTouchToFillCreditCardSupported() override;
   bool ShowTouchToFillCreditCard(
       base::WeakPtr<autofill::TouchToFillDelegate> delegate,
diff --git a/weblayer/browser/download_impl.cc b/weblayer/browser/download_impl.cc
index 6d5dba6..50ef7df9 100644
--- a/weblayer/browser/download_impl.cc
+++ b/weblayer/browser/download_impl.cc
@@ -7,7 +7,6 @@
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/memory/ptr_util.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "build/build_config.h"
 #include "components/download/public/common/download_item.h"
 
diff --git a/weblayer/browser/favicon/favicon_service_impl.h b/weblayer/browser/favicon/favicon_service_impl.h
index 1ef3247f..03a829c 100644
--- a/weblayer/browser/favicon/favicon_service_impl.h
+++ b/weblayer/browser/favicon/favicon_service_impl.h
@@ -10,6 +10,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
 #include "components/favicon/core/core_favicon_service.h"
 #include "components/favicon/core/large_favicon_provider.h"
 
diff --git a/weblayer/browser/navigation_browsertest.cc b/weblayer/browser/navigation_browsertest.cc
index 054b958..037db3d 100644
--- a/weblayer/browser/navigation_browsertest.cc
+++ b/weblayer/browser/navigation_browsertest.cc
@@ -13,6 +13,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
+#include "base/task/single_thread_task_runner.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
diff --git a/weblayer/browser/webapps/webapk_install_scheduler_browsertest.cc b/weblayer/browser/webapps/webapk_install_scheduler_browsertest.cc
index d8bce14..e752ac1 100644
--- a/weblayer/browser/webapps/webapk_install_scheduler_browsertest.cc
+++ b/weblayer/browser/webapps/webapk_install_scheduler_browsertest.cc
@@ -7,6 +7,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
+#include "base/task/single_thread_task_runner.h"
 #include "components/webapps/browser/android/shortcut_info.h"
 #include "components/webapps/browser/android/webapk/webapk_types.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"