diff --git a/DEPS b/DEPS
index 16ef234..25e1301f7 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': '8a10a599da12aa6a4c0e7a8257e0c9126cfdc40a',
+  'skia_revision': '56e4b439696a722048289f6946517e21a7ee8d73',
   # 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': '06394358bbdcc16c717137e250f6b16e92f0d97a',
+  'v8_revision': 'f45ad8f63e1466603e3046a862ebacd5671a566f',
   # 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': 'c98a413c3ea78e848aba54ca2073e8b188e0de55',
+  'angle_revision': 'd4535966a35ff96cad9157aee3ac85bd7fc75878',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -320,7 +320,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'adc69fe695e79053e05f23fd8f8e61659a9e7d7f',
+  'pdfium_revision': '54020fcdf229355df6e09d989b23600879eac0c2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # 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': 'd3c717b31da5d37df246c6b0ba3318171fde83d3',
+  'devtools_frontend_revision': '971a27a6900401b77822dd75b41515d14a39c2da',
   # 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,7 +419,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '785ccde2f588a76e7b1024f54f27032e0606be11',
+  'dawn_revision': '0a31cadaf37f70d07554d6d3ce9b83baeceb00a9',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -455,7 +455,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'cros_components_revision': '686a2831ef858baa0850f3b0ab620c53380f256e',
+  'cros_components_revision': '2f0cb6f5ec3c18128f65fecdc50f5aafb9209a73',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -770,7 +770,7 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    'b1e22352ca1cb924399d685bcbaeb7e753240ee0',
+    '1d282a30a4c94f4246ac6789d8e62ce7b4e44d93',
     'condition': 'checkout_android and checkout_src_internal',
   },
 
@@ -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' + '@' + 'f584941aba199d17623d55f2776e4d48d6d6f296',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '7a93cfb8a4ad1757a01dc6f97910447f94064918',
     'condition': 'checkout_src_internal',
   },
 
@@ -1789,7 +1789,7 @@
       'dep_type': 'cipd',
   },
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@2b7580bdd49e1c60961d7632e5898cc33ef57fc9',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@8684e40a5830c3c0a5fabc96659c9c9f801ccaa5',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907',
@@ -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@2cd58e3be41167469f9d6a06fcd2bc34afa11b3f',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f21484555fd556492c789efc61ee7d504b079cc8',
     'condition': 'checkout_src_internal',
   },
 
@@ -1951,7 +1951,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'POjKkaPuQR_5RLeidEAk0ErMb1Vgbwq_Ckfv_I-SRFUC',
+        'version': 'LidcYHe6Cu4snY6o3PF_56OROikaMEOMF-h3Z0HjBMQC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/aw_feature_list.cc b/android_webview/browser/aw_feature_list.cc
index ec15fe36..4a8c126a 100644
--- a/android_webview/browser/aw_feature_list.cc
+++ b/android_webview/browser/aw_feature_list.cc
@@ -33,6 +33,7 @@
     &features::kWebViewXRequestedWithHeaderControl,
     &features::kWebViewXRequestedWithHeaderManifestAllowList,
     &features::kWebViewRestrictThirdPartyContent,
+    &features::kWebViewUmaUploadQualityOfServiceSetToDefault,
 };
 
 const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) {
diff --git a/android_webview/common/aw_features.cc b/android_webview/common/aw_features.cc
index 5e1a04bc..64c16d9 100644
--- a/android_webview/common/aw_features.cc
+++ b/android_webview/common/aw_features.cc
@@ -155,5 +155,11 @@
              "WebViewImageDrag",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
+// This enables uploading UMA data with a higher frequency.
+// This Feature is checked and used in downstream internal code.
+BASE_FEATURE(kWebViewUmaUploadQualityOfServiceSetToDefault,
+             "WebViewUmaUploadQualityOfServiceSetToDefault",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 }  // namespace features
 }  // namespace android_webview
diff --git a/android_webview/common/aw_features.h b/android_webview/common/aw_features.h
index a30ecaa..b140707 100644
--- a/android_webview/common/aw_features.h
+++ b/android_webview/common/aw_features.h
@@ -40,6 +40,7 @@
 BASE_DECLARE_FEATURE(kWebViewXRequestedWithHeaderControl);
 extern const base::FeatureParam<int> kWebViewXRequestedWithHeaderMode;
 BASE_DECLARE_FEATURE(kWebViewXRequestedWithHeaderManifestAllowList);
+BASE_DECLARE_FEATURE(kWebViewUmaUploadQualityOfServiceSetToDefault);
 
 }  // namespace features
 }  // namespace android_webview
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index 42a708a..ea329f5 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -352,6 +352,8 @@
                             + " in a background thread or on the main thread."),
             Flag.baseFeature(ContentFeatures.MAIN_THREAD_COMPOSITING_PRIORITY,
                     "When enabled runs the main thread at compositing priority."),
+            Flag.baseFeature(AwFeatures.WEBVIEW_UMA_UPLOAD_QUALITY_OF_SERVICE_SET_TO_DEFAULT,
+                    "If enabled, the frequency to upload UMA is increased."),
             // Add new commandline switches and features above. The final entry should have a
             // trailing comma for cleaner diffs.
     };
diff --git a/ash/login/LOGIN_LOCK_OWNERS b/ash/login/LOGIN_LOCK_OWNERS
index 62a03614..331cdca6 100644
--- a/ash/login/LOGIN_LOCK_OWNERS
+++ b/ash/login/LOGIN_LOCK_OWNERS
@@ -5,6 +5,7 @@
 
 #Secondary (in CET)
 rrsilva@google.com
+dkuzmin@google.com
 
 # Secondary (in PST)
 tbarzic@chromium.org
diff --git a/ash/system/time/calendar_model_unittest.cc b/ash/system/time/calendar_model_unittest.cc
index bbbcb58..4a8c797 100644
--- a/ash/system/time/calendar_model_unittest.cc
+++ b/ash/system/time/calendar_model_unittest.cc
@@ -492,6 +492,9 @@
 TEST_F(CalendarModelTest, ChangeTimeDifference) {
   // Sets the timezone to "America/Los_Angeles".
   ash::system::ScopedTimezoneSettings timezone_settings(u"America/Los_Angeles");
+  calendar_test_utils::ScopedLibcTimeZone scoped_libc_timezone(
+      "America/Los_Angeles");
+  ASSERT_TRUE(scoped_libc_timezone.is_success());
 
   // Set today to`kStartTime0`.
   SetTodayFromStr(kStartTime0);
diff --git a/ash/system/time/calendar_up_next_view.cc b/ash/system/time/calendar_up_next_view.cc
index ebab26a..bc636f1 100644
--- a/ash/system/time/calendar_up_next_view.cc
+++ b/ash/system/time/calendar_up_next_view.cc
@@ -237,6 +237,8 @@
   content_view_->RemoveAllChildViews();
 
   const auto now = base::Time::NowFromSystemTime();
+  const auto [selected_date_midnight, selected_date_midnight_utc] =
+      calendar_utils::GetMidnight(now);
 
   // Single events are displayed filling the whole width of the tray.
   if (events.size() == 1) {
@@ -244,7 +246,8 @@
     auto* child_view = content_view_->AddChildView(
         std::make_unique<CalendarEventListItemViewJelly>(
             calendar_view_controller_,
-            SelectedDateParams{now, now.UTCMidnight(), now.LocalMidnight()},
+            SelectedDateParams{now, selected_date_midnight,
+                               selected_date_midnight_utc},
             /*event=*/event, /*round_top_corners=*/true,
             /*round_bottom_corners=*/true,
             /*max_width=*/kFullWidth));
@@ -264,7 +267,8 @@
     content_view_->AddChildView(
         std::make_unique<CalendarEventListItemViewJelly>(
             calendar_view_controller_,
-            SelectedDateParams{now, now.UTCMidnight(), now.LocalMidnight()},
+            SelectedDateParams{now, selected_date_midnight,
+                               selected_date_midnight_utc},
             /*event=*/event, /*round_top_corners=*/true,
             /*round_bottom_corners=*/true,
             /*max_width=*/kMaxItemWidth));
diff --git a/ash/system/time/calendar_utils.cc b/ash/system/time/calendar_utils.cc
index 949a091..8f3a1627 100644
--- a/ash/system/time/calendar_utils.cc
+++ b/ash/system/time/calendar_utils.cc
@@ -364,6 +364,14 @@
   return std::make_tuple(start_time, end_time);
 }
 
+const std::tuple<base::Time, base::Time> GetMidnight(const base::Time time) {
+  const auto time_difference = GetTimeDifference(time);
+  const auto utc_midnight = (time + time_difference).UTCMidnight();
+  const auto local_midnight = utc_midnight - time_difference;
+
+  return std::make_tuple(utc_midnight, local_midnight);
+}
+
 }  // namespace calendar_utils
 
 }  // namespace ash
diff --git a/ash/system/time/calendar_utils.h b/ash/system/time/calendar_utils.h
index bbaf2a2d..466652f 100644
--- a/ash/system/time/calendar_utils.h
+++ b/ash/system/time/calendar_utils.h
@@ -285,6 +285,16 @@
     const base::Time& selected_date_midnight,
     const base::Time& selected_date_midnight_utc);
 
+// Calculates the UTC and local midnight times for the given `base::Time`,
+// rounding to the correct midnight for the given timezone. This avoids an
+// issue with `base::Time::UTCMidnight()`, which will (in certain ahead
+// timezones) return the previous days midnight.
+// For example, if the current time is 19 Jan 2023 00:10 in GMT+13, then
+// `GetUTCMidnight` will return 19 Jan 2023 00:00 UTC.
+// `base::Time::UTCMidnight()` will round down to 18 Jan 2023 00:00 UTC.
+ASH_EXPORT const std::tuple<base::Time, base::Time> GetMidnight(
+    const base::Time);
+
 }  // namespace calendar_utils
 
 }  // namespace ash
diff --git a/ash/system/time/calendar_utils_unittest.cc b/ash/system/time/calendar_utils_unittest.cc
index 8ed0e0e..d99e6c36 100644
--- a/ash/system/time/calendar_utils_unittest.cc
+++ b/ash/system/time/calendar_utils_unittest.cc
@@ -8,6 +8,7 @@
 #include "ash/system/time/date_helper.h"
 #include "ash/test/ash_test_base.h"
 #include "base/i18n/rtl.h"
+#include "base/ranges/algorithm.h"
 #include "base/time/time.h"
 #include "chromeos/ash/components/settings/scoped_timezone_settings.h"
 
@@ -450,4 +451,76 @@
   SetDefaultLocale("en");
 }
 
+struct TimezoneTestParams {
+  const char* midnight_string;
+  const char* midnight_utc_string;
+  const std::u16string timezone_id;
+  const std::string timezone;
+};
+
+class CalendarUtilsMidnightTest
+    : public CalendarUtilsUnitTest,
+      public testing::WithParamInterface<TimezoneTestParams> {
+ public:
+  const char* GetMidnightString() { return GetParam().midnight_string; }
+  const char* GetMidnightUTCString() { return GetParam().midnight_utc_string; }
+  const std::u16string GetTimezoneId() { return GetParam().timezone_id; }
+  const std::string GetTimezone() { return GetParam().timezone; }
+
+  // testing::Test:
+  void SetUp() override { CalendarUtilsUnitTest::SetUp(); }
+
+  void TearDown() override { CalendarUtilsUnitTest::TearDown(); }
+};
+
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    CalendarUtilsMidnightTest,
+    testing::Values(
+        // GMT-8 Timezone.
+        TimezoneTestParams{"19 Jan 2023 00:00 UTC", "19 Jan 2023 08:00 UTC",
+                           u"America/Los_Angeles", "America/Los_Angeles"},
+        // GMT Timezone.
+        TimezoneTestParams{"19 Jan 2023 00:00 UTC", "19 Jan 2023 00:00 UTC",
+                           u"Europe/London", "Europe/London"},
+        // GMT+13 Timezone. Based on the `selected_date_string`, midnight will
+        // be the following day in this timezone.
+        TimezoneTestParams{"20 Jan 2023 00:00 UTC", "19 Jan 2023 11:00 UTC",
+                           u"Pacific/Auckland", "Pacific/Auckland"}),
+    [](const testing::TestParamInfo<CalendarUtilsMidnightTest::ParamType>&
+           info) {
+      std::string name = info.param.timezone;
+      base::ranges::replace_if(
+          name, [](char c) { return !std::isalnum(c); }, '_');
+      return name;
+    });
+
+TEST_P(CalendarUtilsMidnightTest,
+       GetCorrectLocalAndUtcMidnightAcrossTimezones) {
+  // 12:00 UTC will fall into a different day in far ahead timezones so we
+  // anchor here.
+  const char* now_string = "19 Jan 2023 12:00 UTC";
+  const char* expected_midnight_string = GetMidnightString();
+  const char* expected_midnight_utc_string = GetMidnightUTCString();
+
+  // Set timezone to GMT+13.
+  ash::system::ScopedTimezoneSettings timezone_settings(GetTimezoneId());
+  calendar_test_utils::ScopedLibcTimeZone scoped_libc_timezone(GetTimezone());
+  ASSERT_TRUE(scoped_libc_timezone.is_success());
+
+  // Convert expected string values to base::Time.
+  base::Time now, expected_midnight, expected_midnight_utc;
+  EXPECT_TRUE(base::Time::FromUTCString(now_string, &now));
+  EXPECT_TRUE(
+      base::Time::FromUTCString(expected_midnight_string, &expected_midnight));
+  EXPECT_TRUE(base::Time::FromUTCString(expected_midnight_utc_string,
+                                        &expected_midnight_utc));
+
+  const auto [actual_midnight, actual_midnight_utc] =
+      calendar_utils::GetMidnight(now);
+
+  EXPECT_EQ(expected_midnight, actual_midnight);
+  EXPECT_EQ(expected_midnight_utc, actual_midnight_utc);
+}
+
 }  // namespace ash
diff --git a/ash/system/time/calendar_view_controller.cc b/ash/system/time/calendar_view_controller.cc
index 1f6fc57c..b71cc6c5 100644
--- a/ash/system/time/calendar_view_controller.cc
+++ b/ash/system/time/calendar_view_controller.cc
@@ -186,10 +186,8 @@
   selected_date_row_index_ = row_index;
   expanded_row_index_ = row_index;
 
-  base::TimeDelta time_difference =
-      calendar_utils::GetTimeDifference(selected_date);
-  selected_date_midnight_ = (selected_date + time_difference).UTCMidnight();
-  selected_date_midnight_utc_ = selected_date_midnight_ - time_difference;
+  std::tie(selected_date_midnight_, selected_date_midnight_utc_) =
+      calendar_utils::GetMidnight(selected_date);
 
   // Notify observers.
   for (auto& observer : observers_)
diff --git a/base/functional/bind_internal.h b/base/functional/bind_internal.h
index ab58eac..ea8808f 100644
--- a/base/functional/bind_internal.h
+++ b/base/functional/bind_internal.h
@@ -212,6 +212,18 @@
       "base/functional/disallow_unretained.h for alternatives.");
 
   explicit UnretainedRefWrapper(T& o) : ref_(o) {}
+
+  // Trick to only instantiate these constructors if they are used. Otherwise,
+  // instantiating UnretainedWrapper with a T that is not supported by
+  // raw_ref would trigger raw_ref<T>'s static_assert.
+  //
+  // This is only needed when <T, Trait, true> specialization isn't compiled in
+  // when MTECheckedPtr is enabled.
+  template <typename U = T, typename Traits>
+  explicit UnretainedRefWrapper(const raw_ref<U, Traits>& o) : ref_(o.get()) {}
+  template <typename U = T, typename Traits>
+  explicit UnretainedRefWrapper(raw_ref<U, Traits>&& o) : ref_(o.get()) {}
+
   T& get() const { return ref_; }
 
  private:
diff --git a/base/memory/raw_ptr.cc b/base/memory/raw_ptr.cc
index 2dbab45..1cb62080 100644
--- a/base/memory/raw_ptr.cc
+++ b/base/memory/raw_ptr.cc
@@ -134,15 +134,12 @@
 #if BUILDFLAG(USE_ASAN_UNOWNED_PTR)
 
 #include <sanitizer/asan_interface.h>
+#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h"
 #include "base/allocator/partition_allocator/partition_alloc_base/debug/alias.h"
-#include "base/compiler_specific.h"
-#include "base/debug/asan_service.h"
-#include "base/memory/raw_ptr_asan_service.h"
-#include "base/process/process.h"
 
 namespace base::internal {
 
-NO_SANITIZE("address")
+PA_NO_SANITIZE("address")
 bool AsanUnownedPtrImpl::EndOfAliveAllocation(const volatile void* ptr) {
   uintptr_t address = reinterpret_cast<uintptr_t>(ptr);
   return __asan_region_is_poisoned(reinterpret_cast<void*>(address), 1) &&
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java
index 42f2b10e..587365b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java
@@ -108,9 +108,12 @@
             GURL bottomSheetUrl = new GURL(builder.toString());
             GURL fullPageUrl = new GURL(url);
 
-            createEphemeralTabObserver(bottomSheetUrl);
+            if (ChromeFeatureList.isEnabled(
+                        ChromeFeatureList.PAGE_INFO_ABOUT_THIS_SITE_IMPROVED_BOTTOMSHEET)) {
+                createEphemeralTabObserver(bottomSheetUrl);
+                mEphemeralTabCoordinatorSupplier.get().addObserver(mEphemeralTabObserver);
+            }
 
-            mEphemeralTabCoordinatorSupplier.get().addObserver(mEphemeralTabObserver);
             mEphemeralTabCoordinatorSupplier.get().requestOpenSheetWithFullPageUrl(
                     bottomSheetUrl, fullPageUrl, getTitle(), /*isIncognito=*/false);
 
diff --git a/chrome/app/chrome_command_ids.h b/chrome/app/chrome_command_ids.h
index 21d0b8b..30bb919 100644
--- a/chrome/app/chrome_command_ids.h
+++ b/chrome/app/chrome_command_ids.h
@@ -473,6 +473,8 @@
 #define IDC_DEBUG_PRINT_VIEW_TREE_DETAILS 52512
 // Please leave a gap here for new debug commands.
 
+// Autofill feedback.
+#define IDC_CONTENT_CONTEXT_AUTOFILL_FEEDBACK 52990
 // Autofill context menu commands
 #define IDC_CONTENT_CONTEXT_AUTOFILL_CUSTOM_FIRST 53000
 #define IDC_CONTENT_CONTEXT_AUTOFILL_CUSTOM_LAST 53250
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index fcd3102e..788b46b6 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -805,6 +805,9 @@
           <message name="IDS_CONTENT_CONTEXT_OPEN_WITH_APP" desc="The label for an item in the content area context menu for opening a link with an app.">
             Open with <ph name="APP">$1<ex>Hangouts</ex></ph>
           </message>
+          <message name="IDS_CONTENT_CONTEXT_AUTOFILL_FEEDBACK" desc="The name of the Autofill Feedback command in the content area context menu">
+           Provide Autofill feedback
+          </message>
         </if>
         <if expr="use_titlecase">
           <message name="IDS_CONTENT_CONTEXT_BACK" desc="In Title Case: The name of the Back command in the content area context menu">
@@ -1071,6 +1074,9 @@
           <message name="IDS_CONTENT_CONTEXT_GENERATEPASSWORD" desc="In Title Case: The name of the Generate Password command in the content area context menu">
             Suggest Password...
           </message>
+          <message name="IDS_CONTENT_CONTEXT_AUTOFILL_FEEDBACK" desc="The name of the Autofill Feedback command in the content area context menu">
+           Provide Autofill Feedback
+          </message>
         </if>
 
         <message name="IDS_SHARE_MENU_TITLE" desc="The label of the menu item used to share content (links, images, etc) with others.">
@@ -10367,6 +10373,11 @@
       <message name="IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE" desc="This string appears as a subheading on a screen, and it asks users if they want to turn on sync. This string explains to users that they can back up their Chrome data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. If there is no natural translation for the word 'stuff' in your language, the word can be translated as 'data' or similar. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting.">
         Back up your stuff and use it on any device
       </message>
+      <if expr="chromeos_lacros">
+        <message name="IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS" desc="This string appears as a subheading on a screen, and it asks users if they want to turn on sync. This string explains to users that they can back up their Chrome browser data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. If there is no natural translation for the word 'stuff' in your language, the word can be translated as 'data' or similar. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting. Please keep translations consistent with TC 7137558043921529662 (Windows, Mac, Linux) and TC 3833960754549650885 (iOS).">
+          Back up your browser stuff and use it on any device
+        </message>
+      </if>
       <message name="IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_SIGNIN_INTERCEPT_V2" desc="This string appears as a subheading on a pop-up dialog, and it asks users if they want to turn on sync. This string explains to users that they can back up their Chrome data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. If there is no natural translation for the word 'stuff' in your language, the word can be translated as 'data' or similar. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting.">
         Turn on sync to back up your stuff and use it on any device
       </message>
diff --git a/chrome/app/generated_resources_grd/IDS_CONTENT_CONTEXT_AUTOFILL_FEEDBACK.png.sha1 b/chrome/app/generated_resources_grd/IDS_CONTENT_CONTEXT_AUTOFILL_FEEDBACK.png.sha1
new file mode 100644
index 0000000..a6856930
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_CONTENT_CONTEXT_AUTOFILL_FEEDBACK.png.sha1
@@ -0,0 +1 @@
+da418cd801b7153b776986a679ff9685fcb5b272
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS.png.sha1
new file mode 100644
index 0000000..37558a88
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS.png.sha1
@@ -0,0 +1 @@
+1a41249452914cb2109f7b289fa512f289f2fcce
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 39946af..ed1de0f 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -8002,60 +8002,6 @@
 
   if (is_chromeos_ash) {
     sources += [
-      "ash/accessibility/caret_bounds_changed_waiter.cc",
-      "ash/accessibility/caret_bounds_changed_waiter.h",
-      "ash/accessibility/html_test_utils.cc",
-      "ash/accessibility/html_test_utils.h",
-      "ash/accessibility/service/fake_accessibility_service.cc",
-      "ash/accessibility/service/fake_accessibility_service.h",
-      "ash/app_list/test/chrome_app_list_test_support.cc",
-      "ash/app_list/test/chrome_app_list_test_support.h",
-      "ash/app_list/test/test_app_list_controller.cc",
-      "ash/app_list/test/test_app_list_controller.h",
-      "ash/app_list/test/test_app_list_controller_delegate.cc",
-      "ash/app_list/test/test_app_list_controller_delegate.h",
-      "ash/app_mode/fake_cws.cc",
-      "ash/app_mode/fake_cws.h",
-      "ash/arc/extensions/fake_arc_support.cc",
-      "ash/arc/extensions/fake_arc_support.h",
-      "ash/file_manager/fake_disk_mount_manager.cc",
-      "ash/file_manager/fake_disk_mount_manager.h",
-      "ash/input_method/mock_candidate_window_controller.cc",
-      "ash/input_method/mock_candidate_window_controller.h",
-      "ash/input_method/mock_input_method_engine.cc",
-      "ash/input_method/mock_input_method_engine.h",
-      "ash/input_method/mock_input_method_manager_impl.cc",
-      "ash/input_method/mock_input_method_manager_impl.h",
-      "ash/login/screens/mock_device_disabled_screen_view.cc",
-      "ash/login/screens/mock_device_disabled_screen_view.h",
-      "ash/login/session/user_session_manager_test_api.cc",
-      "ash/login/session/user_session_manager_test_api.h",
-      "ash/login/test/oobe_configuration_waiter.cc",
-      "ash/login/test/oobe_configuration_waiter.h",
-      "ash/login/ui/fake_login_display_host.cc",
-      "ash/login/ui/fake_login_display_host.h",
-      "ash/login/ui/mock_login_display.cc",
-      "ash/login/ui/mock_login_display.h",
-      "ash/login/ui/mock_login_display_host.cc",
-      "ash/login/ui/mock_login_display_host.h",
-      "ash/login/ui/mock_signin_ui.cc",
-      "ash/login/ui/mock_signin_ui.h",
-      "ash/login/users/avatar/mock_user_image_manager.cc",
-      "ash/login/users/avatar/mock_user_image_manager.h",
-      "ash/login/users/fake_supervised_user_manager.cc",
-      "ash/login/users/fake_supervised_user_manager.h",
-      "ash/login/users/mock_user_manager.cc",
-      "ash/login/users/mock_user_manager.h",
-      "ash/net/network_portal_detector_test_utils.cc",
-      "ash/net/network_portal_detector_test_utils.h",
-      "ash/policy/arc/fake_android_management_client.cc",
-      "ash/policy/arc/fake_android_management_client.h",
-      "ash/policy/core/device_policy_builder.cc",
-      "ash/policy/core/device_policy_builder.h",
-      "ash/policy/core/fake_device_cloud_policy_manager.cc",
-      "ash/policy/core/fake_device_cloud_policy_manager.h",
-      "ash/policy/external_data/cloud_external_data_manager_base_test_util.cc",
-      "ash/policy/external_data/cloud_external_data_manager_base_test_util.h",
       "net/fake_nss_service.cc",
       "net/fake_nss_service.h",
       "sharesheet/sharesheet_test_util.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 7e760950..b1b1a9be 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -6226,28 +6226,28 @@
 #if BUILDFLAG(IS_CHROMEOS)
     {"allow-dsp-based-aec", flag_descriptions::kCrOSDspBasedAecAllowedName,
      flag_descriptions::kCrOSDspBasedAecAllowedDescription, kOsCrOS | kOsLacros,
-     FEATURE_VALUE_TYPE(features::kCrOSDspBasedAecAllowed)},
+     FEATURE_VALUE_TYPE(media::kCrOSDspBasedAecAllowed)},
     {"allow-dsp-based-ns", flag_descriptions::kCrOSDspBasedNsAllowedName,
      flag_descriptions::kCrOSDspBasedNsAllowedDescription, kOsCrOS | kOsLacros,
-     FEATURE_VALUE_TYPE(features::kCrOSDspBasedNsAllowed)},
+     FEATURE_VALUE_TYPE(media::kCrOSDspBasedNsAllowed)},
     {"allow-dsp-based-agc", flag_descriptions::kCrOSDspBasedAgcAllowedName,
      flag_descriptions::kCrOSDspBasedAgcAllowedDescription, kOsCrOS | kOsLacros,
-     FEATURE_VALUE_TYPE(features::kCrOSDspBasedAgcAllowed)},
+     FEATURE_VALUE_TYPE(media::kCrOSDspBasedAgcAllowed)},
     {"enforce-system-aec", flag_descriptions::kCrOSEnforceSystemAecName,
      flag_descriptions::kCrOSEnforceSystemAecDescription, kOsCrOS | kOsLacros,
-     FEATURE_VALUE_TYPE(features::kCrOSEnforceSystemAec)},
+     FEATURE_VALUE_TYPE(media::kCrOSEnforceSystemAec)},
     {"enforce-system-aec-agc", flag_descriptions::kCrOSEnforceSystemAecAgcName,
      flag_descriptions::kCrOSEnforceSystemAecAgcDescription,
      kOsCrOS | kOsLacros,
-     FEATURE_VALUE_TYPE(features::kCrOSEnforceSystemAecAgc)},
+     FEATURE_VALUE_TYPE(media::kCrOSEnforceSystemAecAgc)},
     {"enforce-system-aec-ns-agc",
      flag_descriptions::kCrOSEnforceSystemAecNsAgcName,
      flag_descriptions::kCrOSEnforceSystemAecNsAgcDescription,
      kOsCrOS | kOsLacros,
-     FEATURE_VALUE_TYPE(features::kCrOSEnforceSystemAecNsAgc)},
+     FEATURE_VALUE_TYPE(media::kCrOSEnforceSystemAecNsAgc)},
     {"enforce-system-aec-ns", flag_descriptions::kCrOSEnforceSystemAecNsName,
      flag_descriptions::kCrOSEnforceSystemAecNsDescription, kOsCrOS | kOsLacros,
-     FEATURE_VALUE_TYPE(features::kCrOSEnforceSystemAecNs)},
+     FEATURE_VALUE_TYPE(media::kCrOSEnforceSystemAecNs)},
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -7171,6 +7171,11 @@
     {"page-info-store-info", flag_descriptions::kPageInfoStoreInfoName,
      flag_descriptions::kPageInfoStoreInfoDescription, kOsAndroid,
      FEATURE_VALUE_TYPE(page_info::kPageInfoStoreInfo)},
+    {"page-info-about-this-site-improved-bottomsheet",
+     flag_descriptions::kPageInfoAboutThisSiteImprovedBottomSheetName,
+     flag_descriptions::kPageInfoAboutThisSiteImprovedBottomSheetDescription,
+     kOsAndroid,
+     FEATURE_VALUE_TYPE(page_info::kPageInfoAboutThisSiteImprovedBottomSheet)},
 #endif  // BUILDFLAG(IS_ANDROID)
 
 #if !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/apps/app_service/BUILD.gn b/chrome/browser/apps/app_service/BUILD.gn
index 1130b2f..69d8067 100644
--- a/chrome/browser/apps/app_service/BUILD.gn
+++ b/chrome/browser/apps/app_service/BUILD.gn
@@ -316,8 +316,9 @@
     "app_service_test.h",
   ]
 
+  public_deps = [ ":app_service" ]
+
   deps = [
-    ":app_service",
     "//build:chromeos_buildflags",
     "//chrome/test:test_support",
     "//components/services/app_service/public/cpp:app_types",
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
index 04dd9acd..d2ab3b5c 100644
--- a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
+++ b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
@@ -651,23 +651,12 @@
   if (app_id == arc::kPlayStoreAppId)
     return true;
 
-  // If lacros chrome apps is enabled, a small list of extension apps or
-  // extensions on ash extension keeplist is allowed to run in both ash and
-  // lacros, don't publish such app or extension if it is blocked for app
-  // service in ash.
-  if (crosapi::browser_util::IsLacrosChromeAppsEnabled()) {
-    if (extensions::ExtensionAppRunsInBothOSAndStandaloneBrowser(app_id) &&
-        extensions::ExtensionAppBlockListedForAppServiceInOS(app_id)) {
-      return true;
-    }
-
-    if (extensions::ExtensionRunsInBothOSAndStandaloneBrowser(app_id) &&
-        extensions::ExtensionBlockListedForAppServiceInOS(app_id)) {
-      return true;
-    }
-  }
-
-  return false;
+  // If an extension runs in both ash and lacros, then don't publish it as that
+  // would conflict with lacros publishing it. This path is used for both
+  // extensions and extension apps.
+  return crosapi::browser_util::IsLacrosChromeAppsEnabled() &&
+         (extensions::ExtensionRunsInBothOSAndStandaloneBrowser(app_id) ||
+          extensions::ExtensionAppRunsInBothOSAndStandaloneBrowser(app_id));
 }
 
 void ExtensionAppsChromeOs::UpdateShowInFields(const std::string& app_id) {
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 645bd0e..c30c9895 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -2808,6 +2808,8 @@
     "printing/usb_printer_util.h",
     "printing/zeroconf_printer_detector.cc",
     "printing/zeroconf_printer_detector.h",
+    "privacy_hub/privacy_hub_hats_trigger.cc",
+    "privacy_hub/privacy_hub_hats_trigger.h",
     "privacy_hub/privacy_hub_util.cc",
     "privacy_hub/privacy_hub_util.h",
     "process_snapshot_server.cc",
@@ -4171,16 +4173,62 @@
 static_library("test_support") {
   testonly = true
   sources = [
+    "accessibility/caret_bounds_changed_waiter.cc",
+    "accessibility/caret_bounds_changed_waiter.h",
+    "accessibility/html_test_utils.cc",
+    "accessibility/html_test_utils.h",
+    "accessibility/service/fake_accessibility_service.cc",
+    "accessibility/service/fake_accessibility_service.h",
+    "accessibility/speech_monitor.cc",
+    "accessibility/speech_monitor.h",
     "android_sms/fake_android_sms_app_manager.cc",
     "android_sms/fake_android_sms_app_manager.h",
     "android_sms/fake_android_sms_app_setup_controller.cc",
     "android_sms/fake_android_sms_app_setup_controller.h",
     "android_sms/fake_connection_establisher.cc",
     "android_sms/fake_connection_establisher.h",
+    "app_list/app_list_test_util.cc",
+    "app_list/app_list_test_util.h",
+    "app_list/arc/arc_app_test.cc",
+    "app_list/arc/arc_app_test.h",
+    "app_list/arc/mock_arc_app_list_prefs_observer.cc",
+    "app_list/arc/mock_arc_app_list_prefs_observer.h",
+    "app_list/search/app_search_provider_test_base.cc",
+    "app_list/search/app_search_provider_test_base.h",
+    "app_list/search/test/ranking_test_util.cc",
+    "app_list/search/test/ranking_test_util.h",
+    "app_list/search/test/search_controller_test_util.cc",
+    "app_list/search/test/search_controller_test_util.h",
+    "app_list/search/test/search_metrics_test_util.cc",
+    "app_list/search/test/search_metrics_test_util.h",
+    "app_list/search/test/test_ranker_manager.cc",
+    "app_list/search/test/test_ranker_manager.h",
+    "app_list/search/test/test_result.cc",
+    "app_list/search/test/test_result.h",
+    "app_list/search/test/test_search_controller.cc",
+    "app_list/search/test/test_search_controller.h",
+    "app_list/search/test/test_search_provider.cc",
+    "app_list/search/test/test_search_provider.h",
+    "app_list/test/app_list_syncable_service_test_base.cc",
+    "app_list/test/app_list_syncable_service_test_base.h",
+    "app_list/test/chrome_app_list_test_support.cc",
+    "app_list/test/chrome_app_list_test_support.h",
+    "app_list/test/fake_app_list_model_updater.cc",
+    "app_list/test/fake_app_list_model_updater.h",
+    "app_list/test/test_app_list_controller.cc",
+    "app_list/test/test_app_list_controller.h",
+    "app_list/test/test_app_list_controller_delegate.cc",
+    "app_list/test/test_app_list_controller_delegate.h",
+    "app_mode/fake_cws.cc",
+    "app_mode/fake_cws.h",
     "app_mode/test_kiosk_extension_builder.cc",
     "app_mode/test_kiosk_extension_builder.h",
     "app_mode/web_app/mock_web_kiosk_app_launcher.cc",
     "app_mode/web_app/mock_web_kiosk_app_launcher.h",
+    "arc/extensions/fake_arc_support.cc",
+    "arc/extensions/fake_arc_support.h",
+    "arc/tracing/arc_app_performance_tracing_test_helper.cc",
+    "arc/tracing/arc_app_performance_tracing_test_helper.h",
     "attestation/fake_soft_bind_attestation_flow.cc",
     "attestation/fake_soft_bind_attestation_flow.h",
     "attestation/mock_enrollment_certificate_uploader.cc",
@@ -4218,6 +4266,14 @@
     "cert_provisioning/mock_cert_provisioning_scheduler.h",
     "cert_provisioning/mock_cert_provisioning_worker.cc",
     "cert_provisioning/mock_cert_provisioning_worker.h",
+    "child_accounts/child_account_test_utils.cc",
+    "child_accounts/child_account_test_utils.h",
+    "child_accounts/parent_access_code/parent_access_test_utils.cc",
+    "child_accounts/parent_access_code/parent_access_test_utils.h",
+    "child_accounts/time_limit_test_utils.cc",
+    "child_accounts/time_limit_test_utils.h",
+    "child_accounts/time_limits/app_time_limits_allowlist_policy_test_utils.cc",
+    "child_accounts/time_limits/app_time_limits_allowlist_policy_test_utils.h",
     "child_accounts/time_limits/app_time_limits_policy_builder.cc",
     "child_accounts/time_limits/app_time_limits_policy_builder.h",
     "crostini/ansible/ansible_management_test_helper.cc",
@@ -4242,15 +4298,31 @@
     "drive/drivefs_test_support.h",
     "extensions/test_external_cache.cc",
     "extensions/test_external_cache.h",
+    "file_manager/fake_disk_mount_manager.cc",
+    "file_manager/fake_disk_mount_manager.h",
+    "file_manager/file_manager_test_util.cc",
+    "file_manager/file_manager_test_util.h",
     "file_manager/mount_test_util.cc",
     "file_manager/mount_test_util.h",
+    "file_system_provider/fake_extension_provider.cc",
+    "file_system_provider/fake_extension_provider.h",
+    "file_system_provider/fake_provided_file_system.cc",
+    "file_system_provider/fake_provided_file_system.h",
     "guest_os/dbus_test_helper.cc",
     "guest_os/dbus_test_helper.h",
+    "input_method/mock_candidate_window_controller.cc",
+    "input_method/mock_candidate_window_controller.h",
+    "input_method/mock_input_method_engine.cc",
+    "input_method/mock_input_method_engine.h",
+    "input_method/mock_input_method_manager_impl.cc",
+    "input_method/mock_input_method_manager_impl.h",
     "input_method/stub_input_method_engine_observer.h",
     "lock_screen_apps/fake_lock_screen_profile_creator.cc",
     "lock_screen_apps/fake_lock_screen_profile_creator.h",
     "login/demo_mode/demo_mode_test_helper.cc",
     "login/demo_mode/demo_mode_test_helper.h",
+    "login/demo_mode/demo_setup_test_utils.cc",
+    "login/demo_mode/demo_setup_test_utils.h",
     "login/enrollment/enterprise_enrollment_helper_mock.cc",
     "login/enrollment/enterprise_enrollment_helper_mock.h",
     "login/enrollment/mock_enrollment_screen.cc",
@@ -4259,6 +4331,8 @@
     "login/mock_network_state_helper.h",
     "login/reporting/login_logout_reporter_test_delegate.cc",
     "login/reporting/login_logout_reporter_test_delegate.h",
+    "login/screens/mock_device_disabled_screen_view.cc",
+    "login/screens/mock_device_disabled_screen_view.h",
     "login/screens/mock_error_screen.cc",
     "login/screens/mock_error_screen.h",
     "login/screens/mock_network_screen.cc",
@@ -4269,14 +4343,24 @@
     "login/screens/mock_welcome_screen.h",
     "login/screens/recommend_apps/fake_recommend_apps_fetcher_delegate.cc",
     "login/screens/recommend_apps/fake_recommend_apps_fetcher_delegate.h",
+    "login/session/user_session_manager_test_api.cc",
+    "login/session/user_session_manager_test_api.h",
     "login/test/cryptohome_mixin.cc",
     "login/test/cryptohome_mixin.h",
+    "login/test/device_state_mixin.cc",
+    "login/test/device_state_mixin.h",
     "login/test/dialog_window_waiter.cc",
     "login/test/dialog_window_waiter.h",
+    "login/test/embedded_policy_test_server_mixin.cc",
+    "login/test/embedded_policy_test_server_mixin.h",
     "login/test/embedded_test_server_setup_mixin.cc",
     "login/test/embedded_test_server_setup_mixin.h",
+    "login/test/js_checker.cc",
+    "login/test/js_checker.h",
     "login/test/kiosk_test_helpers.cc",
     "login/test/kiosk_test_helpers.h",
+    "login/test/local_state_mixin.cc",
+    "login/test/local_state_mixin.h",
     "login/test/logged_in_user_mixin.cc",
     "login/test/logged_in_user_mixin.h",
     "login/test/login_manager_mixin.cc",
@@ -4285,26 +4369,54 @@
     "login/test/login_or_lock_screen_visible_waiter.h",
     "login/test/oobe_auth_page_waiter.cc",
     "login/test/oobe_auth_page_waiter.h",
+    "login/test/oobe_configuration_waiter.cc",
+    "login/test/oobe_configuration_waiter.h",
     "login/test/oobe_screen_exit_waiter.cc",
     "login/test/oobe_screen_exit_waiter.h",
     "login/test/oobe_screen_waiter.cc",
     "login/test/oobe_screen_waiter.h",
     "login/test/oobe_screens_utils.cc",
     "login/test/oobe_screens_utils.h",
+    "login/test/policy_test_server_constants.h",
     "login/test/profile_prepared_waiter.cc",
     "login/test/profile_prepared_waiter.h",
     "login/test/scoped_help_app_for_test.cc",
     "login/test/scoped_help_app_for_test.h",
+    "login/test/scoped_policy_update.cc",
+    "login/test/scoped_policy_update.h",
     "login/test/session_flags_manager.cc",
     "login/test/session_flags_manager.h",
     "login/test/session_manager_state_waiter.cc",
     "login/test/session_manager_state_waiter.h",
+    "login/test/test_condition_waiter.h",
+    "login/test/test_predicate_waiter.cc",
+    "login/test/test_predicate_waiter.h",
     "login/test/user_policy_mixin.cc",
     "login/test/user_policy_mixin.h",
     "login/test/wizard_controller_screen_exit_waiter.cc",
     "login/test/wizard_controller_screen_exit_waiter.h",
+    "login/ui/fake_login_display_host.cc",
+    "login/ui/fake_login_display_host.h",
+    "login/ui/mock_login_display.cc",
+    "login/ui/mock_login_display.h",
+    "login/ui/mock_login_display_host.cc",
+    "login/ui/mock_login_display_host.h",
+    "login/ui/mock_signin_ui.cc",
+    "login/ui/mock_signin_ui.h",
+    "login/users/avatar/fake_user_image_file_selector.cc",
+    "login/users/avatar/fake_user_image_file_selector.h",
+    "login/users/avatar/mock_user_image_manager.cc",
+    "login/users/avatar/mock_user_image_manager.h",
+    "login/users/fake_chrome_user_manager.cc",
+    "login/users/fake_chrome_user_manager.h",
+    "login/users/fake_supervised_user_manager.cc",
+    "login/users/fake_supervised_user_manager.h",
+    "login/users/mock_user_manager.cc",
+    "login/users/mock_user_manager.h",
     "login/version_updater/mock_version_updater_delegate.cc",
     "login/version_updater/mock_version_updater_delegate.h",
+    "net/network_portal_detector_test_utils.cc",
+    "net/network_portal_detector_test_utils.h",
     "platform_keys/key_permissions/fake_user_private_token_kpm_service.cc",
     "platform_keys/key_permissions/fake_user_private_token_kpm_service.h",
     "platform_keys/key_permissions/mock_key_permissions_manager.cc",
@@ -4313,14 +4425,42 @@
     "platform_keys/key_permissions/mock_key_permissions_service.h",
     "platform_keys/mock_platform_keys_service.cc",
     "platform_keys/mock_platform_keys_service.h",
+    "platform_keys/platform_keys_service_test_util.cc",
+    "platform_keys/platform_keys_service_test_util.h",
     "plugin_vm/fake_plugin_vm_features.cc",
     "plugin_vm/fake_plugin_vm_features.h",
+    "plugin_vm/plugin_vm_test_helper.cc",
+    "plugin_vm/plugin_vm_test_helper.h",
+    "policy/arc/fake_android_management_client.cc",
+    "policy/arc/fake_android_management_client.h",
+    "policy/core/device_policy_builder.cc",
+    "policy/core/device_policy_builder.h",
+    "policy/core/device_policy_cros_browser_test.cc",
+    "policy/core/device_policy_cros_browser_test.h",
+    "policy/core/device_policy_cros_test_helper.cc",
+    "policy/core/device_policy_cros_test_helper.h",
+    "policy/core/fake_device_cloud_policy_manager.cc",
+    "policy/core/fake_device_cloud_policy_manager.h",
     "policy/core/user_policy_test_helper.cc",
     "policy/core/user_policy_test_helper.h",
+    "policy/enrollment/psm/fake_rlwe_client.cc",
+    "policy/enrollment/psm/fake_rlwe_client.h",
+    "policy/external_data/cloud_external_data_manager_base_test_util.cc",
+    "policy/external_data/cloud_external_data_manager_base_test_util.h",
     "policy/handlers/fake_device_name_policy_handler.cc",
     "policy/handlers/fake_device_name_policy_handler.h",
     "policy/handlers/minimum_version_policy_test_helpers.cc",
     "policy/handlers/minimum_version_policy_test_helpers.h",
+    "policy/login/signin_profile_extensions_policy_test_base.cc",
+    "policy/login/signin_profile_extensions_policy_test_base.h",
+    "policy/reporting/metrics_reporting/cros_healthd_info_metric_sampler_test_utils.cc",
+    "policy/reporting/metrics_reporting/cros_healthd_info_metric_sampler_test_utils.h",
+    "printing/history/mock_print_job_history_service.cc",
+    "printing/history/mock_print_job_history_service.h",
+    "printing/history/test_print_job_database.cc",
+    "printing/history/test_print_job_database.h",
+    "printing/history/test_print_job_history_service_observer.cc",
+    "printing/history/test_print_job_history_service_observer.h",
     "printing/oauth2/mock_authorization_zones_manager.cc",
     "printing/oauth2/mock_authorization_zones_manager.h",
     "printing/printing_stubs.cc",
@@ -4337,17 +4477,29 @@
     "secure_channel/fake_nearby_connection_broker.h",
     "secure_channel/fake_nearby_endpoint_finder.cc",
     "secure_channel/fake_nearby_endpoint_finder.h",
+    "settings/device_settings_test_helper.cc",
+    "settings/device_settings_test_helper.h",
+    "settings/scoped_cros_settings_test_helper.cc",
+    "settings/scoped_cros_settings_test_helper.h",
     "settings/scoped_testing_cros_settings.cc",
     "settings/scoped_testing_cros_settings.h",
     "wallpaper_handlers/mock_wallpaper_handlers.cc",
     "wallpaper_handlers/mock_wallpaper_handlers.h",
   ]
+  allow_circular_includes_from = [
+    "//chrome/test:test_support",
+    "//chrome/test:test_support_ui",
+  ]
   public_deps = [
     ":ash",
     "//ash:test_support",
+    "//ash/components/arc/mojom",
+    "//ash/public/cpp",
     "//base",
     "//base/test:test_support",
+    "//build:chromeos_buildflags",
     "//chrome/browser",
+    "//chrome/browser/profiles:profile",
     "//chrome/browser/ui",
     "//chrome/browser/web_applications",
     "//chrome/test:test_support",
@@ -4355,76 +4507,130 @@
     "//chromeos/ash/components/dbus:vm_applications_apps_proto",
     "//chromeos/ash/components/dbus/cicerone",
     "//chromeos/ash/components/dbus/cicerone:cicerone_proto",
+    "//chromeos/ash/components/dbus/concierge",
     "//chromeos/ash/components/dbus/constants",
+    "//chromeos/ash/components/dbus/cros_disks",
     "//chromeos/ash/components/dbus/cryptohome:cryptohome_proto",
     "//chromeos/ash/components/dbus/lorgnette_manager",
     "//chromeos/ash/components/dbus/lorgnette_manager:lorgnette_proto",
+    "//chromeos/ash/components/dbus/session_manager",
     "//chromeos/ash/components/dbus/userdataauth",
+    "//chromeos/ash/components/disks",
     "//chromeos/ash/components/drivefs",
     "//chromeos/ash/components/drivefs:test_support",
+    "//chromeos/ash/components/install_attributes",
+    "//chromeos/ash/components/install_attributes:test_support",
     "//chromeos/ash/components/login/auth",
     "//chromeos/ash/components/login/auth/public:authpublic",
+    "//chromeos/ash/components/settings",
+    "//chromeos/ash/components/system",
     "//chromeos/ash/services/ime/public/cpp:structs",
     "//chromeos/ash/services/multidevice_setup/public/cpp:test_support",
     "//chromeos/printing",
     "//components/account_id",
+    "//components/keyed_service/core",
+    "//components/login",
+    "//components/ownership",
+    "//components/policy:generated",
+    "//components/policy/core/common:common_constants",
     "//components/policy/core/common:test_support",
+    "//components/policy/proto",
+    "//components/prefs",
+    "//components/prefs:test_support",
     "//components/session_manager/core",
+    "//components/sync/model",
+    "//components/sync/protocol",
     "//components/user_manager",
+    "//components/user_manager:test_support",
+    "//components/version_info:channel",
     "//content/public/browser",
+    "//content/test:test_support",
+    "//extensions:test_support",
+    "//extensions/browser/api/messaging:native_messaging",
     "//extensions/browser/updater",
     "//extensions/common",
+    "//extensions/common:mojom",
     "//google_apis",
-    "//google_apis:test_support",
+    "//mojo/public/cpp/bindings",
+    "//net",
     "//net:test_support",
+    "//services/accessibility/public/mojom",
+    "//storage/browser",
     "//testing/gmock",
     "//testing/gtest",
     "//third_party/abseil-cpp:absl",
+    "//third_party/private_membership:private_membership_proto",
+    "//third_party/shell-encryption:shell_encryption",
+    "//ui/accessibility:ax_base",
     "//ui/aura",
+    "//ui/base:test_support",
+    "//ui/base/ime",
+    "//ui/base/ime/ash",
+    "//ui/gfx/geometry",
     "//url",
   ]
   deps = [
+    "//ash",
+    "//ash/components/arc:arc_base_utils",
+    "//ash/components/arc:arc_test_support",
+    "//ash/components/arc:notification_test_support",
+    "//ash/components/arc/session",
     "//ash/constants",
     "//ash/webui/personalization_app/mojom",
     "//base/test:test_config",
     "//chrome/browser:browser_process",
     "//chrome/browser/apps/app_service",
+    "//chrome/browser/ash:arc_test_support",
+    "//chrome/browser/ash:print_job_info_proto",
     "//chrome/browser/extensions",
     "//chrome/browser/extensions:test_support",
-    "//chrome/browser/profiles:profile",
+    "//chrome/browser/ui/ash/system_web_apps",
+    "//chrome/browser/web_applications:web_applications_test_support",
+    "//chrome/common",
     "//chrome/common:chrome_features",
     "//chrome/common:constants",
     "//chrome/common:non_code_constants",
+    "//chromeos/ash/components/attestation:test_support",
+    "//chromeos/ash/components/browser_context_helper",
     "//chromeos/ash/components/cryptohome",
     "//chromeos/ash/components/dbus:vm_launch_proto",
     "//chromeos/ash/components/dbus/chunneld",
-    "//chromeos/ash/components/dbus/concierge",
     "//chromeos/ash/components/dbus/dlcservice",
     "//chromeos/ash/components/dbus/seneschal",
-    "//chromeos/ash/components/dbus/session_manager",
-    "//chromeos/ash/components/settings",
+    "//chromeos/ash/components/login/login_state",
     "//chromeos/dbus/constants",
+    "//chromeos/dbus/power",
+    "//chromeos/dbus/tpm_manager",
+    "//components/arc",
+    "//components/arc:arc_test_support",
+    "//components/crx_file",
     "//components/drive",
     "//components/exo",
-    "//components/keyed_service/core",
-    "//components/policy:generated",
     "//components/policy/core/browser",
     "//components/policy/core/common",
-    "//components/policy/core/common:common_constants",
-    "//components/policy/proto",
-    "//components/prefs",
-    "//content/test:test_support",
-    "//extensions:test_support",
+    "//components/policy/test_support",
+    "//components/services/app_service/public/cpp:test_support",
+    "//components/services/filesystem/public/mojom",
+    "//components/sync/base",
+    "//components/sync/driver",
+    "//crypto",
+    "//extensions/browser",
+    "//extensions/common:common_constants",
+    "//skia",
     "//third_party/re2",
+    "//ui/base",
+    "//ui/chromeos/resources",
+    "//ui/display/types",
+    "//ui/gfx",
     "//ui/views",
     "//ui/views:test_support",
     "//ui/views/controls/webview",
+    "//ui/wm",
   ]
 }
 
 source_set("unit_tests") {
   testonly = true
-  check_includes = false
   sources = [
     "../download/notification/multi_profile_download_notifier_unittest.cc",
     "../extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc",
@@ -4482,6 +4688,91 @@
     "android_sms/android_sms_app_setup_controller_impl_unittest.cc",
     "android_sms/connection_manager_unittest.cc",
     "android_sms/fcm_connection_establisher_unittest.cc",
+    "app_list/app_context_menu_unittest.cc",
+    "app_list/app_list_sort_unittest.cc",
+    "app_list/app_list_syncable_service_unittest.cc",
+    "app_list/app_list_test_util.cc",
+    "app_list/app_list_test_util.h",
+    "app_list/app_service/app_service_app_model_builder_unittest.cc",
+    "app_list/arc/arc_app_sync_metrics_helper_unittest.cc",
+    "app_list/arc/arc_app_test.cc",
+    "app_list/arc/arc_app_test.h",
+    "app_list/arc/arc_app_unittest.cc",
+    "app_list/arc/arc_app_utils_unittest.cc",
+    "app_list/arc/arc_default_app_list_unittest.cc",
+    "app_list/arc/arc_vpn_provider_unittest.cc",
+    "app_list/arc/intent_unittest.cc",
+    "app_list/arc/mock_arc_app_list_prefs_observer.cc",
+    "app_list/arc/mock_arc_app_list_prefs_observer.h",
+    "app_list/chrome_app_list_item_manager_unittest.cc",
+    "app_list/md_icon_normalizer_unittest.cc",
+    "app_list/reorder/app_list_reorder_core_unittest.cc",
+    "app_list/reorder/app_list_reorder_util_unittest.cc",
+    "app_list/search/app_search_provider_test_base.cc",
+    "app_list/search/app_search_provider_test_base.h",
+    "app_list/search/app_search_provider_unittest.cc",
+    "app_list/search/app_zero_state_provider_unittest.cc",
+    "app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc",
+    "app_list/search/arc/arc_playstore_search_provider_unittest.cc",
+    "app_list/search/arc/arc_recommend_apps_fetcher_impl_unittest.cc",
+    "app_list/search/assistant_text_search_provider_unittest.cc",
+    "app_list/search/chrome_search_result_unittest.cc",
+    "app_list/search/common/keyword_util_unittest.cc",
+    "app_list/search/common/string_util_unittest.cc",
+    "app_list/search/cros_action_history/cros_action_recorder_tab_tracker_unittest.cc",
+    "app_list/search/cros_action_history/cros_action_recorder_unittest.cc",
+    "app_list/search/files/file_result_unittest.cc",
+    "app_list/search/files/file_search_provider_unittest.cc",
+    "app_list/search/files/justifications_unittest.cc",
+    "app_list/search/files/zero_state_drive_provider_unittest.cc",
+    "app_list/search/files/zero_state_file_provider_unittest.cc",
+    "app_list/search/games/game_provider_unittest.cc",
+    "app_list/search/games/game_result_unittest.cc",
+    "app_list/search/help_app_provider_unittest.cc",
+    "app_list/search/help_app_zero_state_provider_unittest.cc",
+    "app_list/search/keyboard_shortcut_provider_unittest.cc",
+    "app_list/search/keyboard_shortcut_result_unittest.cc",
+    "app_list/search/omnibox/omnibox_answer_result_unittest.cc",
+    "app_list/search/omnibox/omnibox_lacros_provider_unittest.cc",
+    "app_list/search/omnibox/omnibox_provider_unittest.cc",
+    "app_list/search/omnibox/omnibox_result_unittest.cc",
+    "app_list/search/omnibox/open_tab_result_unittest.cc",
+    "app_list/search/os_settings_provider_unittest.cc",
+    "app_list/search/personalization_provider_unittest.cc",
+    "app_list/search/ranking/answer_ranker_unittest.cc",
+    "app_list/search/ranking/best_match_ranker_unittest.cc",
+    "app_list/search/ranking/filtering_ranker_unittest.cc",
+    "app_list/search/ranking/ftrl_ranker_unittest.cc",
+    "app_list/search/ranking/keyword_ranker_unittest.cc",
+    "app_list/search/ranking/mrfu_ranker_unittest.cc",
+    "app_list/search/ranking/query_highlighter_unittest.cc",
+    "app_list/search/ranking/removed_results_proto_unittest.cc",
+    "app_list/search/ranking/removed_results_ranker_unittest.cc",
+    "app_list/search/ranking/score_normalizing_ranker_unittest.cc",
+    "app_list/search/search_controller_unittest.cc",
+    "app_list/search/search_metrics_manager_unittest.cc",
+    "app_list/search/search_session_metrics_manager_unittest.cc",
+    "app_list/search/system_info/cpu_usage_data_unittest.cc",
+    "app_list/search/test/ranking_test_util.cc",
+    "app_list/search/test/ranking_test_util.h",
+    "app_list/search/test/search_controller_test_util.cc",
+    "app_list/search/test/search_controller_test_util.h",
+    "app_list/search/test/search_metrics_test_util.cc",
+    "app_list/search/test/search_metrics_test_util.h",
+    "app_list/search/test/test_ranker_manager.cc",
+    "app_list/search/test/test_ranker_manager.h",
+    "app_list/search/test/test_search_controller.cc",
+    "app_list/search/test/test_search_controller.h",
+    "app_list/search/test/test_search_provider.cc",
+    "app_list/search/test/test_search_provider.h",
+    "app_list/search/util/ftrl_optimizer_unittest.cc",
+    "app_list/search/util/mrfu_cache_unittest.cc",
+    "app_list/search/util/persistent_proto_unittest.cc",
+    "app_list/search/util/score_normalizer_unittest.cc",
+    "app_list/test/app_list_syncable_service_test_base.cc",
+    "app_list/test/app_list_syncable_service_test_base.h",
+    "app_list/test/fake_app_list_model_updater.cc",
+    "app_list/test/fake_app_list_model_updater.h",
     "app_mode/app_launch_utils_unittest.cc",
     "app_mode/arc/arc_kiosk_app_service_unittest.cc",
     "app_mode/kiosk_app_launch_error_unittest.cc",
@@ -4621,6 +4912,7 @@
     "assistant/assistant_util_unittest.cc",
     "attestation/attestation_ca_client_unittest.cc",
     "attestation/attestation_policy_observer_unittest.cc",
+    "attestation/attestation_policy_unittest.cc",
     "attestation/certificate_util_unittest.cc",
     "attestation/enrollment_certificate_uploader_impl_unittest.cc",
     "attestation/enrollment_id_upload_manager_unittest.cc",
@@ -4677,16 +4969,11 @@
     "child_accounts/family_user_parental_control_metrics_unittest.cc",
     "child_accounts/family_user_session_metrics_unittest.cc",
     "child_accounts/parent_access_code/authenticator_unittest.cc",
-    "child_accounts/parent_access_code/parent_access_test_utils.cc",
-    "child_accounts/parent_access_code/parent_access_test_utils.h",
     "child_accounts/time_limit_notifier_unittest.cc",
-    "child_accounts/time_limit_test_utils.cc",
     "child_accounts/time_limits/app_activity_registry_unittest.cc",
     "child_accounts/time_limits/app_service_wrapper_unittest.cc",
     "child_accounts/time_limits/app_time_controller_unittest.cc",
     "child_accounts/time_limits/app_time_limit_utils_unittest.cc",
-    "child_accounts/time_limits/app_time_limits_allowlist_policy_test_utils.cc",
-    "child_accounts/time_limits/app_time_limits_allowlist_policy_test_utils.h",
     "child_accounts/time_limits/app_time_test_utils.cc",
     "child_accounts/time_limits/app_time_test_utils.h",
     "child_accounts/time_limits/app_types_unittest.cc",
@@ -4718,6 +5005,7 @@
     "crostini/throttle/crostini_throttle_unittest.cc",
     "cryptauth/client_app_metadata_provider_service_unittest.cc",
     "customization/customization_document_unittest.cc",
+    "dbus/chrome_features_service_provider_unittest.cc",
     "dbus/dlp_files_policy_service_provider_unittest.cc",
     "dbus/encrypted_reporting_service_provider_unittest.cc",
     "dbus/proxy_resolution_service_provider_unittest.cc",
@@ -4740,6 +5028,7 @@
     "exo/chrome_data_exchange_delegate_unittest.cc",
     "extensions/default_app_order_unittest.cc",
     "extensions/device_local_account_management_policy_provider_unittest.cc",
+    "extensions/extensions_permissions_tracker_unittest.cc",
     "extensions/external_cache_impl_unittest.cc",
     "extensions/file_manager/device_event_router_unittest.cc",
     "extensions/file_manager/drivefs_event_router_unittest.cc",
@@ -4771,10 +5060,9 @@
     "file_manager/trash_unittest_base.h",
     "file_manager/url_util_unittest.cc",
     "file_manager/volume_manager_unittest.cc",
-    "file_system_provider/fake_extension_provider.cc",
-    "file_system_provider/fake_extension_provider.h",
-    "file_system_provider/fake_provided_file_system.cc",
-    "file_system_provider/fake_provided_file_system.h",
+    "file_suggest/file_suggest_keyed_service_unittest.cc",
+    "file_suggest/item_suggest_cache_unittest.cc",
+    "file_suggest/local_file_suggestion_provider_unittest.cc",
     "file_system_provider/fake_registry.cc",
     "file_system_provider/fake_registry.h",
     "file_system_provider/fileapi/buffering_file_stream_reader_unittest.cc",
@@ -4903,10 +5191,12 @@
     "login/demo_mode/demo_mode_resources_remover_unittest.cc",
     "login/demo_mode/demo_session_unittest.cc",
     "login/demo_mode/demo_setup_controller_unittest.cc",
-    "login/demo_mode/demo_setup_test_utils.cc",
-    "login/demo_mode/demo_setup_test_utils.h",
+    "login/easy_unlock/easy_unlock_auth_attempt_unittest.cc",
     "login/easy_unlock/easy_unlock_challenge_wrapper_unittest.cc",
+    "login/easy_unlock/easy_unlock_notification_controller_unittest.cc",
+    "login/easy_unlock/easy_unlock_service_regular_unittest.cc",
     "login/easy_unlock/easy_unlock_tpm_key_manager_unittest.cc",
+    "login/easy_unlock/smartlock_feature_usage_metrics_unittest.cc",
     "login/enrollment/enrollment_screen_unittest.cc",
     "login/enterprise_user_session_metrics_unittest.cc",
     "login/error_screens_histogram_helper_unittest.cc",
@@ -4940,6 +5230,7 @@
     "login/screens/encryption_migration_screen_unittest.cc",
     "login/screens/network_screen_unittest.cc",
     "login/screens/recommend_apps/recommend_apps_fetcher_impl_unittest.cc",
+    "login/screens/reset_screen_unittest.cc",
     "login/screens/update_required_screen_unittest.cc",
     "login/screens/update_screen_unittest.cc",
     "login/session/user_session_manager_test.cc",
@@ -5032,8 +5323,6 @@
     "plugin_vm/plugin_vm_files_unittest.cc",
     "plugin_vm/plugin_vm_installer_unittest.cc",
     "plugin_vm/plugin_vm_manager_impl_unittest.cc",
-    "plugin_vm/plugin_vm_test_helper.cc",
-    "plugin_vm/plugin_vm_test_helper.h",
     "plugin_vm/plugin_vm_util_unittest.cc",
     "policy/active_directory/active_directory_migration_manager_unittest.cc",
     "policy/active_directory/active_directory_policy_manager_unittest.cc",
@@ -5114,8 +5403,6 @@
     "policy/reporting/arc_app_install_policy_data_unittest.cc",
     "policy/reporting/metrics_reporting/apps/app_events_observer_unittest.cc",
     "policy/reporting/metrics_reporting/audio/audio_events_observer_unittest.cc",
-    "policy/reporting/metrics_reporting/cros_healthd_info_metric_sampler_test_utils.cc",
-    "policy/reporting/metrics_reporting/cros_healthd_info_metric_sampler_test_utils.h",
     "policy/reporting/metrics_reporting/cros_healthd_metric_sampler_unittest.cc",
     "policy/reporting/metrics_reporting/cros_reporting_settings_unittest.cc",
     "policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc",
@@ -5191,8 +5478,6 @@
     "printing/cups_printer_status_creator_unittest.cc",
     "printing/cups_printers_manager_unittest.cc",
     "printing/enterprise_printers_provider_unittest.cc",
-    "printing/history/mock_print_job_history_service.cc",
-    "printing/history/mock_print_job_history_service.h",
     "printing/history/print_job_database_impl_unittest.cc",
     "printing/history/print_job_history_cleaner_unittest.cc",
     "printing/history/print_job_history_service_impl_unittest.cc",
@@ -5334,6 +5619,7 @@
     ":user_event_reporter_testing_record_proto",
     "//ash",
     "//ash:test_support",
+    "//ash/app_list/model:app_list_model",
     "//ash/components/arc",
     "//ash/components/arc:arc_base",
     "//ash/components/arc:arc_base_utils",
@@ -5351,6 +5637,8 @@
     "//ash/constants",
     "//ash/public/cpp",
     "//ash/public/cpp:test_support",
+    "//ash/public/cpp/app_list/vector_icons",
+    "//ash/public/cpp/assistant/test_support",
     "//ash/public/cpp/external_arc",
     "//ash/public/cpp/external_arc:test_support",
     "//ash/public/mojom",
@@ -5359,11 +5647,14 @@
     "//ash/quick_pair/proto:fastpair_proto",
     "//ash/quick_pair/repository",
     "//ash/quick_pair/repository:test_support",
+    "//ash/shortcut_viewer",
+    "//ash/strings",
     "//ash/webui/eche_app_ui",
     "//ash/webui/eche_app_ui:test_support",
     "//ash/webui/file_manager:constants",
     "//ash/webui/file_manager:file_manager_ui",
     "//ash/webui/file_manager:file_manager_untrusted_ui",
+    "//ash/webui/help_app_ui",
     "//ash/webui/personalization_app",
     "//ash/webui/personalization_app/mojom",
     "//ash/webui/scanning",
@@ -5374,12 +5665,16 @@
     "//base/test:test_support",
     "//build:branding_buildflags",
     "//build:chromeos_buildflags",
+    "//cc/base",
     "//chrome/app:command_ids",
     "//chrome/app:generated_resources",
     "//chrome/app/vector_icons",
     "//chrome/browser",
     "//chrome/browser:browser_process",
+    "//chrome/browser/apps/app_service:constants",
     "//chrome/browser/apps/app_service:test_support",
+    "//chrome/browser/ash/app_list/search/ranking:proto",
+    "//chrome/browser/ash/app_list/search/util:proto",
     "//chrome/browser/ash/arc/input_overlay/db/proto",
     "//chrome/browser/ash/crosapi",
     "//chrome/browser/ash/crosapi:browser_util",
@@ -5395,6 +5690,7 @@
     "//chrome/browser/chromeos",
     "//chrome/browser/chromeos:dlp_policy_event_proto",
     "//chrome/browser/chromeos:test_support",
+    "//chrome/browser/chromeos/launcher_search:search_util",
     "//chrome/browser/extensions",
     "//chrome/browser/extensions:test_support",
     "//chrome/browser/image_decoder",
@@ -5413,6 +5709,7 @@
     "//chrome/browser/ui/webui/settings/chromeos/constants:mojom",
     "//chrome/browser/web_applications",
     "//chrome/browser/web_applications:web_applications_test_support",
+    "//chrome/browser/web_applications/mojom:mojom_web_apps_enum",
     "//chrome/common",
     "//chrome/common:channel_info",
     "//chrome/common:chrome_features",
@@ -5422,6 +5719,7 @@
     "//chrome/services/qrcode_generator/public/cpp",
     "//chrome/services/sharing/nearby/test_support",
     "//chrome/services/wilco_dtc_supportd/public/mojom",
+    "//chrome/test:sync_integration_test_support",
     "//chrome/test:test_support",
     "//chrome/test:test_support_ui",
     "//chrome/test:test_support_unit",
@@ -5429,6 +5727,7 @@
     "//chromeos/ash/components/account_manager",
     "//chromeos/ash/components/attestation:test_support",
     "//chromeos/ash/components/audio",
+    "//chromeos/ash/components/browser_context_helper",
     "//chromeos/ash/components/cryptohome",
     "//chromeos/ash/components/dbus",
     "//chromeos/ash/components/dbus:vm_applications_apps_proto",
@@ -5480,6 +5779,7 @@
     "//chromeos/ash/components/disks:test_support",
     "//chromeos/ash/components/drivefs/mojom",
     "//chromeos/ash/components/drivefs/mojom:mojom_shared",
+    "//chromeos/ash/components/feature_usage",
     "//chromeos/ash/components/install_attributes",
     "//chromeos/ash/components/install_attributes:test_support",
     "//chromeos/ash/components/local_search_service",
@@ -5504,9 +5804,11 @@
     "//chromeos/ash/components/phonehub/proto",
     "//chromeos/ash/components/policy",
     "//chromeos/ash/components/proximity_auth",
+    "//chromeos/ash/components/proximity_auth:test_support",
     "//chromeos/ash/components/scanning",
     "//chromeos/ash/components/settings",
     "//chromeos/ash/components/smbfs",
+    "//chromeos/ash/components/string_matching",
     "//chromeos/ash/components/sync_wifi:test_support",
     "//chromeos/ash/components/system",
     "//chromeos/ash/components/tether",
@@ -5520,6 +5822,7 @@
     "//chromeos/ash/services/cros_healthd/public/mojom:mojom_shared",
     "//chromeos/ash/services/device_sync",
     "//chromeos/ash/services/device_sync:test_support",
+    "//chromeos/ash/services/device_sync/proto",
     "//chromeos/ash/services/device_sync/public/cpp",
     "//chromeos/ash/services/device_sync/public/cpp:test_support",
     "//chromeos/ash/services/ime/public/cpp:structs",
@@ -5556,6 +5859,7 @@
     "//chromeos/services/machine_learning/public/cpp",
     "//chromeos/services/machine_learning/public/cpp:stub",
     "//chromeos/services/machine_learning/public/mojom",
+    "//chromeos/services/network_config/public/cpp",
     "//chromeos/services/network_config/public/cpp:test_support",
     "//chromeos/services/network_config/public/mojom",
     "//chromeos/services/network_health/public/mojom",
@@ -5572,6 +5876,8 @@
     "//components/assist_ranker/proto",
     "//components/autofill/core/browser",
     "//components/autofill/core/browser:test_support",
+    "//components/bookmarks/browser",
+    "//components/bookmarks/test",
     "//components/captive_portal/core",
     "//components/captive_portal/core:test_support",
     "//components/component_updater",
@@ -5591,6 +5897,7 @@
     "//components/exo:test_support",
     "//components/exo/server",
     "//components/favicon/core",
+    "//components/favicon/core/test:test_support",
     "//components/favicon_base",
     "//components/feedback",
     "//components/file_access",
@@ -5611,6 +5918,10 @@
     "//components/metrics",
     "//components/metrics:serialization",
     "//components/metrics:test_support",
+    "//components/omnibox/browser",
+    "//components/omnibox/browser:location_bar",
+    "//components/omnibox/browser:test_support",
+    "//components/omnibox/browser:vector_icons",
     "//components/onc",
     "//components/ownership",
     "//components/policy:generated",
@@ -5637,10 +5948,12 @@
     "//components/reporting/util:status",
     "//components/reporting/util:test_callbacks_support",
     "//components/safe_browsing/core/common:safe_browsing_prefs",
+    "//components/search_engines",
     "//components/services/app_service/public/cpp:app_file_handling",
     "//components/services/app_service/public/cpp:app_types",
     "//components/services/app_service/public/cpp:app_update",
     "//components/services/app_service/public/cpp:icon_loader",
+    "//components/services/app_service/public/cpp:icon_loader_test_support",
     "//components/services/app_service/public/cpp:icon_types",
     "//components/services/app_service/public/cpp:instance_update",
     "//components/services/app_service/public/cpp:intents",
@@ -5661,6 +5974,7 @@
     "//components/sync:test_support",
     "//components/sync/base",
     "//components/sync/chromeos",
+    "//components/sync/driver",
     "//components/sync/engine",
     "//components/sync/model",
     "//components/sync/protocol",
@@ -5673,6 +5987,8 @@
     "//components/user_manager",
     "//components/user_manager:test_support",
     "//components/user_prefs",
+    "//components/variations",
+    "//components/variations:test_support",
     "//components/version_info",
     "//components/webapps/browser",
     "//components/webapps/browser:constants",
@@ -5792,10 +6108,12 @@
     "//ui/events/platform",
     "//ui/events/types:headers",
     "//ui/gfx",
+    "//ui/gfx:gfx_skia",
     "//ui/gfx:native_widget_types",
     "//ui/gfx:test_support",
     "//ui/gfx/codec",
     "//ui/gfx/geometry",
+    "//ui/gfx/geometry:geometry_skia",
     "//ui/gfx/range",
     "//ui/message_center",
     "//ui/message_center:test_support",
@@ -5860,9 +6178,8 @@
   configs += [ ":allow_shadow_variables" ]
   deps = [
     ":ash",
+    ":test_support",
     "//base",
-    "//chrome/browser/ash",
-    "//chrome/test:test_support",
     "//chromeos/ash/components/attestation:test_support",
     "//chromeos/ash/components/settings",
     "//content/test:test_support",
diff --git a/chrome/browser/ash/app_list/search/arc/recommend_apps_fetcher_impl_unittest.cc b/chrome/browser/ash/app_list/search/arc/arc_recommend_apps_fetcher_impl_unittest.cc
similarity index 100%
rename from chrome/browser/ash/app_list/search/arc/recommend_apps_fetcher_impl_unittest.cc
rename to chrome/browser/ash/app_list/search/arc/arc_recommend_apps_fetcher_impl_unittest.cc
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn
index 087b4ec0..1ff3d2c 100644
--- a/chrome/browser/ash/crosapi/BUILD.gn
+++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -367,7 +367,6 @@
 
 source_set("test_support") {
   testonly = true
-
   sources = [
     "ash_requires_lacros_browsertestbase.cc",
     "ash_requires_lacros_browsertestbase.h",
@@ -377,16 +376,19 @@
     "fake_browser_manager.h",
     "input_method_test_interface_ash.cc",
     "input_method_test_interface_ash.h",
+    "metrics_reporting_ash_test_helper.cc",
+    "metrics_reporting_ash_test_helper.h",
     "test_controller_ash.cc",
     "test_controller_ash.h",
     "test_crosapi_dependency_registry.cc",
     "test_crosapi_dependency_registry.h",
   ]
-
+  allow_circular_includes_from = [ "//chrome/test:test_support" ]
   deps = [
     ":crosapi",
     "//ash",
     "//ash/app_list",
+    "//base",
     "//chrome/browser/apps/app_service",
     "//chrome/browser/ash:test_support",
     "//chrome/test:test_support",
diff --git a/chrome/browser/ash/crosapi/chrome_app_window_tracker_ash.cc b/chrome/browser/ash/crosapi/chrome_app_window_tracker_ash.cc
index 5929e6d..2e44a04 100644
--- a/chrome/browser/ash/crosapi/chrome_app_window_tracker_ash.cc
+++ b/chrome/browser/ash/crosapi/chrome_app_window_tracker_ash.cc
@@ -101,6 +101,13 @@
   if (pending_window->second.app_id.empty() || !pending_window->second.window)
     return;
 
+  // If an extension app runs in both lacros and ash, then don't show a dock
+  // icon for lacros since there might also be a dock icon for ash which will
+  // cause crashes.
+  if (extensions::ExtensionAppRunsInBothOSAndStandaloneBrowser(
+          pending_window->second.app_id)) {
+    return;
+  }
 
   std::string app_id = std::move(pending_window->second.app_id);
   aura::Window* window = pending_window->second.window;
diff --git a/chrome/browser/ash/crosapi/crosapi_util.cc b/chrome/browser/ash/crosapi/crosapi_util.cc
index 8a2feb07..f017b74a 100644
--- a/chrome/browser/ash/crosapi/crosapi_util.cc
+++ b/chrome/browser/ash/crosapi/crosapi_util.cc
@@ -588,9 +588,6 @@
   params->extension_keep_list = extensions::BuildExtensionKeeplistInitParam();
 
   params->vc_controls_ui_enabled = ash::features::IsVcControlsUiEnabled();
-
-  params->standalone_browser_app_service_blocklist =
-      extensions::BuildStandaloneBrowserAppServiceBlockListInitParam();
 }
 
 template <typename BrowserParams>
diff --git a/chrome/browser/ash/dbus/chrome_features_service_provider.cc b/chrome/browser/ash/dbus/chrome_features_service_provider.cc
index c6a16e8..145fc73 100644
--- a/chrome/browser/ash/dbus/chrome_features_service_provider.cc
+++ b/chrome/browser/ash/dbus/chrome_features_service_provider.cc
@@ -417,13 +417,11 @@
                peripheral_data_access_enabled);
 }
 
-// TODO(b/265091596): Remove
 void ChromeFeaturesServiceProvider::IsDnsProxyEnabled(
     dbus::MethodCall* method_call,
     dbus::ExportedObject::ResponseSender response_sender) {
-  // dnsproxy is always enabled now, so always return true; this method will be
-  // removed in a follow-up patch once CrOS is no longer dependent on it.
-  SendResponse(method_call, std::move(response_sender), true);
+  SendResponse(method_call, std::move(response_sender),
+               !base::FeatureList::IsEnabled(features::kDisableDnsProxy));
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/extensions/external_cache.h b/chrome/browser/ash/extensions/external_cache.h
index 153c19d4..6b96793 100644
--- a/chrome/browser/ash/extensions/external_cache.h
+++ b/chrome/browser/ash/extensions/external_cache.h
@@ -96,10 +96,4 @@
 
 }  // namespace chromeos
 
-// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
-// source migration is finished.
-namespace ash {
-using ::chromeos::ExternalCache;
-}
-
 #endif  // CHROME_BROWSER_ASH_EXTENSIONS_EXTERNAL_CACHE_H_
diff --git a/chrome/browser/ash/extensions/external_cache_delegate.h b/chrome/browser/ash/extensions/external_cache_delegate.h
index 2a099c2..9f886e8 100644
--- a/chrome/browser/ash/extensions/external_cache_delegate.h
+++ b/chrome/browser/ash/extensions/external_cache_delegate.h
@@ -35,10 +35,4 @@
 
 }  // namespace chromeos
 
-// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
-// source migration is finished.
-namespace ash {
-using ::chromeos::ExternalCacheDelegate;
-}
-
 #endif  // CHROME_BROWSER_ASH_EXTENSIONS_EXTERNAL_CACHE_DELEGATE_H_
diff --git a/chrome/browser/ash/extensions/external_cache_impl.cc b/chrome/browser/ash/extensions/external_cache_impl.cc
index 1a793d5..1b081307e 100644
--- a/chrome/browser/ash/extensions/external_cache_impl.cc
+++ b/chrome/browser/ash/extensions/external_cache_impl.cc
@@ -69,7 +69,7 @@
       this, extensions::NOTIFICATION_EXTENSION_INSTALL_ERROR,
       content::NotificationService::AllBrowserContextsAndSources());
   kiosk_crx_updates_from_policy_subscription_ =
-      CrosSettings::Get()->AddSettingsObserver(
+      ash::CrosSettings::Get()->AddSettingsObserver(
           ash::kKioskCRXManifestUpdateURLIgnored,
           base::BindRepeating(&ExternalCacheImpl::MaybeScheduleNextCacheCheck,
                               weak_ptr_factory_.GetWeakPtr()));
diff --git a/chrome/browser/ash/extensions/external_cache_impl.h b/chrome/browser/ash/extensions/external_cache_impl.h
index 75c3b21..c43a1a87 100644
--- a/chrome/browser/ash/extensions/external_cache_impl.h
+++ b/chrome/browser/ash/extensions/external_cache_impl.h
@@ -191,10 +191,4 @@
 
 }  // namespace chromeos
 
-// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
-// source migration is finished.
-namespace ash {
-using ::chromeos::ExternalCacheImpl;
-}
-
 #endif  // CHROME_BROWSER_ASH_EXTENSIONS_EXTERNAL_CACHE_IMPL_H_
diff --git a/chrome/browser/ash/extensions/external_cache_impl_unittest.cc b/chrome/browser/ash/extensions/external_cache_impl_unittest.cc
index af623300..ca9eaba 100644
--- a/chrome/browser/ash/extensions/external_cache_impl_unittest.cc
+++ b/chrome/browser/ash/extensions/external_cache_impl_unittest.cc
@@ -31,6 +31,8 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+namespace chromeos {
+
 namespace {
 
 using ::testing::Optional;
@@ -45,8 +47,6 @@
 
 }  // namespace
 
-namespace chromeos {
-
 class ExternalCacheImplTest : public testing::Test,
                               public ExternalCacheDelegate {
  public:
@@ -140,7 +140,7 @@
   absl::optional<base::Value::Dict> prefs_;
   std::set<extensions::ExtensionId> deleted_extension_files_;
 
-  ScopedCrosSettingsTestHelper cros_settings_test_helper_;
+  ash::ScopedCrosSettingsTestHelper cros_settings_test_helper_;
 };
 
 TEST_F(ExternalCacheImplTest, Basic) {
diff --git a/chrome/browser/ash/extensions/login_screen_ui/ui_handler.cc b/chrome/browser/ash/extensions/login_screen_ui/ui_handler.cc
index 06892a6..6386b3d 100644
--- a/chrome/browser/ash/extensions/login_screen_ui/ui_handler.cc
+++ b/chrome/browser/ash/extensions/login_screen_ui/ui_handler.cc
@@ -24,12 +24,13 @@
 #include "extensions/common/features/feature_provider.h"
 #include "extensions/common/permissions/permissions_data.h"
 
-namespace chromeos {
+namespace chromeos::login_screen_extension_ui {
 
 namespace {
 
-// TODO(https://crbug.com/1164001): remove after migrating to ash.
-using ::ash::InstallAttributes;
+using ::ash::login_screen_extension_ui::CreateOptions;
+using ::ash::login_screen_extension_ui::Window;
+using ::ash::login_screen_extension_ui::WindowFactory;
 
 const char kErrorWindowAlreadyExists[] =
     "Login screen extension UI already in use.";
@@ -58,20 +59,19 @@
 }
 
 bool CanUseLoginScreenUiApi(const extensions::Extension* extension) {
-  return extensions::ExtensionRegistry::Get(ProfileHelper::GetSigninProfile())
+  return extensions::ExtensionRegistry::Get(
+             ash::ProfileHelper::GetSigninProfile())
              ->enabled_extensions()
              .Contains(extension->id()) &&
          extension->permissions_data()->HasAPIPermission(
              extensions::mojom::APIPermissionID::kLoginScreenUi) &&
-         InstallAttributes::Get()->IsEnterpriseManaged();
+         ash::InstallAttributes::Get()->IsEnterpriseManaged();
 }
 
 login_screen_extension_ui::UiHandler* g_instance = nullptr;
 
 }  // namespace
 
-namespace login_screen_extension_ui {
-
 ExtensionIdToWindowMapping::ExtensionIdToWindowMapping(
     const std::string& extension_id,
     std::unique_ptr<Window> window)
@@ -100,8 +100,8 @@
     : window_factory_(std::move(window_factory)) {
   UpdateSessionState();
   session_manager_observation_.Observe(session_manager::SessionManager::Get());
-  extension_registry_observation_.Observe(
-      extensions::ExtensionRegistry::Get(ProfileHelper::GetSigninProfile()));
+  extension_registry_observation_.Observe(extensions::ExtensionRegistry::Get(
+      ash::ProfileHelper::GetSigninProfile()));
 }
 
 UiHandler::~UiHandler() = default;
@@ -222,6 +222,4 @@
   return current_window_->window.get();
 }
 
-}  // namespace login_screen_extension_ui
-
-}  // namespace chromeos
+}  // namespace chromeos::login_screen_extension_ui
diff --git a/chrome/browser/ash/extensions/login_screen_ui/ui_handler.h b/chrome/browser/ash/extensions/login_screen_ui/ui_handler.h
index e066e822..48ceeb6 100644
--- a/chrome/browser/ash/extensions/login_screen_ui/ui_handler.h
+++ b/chrome/browser/ash/extensions/login_screen_ui/ui_handler.h
@@ -11,28 +11,31 @@
 #include "base/functional/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
-// TODO(https://crbug.com/1164001): use forward declaration.
-#include "chrome/browser/ash/login/ui/login_screen_extension_ui/window.h"
 #include "components/session_manager/core/session_manager.h"
 #include "components/session_manager/core/session_manager_observer.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_registry_observer.h"
 #include "extensions/browser/unloaded_extension_reason.h"
 
+namespace ash::login_screen_extension_ui {
+class Window;
+class WindowFactory;
+}  // namespace ash::login_screen_extension_ui
+
 namespace extensions {
 class Extension;
 }  // namespace extensions
 
-namespace chromeos {
-namespace login_screen_extension_ui {
+namespace chromeos::login_screen_extension_ui {
 
 struct ExtensionIdToWindowMapping {
-  ExtensionIdToWindowMapping(const std::string& extension_id,
-                             std::unique_ptr<Window> window);
+  ExtensionIdToWindowMapping(
+      const std::string& extension_id,
+      std::unique_ptr<ash::login_screen_extension_ui::Window> window);
   ~ExtensionIdToWindowMapping();
 
   const std::string extension_id;
-  std::unique_ptr<Window> window;
+  std::unique_ptr<ash::login_screen_extension_ui::Window> window;
 };
 
 // This class receives calls from the chrome.loginScreenUi API and manages the
@@ -51,7 +54,9 @@
   static UiHandler* Get(bool can_create);
   static void Shutdown();
 
-  explicit UiHandler(std::unique_ptr<WindowFactory> window_factory);
+  explicit UiHandler(
+      std::unique_ptr<ash::login_screen_extension_ui::WindowFactory>
+          window_factory);
 
   UiHandler(const UiHandler&) = delete;
   UiHandler& operator=(const UiHandler&) = delete;
@@ -85,7 +90,8 @@
   // session_manager::SessionManagerObserver
   void OnSessionStateChanged() override;
 
-  Window* GetWindowForTesting(const std::string& extension_id);
+  ash::login_screen_extension_ui::Window* GetWindowForTesting(
+      const std::string& extension_id);
 
  private:
   void UpdateSessionState();
@@ -102,7 +108,8 @@
 
   void HandleExtensionUnloadOrUinstall(const extensions::Extension* extension);
 
-  std::unique_ptr<WindowFactory> window_factory_;
+  std::unique_ptr<ash::login_screen_extension_ui::WindowFactory>
+      window_factory_;
 
   bool login_or_lock_screen_active_ = false;
 
@@ -120,8 +127,6 @@
   base::WeakPtrFactory<UiHandler> weak_ptr_factory_{this};
 };
 
-}  // namespace login_screen_extension_ui
-
-}  // namespace chromeos
+}  // namespace chromeos::login_screen_extension_ui
 
 #endif  // CHROME_BROWSER_ASH_EXTENSIONS_LOGIN_SCREEN_UI_UI_HANDLER_H_
diff --git a/chrome/browser/ash/extensions/login_screen_ui/ui_handler_unittest.cc b/chrome/browser/ash/extensions/login_screen_ui/ui_handler_unittest.cc
index 13fce64..9bb00d4 100644
--- a/chrome/browser/ash/extensions/login_screen_ui/ui_handler_unittest.cc
+++ b/chrome/browser/ash/extensions/login_screen_ui/ui_handler_unittest.cc
@@ -26,12 +26,14 @@
 #include "extensions/common/features/feature_channel.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using extensions::mojom::ManifestLocation;
+namespace chromeos::login_screen_extension_ui {
 
 namespace {
 
-// TODO(https://crbug.com/1164001): remove after migrating to ash.
-using ::ash::StubInstallAttributes;
+using ::ash::login_screen_extension_ui::CreateOptions;
+using ::ash::login_screen_extension_ui::Window;
+using ::ash::login_screen_extension_ui::WindowFactory;
+using ::extensions::mojom::ManifestLocation;
 
 const char kErrorWindowAlreadyExists[] =
     "Login screen extension UI already in use.";
@@ -50,10 +52,6 @@
 
 }  // namespace
 
-namespace chromeos {
-
-namespace login_screen_extension_ui {
-
 class FakeWindowFactory : public WindowFactory {
  public:
   FakeWindowFactory() = default;
@@ -213,7 +211,7 @@
 
   session_manager::SessionManager session_manager_;
   TestingProfileManager profile_manager_;
-  StubInstallAttributes* stub_install_attributes_ = nullptr;
+  ash::StubInstallAttributes* stub_install_attributes_ = nullptr;
   extensions::ExtensionRegistry* extension_registry_ = nullptr;
   scoped_refptr<const extensions::Extension> extension_;
 
@@ -407,6 +405,4 @@
   CheckCannotUseAPI(extension_.get());
 }
 
-}  // namespace login_screen_extension_ui
-
-}  // namespace chromeos
+}  // namespace chromeos::login_screen_extension_ui
diff --git a/chrome/browser/ash/extensions/signin_screen_extensions_external_loader.cc b/chrome/browser/ash/extensions/signin_screen_extensions_external_loader.cc
index 2ecd67f..723527e 100644
--- a/chrome/browser/ash/extensions/signin_screen_extensions_external_loader.cc
+++ b/chrome/browser/ash/extensions/signin_screen_extensions_external_loader.cc
@@ -62,7 +62,7 @@
           /*always_check_updates=*/true,
           /*wait_for_cache_initialization=*/false,
           /*allow_scheduled_updates=*/false) {
-  DCHECK(ProfileHelper::IsSigninProfile(profile));
+  DCHECK(ash::ProfileHelper::IsSigninProfile(profile));
 }
 
 void SigninScreenExtensionsExternalLoader::StartLoading() {
diff --git a/chrome/browser/ash/fusebox/fusebox_server.cc b/chrome/browser/ash/fusebox/fusebox_server.cc
index b00e180..3a26d8c 100644
--- a/chrome/browser/ash/fusebox/fusebox_server.cc
+++ b/chrome/browser/ash/fusebox/fusebox_server.cc
@@ -15,6 +15,7 @@
 #include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
+#include "base/types/expected.h"
 #include "chrome/browser/ash/file_manager/fileapi_util.h"
 #include "chrome/browser/ash/file_manager/path_util.h"
 #include "chrome/browser/ash/fusebox/fusebox_errno.h"
@@ -62,61 +63,65 @@
                         iter->second.read_only);
 }
 
-// ParseResult is the type returned by ParseFileSystemURL. It is a result type
-// (see https://en.wikipedia.org/wiki/Result_type), being either an error or a
-// value. In this case, the error type is a base::File::Error (a numeric code)
-// and the value type is the storage::FileSystemContext and the
-// storage::FileSystemURL (and some other incidental fields).
-struct ParseResult {
-  explicit ParseResult(base::File::Error error_code_arg);
-  ParseResult(scoped_refptr<storage::FileSystemContext> fs_context_arg,
-              storage::FileSystemURL fs_url_arg,
-              bool read_only_arg);
-  ~ParseResult();
+// Parsed is the T in the base::expected<T, E> type returned by
+// ParseFileSystemURL. It holds a storage::FileSystemContext, a
+// storage::FileSystemURL and read-only-ness.
+struct Parsed {
+  Parsed(scoped_refptr<storage::FileSystemContext> fs_context_arg,
+         storage::FileSystemURL fs_url_arg,
+         bool read_only_arg);
+  ~Parsed();
 
-  base::File::Error error_code;
   scoped_refptr<storage::FileSystemContext> fs_context;
-  storage::FileSystemURL fs_url;
-  bool read_only = false;
-
-  // is_moniker_root is used for the special case where the server is passed
-  // fusebox::kMonikerSubdir (also known as "moniker"). There is no
-  // FileSystemURL registered for "moniker" (as opposed to for
-  // "moniker/1234etc"), so ParseFileSystemURL (which returns a valid
-  // FileSystemURL on success) must return an error. However, Stat2 or ReadDir2
-  // on "moniker" should succeed (but return an empty directory).
-  bool is_moniker_root = false;
+  const storage::FileSystemURL fs_url;
+  const bool read_only;
 };
 
-ParseResult::ParseResult(base::File::Error error_code_arg)
-    : error_code(error_code_arg) {}
-
-ParseResult::ParseResult(
-    scoped_refptr<storage::FileSystemContext> fs_context_arg,
-    storage::FileSystemURL fs_url_arg,
-    bool read_only_arg)
-    : error_code(base::File::Error::FILE_OK),
-      fs_context(std::move(fs_context_arg)),
+Parsed::Parsed(scoped_refptr<storage::FileSystemContext> fs_context_arg,
+               storage::FileSystemURL fs_url_arg,
+               bool read_only_arg)
+    : fs_context(std::move(fs_context_arg)),
       fs_url(std::move(fs_url_arg)),
       read_only(read_only_arg) {}
 
-ParseResult::~ParseResult() = default;
+Parsed::~Parsed() = default;
 
-// All of the Server methods' arguments start with a FileSystemURL (as a
-// string). This function parses that first argument as well as finding the
-// FileSystemContext we will need to serve those methods.
-ParseResult ParseFileSystemURL(const fusebox::MonikerMap& moniker_map,
-                               const fusebox::Server::PrefixMap& prefix_map,
-                               const std::string& fs_url_as_string) {
+struct ParseError {
+  explicit ParseError(int posix_error_code_arg,
+                      bool is_moniker_root_arg = false);
+
+  const int posix_error_code;
+  // is_moniker_root is used for the special case where the file_system_url is
+  // fusebox::kMonikerSubdir (also known as "moniker"). There is no
+  // storage::FileSystemURL registered for "moniker" (as opposed to for
+  // "moniker/1234etc"), so ParseFileSystemURL (which returns a valid
+  // storage::FileSystemURL on success) must return an error. However, Stat2 or
+  // ReadDir2 on "moniker" should succeed (but return an empty directory).
+  const bool is_moniker_root;
+};
+
+ParseError::ParseError(int posix_error_code_arg, bool is_moniker_root_arg)
+    : posix_error_code(posix_error_code_arg),
+      is_moniker_root(is_moniker_root_arg) {}
+
+// All of the Server methods' take a protobuf argument. Many protobufs have a
+// file_system_url field (a string). This function parses that string as a
+// storage::FileSystemURL (resolving it in the context of the MonikerMap and
+// PrefixMap) as well as finding the storage::FileSystemContext we will need to
+// serve those methods.
+base::expected<Parsed, ParseError> ParseFileSystemURL(
+    const fusebox::MonikerMap& moniker_map,
+    const fusebox::Server::PrefixMap& prefix_map,
+    const std::string& fs_url_as_string) {
   scoped_refptr<storage::FileSystemContext> fs_context =
       file_manager::util::GetFileManagerFileSystemContext(
           ProfileManager::GetActiveUserProfile());
   if (fs_url_as_string.empty()) {
     LOG(ERROR) << "No FileSystemURL";
-    return ParseResult(base::File::Error::FILE_ERROR_INVALID_URL);
+    return base::unexpected(ParseError(EINVAL));
   } else if (!fs_context) {
     LOG(ERROR) << "No FileSystemContext";
-    return ParseResult(base::File::Error::FILE_ERROR_FAILED);
+    return base::unexpected(ParseError(EFAULT));
   }
 
   storage::FileSystemURL fs_url;
@@ -131,7 +136,7 @@
       auto resolved = moniker_map.Resolve(extract_token_result.token);
       if (!resolved.first.is_valid()) {
         LOG(ERROR) << "Unresolvable Moniker";
-        return ParseResult(base::File::Error::FILE_ERROR_NOT_FOUND);
+        return base::unexpected(ParseError(ENOENT));
       }
       fs_url = std::move(resolved.first);
       read_only = resolved.second;
@@ -141,31 +146,29 @@
       auto resolved = ResolvePrefixMap(prefix_map, fs_url_as_string);
       if (resolved.first.empty()) {
         LOG(ERROR) << "Unresolvable Prefix";
-        return ParseResult(base::File::Error::FILE_ERROR_NOT_FOUND);
+        return base::unexpected(ParseError(ENOENT));
       }
       read_only = resolved.second;
       fs_url = fs_context->CrackURLInFirstPartyContext(GURL(resolved.first));
       if (!fs_url.is_valid()) {
         LOG(ERROR) << "Invalid FileSystemURL";
-        return ParseResult(base::File::Error::FILE_ERROR_INVALID_URL);
+        return base::unexpected(ParseError(EINVAL));
       }
       break;
     }
     case ResultType::MONIKER_FS_URL_BUT_ONLY_ROOT: {
-      ParseResult result = ParseResult(base::File::Error::FILE_ERROR_NOT_FOUND);
-      result.is_moniker_root = true;
-      return result;
+      return base::unexpected(ParseError(ENOENT, true));
     }
     case ResultType::MONIKER_FS_URL_BUT_NOT_WELL_FORMED:
-      return ParseResult(base::File::Error::FILE_ERROR_NOT_FOUND);
+      return base::unexpected(ParseError(ENOENT));
   }
 
   if (!fs_context->external_backend()->CanHandleType(fs_url.type())) {
     LOG(ERROR) << "Backend cannot handle "
                << storage::GetFileSystemTypeString(fs_url.type());
-    return ParseResult(base::File::Error::FILE_ERROR_INVALID_URL);
+    return base::unexpected(ParseError(EINVAL));
   }
-  return ParseResult(std::move(fs_context), std::move(fs_url), read_only);
+  return Parsed(std::move(fs_context), std::move(fs_url), read_only);
 }
 
 // Some functions (marked with a §) below, take an fs_context argument that
@@ -677,13 +680,13 @@
                                      ? request_proto.file_system_url()
                                      : std::string();
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.error_code != base::File::Error::FILE_OK) {
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     CreateResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    response_proto.set_posix_error_code(parsed.error().posix_error_code);
     std::move(callback).Run(response_proto);
     return;
-  } else if (common.read_only) {
+  } else if (parsed->read_only) {
     CreateResponseProto response_proto;
     response_proto.set_posix_error_code(EACCES);
     std::move(callback).Run(response_proto);
@@ -695,7 +698,7 @@
   bool use_temp_file = writable && UseTempFile(fs_url_as_string);
 
   uint64_t fuse_handle = InsertFuseFileMapEntry(FuseFileMapEntry(
-      common.fs_context, common.fs_url,
+      parsed->fs_context, parsed->fs_url,
       use_temp_file
           ? ProfileManager::GetActiveUserProfile()->GetPath().AsUTF8Unsafe()
           : std::string(),
@@ -709,7 +712,7 @@
     info.creation_time = now;
     CreateResponseProto response_proto;
     response_proto.set_fuse_handle(fuse_handle);
-    FillInDirEntryProto(response_proto.mutable_stat(), info, common.read_only);
+    FillInDirEntryProto(response_proto.mutable_stat(), info, parsed->read_only);
     std::move(callback).Run(response_proto);
     return;
   }
@@ -719,18 +722,18 @@
 
   auto outer_callback = base::BindPostTask(
       base::SequencedTaskRunner::GetCurrentDefault(),
-      base::BindOnce(&RunCreateCallback, std::move(callback), common.fs_context,
-                     common.fs_url, common.read_only, fuse_handle,
-                     std::move(on_failure)));
+      base::BindOnce(&RunCreateCallback, std::move(callback),
+                     parsed->fs_context, parsed->fs_url, parsed->read_only,
+                     fuse_handle, std::move(on_failure)));
 
   constexpr bool exclusive = true;
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
       base::BindOnce(
           base::IgnoreResult(&storage::FileSystemOperationRunner::CreateFile),
-          // Unretained is safe: context owns operation runner.
-          base::Unretained(common.fs_context->operation_runner()),
-          common.fs_url, exclusive, std::move(outer_callback)));
+          // Unretained is safe: fs_context owns its operation runner.
+          base::Unretained(parsed->fs_context->operation_runner()),
+          parsed->fs_url, exclusive, std::move(outer_callback)));
 }
 
 void Server::MkDir(const MkDirRequestProto& request_proto,
@@ -741,13 +744,13 @@
                                      ? request_proto.file_system_url()
                                      : std::string();
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.error_code != base::File::Error::FILE_OK) {
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     MkDirResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    response_proto.set_posix_error_code(parsed.error().posix_error_code);
     std::move(callback).Run(response_proto);
     return;
-  } else if (common.read_only) {
+  } else if (parsed->read_only) {
     MkDirResponseProto response_proto;
     response_proto.set_posix_error_code(EACCES);
     std::move(callback).Run(response_proto);
@@ -756,19 +759,19 @@
 
   auto outer_callback = base::BindPostTask(
       base::SequencedTaskRunner::GetCurrentDefault(),
-      base::BindOnce(&RunMkDirCallback, std::move(callback), common.fs_context,
-                     common.fs_url, common.read_only));
+      base::BindOnce(&RunMkDirCallback, std::move(callback), parsed->fs_context,
+                     parsed->fs_url, parsed->read_only));
 
   constexpr bool exclusive = true;
   constexpr bool recursive = false;
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
-      base::BindOnce(base::IgnoreResult(
-                         &storage::FileSystemOperationRunner::CreateDirectory),
-                     // Unretained is safe: context owns operation runner.
-                     base::Unretained(common.fs_context->operation_runner()),
-                     common.fs_url, exclusive, recursive,
-                     std::move(outer_callback)));
+      base::BindOnce(
+          base::IgnoreResult(
+              &storage::FileSystemOperationRunner::CreateDirectory),
+          // Unretained is safe: fs_context owns its operation runner.
+          base::Unretained(parsed->fs_context->operation_runner()),
+          parsed->fs_url, exclusive, recursive, std::move(outer_callback)));
 }
 
 void Server::Open2(const Open2RequestProto& request_proto,
@@ -782,10 +785,10 @@
                                ? request_proto.access_mode()
                                : AccessMode::NO_ACCESS;
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.error_code != base::File::Error::FILE_OK) {
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     Open2ResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    response_proto.set_posix_error_code(parsed.error().posix_error_code);
     std::move(callback).Run(response_proto);
     return;
   }
@@ -793,8 +796,8 @@
   bool readable = (access_mode == AccessMode::READ_ONLY) ||
                   (access_mode == AccessMode::READ_WRITE);
   bool writable =
-      !common.read_only && ((access_mode == AccessMode::WRITE_ONLY) ||
-                            (access_mode == AccessMode::READ_WRITE));
+      !parsed->read_only && ((access_mode == AccessMode::WRITE_ONLY) ||
+                             (access_mode == AccessMode::READ_WRITE));
   bool use_temp_file = writable && UseTempFile(fs_url_as_string);
   if (use_temp_file) {
     // TODO(b/255703917): allow use_temp_file when modifying existing files,
@@ -806,7 +809,7 @@
   }
 
   uint64_t fuse_handle = InsertFuseFileMapEntry(
-      FuseFileMapEntry(std::move(common.fs_context), std::move(common.fs_url),
+      FuseFileMapEntry(std::move(parsed->fs_context), std::move(parsed->fs_url),
                        std::string(), readable, writable, use_temp_file));
 
   Open2ResponseProto response_proto;
@@ -855,15 +858,14 @@
                                   ? request_proto.cancel_error_code()
                                   : 0;
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.is_moniker_root) {
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     ReadDir2ResponseProto response_proto;
-    response_proto.set_posix_error_code(0);
-    std::move(callback).Run(response_proto);
-    return;
-  } else if (common.error_code != base::File::Error::FILE_OK) {
-    ReadDir2ResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    if (parsed.error().is_moniker_root) {
+      response_proto.set_posix_error_code(0);
+    } else {
+      response_proto.set_posix_error_code(parsed.error().posix_error_code);
+    }
     std::move(callback).Run(response_proto);
     return;
   } else if (cancel_error_code) {
@@ -892,17 +894,17 @@
   auto outer_callback = base::BindPostTask(
       base::SequencedTaskRunner::GetCurrentDefault(),
       base::BindRepeating(&Server::OnReadDirectory,
-                          weak_ptr_factory_.GetWeakPtr(), common.fs_context,
-                          common.read_only, cookie));
+                          weak_ptr_factory_.GetWeakPtr(), parsed->fs_context,
+                          parsed->read_only, cookie));
 
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
       base::BindRepeating(
           base::IgnoreResult(
               &storage::FileSystemOperationRunner::ReadDirectory),
-          // Unretained is safe: common.fs_context owns its operation_runner.
-          base::Unretained(common.fs_context->operation_runner()),
-          common.fs_url, std::move(outer_callback)));
+          // Unretained is safe: fs_context owns its operation_runner.
+          base::Unretained(parsed->fs_context->operation_runner()),
+          parsed->fs_url, std::move(outer_callback)));
 }
 
 void Server::RmDir(const RmDirRequestProto& request_proto,
@@ -913,13 +915,13 @@
                                      ? request_proto.file_system_url()
                                      : std::string();
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.error_code != base::File::Error::FILE_OK) {
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     RmDirResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    response_proto.set_posix_error_code(parsed.error().posix_error_code);
     std::move(callback).Run(response_proto);
     return;
-  } else if (common.read_only) {
+  } else if (parsed->read_only) {
     RmDirResponseProto response_proto;
     response_proto.set_posix_error_code(EACCES);
     std::move(callback).Run(response_proto);
@@ -929,15 +931,16 @@
   auto outer_callback =
       base::BindPostTask(base::SequencedTaskRunner::GetCurrentDefault(),
                          base::BindOnce(&RunRmDirCallback, std::move(callback),
-                                        common.fs_context));
+                                        parsed->fs_context));
 
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
-      base::BindOnce(base::IgnoreResult(
-                         &storage::FileSystemOperationRunner::RemoveDirectory),
-                     // Unretained is safe: context owns operation runner.
-                     base::Unretained(common.fs_context->operation_runner()),
-                     common.fs_url, std::move(outer_callback)));
+      base::BindOnce(
+          base::IgnoreResult(
+              &storage::FileSystemOperationRunner::RemoveDirectory),
+          // Unretained is safe: fs_context owns its operation runner.
+          base::Unretained(parsed->fs_context->operation_runner()),
+          parsed->fs_url, std::move(outer_callback)));
 }
 
 void Server::Stat2(const Stat2RequestProto& request_proto,
@@ -948,18 +951,17 @@
                                      ? request_proto.file_system_url()
                                      : std::string();
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.is_moniker_root) {
-    constexpr bool is_directory = true;
-    constexpr bool read_only = true;
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     Stat2ResponseProto response_proto;
-    DirEntryProto* stat = response_proto.mutable_stat();
-    stat->set_mode_bits(Server::MakeModeBits(is_directory, read_only));
-    std::move(callback).Run(response_proto);
-    return;
-  } else if (common.error_code != base::File::Error::FILE_OK) {
-    Stat2ResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    if (parsed.error().is_moniker_root) {
+      DirEntryProto* stat = response_proto.mutable_stat();
+      constexpr bool is_directory = true;
+      constexpr bool read_only = true;
+      stat->set_mode_bits(Server::MakeModeBits(is_directory, read_only));
+    } else {
+      response_proto.set_posix_error_code(parsed.error().posix_error_code);
+    }
     std::move(callback).Run(response_proto);
     return;
   }
@@ -972,15 +974,15 @@
   auto outer_callback =
       base::BindPostTask(base::SequencedTaskRunner::GetCurrentDefault(),
                          base::BindOnce(&RunStat2Callback, std::move(callback),
-                                        common.fs_context, common.read_only));
+                                        parsed->fs_context, parsed->read_only));
 
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
       base::BindOnce(
           base::IgnoreResult(&storage::FileSystemOperationRunner::GetMetadata),
-          // Unretained is safe: common.fs_context owns its operation_runner.
-          base::Unretained(common.fs_context->operation_runner()),
-          common.fs_url, metadata_fields, std::move(outer_callback)));
+          // Unretained is safe: fs_context owns its operation_runner.
+          base::Unretained(parsed->fs_context->operation_runner()),
+          parsed->fs_url, metadata_fields, std::move(outer_callback)));
 }
 
 void Server::Truncate(const TruncateRequestProto& request_proto,
@@ -991,13 +993,13 @@
                                      ? request_proto.file_system_url()
                                      : std::string();
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.error_code != base::File::Error::FILE_OK) {
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     TruncateResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    response_proto.set_posix_error_code(parsed.error().posix_error_code);
     std::move(callback).Run(response_proto);
     return;
-  } else if (common.read_only) {
+  } else if (parsed->read_only) {
     TruncateResponseProto response_proto;
     response_proto.set_posix_error_code(EACCES);
     std::move(callback).Run(response_proto);
@@ -1007,15 +1009,15 @@
   auto outer_callback = base::BindPostTask(
       base::SequencedTaskRunner::GetCurrentDefault(),
       base::BindOnce(&RunTruncateCallback, std::move(callback),
-                     common.fs_context, common.fs_url, common.read_only));
+                     parsed->fs_context, parsed->fs_url, parsed->read_only));
 
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
       base::BindOnce(
           base::IgnoreResult(&storage::FileSystemOperationRunner::Truncate),
-          // Unretained is safe: context owns operation runner.
-          base::Unretained(common.fs_context->operation_runner()),
-          common.fs_url,
+          // Unretained is safe: fs_context owns its operation runner.
+          base::Unretained(parsed->fs_context->operation_runner()),
+          parsed->fs_url,
           request_proto.has_length() ? request_proto.length() : 0,
           std::move(outer_callback)));
 }
@@ -1028,13 +1030,13 @@
                                      ? request_proto.file_system_url()
                                      : std::string();
 
-  auto common = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
-  if (common.error_code != base::File::Error::FILE_OK) {
+  auto parsed = ParseFileSystemURL(moniker_map_, prefix_map_, fs_url_as_string);
+  if (!parsed.has_value()) {
     UnlinkResponseProto response_proto;
-    response_proto.set_posix_error_code(FileErrorToErrno(common.error_code));
+    response_proto.set_posix_error_code(parsed.error().posix_error_code);
     std::move(callback).Run(response_proto);
     return;
-  } else if (common.read_only) {
+  } else if (parsed->read_only) {
     UnlinkResponseProto response_proto;
     response_proto.set_posix_error_code(EACCES);
     std::move(callback).Run(response_proto);
@@ -1044,15 +1046,15 @@
   auto outer_callback =
       base::BindPostTask(base::SequencedTaskRunner::GetCurrentDefault(),
                          base::BindOnce(&RunUnlinkCallback, std::move(callback),
-                                        common.fs_context));
+                                        parsed->fs_context));
 
   content::GetIOThreadTaskRunner({})->PostTask(
       FROM_HERE,
       base::BindOnce(
           base::IgnoreResult(&storage::FileSystemOperationRunner::RemoveFile),
-          // Unretained is safe: context owns operation runner.
-          base::Unretained(common.fs_context->operation_runner()),
-          common.fs_url, std::move(outer_callback)));
+          // Unretained is safe: fs_context owns its operation runner.
+          base::Unretained(parsed->fs_context->operation_runner()),
+          parsed->fs_url, std::move(outer_callback)));
 }
 
 void Server::Write2(const Write2RequestProto& request_proto,
diff --git a/chrome/browser/ash/fusebox/fusebox_server.h b/chrome/browser/ash/fusebox/fusebox_server.h
index 820f419..9d7ee12 100644
--- a/chrome/browser/ash/fusebox/fusebox_server.h
+++ b/chrome/browser/ash/fusebox/fusebox_server.h
@@ -84,9 +84,15 @@
   // library functions of the same name. For example, the Stat method here
   // corresponds to the standard stat function described by "man 2 stat".
   //
-  // These methods take a fs_url_as_string argument, roughly equivalent to a
-  // POSIX filename that identifies a file or directory, but are a
-  // storage::FileSystemURL (in string form).
+  // These methods all take a protobuf argument and return (via a callback)
+  // another protobuf. Many of the request protos have a string-typed
+  // file_system_url field, roughly equivalent to a POSIX filename for a file
+  // or directory. These used to be full storage::FileSystemURL strings (e.g.
+  // "filesystem:chrome://file-manager/external/foo/com.bar/baz/p/q.txt") but
+  // today look like "subdir/p/q.txt". The PrefixMap is used to resolve the
+  // "subdir" prefix to recreate the storage::FileSystemURL.
+  //
+  // See system_api/dbus/fusebox/fusebox.proto for more commentary.
 
   // Close2 closes a virtual file opened by Open2.
   using Close2Callback =
@@ -113,16 +119,7 @@
       base::OnceCallback<void(const Read2ResponseProto& response)>;
   void Read2(const Read2RequestProto& request, Read2Callback callback);
 
-  // ReadDir2 lists the directory's children. The results will be sent back in
-  // the responses of one or more request-response RPC pairs. The first request
-  // and last response have a zero cookie value. The remaining RPCs will have
-  // the same server-chosen, non-zero cookie value.
-  //
-  // The request's cancel_error_code is typically zero but if not, it is echoed
-  // in the response (which becomes the final response) and indicates that the
-  // D-Bus client is cancelling the overall "read a directory" operation.
-  //
-  // TODO(crbug.com/1363861): document the D-Bus protocol separately.
+  // ReadDir2 lists the directory's children.
   using ReadDir2Callback =
       base::OnceCallback<void(const ReadDir2ResponseProto& response)>;
   void ReadDir2(const ReadDir2RequestProto& request, ReadDir2Callback callback);
diff --git a/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.cc b/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.cc
index 89b14cb..eb8cd07d 100644
--- a/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.cc
+++ b/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.cc
@@ -14,6 +14,7 @@
 #include "base/task/task_traits.h"
 #include "base/task/thread_pool.h"
 #include "base/values.h"
+#include "chrome/browser/ash/extensions/external_cache.h"
 #include "chrome/browser/ash/extensions/external_cache_impl.h"
 #include "chrome/browser/ash/login/demo_mode/demo_components.h"
 #include "chrome/browser/ash/login/demo_mode/demo_session.h"
@@ -26,6 +27,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace ash {
+
 namespace {
 
 // Arbitrary, but reasonable size limit in bytes for prefs file.
@@ -89,7 +91,7 @@
     prefs.Set(app, std::move(app_dict));
   }
   if (!external_cache_) {
-    external_cache_ = std::make_unique<ExternalCacheImpl>(
+    external_cache_ = std::make_unique<chromeos::ExternalCacheImpl>(
         cache_dir_, g_browser_process->shared_url_loader_factory(),
         extensions::GetExtensionFileTaskRunner(), this,
         true /* always_check_updates */,
diff --git a/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.h b/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.h
index 0275c5f..619002e 100644
--- a/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.h
+++ b/chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.h
@@ -10,11 +10,9 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-// TODO(https://crbug.com/1164001): move to forward declaration
-#include "chrome/browser/ash/extensions/external_cache.h"
 #include "chrome/browser/ash/extensions/external_cache_delegate.h"
 #include "chrome/browser/extensions/external_loader.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 class Profile;
 
@@ -22,6 +20,10 @@
 class Value;
 }
 
+namespace chromeos {
+class ExternalCache;
+}
+
 namespace ash {
 
 // External loader for extensions to be loaded into demo mode sessions. The CRX
@@ -33,7 +35,7 @@
 // extensions provider.
 // NOTE: The class is expected to be used on the UI thread exclusively.
 class DemoExtensionsExternalLoader : public extensions::ExternalLoader,
-                                     public ExternalCacheDelegate {
+                                     public chromeos::ExternalCacheDelegate {
  public:
   // Whether demo apps should be loaded for the profile - i.e. whether the
   // profile is the primary profile in a demo session.
@@ -51,7 +53,7 @@
   // extensions::ExternalLoader:
   void StartLoading() override;
 
-  // ExternalCacheDelegate:
+  // chromeos::ExternalCacheDelegate:
   void OnExtensionListsUpdated(const base::Value::Dict& prefs) override;
 
  protected:
@@ -68,7 +70,7 @@
   void DemoExternalExtensionsPrefsLoaded(
       absl::optional<base::Value::Dict> prefs);
 
-  std::unique_ptr<ExternalCache> external_cache_;
+  std::unique_ptr<chromeos::ExternalCache> external_cache_;
 
   const base::FilePath cache_dir_;
 
diff --git a/chrome/browser/ash/login/screens/choobe_screen.h b/chrome/browser/ash/login/screens/choobe_screen.h
index 1f48992e..dbda46bc 100644
--- a/chrome/browser/ash/login/screens/choobe_screen.h
+++ b/chrome/browser/ash/login/screens/choobe_screen.h
@@ -60,10 +60,4 @@
 
 }  // namespace ash
 
-// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
-// source migration is finished.
-namespace chromeos {
-using ::ash ::ChoobeScreen;
-}
-
 #endif  // CHROME_BROWSER_ASH_LOGIN_SCREENS_CHOOBE_SCREEN_H_
diff --git a/chrome/browser/ash/login/ui/login_screen_extension_ui/create_options.h b/chrome/browser/ash/login/ui/login_screen_extension_ui/create_options.h
index 1208051c..d97f8a79 100644
--- a/chrome/browser/ash/login/ui/login_screen_extension_ui/create_options.h
+++ b/chrome/browser/ash/login/ui/login_screen_extension_ui/create_options.h
@@ -33,12 +33,4 @@
 }  // namespace login_screen_extension_ui
 }  // namespace ash
 
-// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
-// source migration is finished.
-namespace chromeos {
-namespace login_screen_extension_ui {
-using ::ash::login_screen_extension_ui::CreateOptions;
-}
-}  // namespace chromeos
-
 #endif  // CHROME_BROWSER_ASH_LOGIN_UI_LOGIN_SCREEN_EXTENSION_UI_CREATE_OPTIONS_H_
diff --git a/chrome/browser/ash/login/ui/login_screen_extension_ui/window.h b/chrome/browser/ash/login/ui/login_screen_extension_ui/window.h
index 9b63737..8ab86e91 100644
--- a/chrome/browser/ash/login/ui/login_screen_extension_ui/window.h
+++ b/chrome/browser/ash/login/ui/login_screen_extension_ui/window.h
@@ -55,13 +55,4 @@
 }  // namespace login_screen_extension_ui
 }  // namespace ash
 
-// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
-// source migration is finished.
-namespace chromeos {
-namespace login_screen_extension_ui {
-using ::ash::login_screen_extension_ui::Window;
-using ::ash::login_screen_extension_ui::WindowFactory;
-}  // namespace login_screen_extension_ui
-}  // namespace chromeos
-
 #endif  // CHROME_BROWSER_ASH_LOGIN_UI_LOGIN_SCREEN_EXTENSION_UI_WINDOW_H_
diff --git a/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger.cc b/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger.cc
new file mode 100644
index 0000000..ef22f27b
--- /dev/null
+++ b/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger.cc
@@ -0,0 +1,61 @@
+// 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/ash/privacy_hub/privacy_hub_hats_trigger.h"
+
+#include "chrome/browser/ash/hats/hats_config.h"
+#include "chrome/browser/ash/hats/hats_notification_controller.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "components/session_manager/core/session_manager.h"
+
+namespace ash {
+namespace {
+const HatsConfig& kHatsConfig = kPrivacyHubBaselineSurvey;
+}
+
+PrivacyHubHatsTrigger::PrivacyHubHatsTrigger() = default;
+PrivacyHubHatsTrigger::~PrivacyHubHatsTrigger() = default;
+
+void PrivacyHubHatsTrigger::ShowSurveyIfSelected() {
+  // The user has already seen a survey.
+  if (hats_controller_) {
+    return;
+  }
+
+  // We only show the survey if the current session is active.
+  if (session_manager::SessionManager::Get()->IsUserSessionBlocked()) {
+    return;
+  }
+
+  Profile* profile = GetProfile();
+  if (!profile) {
+    // This can happen in tests when there is no `ProfileManager` instance.
+    return;
+  }
+
+  if (HatsNotificationController::ShouldShowSurveyToProfile(profile,
+                                                            kHatsConfig)) {
+    hats_controller_ =
+        base::MakeRefCounted<HatsNotificationController>(profile, kHatsConfig);
+  }
+}
+
+void PrivacyHubHatsTrigger::SetNoProfileForTesting(const bool no_profile) {
+  no_profile_for_testing_ = no_profile;
+}
+
+const HatsNotificationController*
+PrivacyHubHatsTrigger::GetHatsNotificationControllerForTesting() const {
+  return hats_controller_.get();
+}
+
+Profile* PrivacyHubHatsTrigger::GetProfile() const {
+  if (no_profile_for_testing_) {
+    return nullptr;
+  }
+
+  return ProfileManager::GetActiveUserProfile();
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger.h b/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger.h
new file mode 100644
index 0000000..4b53c58
--- /dev/null
+++ b/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger.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 CHROME_BROWSER_ASH_PRIVACY_HUB_PRIVACY_HUB_HATS_TRIGGER_H_
+#define CHROME_BROWSER_ASH_PRIVACY_HUB_PRIVACY_HUB_HATS_TRIGGER_H_
+
+#include "base/memory/scoped_refptr.h"
+
+class Profile;
+
+namespace ash {
+
+class HatsNotificationController;
+
+// Implementation for the Privacy Hub Hats surveys.
+// This is a simple abstraction on top of the standard mechanisms to show a
+// survey within the PrivacyHub specific limits.
+class PrivacyHubHatsTrigger {
+ public:
+  PrivacyHubHatsTrigger();
+  PrivacyHubHatsTrigger(const PrivacyHubHatsTrigger&) = delete;
+  PrivacyHubHatsTrigger& operator=(const PrivacyHubHatsTrigger&) = delete;
+  ~PrivacyHubHatsTrigger();
+
+  // Show the survey to the current primary user if they are selected. If they
+  // aren't or any of the surveys preconditions aren't met this does nothing.
+  void ShowSurveyIfSelected();
+
+ private:
+  friend class PrivacyHubHatsTriggerTest;
+
+  const HatsNotificationController* GetHatsNotificationControllerForTesting()
+      const;
+  void SetNoProfileForTesting(bool no_profile);
+  Profile* GetProfile() const;
+
+  scoped_refptr<HatsNotificationController> hats_controller_;
+  bool no_profile_for_testing_ = false;
+};
+
+}  // namespace ash
+
+#endif
diff --git a/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger_browsertest.cc b/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger_browsertest.cc
new file mode 100644
index 0000000..cb1cfa52
--- /dev/null
+++ b/chrome/browser/ash/privacy_hub/privacy_hub_hats_trigger_browsertest.cc
@@ -0,0 +1,116 @@
+// 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/ash/privacy_hub/privacy_hub_hats_trigger.h"
+
+#include "ash/constants/ash_switches.h"
+#include "chrome/browser/ash/hats/hats_config.h"
+#include "chrome/browser/ash/hats/hats_notification_controller.h"
+#include "chrome/browser/notifications/notification_display_service_tester.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/common/chrome_features.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "components/session_manager/core/session_manager.h"
+#include "components/session_manager/session_manager_types.h"
+#include "content/public/test/browser_test.h"
+
+namespace ash {
+
+class PrivacyHubHatsTriggerTest : public InProcessBrowserTest {
+ public:
+  PrivacyHubHatsTriggerTest() {
+    scoped_feature_list_.InitAndEnableFeature(
+        kPrivacyHubBaselineSurvey.feature);
+  }
+  ~PrivacyHubHatsTriggerTest() override = default;
+
+  // InProcessBrowserTest:
+  void SetUpOnMainThread() override {
+    InProcessBrowserTest::SetUpOnMainThread();
+
+    display_service_ = std::make_unique<NotificationDisplayServiceTester>(
+        browser()->profile());
+  }
+
+  void SetUpDefaultCommandLine(base::CommandLine* command_line) override {
+    InProcessBrowserTest::SetUpDefaultCommandLine(command_line);
+
+    command_line->AppendSwitchASCII(
+        ash::switches::kForceHappinessTrackingSystem,
+        ::features::kHappinessTrackingPrivacyHubBaseline.name);
+  }
+
+  bool IsHatsNotificationActive() const {
+    return display_service_
+        ->GetNotification(HatsNotificationController::kNotificationId)
+        .has_value();
+  }
+
+  const HatsNotificationController* GetHatsNotificationController() const {
+    return privacy_hub_trigger_.GetHatsNotificationControllerForTesting();
+  }
+
+  void SetNoProfileForTesting() {
+    privacy_hub_trigger_.SetNoProfileForTesting(true);
+  }
+
+  base::test::ScopedFeatureList scoped_feature_list_;
+  PrivacyHubHatsTrigger privacy_hub_trigger_;
+
+  std::unique_ptr<NotificationDisplayServiceTester> display_service_;
+};
+
+IN_PROC_BROWSER_TEST_F(PrivacyHubHatsTriggerTest, ShowSurveySuccess) {
+  EXPECT_FALSE(IsHatsNotificationActive());
+
+  base::RunLoop loop;
+  display_service_->SetNotificationAddedClosure(loop.QuitClosure());
+  privacy_hub_trigger_.ShowSurveyIfSelected();
+
+  EXPECT_TRUE(GetHatsNotificationController());
+
+  loop.Run();
+
+  EXPECT_TRUE(IsHatsNotificationActive());
+}
+
+IN_PROC_BROWSER_TEST_F(PrivacyHubHatsTriggerTest, ShowSurveyOnlyOnce) {
+  EXPECT_FALSE(IsHatsNotificationActive());
+
+  // Show survey once
+  base::RunLoop loop;
+  display_service_->SetNotificationAddedClosure(loop.QuitClosure());
+  privacy_hub_trigger_.ShowSurveyIfSelected();
+  const HatsNotificationController* hats_notification_controller =
+      GetHatsNotificationController();
+  EXPECT_TRUE(hats_notification_controller);
+  loop.Run();
+  EXPECT_TRUE(IsHatsNotificationActive());
+
+  // Trigger survey again but the controller shouldn't be a new instance.
+  privacy_hub_trigger_.ShowSurveyIfSelected();
+
+  EXPECT_EQ(hats_notification_controller, GetHatsNotificationController());
+}
+
+IN_PROC_BROWSER_TEST_F(PrivacyHubHatsTriggerTest, NoActiveProfile) {
+  SetNoProfileForTesting();
+  EXPECT_FALSE(IsHatsNotificationActive());
+
+  privacy_hub_trigger_.ShowSurveyIfSelected();
+
+  EXPECT_FALSE(GetHatsNotificationController());
+}
+
+IN_PROC_BROWSER_TEST_F(PrivacyHubHatsTriggerTest, NoSurveyIfSessionNotActive) {
+  session_manager::SessionManager::Get()->SetSessionState(
+      session_manager::SessionState::LOCKED);
+  EXPECT_FALSE(IsHatsNotificationActive());
+
+  privacy_hub_trigger_.ShowSurveyIfSelected();
+
+  EXPECT_FALSE(GetHatsNotificationController());
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/profiles/profile_helper.h b/chrome/browser/ash/profiles/profile_helper.h
index c788a72..8968b3e 100644
--- a/chrome/browser/ash/profiles/profile_helper.h
+++ b/chrome/browser/ash/profiles/profile_helper.h
@@ -202,10 +202,4 @@
 
 }  // namespace ash
 
-// TODO(https://crbug.com/1164001): remove after //chrome/browser/chromeos
-// source migration is finished.
-namespace chromeos {
-using ::ash::ProfileHelper;
-}
-
 #endif  // CHROME_BROWSER_ASH_PROFILES_PROFILE_HELPER_H_
diff --git a/chrome/browser/ash/settings/cros_settings.h b/chrome/browser/ash/settings/cros_settings.h
index c843d52d..d4ea979 100644
--- a/chrome/browser/ash/settings/cros_settings.h
+++ b/chrome/browser/ash/settings/cros_settings.h
@@ -169,10 +169,4 @@
 
 }  // namespace ash
 
-// TODO(https://crbug.com/1164001): remove when Chrome OS code migration is
-// done.
-namespace chromeos {
-using ::ash::CrosSettings;
-}  // namespace chromeos
-
 #endif  // CHROME_BROWSER_ASH_SETTINGS_CROS_SETTINGS_H_
diff --git a/chrome/browser/ash/settings/scoped_cros_settings_test_helper.h b/chrome/browser/ash/settings/scoped_cros_settings_test_helper.h
index 9890a64..313506d 100644
--- a/chrome/browser/ash/settings/scoped_cros_settings_test_helper.h
+++ b/chrome/browser/ash/settings/scoped_cros_settings_test_helper.h
@@ -102,10 +102,4 @@
 
 }  // namespace ash
 
-// TODO(https://crbug.com/1164001): remove after //chrome/browser/chromeos
-// source migration is finished.
-namespace chromeos {
-using ::ash::ScopedCrosSettingsTestHelper;
-}  // namespace chromeos
-
 #endif  // CHROME_BROWSER_ASH_SETTINGS_SCOPED_CROS_SETTINGS_TEST_HELPER_H_
diff --git a/chrome/browser/ash/system_web_apps/BUILD.gn b/chrome/browser/ash/system_web_apps/BUILD.gn
index 0705e9d..994b8ec 100644
--- a/chrome/browser/ash/system_web_apps/BUILD.gn
+++ b/chrome/browser/ash/system_web_apps/BUILD.gn
@@ -92,6 +92,7 @@
     "//base",
     "//chrome/app:command_ids",
     "//chrome/browser/apps/app_service",
+    "//chrome/browser/ash:test_support",
     "//chrome/browser/ash/system_web_apps/test_support",
     "//chrome/browser/ash/system_web_apps/test_support:test_support_ui",
     "//chrome/browser/ash/system_web_apps/types",
diff --git a/chrome/browser/ash/telemetry_extension/probe_service_converters.cc b/chrome/browser/ash/telemetry_extension/probe_service_converters.cc
index 3f8681c..a50fcae4 100644
--- a/chrome/browser/ash/telemetry_extension/probe_service_converters.cc
+++ b/chrome/browser/ash/telemetry_extension/probe_service_converters.cc
@@ -96,8 +96,11 @@
   }
 
   return crosapi::mojom::ProbeAudioInfo::New(
-      input->output_mute, input->input_mute, input->underruns,
-      input->severe_underruns, std::move(output_nodes), std::move(input_nodes));
+      crosapi::mojom::BoolValue::New(input->output_mute),
+      crosapi::mojom::BoolValue::New(input->input_mute),
+      crosapi::mojom::UInt32Value::New(input->underruns),
+      crosapi::mojom::UInt32Value::New(input->severe_underruns),
+      std::move(output_nodes), std::move(input_nodes));
 }
 
 crosapi::mojom::ProbeAudioResultPtr UncheckedConvertPtr(
@@ -548,11 +551,11 @@
 
   auto result = crosapi::mojom::ProbeAudioInputNodeInfo::New();
 
-  result->id = input->id;
+  result->id = crosapi::mojom::UInt64Value::New(input->id);
   result->name = input->name;
   result->device_name = input->device_name;
-  result->active = input->active;
-  result->node_gain = input->input_node_gain;
+  result->active = crosapi::mojom::BoolValue::New(input->active);
+  result->node_gain = crosapi::mojom::UInt8Value::New(input->input_node_gain);
 
   return result;
 }
@@ -565,11 +568,11 @@
 
   auto result = crosapi::mojom::ProbeAudioOutputNodeInfo::New();
 
-  result->id = input->id;
+  result->id = crosapi::mojom::UInt64Value::New(input->id);
   result->name = input->name;
   result->device_name = input->device_name;
-  result->active = input->active;
-  result->node_volume = input->node_volume;
+  result->active = crosapi::mojom::BoolValue::New(input->active);
+  result->node_volume = crosapi::mojom::UInt8Value::New(input->node_volume);
 
   return result;
 }
diff --git a/chrome/browser/ash/telemetry_extension/probe_service_converters_unittest.cc b/chrome/browser/ash/telemetry_extension/probe_service_converters_unittest.cc
index 2fcd9aa1..8a2469b 100644
--- a/chrome/browser/ash/telemetry_extension/probe_service_converters_unittest.cc
+++ b/chrome/browser/ash/telemetry_extension/probe_service_converters_unittest.cc
@@ -14,6 +14,7 @@
 #include "chromeos/services/network_health/public/mojom/network_health_types.mojom.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace ash::converters {
 
@@ -136,7 +137,9 @@
 
   EXPECT_EQ(ConvertAudioInputNodePtr(std::move(input_node)),
             crosapi::mojom::ProbeAudioInputNodeInfo::New(
-                kId, kName, kDeviceName, kActive, kInputNodeGain));
+                crosapi::mojom::UInt64Value::New(kId), kName, kDeviceName,
+                crosapi::mojom::BoolValue::New(kActive),
+                crosapi::mojom::UInt8Value::New(kInputNodeGain)));
 
   EXPECT_EQ(ConvertAudioInputNodePtr(nullptr),
             crosapi::mojom::ProbeAudioInputNodeInfoPtr());
@@ -157,7 +160,9 @@
   output_node->node_volume = kNodeVolume;
   EXPECT_EQ(ConvertAudioOutputNodePtr(std::move(output_node)),
             crosapi::mojom::ProbeAudioOutputNodeInfo::New(
-                kId, kName, kDeviceName, kActive, kNodeVolume));
+                crosapi::mojom::UInt64Value::New(kId), kName, kDeviceName,
+                crosapi::mojom::BoolValue::New(kActive),
+                crosapi::mojom::UInt8Value::New(kNodeVolume)));
 
   EXPECT_EQ(ConvertAudioOutputNodePtr(nullptr),
             crosapi::mojom::ProbeAudioOutputNodeInfoPtr());
@@ -210,26 +215,31 @@
   std::vector<crosapi::mojom::ProbeAudioInputNodeInfoPtr>
       expected_input_node_info;
   auto expected_input = crosapi::mojom::ProbeAudioInputNodeInfo::New();
-  expected_input->id = kIdInput;
+  expected_input->id = crosapi::mojom::UInt64Value::New(kIdInput);
   expected_input->name = kNameInput;
   expected_input->device_name = kDeviceNameInput;
-  expected_input->active = kActiveInput;
-  expected_input->node_gain = kInputNodeGainInput;
+  expected_input->active = crosapi::mojom::BoolValue::New(kActiveInput);
+  expected_input->node_gain =
+      crosapi::mojom::UInt8Value::New(kInputNodeGainInput);
   expected_input_node_info.push_back(std::move(expected_input));
 
   std::vector<crosapi::mojom::ProbeAudioOutputNodeInfoPtr>
       expected_output_node_info;
   auto expected_output = crosapi::mojom::ProbeAudioOutputNodeInfo::New();
-  expected_output->id = kIdOutput;
+  expected_output->id = crosapi::mojom::UInt64Value::New(kIdOutput);
   expected_output->name = kNameOutput;
   expected_output->device_name = kDeviceNameOutput;
-  expected_output->active = kActiveOutput;
-  expected_output->node_volume = kNodeVolumeOutput;
+  expected_output->active = crosapi::mojom::BoolValue::New(kActiveOutput);
+  expected_output->node_volume =
+      crosapi::mojom::UInt8Value::New(kNodeVolumeOutput);
   expected_output_node_info.push_back(std::move(expected_output));
 
   EXPECT_EQ(ConvertProbePtr(std::move(input)),
             crosapi::mojom::ProbeAudioInfo::New(
-                kOutputMute, kInputMute, kUnderruns, kSevereUnderruns,
+                crosapi::mojom::BoolValue::New(kOutputMute),
+                crosapi::mojom::BoolValue::New(kInputMute),
+                crosapi::mojom::UInt32Value::New(kUnderruns),
+                crosapi::mojom::UInt32Value::New(kSevereUnderruns),
                 std::move(expected_output_node_info),
                 std::move(expected_input_node_info)));
 }
@@ -1217,7 +1227,12 @@
           crosapi::mojom::ProbeTpmResult::NewTpmInfo(
               crosapi::mojom::ProbeTpmInfo::New()),
           crosapi::mojom::ProbeAudioResult::NewAudioInfo(
-              crosapi::mojom::ProbeAudioInfo::New())));
+              crosapi::mojom::ProbeAudioInfo::New(
+                  crosapi::mojom::BoolValue::New(false),
+                  crosapi::mojom::BoolValue::New(false),
+                  crosapi::mojom::UInt32Value::New(0),
+                  crosapi::mojom::UInt32Value::New(0), absl::nullopt,
+                  absl::nullopt))));
 }
 
 TEST(ProbeServiceConverters, TelemetryInfoPtrWithNullFields) {
diff --git a/chrome/browser/autofill/BUILD.gn b/chrome/browser/autofill/BUILD.gn
index 25efc07f..5235a013 100644
--- a/chrome/browser/autofill/BUILD.gn
+++ b/chrome/browser/autofill/BUILD.gn
@@ -252,6 +252,7 @@
     if (is_chromeos_ash && enable_extensions) {
       deps += [
         "//chrome/browser/ash",
+        "//chrome/browser/ash:test_support",
         "//extensions/browser:test_support",
         "//ui/base:test_support",
       ]
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 0291fec2..b9f9b24 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -408,7 +408,6 @@
 
 source_set("unit_tests") {
   testonly = true
-  check_includes = false
 
   sources = [
     "app_mode/app_session_policies_unittest.cc",
@@ -548,6 +547,7 @@
           [ "extensions/printing_metrics/printing_metrics_api_unittest.cc" ]
       deps += [
         "//chrome/browser/ash:print_job_info_proto",
+        "//chrome/browser/ash:test_support",
         "//chrome/browser/chromeos/extensions/printing_metrics",
         "//chrome/common/extensions/api",
       ]
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn b/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn
index ce647da2..63fb291 100644
--- a/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn
+++ b/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn
@@ -136,6 +136,7 @@
     ]
 
     deps += [
+      "//chrome/browser/ash:test_support",
       "//chrome/browser/ash/telemetry_extension",
       "//components/user_manager",
     ]
diff --git a/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h b/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h
index cb51824..00f834d 100644
--- a/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h
+++ b/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h
@@ -48,9 +48,4 @@
 
 }  // namespace chromeos
 
-// TODO(https://crbug.com/1164001): remove when it moved to ash.
-namespace ash {
-using ::chromeos::VpnServiceFactory;
-}
-
 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_VPN_PROVIDER_VPN_SERVICE_FACTORY_H_
diff --git a/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc
index 5f4e74a..4236433 100644
--- a/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc
+++ b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc
@@ -16,11 +16,12 @@
 #include "components/prefs/pref_service.h"
 
 namespace chromeos {
+
 DeviceOAuth2TokenStoreChromeOS::DeviceOAuth2TokenStoreChromeOS(
     PrefService* local_state)
     : local_state_(local_state),
       service_account_identity_subscription_(
-          CrosSettings::Get()->AddSettingsObserver(
+          ash::CrosSettings::Get()->AddSettingsObserver(
               ash::kServiceAccountIdentity,
               base::BindRepeating(&DeviceOAuth2TokenStoreChromeOS::
                                       OnServiceAccountIdentityChanged,
@@ -47,7 +48,7 @@
 
 CoreAccountId DeviceOAuth2TokenStoreChromeOS::GetAccountId() const {
   std::string email;
-  CrosSettings::Get()->GetString(ash::kServiceAccountIdentity, &email);
+  ash::CrosSettings::Get()->GetString(ash::kServiceAccountIdentity, &email);
   return CoreAccountId::FromEmail(email);
 }
 
@@ -78,7 +79,7 @@
     TrustedAccountIdCallback callback) {
   // Make sure the value returned by GetRobotAccountId has been validated
   // against current device settings.
-  switch (CrosSettings::Get()->PrepareTrustedValues(
+  switch (ash::CrosSettings::Get()->PrepareTrustedValues(
       base::BindOnce(&DeviceOAuth2TokenStoreChromeOS::PrepareTrustedAccountId,
                      weak_ptr_factory_.GetWeakPtr(), callback))) {
     case ash::CrosSettingsProvider::TRUSTED:
diff --git a/chrome/browser/devtools/devtools_browsertest.cc b/chrome/browser/devtools/devtools_browsertest.cc
index 81c11a21..94b469df 100644
--- a/chrome/browser/devtools/devtools_browsertest.cc
+++ b/chrome/browser/devtools/devtools_browsertest.cc
@@ -29,6 +29,7 @@
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/browser_features.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/devtools/device/tcp_device_provider.h"
 #include "chrome/browser/devtools/devtools_window_testing.h"
@@ -2763,6 +2764,39 @@
   DevToolsWindowTesting::CloseDevToolsWindowSync(window);
 }
 
+class DevToolsTabTargetTest : public DevToolsTest {
+  base::test::ScopedFeatureList scoped_feature_list_{
+      ::features::kDevToolsTabTarget};
+};
+
+IN_PROC_BROWSER_TEST_F(DevToolsTabTargetTest, InspectElement) {
+  GURL url(
+      embedded_test_server()->GetURL("a.com", "/devtools/oopif_frame.html"));
+
+  WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
+
+  content::TestNavigationManager navigation_manager(tab, url);
+
+  tab->GetController().LoadURL(url, content::Referrer(),
+                               ui::PAGE_TRANSITION_LINK, std::string());
+
+  ASSERT_TRUE(navigation_manager.WaitForNavigationFinished());
+  EXPECT_TRUE(content::WaitForLoadStop(tab));
+
+  std::vector<RenderFrameHost*> frames =
+      CollectAllRenderFrameHosts(GetInspectedTab());
+  ASSERT_EQ(1u, frames.size());
+  RenderFrameHost* frame_host = frames[0];
+
+  DevToolsWindowCreationObserver observer;
+  DevToolsWindow::InspectElement(frame_host, 100, 100);
+  observer.WaitForLoad();
+  DevToolsWindow* window = observer.devtools_window();
+
+  DispatchOnTestSuite(window, "testInspectedElementIs", "INSPECTED-DIV");
+  DevToolsWindowTesting::CloseDevToolsWindowSync(window);
+}
+
 IN_PROC_BROWSER_TEST_F(DevToolsTest, ExistsForWebContentsAfterClosing) {
   ASSERT_FALSE(content::DevToolsAgentHost::HasFor(GetInspectedTab()));
 
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc
index c9b1469..6bdc83a 100644
--- a/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc
+++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc
@@ -265,6 +265,28 @@
   return insecure_credentials;
 }
 
+std::vector<api::passwords_private::PasswordUiEntryList>
+PasswordCheckDelegate::GetCredentialsWithReusedPassword() {
+  // Group credentials by password value.
+  std::map<std::u16string, std::vector<api::passwords_private::PasswordUiEntry>>
+      password_to_credentials;
+  for (auto& credential :
+       insecure_credentials_manager_.GetInsecureCredentialEntries()) {
+    if (credential.IsReused()) {
+      password_to_credentials[credential.password].push_back(
+          ConstructInsecureCredentialUiEntry(credential));
+    }
+  }
+  std::vector<api::passwords_private::PasswordUiEntryList> result;
+  result.reserve(password_to_credentials.size());
+  for (auto& pair : password_to_credentials) {
+    api::passwords_private::PasswordUiEntryList api_result;
+    api_result.entries = std::move(pair.second);
+    result.push_back(std::move(api_result));
+  }
+  return result;
+}
+
 bool PasswordCheckDelegate::MuteInsecureCredential(
     const api::passwords_private::PasswordUiEntry& credential) {
   // Try to obtain the original CredentialUIEntry. Return false if fails.
@@ -322,7 +344,12 @@
   insecure_credentials_manager_.StartWeakCheck(base::BindOnce(
       &PasswordCheckDelegate::RecordAndNotifyAboutCompletedWeakPasswordCheck,
       weak_ptr_factory_.GetWeakPtr()));
-
+  if (base::FeatureList::IsEnabled(
+          password_manager::features::kPasswordManagerRedesign)) {
+    insecure_credentials_manager_.StartReuseCheck(
+        base::BindOnce(&PasswordCheckDelegate::NotifyPasswordCheckStatusChanged,
+                       weak_ptr_factory_.GetWeakPtr()));
+  }
   auto progress = base::MakeRefCounted<PasswordCheckProgress>();
   for (const auto& password : saved_passwords_presenter_->GetSavedPasswords())
     progress->IncrementCounts(password);
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate.h b/chrome/browser/extensions/api/passwords_private/password_check_delegate.h
index 57375de..c17d2e0 100644
--- a/chrome/browser/extensions/api/passwords_private/password_check_delegate.h
+++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate.h
@@ -61,6 +61,11 @@
   // TODO:(crbug.com/1350947) - Rename to GetInsecureCredentialsUiEntry.
   std::vector<api::passwords_private::PasswordUiEntry> GetInsecureCredentials();
 
+  // Returns a list of vectors. Each vector contains all credentials that share
+  // the same password.
+  std::vector<api::passwords_private::PasswordUiEntryList>
+  GetCredentialsWithReusedPassword();
+
   // Attempts to mute `credential` from the password store. Returns whether
   // the mute succeeded.
   bool MuteInsecureCredential(
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
index bbdf7cd..a64c1991 100644
--- a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
+++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
@@ -43,6 +43,7 @@
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
 #include "components/password_manager/core/browser/test_password_store.h"
+#include "components/password_manager/core/browser/ui/credential_ui_entry.h"
 #include "components/password_manager/core/browser/ui/saved_passwords_presenter.h"
 #include "components/password_manager/core/browser/well_known_change_password_util.h"
 #include "components/password_manager/core/common/password_manager_features.h"
@@ -241,14 +242,15 @@
 }
 
 // Creates matcher for a given compromised credential
-auto ExpectWeakCredential(
-    const std::string& formatted_origin,
-    const std::string& detailed_origin,
-    const absl::optional<std::string>& change_password_url,
-    const std::u16string& username) {
-  return AllOf(Field(&PasswordUiEntry::username, base::UTF16ToASCII(username)),
-               Field(&PasswordUiEntry::urls,
-                     ExpectUrls(formatted_origin, detailed_origin)));
+auto ExpectCredential(const std::string& formatted_origin,
+                      const std::string& detailed_origin,
+                      const absl::optional<std::string>& change_password_url,
+                      const std::u16string& username) {
+  return AllOf(
+      Field(&PasswordUiEntry::username, base::UTF16ToASCII(username)),
+      Field(&PasswordUiEntry::urls,
+            ExpectUrls(formatted_origin, detailed_origin)),
+      Field(&PasswordUiEntry::change_password_url, change_password_url));
 }
 
 // Creates matcher for a given compromised credential
@@ -348,10 +350,10 @@
   EXPECT_THAT(
       delegate().GetInsecureCredentials(),
       UnorderedElementsAre(
-          ExpectWeakCredential(
-              "example.com", "https://example.com/",
-              "https://example.com/.well-known/change-password", kUsername1),
-          ExpectWeakCredential(
+          ExpectCredential("example.com", "https://example.com/",
+                           "https://example.com/.well-known/change-password",
+                           kUsername1),
+          ExpectCredential(
               "Example App",
               "https://play.google.com/store/apps/details?id=com.example.app",
               "https://example.com/.well-known/change-password", kUsername2)));
@@ -381,7 +383,7 @@
 
   EXPECT_THAT(
       delegate().GetInsecureCredentials(),
-      ElementsAre(ExpectWeakCredential(
+      ElementsAre(ExpectCredential(
           "example.com", "https://example.com/",
           "https://example.com/.well-known/change-password", kUsername1)));
   EXPECT_EQ(api::passwords_private::PASSWORD_CHECK_STATE_SIGNED_OUT,
@@ -1118,4 +1120,55 @@
             password_manager::kWellKnownChangePasswordPath);
 }
 
+// Verify that GetCredentialsWithReusedPassword() correctly represents reused
+// credentials.
+TEST_F(PasswordCheckDelegateTest,
+       GetCredentialsWithReusedPasswordFillsFieldsCorrectly) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeature(
+      password_manager::features::kPasswordManagerRedesign);
+
+  store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kWeakPassword1));
+  store().AddLogin(MakeSavedPassword(kExampleCom, kUsername2, kWeakPassword2));
+  store().AddLogin(MakeSavedAndroidPassword(
+      kExampleApp, kUsername2, "Example App", kExampleCom, kWeakPassword1));
+  store().AddLogin(MakeSavedAndroidPassword(
+      kExampleApp, kUsername1, "Example App", kExampleCom, kWeakPassword2));
+  RunUntilIdle();
+  delegate().StartPasswordCheck();
+  RunUntilIdle();
+
+  auto credential_with_the_same_password =
+      delegate().GetCredentialsWithReusedPassword();
+  EXPECT_EQ(2u, credential_with_the_same_password.size());
+
+  EXPECT_THAT(
+      credential_with_the_same_password,
+      UnorderedElementsAre(
+          Field(&api::passwords_private::PasswordUiEntryList::entries,
+                UnorderedElementsAre(
+                    ExpectCredential(
+                        "example.com", "https://example.com/",
+                        "https://example.com/.well-known/change-password",
+                        kUsername2),
+                    ExpectCredential(
+                        "Example App",
+                        "https://play.google.com/store/apps/"
+                        "details?id=com.example.app",
+                        "https://example.com/.well-known/change-password",
+                        kUsername1))),
+          Field(&api::passwords_private::PasswordUiEntryList::entries,
+                UnorderedElementsAre(
+                    ExpectCredential(
+                        "example.com", "https://example.com/",
+                        "https://example.com/.well-known/change-password",
+                        kUsername1),
+                    ExpectCredential(
+                        "Example App",
+                        "https://play.google.com/store/apps/"
+                        "details?id=com.example.app",
+                        "https://example.com/.well-known/change-password",
+                        kUsername2)))));
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc
index dd37ebb6..a5304c19 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc
@@ -302,6 +302,16 @@
           GetDelegate(browser_context())->GetInsecureCredentials())));
 }
 
+// PasswordsPrivateGetCredentialsWithReusedPasswordFunction:
+PasswordsPrivateGetCredentialsWithReusedPasswordFunction::
+    ~PasswordsPrivateGetCredentialsWithReusedPasswordFunction() = default;
+
+ResponseAction PasswordsPrivateGetCredentialsWithReusedPasswordFunction::Run() {
+  return RespondNow(ArgumentList(
+      api::passwords_private::GetCredentialsWithReusedPassword::Results::Create(
+          GetDelegate(browser_context())->GetCredentialsWithReusedPassword())));
+}
+
 // PasswordsPrivateMuteInsecureCredentialFunction:
 PasswordsPrivateMuteInsecureCredentialFunction::
     ~PasswordsPrivateMuteInsecureCredentialFunction() = default;
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_api.h b/chrome/browser/extensions/api/passwords_private/passwords_private_api.h
index 938b6b3..d6d7fe0 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_api.h
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_api.h
@@ -265,6 +265,20 @@
   ResponseAction Run() override;
 };
 
+class PasswordsPrivateGetCredentialsWithReusedPasswordFunction
+    : public ExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION(
+      "passwordsPrivate.getCredentialsWithReusedPassword",
+      PASSWORDSPRIVATE_GETCREDENTIALSWITHREUSEDPASSWORD)
+
+ protected:
+  ~PasswordsPrivateGetCredentialsWithReusedPasswordFunction() override;
+
+  // ExtensionFunction overrides.
+  ResponseAction Run() override;
+};
+
 class PasswordsPrivateMuteInsecureCredentialFunction
     : public ExtensionFunction {
  public:
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
index 86cc4420..88ecf48 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
@@ -362,4 +362,10 @@
   EXPECT_TRUE(RunPasswordsSubtest("getCredentialGroups"));
 }
 
+IN_PROC_BROWSER_TEST_F(PasswordsPrivateApiTest,
+                       GetCredentialsWithReusedPassword) {
+  EXPECT_TRUE(RunPasswordsSubtest("getCredentialsWithReusedPassword"))
+      << message_;
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h
index ed739b2..ec7809d 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h
@@ -186,6 +186,10 @@
   virtual std::vector<api::passwords_private::PasswordUiEntry>
   GetInsecureCredentials() = 0;
 
+  // Obtains all credentials which reuse passwords.
+  virtual std::vector<api::passwords_private::PasswordUiEntryList>
+  GetCredentialsWithReusedPassword() = 0;
+
   // Attempts to mute |credential| from the password store. Returns whether
   // the mute succeeded.
   virtual bool MuteInsecureCredential(
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
index ffc19ce..f06258a 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
@@ -682,6 +682,11 @@
   return password_check_delegate_.GetInsecureCredentials();
 }
 
+std::vector<api::passwords_private::PasswordUiEntryList>
+PasswordsPrivateDelegateImpl::GetCredentialsWithReusedPassword() {
+  return password_check_delegate_.GetCredentialsWithReusedPassword();
+}
+
 bool PasswordsPrivateDelegateImpl::MuteInsecureCredential(
     const api::passwords_private::PasswordUiEntry& credential) {
   return password_check_delegate_.MuteInsecureCredential(credential);
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h
index 67765bd..4e42d45c 100644
--- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h
+++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h
@@ -98,6 +98,8 @@
                               content::WebContents* web_contents) override;
   std::vector<api::passwords_private::PasswordUiEntry> GetInsecureCredentials()
       override;
+  std::vector<api::passwords_private::PasswordUiEntryList>
+  GetCredentialsWithReusedPassword() override;
   bool MuteInsecureCredential(
       const api::passwords_private::PasswordUiEntry& credential) override;
   bool UnmuteInsecureCredential(
diff --git a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc
index 902d68b..bcbd26f5 100644
--- a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc
+++ b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.cc
@@ -266,6 +266,38 @@
   return credentials;
 }
 
+std::vector<api::passwords_private::PasswordUiEntryList>
+TestPasswordsPrivateDelegate::GetCredentialsWithReusedPassword() {
+  std::vector<api::passwords_private::PasswordUiEntryList> result;
+
+  api::passwords_private::PasswordUiEntry credential_1;
+  credential_1.username = "bob";
+  credential_1.urls.shown = "example.com";
+  credential_1.urls.link = "https://example.com";
+  credential_1.is_android_credential = false;
+  credential_1.change_password_url = "https://example.com/change-password";
+  credential_1.stored_in = api::passwords_private::PASSWORD_STORE_SET_DEVICE;
+  credential_1.compromised_info.emplace();
+  credential_1.compromised_info->compromise_types = {
+      api::passwords_private::COMPROMISE_TYPE_REUSED};
+
+  api::passwords_private::PasswordUiEntry credential_2;
+  credential_2.username = "angela";
+  credential_2.urls.shown = "test.com";
+  credential_2.urls.link = "https://test.com";
+  credential_2.is_android_credential = false;
+  credential_2.stored_in = api::passwords_private::PASSWORD_STORE_SET_DEVICE;
+  credential_2.compromised_info.emplace();
+  credential_2.compromised_info->compromise_types = {
+      api::passwords_private::COMPROMISE_TYPE_REUSED};
+
+  result.emplace_back();
+  result[0].entries.push_back(std::move(credential_1));
+  result[0].entries.push_back(std::move(credential_2));
+
+  return result;
+}
+
 // Fake implementation of MuteInsecureCredential. This succeeds if the
 // delegate knows of a insecure credential with the same id.
 bool TestPasswordsPrivateDelegate::MuteInsecureCredential(
diff --git a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h
index a8ca3955..6207e815 100644
--- a/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h
+++ b/chrome/browser/extensions/api/passwords_private/test_passwords_private_delegate.h
@@ -73,6 +73,8 @@
                               content::WebContents* web_contents) override;
   std::vector<api::passwords_private::PasswordUiEntry> GetInsecureCredentials()
       override;
+  std::vector<api::passwords_private::PasswordUiEntryList>
+  GetCredentialsWithReusedPassword() override;
   // Fake implementation of `MuteInsecureCredential`. This succeeds if the
   // delegate knows of a insecure credential with the same id.
   bool MuteInsecureCredential(
diff --git a/chrome/browser/extensions/extension_keeplist_chromeos.cc b/chrome/browser/extensions/extension_keeplist_chromeos.cc
index 5fc81a5e..49440a6c 100644
--- a/chrome/browser/extensions/extension_keeplist_chromeos.cc
+++ b/chrome/browser/extensions/extension_keeplist_chromeos.cc
@@ -36,10 +36,6 @@
 // M109).
 // TODO(crbug/1371661): Do not expose the static ash extension keeplist data
 // in Lacros build after M112.
-
-// For any extension running in both Ash and Lacros, if it needs to be published
-// in app service, it must be added to one of app service block lists (Ash or
-// Lacros), so that it won't be published by both.
 base::span<const base::StringPiece>
 ExtensionsRunInOSAndStandaloneBrowserAllowlist() {
   static const base::StringPiece kKeeplist[] = {
@@ -49,9 +45,6 @@
   return base::make_span(kKeeplist);
 }
 
-// For any extension apps running in both Ash and Lacros, it must be added to
-// one of app service block lists (Ash or Lacros), so that it won't be published
-// by both.
 base::span<const base::StringPiece>
 ExtensionAppsRunInOSAndStandaloneBrowserAllowlist() {
   static const base::StringPiece kKeeplist[] = {
@@ -98,57 +91,6 @@
   return base::make_span(kKeeplist);
 }
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-// The list of the extension apps blocked for app service in Ash.
-// The app on the block list can run in Ash but can't be published to app
-// service by Ash. For an app running in both Ash and Lacros, if it should be
-// published by Lacros, it must be blocked in Ash.
-base::span<const base::StringPiece> ExtensionAppsAppServiceBlocklistInOS() {
-  // Note: gnubbyd chrome app is running in both Ash and Lacros, but only the
-  // app running in Lacros should be published in app service so that it can be
-  // launched by users, the one running in Ash is blocked from app service and
-  // is invisible to users.
-  static const base::StringPiece kBlocklist[] = {
-      extension_misc::kGnubbyAppId,
-  };
-
-  return base::make_span(kBlocklist);
-}
-
-// The list of the extensions blocked for app service in Ash.
-// The extension on the block list can run in Ash but can't be published to app
-// service by Ash. For an extension running in both Ash and Lacros, if it should
-// be published by Lacros, it must be blocked in Ash.
-const std::vector<base::StringPiece>& ExtensionsAppServiceBlocklistInOS() {
-  // Note: Add extensions to be blocked if there are any in the future.
-  static const base::NoDestructor<std::vector<base::StringPiece>> block_list;
-  return *block_list;
-}
-
-// The list of the extension apps blocked for app service in Lacros.
-// The app on the block list can run in Lacros but can't be published to app
-// service by Lacros. For an app running in both Ash and Lacros, if it should be
-// published by Ash, it must be blocked in Lacros.
-const std::vector<base::StringPiece>&
-ExtensionAppsAppServiceBlocklistInStandaloneBrowser() {
-  // Note: Add extension apps to be blocked if there are any in the future.
-  static const base::NoDestructor<std::vector<base::StringPiece>> block_list;
-  return *block_list;
-}
-
-// The list of the extensions blocked for app service in Lacros.
-// The extension on the block list can run in Lacros but can't be published to
-// app service by Lacros. For an extension running in both Ash and Lacros, if it
-// should be published by Ash, it must be blocked in Lacros.
-const std::vector<base::StringPiece>&
-ExtensionsAppServiceBlocklistInStandaloneBrowser() {
-  // Note: Add extensions to be blocked if there are any in the future.
-  static const base::NoDestructor<std::vector<base::StringPiece>> block_list;
-  return *block_list;
-}
-
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
 const std::vector<base::StringPiece>&
 ExtensionsRunInOSAndStandaloneBrowserFromBrowserInitParams() {
@@ -321,20 +263,6 @@
 
   return keep_list_param;
 }
-
-crosapi::mojom::StandaloneBrowserAppServiceBlockListPtr
-BuildStandaloneBrowserAppServiceBlockListInitParam() {
-  auto app_service_block_list =
-      crosapi::mojom::StandaloneBrowserAppServiceBlockList::New();
-  for (const auto& id : ExtensionAppsAppServiceBlocklistInStandaloneBrowser()) {
-    app_service_block_list->extension_apps.emplace_back(std::string(id));
-  }
-  for (const auto& id : ExtensionsAppServiceBlocklistInStandaloneBrowser()) {
-    app_service_block_list->extensions.emplace_back(std::string(id));
-  }
-
-  return app_service_block_list;
-}
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 base::span<const base::StringPiece>
@@ -401,48 +329,6 @@
          base::Contains(GetExtensionAppsRunInOSOnly(), app_id);
 }
 
-bool ExtensionAppRunsInOSOnly(const std::string& app_id) {
-  return base::Contains(GetExtensionAppsRunInOSOnly(), app_id);
-}
-
-bool ExtensionRunsInOSOnly(const std::string& extension_id) {
-  return base::Contains(GetExtensionsRunInOSOnly(), extension_id);
-}
-
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-bool IsAppServiceBlocklistCrosapiSupported() {
-  const auto& block_list = chromeos::BrowserParamsProxy::Get()
-                         ->StandaloneBrowserAppServiceBlockList();
-  return !block_list.is_null();
-}
-
-bool ExtensionAppBlockListedForAppServiceInStandaloneBrowser(
-    const std::string& app_id) {
-  const auto& block_list = chromeos::BrowserParamsProxy::Get()
-                         ->StandaloneBrowserAppServiceBlockList();
-  DCHECK(!block_list.is_null());
-  return base::Contains(block_list->extension_apps, app_id);
-}
-
-bool ExtensionBlockListedForAppServiceInStandaloneBrowser(
-    const std::string& extension_id) {
-  const auto& block_list = chromeos::BrowserParamsProxy::Get()
-                         ->StandaloneBrowserAppServiceBlockList();
-  DCHECK(!block_list.is_null());
-  return base::Contains(block_list->extensions, extension_id);
-}
-#endif
-
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-bool ExtensionAppBlockListedForAppServiceInOS(const std::string& app_id) {
-  return base::Contains(ExtensionAppsAppServiceBlocklistInOS(), app_id);
-}
-
-bool ExtensionBlockListedForAppServiceInOS(const std::string& extension_id) {
-  return base::Contains(ExtensionsAppServiceBlocklistInOS(), extension_id);
-}
-#endif
-
 size_t ExtensionsRunInOSAndStandaloneBrowserAllowlistSizeForTest() {
   return ExtensionsRunInOSAndStandaloneBrowserAllowlist().size();
 }
diff --git a/chrome/browser/extensions/extension_keeplist_chromeos.h b/chrome/browser/extensions/extension_keeplist_chromeos.h
index 162a6ae..e5c6615 100644
--- a/chrome/browser/extensions/extension_keeplist_chromeos.h
+++ b/chrome/browser/extensions/extension_keeplist_chromeos.h
@@ -10,14 +10,11 @@
 
 #include "build/chromeos_buildflags.h"
 #include "chromeos/crosapi/mojom/crosapi.mojom.h"
-#include "chromeos/crosapi/mojom/extension_keeplist.mojom.h"
 
 namespace extensions {
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 crosapi::mojom::ExtensionKeepListPtr BuildExtensionKeeplistInitParam();
-crosapi::mojom::StandaloneBrowserAppServiceBlockListPtr
-BuildStandaloneBrowserAppServiceBlockListInitParam();
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 // Returns ids of the extensions that are allow to run in both Ash and Lacros.
@@ -57,44 +54,6 @@
 // extensions that are compiled into ash.
 bool ExtensionAppRunsInOS(const std::string& app_id);
 
-// Returns true if the extension app is kept to run in Ash ONLY. A small list of
-// 1st party extension apps will continue to run in Ash either since they are
-// used to support Chrome OS features such as text to speech or vox, or they are
-// not compatible with Lacros yet. When this method is invoked in Lacros, it may
-// not know about OS-specific extension apps that are compiled into ash.
-bool ExtensionAppRunsInOSOnly(const std::string& app_id);
-
-// Returns true if the extension is kept to run in Ash ONLY. A small list of
-// 1st party extensions will continue to run in Ash either since they are
-// used to support Chrome OS features such as text to speech or vox, or they are
-// not compatible with Lacros yet. When this method is invoked in Lacros, it may
-// not know about OS-specific extensions that are compiled into ash.
-bool ExtensionRunsInOSOnly(const std::string& extension_id);
-
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-bool IsAppServiceBlocklistCrosapiSupported();
-
-// Returns true if the app is on app service block list in Lacros, i.e.,
-// the app can't be published in app service by Lacros.
-bool ExtensionAppBlockListedForAppServiceInStandaloneBrowser(
-    const std::string& app_id);
-
-// Returns true if the extension is on app service block list in Lacros, i.e.,
-// the extension can't be published in app service by Lacros.
-bool ExtensionBlockListedForAppServiceInStandaloneBrowser(
-    const std::string& extension_id);
-#endif
-
-#if BUILDFLAG(IS_CHROMEOS_ASH)
-// Returns true if the app is on app service block list in Ash, i.e.,
-// the app can't be published in app service by Ash.
-bool ExtensionAppBlockListedForAppServiceInOS(const std::string& app_id);
-
-// Returns true if the extension is on app service block list in Ash, i.e.,
-// the extension can't be published in app service by Ash.
-bool ExtensionBlockListedForAppServiceInOS(const std::string& extension_id);
-#endif
-
 size_t ExtensionsRunInOSAndStandaloneBrowserAllowlistSizeForTest();
 size_t ExtensionAppsRunInOSAndStandaloneBrowserAllowlistSizeForTest();
 size_t ExtensionsRunInOSOnlyAllowlistSizeForTest();
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc
index b6aa97c..c9888f92 100644
--- a/chrome/browser/extensions/tab_helper.cc
+++ b/chrome/browser/extensions/tab_helper.cc
@@ -92,19 +92,6 @@
   return extensions_blocked.Get();
 }
 
-bool AreAllExtensionsAllowedForPrerender2(content::WebContents* web_contents) {
-  static base::FeatureParam<bool> all_extensions_allowed(
-      &blink::features::kPrerender2, "all_extensions_allowed", true);
-  return all_extensions_allowed.Get();
-}
-
-std::string BlockedExtensionListForPrerender2(
-    content::WebContents* web_contents) {
-  static base::FeatureParam<std::string> extensions_blocked(
-      &blink::features::kPrerender2, "blocked_extensions", "");
-  return extensions_blocked.Get();
-}
-
 // Check `enabled_extensions` if any of them are specified in the
 // `blocked_extensions` or not.
 bool ProcessDisabledExtensions(const std::string& feature,
@@ -181,18 +168,6 @@
   }
 }
 
-void MaybeDisablePrerender2(const ExtensionSet& enabled_extensions,
-                            content::WebContents* web_contents) {
-  if (ProcessDisabledExtensions(
-          "prerender2", enabled_extensions, web_contents->GetBrowserContext(),
-          AreAllExtensionsAllowedForPrerender2(web_contents),
-          BlockedExtensionListForPrerender2(web_contents))) {
-    web_contents->DisablePrerender2();
-  } else {
-    web_contents->ResetPrerender2Disabled();
-  }
-}
-
 }  // namespace
 
 TabHelper::~TabHelper() = default;
@@ -427,11 +402,6 @@
   // Clear the back forward cache for the associated tab to accommodate for any
   // side effects of loading/unloading the extension.
   web_contents()->GetController().GetBackForwardCache().Flush();
-
-  // Update a setting to disable Prerender2 based on loaded Extensions.
-  MaybeDisablePrerender2(
-      ExtensionRegistry::Get(browser_context)->enabled_extensions(),
-      web_contents());
 }
 
 void TabHelper::OnExtensionUnloaded(content::BrowserContext* browser_context,
@@ -441,11 +411,6 @@
   // side effects of loading/unloading the extension.
   web_contents()->GetController().GetBackForwardCache().Flush();
 
-  // Update a setting to disable Prerender2 based on loaded Extensions.
-  MaybeDisablePrerender2(
-      ExtensionRegistry::Get(browser_context)->enabled_extensions(),
-      web_contents());
-
   if (!extension_app_)
     return;
   if (extension == extension_app_)
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 1f922a3..b6cffd98 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -5468,6 +5468,11 @@
     "expiry_milestone": 112
   },
   {
+    "name": "page-info-about-this-site-improved-bottomsheet",
+    "owners": [ "dullweber", "eokoyomon", "zalmashni@google.com" ],
+    "expiry_milestone": 114
+  },
+  {
     "name": "page-info-about-this-site-non-en",
     "owners": [ "dullweber" ],
     "expiry_milestone": 112
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 946ae97a..ba46eb7 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3770,6 +3770,12 @@
 const char kPageInfoStoreInfoDescription[] =
     "Enable a store info row to the page info menu on eligible pages.";
 
+const char kPageInfoAboutThisSiteImprovedBottomSheetName[] =
+    "Page info 'About this site' improved bottomsheet";
+const char kPageInfoAboutThisSiteImprovedBottomSheetDescription[] =
+    "Enable an improved 'About this site' bottomsheet, which includes a "
+    "less cluttered toolbar view and opening navigations in a new tab.";
+
 const char kPersistShareHubOnAppSwitchName[] = "Persist sharing hub";
 const char kPersistShareHubOnAppSwitchDescription[] =
     "Persist the sharing hub across app pauses/resumes.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 7d1e15ed..2ac1308 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2162,6 +2162,9 @@
 extern const char kPageInfoStoreInfoName[];
 extern const char kPageInfoStoreInfoDescription[];
 
+extern const char kPageInfoAboutThisSiteImprovedBottomSheetName[];
+extern const char kPageInfoAboutThisSiteImprovedBottomSheetDescription[];
+
 extern const char kPersistShareHubOnAppSwitchName[];
 extern const char kPersistShareHubOnAppSwitchDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index cbe28d1..7f6d06b 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -338,6 +338,7 @@
     &page_info::kPageInfoAboutThisSiteEn,
     &page_info::kPageInfoAboutThisSiteMoreInfo,
     &page_info::kPageInfoAboutThisSiteNonEn,
+    &page_info::kPageInfoAboutThisSiteImprovedBottomSheet,
     &password_manager::features::kBiometricTouchToFill,
     &password_manager::features::kEnablePasswordsAccountStorage,
     &password_manager::features::kLeakDetectionUnauthenticated,
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 9ad89f1..ccbff72 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
@@ -395,6 +395,8 @@
     public static final String PAGE_INFO_ABOUT_THIS_SITE_MORE_INFO =
             "PageInfoAboutThisSiteMoreInfo";
     public static final String PAGE_INFO_ABOUT_THIS_SITE_NON_EN = "PageInfoAboutThisSiteNonEn";
+    public static final String PAGE_INFO_ABOUT_THIS_SITE_IMPROVED_BOTTOMSHEET =
+            "PageInfoAboutThisSiteImprovedBottomSheet";
     public static final String PAINT_PREVIEW_DEMO = "PaintPreviewDemo";
     public static final String PAINT_PREVIEW_SHOW_ON_STARTUP = "PaintPreviewShowOnStartup";
     public static final String PASSWORD_DOMAIN_CAPABILITIES_FETCHING =
diff --git a/chrome/browser/lacros/for_which_extension_type.cc b/chrome/browser/lacros/for_which_extension_type.cc
index 6227f9cab..4854482 100644
--- a/chrome/browser/lacros/for_which_extension_type.cc
+++ b/chrome/browser/lacros/for_which_extension_type.cc
@@ -24,48 +24,11 @@
 bool ForWhichExtensionType::Matches(
     const extensions::Extension* extension) const {
   if (for_chrome_apps_) {
-    // For older ash version without app service block list support, follow
-    // the old code path. The extension app running in both ash and lacros will
-    // not be published in app service from either ash or lacros.
-    if (!extensions::IsAppServiceBlocklistCrosapiSupported()) {
-      return lacros_extensions_util::IsExtensionApp(extension) &&
-             !extensions::ExtensionAppRunsInOS(extension->id());
-    }
-
-    // An extension app should be published to app service by lacros if it
-    // meets all of the following conditions:
-    // 1. It does not run in ash only.
-    // 2. If it runs in both ash and lacros, it is not blocked for app service
-    // in lacros.
     return lacros_extensions_util::IsExtensionApp(extension) &&
-           !extensions::ExtensionAppRunsInOSOnly(extension->id()) &&
-           !(extensions::ExtensionAppRunsInBothOSAndStandaloneBrowser(
-                 extension->id()) &&
-             extensions::
-                 ExtensionAppBlockListedForAppServiceInStandaloneBrowser(
-                     extension->id()));
+           !extensions::ExtensionAppRunsInOS(extension->id());
   }
 
   if (extension->is_extension()) {
-    // An extension should be published to app service by lacros if it meets
-    // all of the following conditions:
-    // 1. It does not run in ash only.
-    // 2. If it runs in both ash and lacros, it is not blocked for app service
-    // in lacros.
-    // 3. It is either a QuickOffice extension or an extension registered with
-    // file browser handlers.
-
-    if (extensions::ExtensionRunsInOSOnly(extension->id())) {
-      return false;
-    }
-
-    if (extensions::ExtensionRunsInBothOSAndStandaloneBrowser(
-            extension->id()) &&
-        extensions::ExtensionBlockListedForAppServiceInStandaloneBrowser(
-            extension->id())) {
-      return false;
-    }
-
     // QuickOffice extensions do not use file browser handler manifest key
     // to register their handlers for MS Office files; instead, they use
     // file_handler manifest key(like the way chrome apps do). We should
@@ -74,6 +37,11 @@
     if (extension_misc::IsQuickOfficeExtension(extension->id()))
       return true;
 
+    // If an extension runs in ash, regardless of whether it may also run in
+    // Lacros, do not publish it.
+    if (extensions::ExtensionRunsInOS(extension->id()))
+      return false;
+
     // For the regular extensions, we should only publish them if they have file
     // handlers registered using file browser handlers.
     FileBrowserHandler::List* handler_list =
diff --git a/chrome/browser/login_detection/password_store_sites_browsertest.cc b/chrome/browser/login_detection/password_store_sites_browsertest.cc
index ab434d3..7f028a16 100644
--- a/chrome/browser/login_detection/password_store_sites_browsertest.cc
+++ b/chrome/browser/login_detection/password_store_sites_browsertest.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_interface.h"
 #include "components/password_manager/core/browser/test_password_store.h"
diff --git a/chrome/browser/media/webrtc/webrtc_internals_integration_browsertest.cc b/chrome/browser/media/webrtc/webrtc_internals_integration_browsertest.cc
index 776dc8e3..c09306a 100644
--- a/chrome/browser/media/webrtc/webrtc_internals_integration_browsertest.cc
+++ b/chrome/browser/media/webrtc/webrtc_internals_integration_browsertest.cc
@@ -58,8 +58,9 @@
   base::ScopedTempDir local_logs_dir_;
 };
 
+// Sheriff 2022-04-18: disabling due to flakiness: crbug/1317072
 IN_PROC_BROWSER_TEST_F(WebRTCInternalsIntegrationBrowserTest,
-                       IntegrationWithWebRtcEventLogger) {
+                       DISABLED_IntegrationWithWebRtcEventLogger) {
   ASSERT_TRUE(embedded_test_server()->Start());
 
   content::WebContents* tab =
diff --git a/chrome/browser/policy/BUILD.gn b/chrome/browser/policy/BUILD.gn
index c568550d..4da8d46 100644
--- a/chrome/browser/policy/BUILD.gn
+++ b/chrome/browser/policy/BUILD.gn
@@ -4,6 +4,7 @@
 
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
+import("//components/nacl/features.gni")
 import("//components/signin/features.gni")
 import("//extensions/buildflags/buildflags.gni")
 
@@ -189,6 +190,10 @@
     sources += [ "test/policy_certs_browsertest.cc" ]
   }
 
+  if (enable_nacl) {
+    sources += [ "test/ppb_video_decoder_dev_api_policy_browsertest.cc" ]
+  }
+
   deps = [
     ":test_support",
     "//base",
diff --git a/chrome/browser/policy/test/ppb_video_decoder_dev_api_policy_browsertest.cc b/chrome/browser/policy/test/ppb_video_decoder_dev_api_policy_browsertest.cc
new file mode 100644
index 0000000..e387b540
--- /dev/null
+++ b/chrome/browser/policy/test/ppb_video_decoder_dev_api_policy_browsertest.cc
@@ -0,0 +1,242 @@
+// 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 "base/command_line.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/chrome_content_browser_client.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "components/policy/core/browser/browser_policy_connector.h"
+#include "components/policy/core/common/mock_configuration_policy_provider.h"
+#include "components/policy/policy_constants.h"
+#include "content/public/common/content_client.h"
+#include "content/public/common/content_features.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/test/browser_test.h"
+
+namespace {
+
+enum class PolicySetting {
+  On,
+  Off,
+  Unset,
+};
+
+enum class FeatureSetting {
+  On,
+  Off,
+  Unset,
+};
+
+// Subclasses ChromeContentBrowserClient to save and expose command lines that
+// are passed to renderer processes.
+class ChromeContentBrowserClientForPolicyTests
+    : public ChromeContentBrowserClient {
+ public:
+  ChromeContentBrowserClientForPolicyTests() = default;
+  ChromeContentBrowserClientForPolicyTests(
+      const ChromeContentBrowserClientForPolicyTests&) = delete;
+  ChromeContentBrowserClientForPolicyTests& operator=(
+      const ChromeContentBrowserClientForPolicyTests&) = delete;
+
+  ~ChromeContentBrowserClientForPolicyTests() override = default;
+
+  base::CommandLine* command_line_from_last_renderer() {
+    return command_line_from_last_renderer_.get();
+  }
+
+  void clear_command_line_from_last_renderer() {
+    command_line_from_last_renderer_.reset();
+  }
+
+ private:
+  void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
+                                      int child_process_id) override {
+    ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
+        command_line, child_process_id);
+
+    if (command_line->GetSwitchValueASCII(switches::kProcessType) ==
+        switches::kRendererProcess) {
+      command_line_from_last_renderer_ =
+          std::make_unique<base::CommandLine>(*command_line);
+    }
+  }
+
+  std::unique_ptr<base::CommandLine> command_line_from_last_renderer_;
+};
+
+}  // namespace
+
+template <PolicySetting policy_setting, FeatureSetting feature_setting>
+class PPBVideoDecoderDevAPIPolicyBrowserTest : public PlatformBrowserTest {
+ public:
+  PPBVideoDecoderDevAPIPolicyBrowserTest(
+      const PPBVideoDecoderDevAPIPolicyBrowserTest&) = delete;
+  PPBVideoDecoderDevAPIPolicyBrowserTest& operator=(
+      const PPBVideoDecoderDevAPIPolicyBrowserTest&) = delete;
+
+ protected:
+  PPBVideoDecoderDevAPIPolicyBrowserTest() = default;
+
+  void SetUpInProcessBrowserTestFixture() override {
+    // Set the feature to the desired setting (if any).
+    if (feature_setting == FeatureSetting::On) {
+      feature_list_.InitAndEnableFeature(
+          features::kSupportPepperVideoDecoderDevAPI);
+    } else if (feature_setting == FeatureSetting::Off) {
+      feature_list_.InitAndDisableFeature(
+          features::kSupportPepperVideoDecoderDevAPI);
+    }
+
+    if (policy_setting == PolicySetting::Unset) {
+      return;
+    }
+
+    // Set up the policy here as the policy must be 'live' before the renderer
+    // is created, since the value for this policy is passed to the renderer via
+    // a command-line. Setting the policy in the test itself or in
+    // SetUpOnMainThread works for update-able policies, but is too late for
+    // this one.
+    provider_.SetDefaultReturns(
+        /*is_initialization_complete_return=*/true,
+        /*is_first_policy_load_complete_return=*/true);
+    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
+
+    policy::PolicyMap values;
+
+    const char* kPolicyName = policy::key::kForceEnablePepperVideoDecoderDevAPI;
+    values.Set(kPolicyName, policy::POLICY_LEVEL_MANDATORY,
+               policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
+               base::Value(policy_setting == PolicySetting::On), nullptr);
+    provider_.UpdateChromePolicy(values);
+  }
+
+  void SetUpOnMainThread() override {
+    content::SetBrowserClientForTesting(&test_browser_client_);
+  }
+
+  // Creates a new renderer process.
+  void CreateRenderer() {
+    test_browser_client_.clear_command_line_from_last_renderer();
+    ASSERT_FALSE(command_line_from_last_renderer());
+
+    ASSERT_TRUE(
+        AddTabAtIndex(0, GURL("chrome://version"), ui::PAGE_TRANSITION_TYPED));
+    ASSERT_TRUE(command_line_from_last_renderer());
+  }
+
+  // Returns whether the last-created renderer was passed the command-line
+  // switch for force-enabling the PPB_VideoDecoder(Dev) API.
+  bool renderer_was_passed_policy_switch() {
+    return command_line_from_last_renderer()->HasSwitch(
+        switches::kForceEnablePepperVideoDecoderDevAPI);
+  }
+
+ private:
+  base::CommandLine* command_line_from_last_renderer() {
+    return test_browser_client_.command_line_from_last_renderer();
+  }
+
+  ChromeContentBrowserClientForPolicyTests test_browser_client_;
+  base::test::ScopedFeatureList feature_list_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
+};
+
+// Tests of the policy being turned on: the command-line switch should be
+// present, regardless of the setting of the base::Feature.
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::On,
+                                               FeatureSetting::On>
+    PPBVideoDecoderDevAPIPolicyEnabledFeatureEnabledBrowserTest;
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::On,
+                                               FeatureSetting::Off>
+    PPBVideoDecoderDevAPIPolicyEnabledFeatureDisabledBrowserTest;
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::On,
+                                               FeatureSetting::Unset>
+    PPBVideoDecoderDevAPIPolicyEnabledFeatureNotSetBrowserTest;
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyEnabledFeatureEnabledBrowserTest,
+    CommandLineSwitchPresent) {
+  CreateRenderer();
+  EXPECT_TRUE(renderer_was_passed_policy_switch());
+}
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyEnabledFeatureDisabledBrowserTest,
+    CommandLineSwitchPresent) {
+  CreateRenderer();
+  EXPECT_TRUE(renderer_was_passed_policy_switch());
+}
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyEnabledFeatureNotSetBrowserTest,
+    CommandLineSwitchPresent) {
+  CreateRenderer();
+  EXPECT_TRUE(renderer_was_passed_policy_switch());
+}
+
+// Tests of the policy being turned off: the command-line switch should be
+// missing, regardless of the setting of the base::Feature.
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::Off,
+                                               FeatureSetting::On>
+    PPBVideoDecoderDevAPIPolicyDisabledFeatureEnabledBrowserTest;
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::Off,
+                                               FeatureSetting::Off>
+    PPBVideoDecoderDevAPIPolicyDisabledFeatureDisabledBrowserTest;
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::Off,
+                                               FeatureSetting::Unset>
+    PPBVideoDecoderDevAPIPolicyDisabledFeatureNotSetBrowserTest;
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyDisabledFeatureEnabledBrowserTest,
+    CommandLineSwitchNotPresent) {
+  CreateRenderer();
+  EXPECT_FALSE(renderer_was_passed_policy_switch());
+}
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyDisabledFeatureDisabledBrowserTest,
+    CommandLineSwitchNotPresent) {
+  CreateRenderer();
+  EXPECT_FALSE(renderer_was_passed_policy_switch());
+}
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyDisabledFeatureNotSetBrowserTest,
+    CommandLineSwitchNotPresent) {
+  CreateRenderer();
+  EXPECT_FALSE(renderer_was_passed_policy_switch());
+}
+
+// Tests of the policy not being set: the command-line switch should be missing,
+// regardless of the setting of the base::Feature.
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::Unset,
+                                               FeatureSetting::On>
+    PPBVideoDecoderDevAPIPolicyNotSetFeatureEnabledBrowserTest;
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::Unset,
+                                               FeatureSetting::Off>
+    PPBVideoDecoderDevAPIPolicyNotSetFeatureDisabledBrowserTest;
+typedef PPBVideoDecoderDevAPIPolicyBrowserTest<PolicySetting::Unset,
+                                               FeatureSetting::Unset>
+    PPBVideoDecoderDevAPIPolicyNotSetFeatureNotSetBrowserTest;
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyNotSetFeatureEnabledBrowserTest,
+    CommandLineSwitchNotPresent) {
+  CreateRenderer();
+  EXPECT_FALSE(renderer_was_passed_policy_switch());
+}
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyNotSetFeatureDisabledBrowserTest,
+    CommandLineSwitchNotPresent) {
+  CreateRenderer();
+  EXPECT_FALSE(renderer_was_passed_policy_switch());
+}
+
+IN_PROC_BROWSER_TEST_F(
+    PPBVideoDecoderDevAPIPolicyNotSetFeatureNotSetBrowserTest,
+    CommandLineSwitchNotPresent) {
+  CreateRenderer();
+  EXPECT_FALSE(renderer_was_passed_policy_switch());
+}
diff --git a/chrome/browser/preloading/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc b/chrome/browser/preloading/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc
index fa9c657..2ece4a6 100644
--- a/chrome/browser/preloading/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc
+++ b/chrome/browser/preloading/prefetch/no_state_prefetch/prerender_nostate_prefetch_browsertest.cc
@@ -1778,11 +1778,12 @@
 
  protected:
   void SetUp() override {
-    // kOmniboxTriggerForNoStatePrefetch or kOmniboxTriggerForPrerender2 can be
-    // enabled in the experiment. Explicitly enable and disable these flags.
-    feature_list_.InitWithFeatures(
-        {features::kOmniboxTriggerForNoStatePrefetch},
-        {features::kOmniboxTriggerForPrerender2});
+    // kOmniboxTriggerForPrerender2 or kOmniboxTriggerForNoStatePrefetch can be
+    // enabled in the experiment. Explicitly disable
+    // kOmniboxTriggerForPrerender2 as fieldtrial tests run with a config to
+    // enable it by default.
+    feature_list_.InitWithFeatures({},
+                                   {features::kOmniboxTriggerForPrerender2});
 
     NoStatePrefetchBrowserTest::SetUp();
   }
diff --git a/chrome/browser/preloading/prerender/omnibox_prerender_browsertest.cc b/chrome/browser/preloading/prerender/omnibox_prerender_browsertest.cc
index 00dd5385..19be709 100644
--- a/chrome/browser/preloading/prerender/omnibox_prerender_browsertest.cc
+++ b/chrome/browser/preloading/prerender/omnibox_prerender_browsertest.cc
@@ -60,7 +60,10 @@
   OmniboxPrerenderBrowserTest()
       : prerender_helper_(base::BindRepeating(
             &OmniboxPrerenderBrowserTest::GetActiveWebContents,
-            base::Unretained(this))) {}
+            base::Unretained(this))) {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kOmniboxTriggerForPrerender2);
+  }
 
   void SetUp() override {
     prerender_helper_.SetUp(embedded_test_server());
@@ -119,6 +122,7 @@
   std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
   std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
       ukm_entry_builder_;
+  base::test::ScopedFeatureList scoped_feature_list_;
   std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
 };
 
diff --git a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc b/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
index 5990542..4c22000 100644
--- a/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
+++ b/chrome/browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc
@@ -109,7 +109,10 @@
   PrerenderOmniboxUIBrowserTest()
       : prerender_helper_(base::BindRepeating(
             &PrerenderOmniboxUIBrowserTest::GetActiveWebContents,
-            base::Unretained(this))) {}
+            base::Unretained(this))) {
+    scoped_feature_list_.InitAndEnableFeature(
+        features::kOmniboxTriggerForPrerender2);
+  }
 
   void SetUp() override {
     prerender_helper_.SetUp(embedded_test_server());
@@ -248,6 +251,7 @@
   }
 
   content::test::PrerenderTestHelper prerender_helper_;
+  base::test::ScopedFeatureList scoped_feature_list_;
   ui::PageTransition last_finished_page_transition_type_;
   std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
   std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
@@ -505,7 +509,8 @@
  public:
   PrerenderPreloaderHoldbackBrowserTest() {
     feature_list_.InitWithFeatures(
-        /*enabled_features=*/{features::kPrerender2Holdback},
+        /*enabled_features=*/{features::kOmniboxTriggerForPrerender2,
+                              features::kPrerender2Holdback},
         /* disabled_features=*/{});
   }
   ~PrerenderPreloaderHoldbackBrowserTest() override = default;
diff --git a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v4.xml b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v4.xml
index 095d2f47..1a70e322 100644
--- a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v4.xml
+++ b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v4.xml
@@ -161,7 +161,7 @@
                 android:layout_gravity="center_horizontal"
                 android:layout_marginEnd="@dimen/privacy_sandbox_consent_button_margin_between"
                 android:text="@string/privacy_sandbox_m1_notice_eea_settings_button"
-                style="@style/TextButton" />
+                style="@style/OutlinedButton" />
 
             <org.chromium.ui.widget.ButtonCompat
                 android:id="@+id/ack_button"
diff --git a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_row_v4.xml b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_row_v4.xml
index 8d31e894..c6b5edd 100644
--- a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_row_v4.xml
+++ b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_row_v4.xml
@@ -159,7 +159,7 @@
                 android:layout_gravity="center_horizontal"
                 android:layout_marginEnd="@dimen/privacy_sandbox_consent_button_margin_between"
                 android:text="@string/privacy_sandbox_m1_notice_row_settings_button"
-                style="@style/TextButton" />
+                style="@style/OutlinedButton" />
             <org.chromium.ui.widget.ButtonCompat
                 android:id="@+id/ack_button"
                 android:focusable="true"
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
index 5305e262f..a9567b88 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -458,13 +458,14 @@
        {IDC_CONTENT_CONTEXT_PDF_OCR, 126},
        {IDC_CONTENT_CONTEXT_PDF_OCR_ALWAYS, 127},
        {IDC_CONTENT_CONTEXT_PDF_OCR_ONCE, 128},
+       {IDC_CONTENT_CONTEXT_AUTOFILL_FEEDBACK, 129},
        // To add new items:
        //   - Add one more line above this comment block, using the UMA value
        //     from the line below this comment block.
        //   - Increment the UMA value in that latter line.
        //   - Add the new item to the RenderViewContextMenuItem enum in
        //     tools/metrics/histograms/enums.xml.
-       {0, 129}});
+       {0, 130}});
 
   // These UMA values are for the the ContextMenuOptionDesktop enum, used for
   // the ContextMenu.SelectedOptionDesktop histograms.
diff --git a/chrome/browser/resources/password_manager/checkup_section.ts b/chrome/browser/resources/password_manager/checkup_section.ts
index fe811ee..a3881bcf 100644
--- a/chrome/browser/resources/password_manager/checkup_section.ts
+++ b/chrome/browser/resources/password_manager/checkup_section.ts
@@ -21,7 +21,7 @@
 
 import {getTemplate} from './checkup_section.html.js';
 import {CredentialsChangedListener, PasswordCheckInteraction, PasswordCheckStatusChangedListener, PasswordManagerImpl} from './password_manager_proxy.js';
-import {CheckupSubpage, Page, Router} from './router.js';
+import {CheckupSubpage, Page, Route, RouteObserverMixin, Router, UrlParam} from './router.js';
 
 const CheckState = chrome.passwordsPrivate.PasswordCheckState;
 
@@ -39,8 +39,9 @@
   };
 }
 
-export class CheckupSectionElement extends I18nMixin
-(PolymerElement) {
+const CheckupSectionElementBase = RouteObserverMixin(I18nMixin(PolymerElement));
+
+export class CheckupSectionElement extends CheckupSectionElementBase {
   static get is() {
     return 'checkup-section';
   }
@@ -121,6 +122,7 @@
   private compromisedPasswords_: chrome.passwordsPrivate.PasswordUiEntry[];
   private weakPasswords_: chrome.passwordsPrivate.PasswordUiEntry[];
   private reusedPasswords_: chrome.passwordsPrivate.PasswordUiEntry[];
+  private didCheckAutomatically_: boolean = false;
 
   private statusChangedListener_: PasswordCheckStatusChangedListener|null =
       null;
@@ -182,6 +184,17 @@
     this.insecureCredentialsChangedListener_ = null;
   }
 
+  override currentRouteChanged(route: Route): void {
+    const param = route.queryParameters.get(UrlParam.START_CHECK) || '';
+    if (param === 'true' && !this.didCheckAutomatically_) {
+      this.didCheckAutomatically_ = true;
+      PasswordManagerImpl.getInstance().startBulkPasswordCheck().catch(
+          () => {});
+      PasswordManagerImpl.getInstance().recordPasswordCheckInteraction(
+          PasswordCheckInteraction.START_CHECK_AUTOMATICALLY);
+    }
+  }
+
   private async onStatusChanged_(
       newStatus: chrome.passwordsPrivate.PasswordCheckStatus,
       oldStatus: chrome.passwordsPrivate.PasswordCheckStatus) {
diff --git a/chrome/browser/resources/password_manager/router.ts b/chrome/browser/resources/password_manager/router.ts
index 0211bfa..331a9fc 100644
--- a/chrome/browser/resources/password_manager/router.ts
+++ b/chrome/browser/resources/password_manager/router.ts
@@ -27,7 +27,11 @@
 }
 
 export enum UrlParam {
+  // Parameter which indicates search term.
   SEARCH_TERM = 'q',
+  // If this parameter is true, password check will start automatically when
+  // navigating to Checkup section.
+  START_CHECK = 'start',
 }
 
 export class Route {
diff --git a/chrome/browser/resources/password_manager/side_bar.ts b/chrome/browser/resources/password_manager/side_bar.ts
index 7f91c85..c659aed 100644
--- a/chrome/browser/resources/password_manager/side_bar.ts
+++ b/chrome/browser/resources/password_manager/side_bar.ts
@@ -12,7 +12,7 @@
 import {CrMenuSelector} from 'chrome://resources/cr_elements/cr_menu_selector/cr_menu_selector.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {Page, Route, RouteObserverMixin, Router} from './router.js';
+import {Page, Route, RouteObserverMixin, Router, UrlParam} from './router.js';
 import {getTemplate} from './side_bar.html.js';
 
 export interface PasswordManagerSideBarElement {
@@ -46,6 +46,11 @@
 
   private onSelectorActivate_(event: CustomEvent<{selected: Page}>) {
     Router.getInstance().navigateTo(event.detail.selected);
+    if (event.detail.selected === Page.CHECKUP) {
+      const params = new URLSearchParams();
+      params.set(UrlParam.START_CHECK, 'true');
+      Router.getInstance().updateRouterParams(params);
+    }
   }
 
   private getSelectedPage_(): string {
diff --git a/chrome/browser/resources/password_manager/toolbar.ts b/chrome/browser/resources/password_manager/toolbar.ts
index 556f047..1d5938b 100644
--- a/chrome/browser/resources/password_manager/toolbar.ts
+++ b/chrome/browser/resources/password_manager/toolbar.ts
@@ -46,13 +46,11 @@
   }
 
   private onSearchChanged_(event: CustomEvent<string>) {
-    const newParams = Router.getInstance().currentRoute.queryParameters;
+    const newParams = new URLSearchParams();
     if (event.detail) {
       newParams.set(UrlParam.SEARCH_TERM, event.detail);
       // Switch to passwords page, since search is supported only on passwords.
       Router.getInstance().navigateTo(Page.PASSWORDS);
-    } else {
-      newParams.delete(UrlParam.SEARCH_TERM);
     }
     Router.getInstance().updateRouterParams(newParams);
   }
diff --git a/chrome/browser/sync/test/integration/device_info_helper.cc b/chrome/browser/sync/test/integration/device_info_helper.cc
index 7b80a74..8e7adc3 100644
--- a/chrome/browser/sync/test/integration/device_info_helper.cc
+++ b/chrome/browser/sync/test/integration/device_info_helper.cc
@@ -21,6 +21,7 @@
 }
 
 bool ServerDeviceInfoMatchChecker::IsExitConditionSatisfied(std::ostream* os) {
+  *os << "Waiting for server DeviceInfo to match: ";
   std::vector<sync_pb::SyncEntity> entities =
       fake_server()->GetSyncEntitiesByModelType(syncer::DEVICE_INFO);
 
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 bacddb3..431c7ce 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,39 +4,17 @@
 
 #include "chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h"
 
+#include "base/files/file_path.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 "chrome/browser/profiles/profile.h"
 #include "components/gcm_driver/crypto/gcm_encryption_result.h"
-#include "components/gcm_driver/fake_gcm_profile_service.h"
-#include "components/gcm_driver/gcm_profile_service.h"
-#include "components/keyed_service/core/keyed_service.h"
-
-// static
-std::unique_ptr<KeyedService> FakeSyncGCMDriver::Build(
-    content::BrowserContext* context) {
-  auto service = std::make_unique<gcm::FakeGCMProfileService>();
-  Profile* profile = Profile::FromBrowserContext(context);
-
-  // Allow blocking to initialize GCM client from the disk.
-  scoped_refptr<base::SequencedTaskRunner> blocking_task_runner(
-      base::ThreadPool::CreateSequencedTaskRunner(
-          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
-           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
-  service->SetDriverForTesting(
-      std::make_unique<FakeSyncGCMDriver>(profile, blocking_task_runner));
-  return service;
-}
 
 FakeSyncGCMDriver::FakeSyncGCMDriver(
     Profile* profile,
     const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner)
     : instance_id::FakeGCMDriverForInstanceID(
           profile->GetPath().Append(FILE_PATH_LITERAL("gcm_test_store")),
-          blocking_task_runner),
-      profile_(profile) {}
+          blocking_task_runner) {}
 
 void FakeSyncGCMDriver::EncryptMessage(const std::string& app_id,
                                        const std::string& authorized_entity,
diff --git a/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h b/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h
index 3bc12684..906e16b6 100644
--- a/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h
+++ b/chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h
@@ -8,29 +8,21 @@
 #include <memory>
 #include <string>
 
-#include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
 #include "components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h"
 
+class Profile;
+
 namespace base {
 class SequencedTaskRunner;
 }  // namespace base
 
-namespace content {
-class BrowserContext;
-}  // namespace content
-
-class KeyedService;
-class Profile;
-
 class FakeSyncGCMDriver : public instance_id::FakeGCMDriverForInstanceID {
  public:
   FakeSyncGCMDriver(
       Profile* profile,
       const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner);
 
-  static std::unique_ptr<KeyedService> Build(content::BrowserContext* context);
-
  protected:
   // FakeGCMDriverForInstanceID overrides:
   void EncryptMessage(const std::string& app_id,
@@ -39,9 +31,6 @@
                       const std::string& auth_secret,
                       const std::string& message,
                       EncryptMessageCallback callback) override;
-
- private:
-  raw_ptr<Profile> profile_;
 };
 
 #endif  // CHROME_BROWSER_SYNC_TEST_INTEGRATION_FAKE_SYNC_GCM_DRIVER_FOR_INSTANCE_ID_H_
diff --git a/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.cc b/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.cc
index 5d25b78..67b75954d 100644
--- a/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.cc
+++ b/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.cc
@@ -4,21 +4,14 @@
 
 #include "chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.h"
 
-#include "base/containers/contains.h"
+#include "base/containers/cxx20_erase.h"
+#include "base/logging.h"
 #include "base/time/time.h"
+#include "components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h"
 #include "components/sync/base/time.h"
-#include "components/sync/invalidations/fcm_handler.h"
 
 namespace fake_server {
 
-namespace {
-
-// This has the same value as in
-// components/sync/invalidations/sync_invalidations_service_impl.cc.
-const char kSyncInvalidationsAppId[] = "com.google.chrome.sync.invalidations";
-
-}  // namespace
-
 FakeServerSyncInvalidationSender::FakeServerSyncInvalidationSender(
     FakeServer* fake_server)
     : fake_server_(fake_server) {
@@ -28,30 +21,23 @@
 
 FakeServerSyncInvalidationSender::~FakeServerSyncInvalidationSender() {
   fake_server_->RemoveObserver(this);
-
-  // Unsubscribe from all the remaining FCM handlers. This is mostly the case
-  // for Android platform.
-  for (syncer::FCMHandler* fcm_handler : fcm_handlers_) {
-    fcm_handler->RemoveTokenObserver(this);
+  for (instance_id::FakeGCMDriverForInstanceID* fake_gcm_driver :
+       fake_gcm_drivers_) {
+    fake_gcm_driver->RemoveConnectionObserver(this);
   }
 }
 
-void FakeServerSyncInvalidationSender::AddFCMHandler(
-    syncer::FCMHandler* fcm_handler) {
-  DCHECK(fcm_handler);
-  DCHECK(!base::Contains(fcm_handlers_, fcm_handler));
-
-  fcm_handlers_.push_back(fcm_handler);
-  fcm_handler->AddTokenObserver(this);
+void FakeServerSyncInvalidationSender::AddFakeGCMDriver(
+    instance_id::FakeGCMDriverForInstanceID* fake_gcm_driver) {
+  // It's safe to cast since SyncTest uses FakeGCMProfileService.
+  fake_gcm_drivers_.push_back(fake_gcm_driver);
+  fake_gcm_driver->AddConnectionObserver(this);
 }
 
-void FakeServerSyncInvalidationSender::RemoveFCMHandler(
-    syncer::FCMHandler* fcm_handler) {
-  DCHECK(fcm_handler);
-  DCHECK(base::Contains(fcm_handlers_, fcm_handler));
-
-  fcm_handler->RemoveTokenObserver(this);
-  base::Erase(fcm_handlers_, fcm_handler);
+void FakeServerSyncInvalidationSender::RemoveFakeGCMDriver(
+    instance_id::FakeGCMDriverForInstanceID* fake_gcm_driver) {
+  fake_gcm_driver->RemoveConnectionObserver(this);
+  base::Erase(fake_gcm_drivers_, fake_gcm_driver);
 }
 
 void FakeServerSyncInvalidationSender::OnWillCommit() {
@@ -92,18 +78,28 @@
   DeliverInvalidationsToHandlers();
 }
 
-void FakeServerSyncInvalidationSender::OnFCMRegistrationTokenChanged() {
+void FakeServerSyncInvalidationSender::OnConnected(
+    const net::IPEndPoint& ip_endpoint) {
+  // Try to deliver invalidations once GCMDriver is connected.
+  DVLOG(1) << "GCM driver connected";
   DeliverInvalidationsToHandlers();
 }
 
 void FakeServerSyncInvalidationSender::DeliverInvalidationsToHandlers() {
-  for (auto& token_and_invalidations : invalidations_to_deliver_) {
+  DVLOG(1) << "Trying to deliver invalidations for "
+           << invalidations_to_deliver_.size()
+           << " FCM tokens. Known target tokens from DeviceInfo: "
+           << token_to_interested_data_types_.size();
+  std::set<std::string> processed_tokens;
+  for (const auto& token_and_invalidations : invalidations_to_deliver_) {
     const std::string& token = token_and_invalidations.first;
-    // Pass a message to each FCMHandler to simulate a message from the
-    // GCMDriver.
+
+    // Pass a message to GCMDriver to simulate a message from the server.
     // TODO(crbug.com/1082115): Implement reflection blocking.
-    syncer::FCMHandler* fcm_handler = GetFCMHandlerByToken(token);
-    if (!fcm_handler) {
+    instance_id::FakeGCMDriverForInstanceID* fake_gcm_driver =
+        GetFakeGCMDriverByToken(token);
+    if (!fake_gcm_driver) {
+      DVLOG(1) << "Could not find FakeGCMDriver for token: " << token;
       continue;
     }
 
@@ -111,18 +107,37 @@
          token_and_invalidations.second) {
       gcm::IncomingMessage message;
       message.raw_data = payload.SerializeAsString();
-      fcm_handler->OnMessage(kSyncInvalidationsAppId, message);
+      fake_gcm_driver->DispatchMessage(kSyncInvalidationsAppId, message);
     }
 
-    token_and_invalidations.second.clear();
+    processed_tokens.insert(token);
+  }
+
+  for (const std::string& token_to_remove : processed_tokens) {
+    invalidations_to_deliver_.erase(token_to_remove);
   }
 }
 
-syncer::FCMHandler* FakeServerSyncInvalidationSender::GetFCMHandlerByToken(
+instance_id::FakeGCMDriverForInstanceID*
+FakeServerSyncInvalidationSender::GetFakeGCMDriverByToken(
     const std::string& fcm_registration_token) const {
-  for (syncer::FCMHandler* fcm_handler : fcm_handlers_) {
-    if (fcm_registration_token == fcm_handler->GetFCMRegistrationToken()) {
-      return fcm_handler;
+  for (instance_id::FakeGCMDriverForInstanceID* fake_gcm_driver :
+       fake_gcm_drivers_) {
+#if !BUILDFLAG(IS_ANDROID)
+    // On Android platform FCM registration token is returned from Java
+    // implementation, so HasTokenForAppId() does not contain these tokens.
+    // Since Android does not support several profiles, for the simplicity just
+    // check for AppHandler registration.
+    if (!fake_gcm_driver->HasTokenForAppId(kSyncInvalidationsAppId,
+                                           fcm_registration_token)) {
+      continue;
+    }
+#endif  // !BUILDFLAG(IS_ANDROID)
+
+    // AppHandler may not be registered while SyncSetup() is not called yet, the
+    // server should keep invalidations to deliver them later.
+    if (fake_gcm_driver->GetAppHandler(kSyncInvalidationsAppId)) {
+      return fake_gcm_driver;
     }
   }
   return nullptr;
diff --git a/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.h b/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.h
index f06f61c..c9acf91 100644
--- a/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.h
+++ b/chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.h
@@ -6,24 +6,28 @@
 #define CHROME_BROWSER_SYNC_TEST_INTEGRATION_INVALIDATIONS_FAKE_SERVER_SYNC_INVALIDATION_SENDER_H_
 
 #include "base/memory/raw_ptr.h"
+#include "components/gcm_driver/gcm_connection_observer.h"
 #include "components/sync/base/model_type.h"
-#include "components/sync/invalidations/fcm_registration_token_observer.h"
 #include "components/sync/protocol/sync_invalidations_payload.pb.h"
 #include "components/sync/test/fake_server.h"
 
-namespace syncer {
-class FCMHandler;
-}
+namespace instance_id {
+class FakeGCMDriverForInstanceID;
+}  // namespace instance_id
 
 namespace fake_server {
 
 // This class is observing changes to the fake server, and sends invalidations
 // to clients upon commits. Sent invalidation follows the same format expected
 // by the sync invalidations framework (i.e. SyncInvalidationsService).
-class FakeServerSyncInvalidationSender
-    : public FakeServer::Observer,
-      public syncer::FCMRegistrationTokenObserver {
+class FakeServerSyncInvalidationSender : public FakeServer::Observer,
+                                         public gcm::GCMConnectionObserver {
  public:
+  // This has the same value as in
+  // components/sync/invalidations/sync_invalidations_service_impl.cc.
+  static constexpr char kSyncInvalidationsAppId[] =
+      "com.google.chrome.sync.invalidations";
+
   // |fake_server| must not be nullptr, and must outlive this object.
   explicit FakeServerSyncInvalidationSender(FakeServer* fake_server);
   ~FakeServerSyncInvalidationSender() override;
@@ -32,26 +36,24 @@
   FakeServerSyncInvalidationSender& operator=(
       const FakeServerSyncInvalidationSender&) = delete;
 
-  // |fcm_handler| must not be nullptr, and must be removed using
-  // RemoveFCMHandler(). If the FCM handler has registered token, all the
-  // message for the token will be delivered immediately.
-  void AddFCMHandler(syncer::FCMHandler* fcm_handler);
+  // Add |fake_gcm_driver| to send invalidations to from the fake server.
+  void AddFakeGCMDriver(
+      instance_id::FakeGCMDriverForInstanceID* fake_gcm_driver);
 
-  // |fcm_handler| must not be nullptr, and must exist in |fcm_handlers_|.
-  void RemoveFCMHandler(syncer::FCMHandler* fcm_handler);
+  // Remove |fake_gcm_driver| to stop sending invalidations.
+  void RemoveFakeGCMDriver(
+      instance_id::FakeGCMDriverForInstanceID* fake_gcm_driver);
 
   // FakeServer::Observer implementation.
   void OnWillCommit() override;
   void OnCommit(const std::string& committer_invalidator_client_id,
                 syncer::ModelTypeSet committed_model_types) override;
 
-  // syncer::FCMRegistrationTokenObserver implementation.
-  void OnFCMRegistrationTokenChanged() override;
+  // gcm::GCMConnectionObserver implementation.
+  void OnConnected(const net::IPEndPoint& ip_endpoint) override;
 
  private:
-  // Returns a corresponding FCM handler having the same
-  // |fcm_registration_token| if exists. Otherwise, returns nullptr.
-  syncer::FCMHandler* GetFCMHandlerByToken(
+  instance_id::FakeGCMDriverForInstanceID* GetFakeGCMDriverByToken(
       const std::string& fcm_registration_token) const;
 
   // Delivers all the incoming messages to the corresponding FCM handlers.
@@ -63,7 +65,6 @@
   void UpdateTokenToInterestedDataTypesMap();
 
   raw_ptr<FakeServer> fake_server_;
-  std::vector<syncer::FCMHandler*> fcm_handlers_;
 
   // Cache of invalidations to be dispatched by
   // DeliverInvalidationsToHandlers(), keyed by FCM registration token. If no
@@ -73,8 +74,11 @@
       invalidations_to_deliver_;
 
   // List of tokens with a list of interested data types. Used to send
-  // invalidations to a corresponding FCMHandler.
+  // invalidations to a corresponding client.
   std::map<std::string, syncer::ModelTypeSet> token_to_interested_data_types_;
+
+  std::vector<base::raw_ptr<instance_id::FakeGCMDriverForInstanceID>>
+      fake_gcm_drivers_;
 };
 
 }  // namespace fake_server
diff --git a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
index d5aa602f..c141c683 100644
--- a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
@@ -29,6 +29,7 @@
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_node.h"
 #include "components/bookmarks/browser/url_and_title.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/sync/base/client_tag_hash.h"
 #include "components/sync/base/command_line_switches.h"
diff --git a/chrome/browser/sync/test/integration/single_client_sharing_message_sync_test.cc b/chrome/browser/sync/test/integration/single_client_sharing_message_sync_test.cc
index e90b26b0..ad51be09 100644
--- a/chrome/browser/sync/test/integration/single_client_sharing_message_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_sharing_message_sync_test.cc
@@ -169,37 +169,6 @@
   base::WeakPtrFactory<SharingMessageCallbackChecker> weak_ptr_factory_{this};
 };
 
-// Used to wait until the sharing message commit was sent to the server
-// (regardless of the commit result). Waits until the last commit message has at
-// least one sharing message with the expected payload.
-class SharingMessageCommitChecker : public SingleClientStatusChangeChecker {
- public:
-  SharingMessageCommitChecker(syncer::SyncServiceImpl* service,
-                              fake_server::FakeServer* fake_server,
-                              const std::string& expected_payload)
-      : SingleClientStatusChangeChecker(service),
-        fake_server_(fake_server),
-        expected_payload_(expected_payload) {}
-
-  bool IsExitConditionSatisfied(std::ostream* os) override {
-    *os << "Waiting for sharing message to be committed.";
-
-    sync_pb::ClientToServerMessage message;
-    fake_server_->GetLastCommitMessage(&message);
-    for (const sync_pb::SyncEntity& entity : message.commit().entries()) {
-      if (entity.specifics().sharing_message().payload() == expected_payload_) {
-        return true;
-      }
-    }
-
-    return false;
-  }
-
- private:
-  const raw_ptr<fake_server::FakeServer> fake_server_ = nullptr;
-  const std::string expected_payload_;
-};
-
 class SingleClientSharingMessageSyncTest : public SyncTest {
  public:
   SingleClientSharingMessageSyncTest() : SyncTest(SINGLE_CLIENT) {}
@@ -332,10 +301,9 @@
   EXPECT_TRUE(callback_checker.Wait());
 }
 
-// Disables, see http://crbug.com/1408550
 IN_PROC_BROWSER_TEST_F(
     SingleClientSharingMessageSyncTest,
-    DISABLED_ShouldRetrySendingSharingMessageDataTypeOnTransientAuthError) {
+    ShouldRetrySendingSharingMessageDataTypeOnTransientAuthError) {
   const std::string payload = "payload";
 
   ASSERT_TRUE(SetupSync());
@@ -354,9 +322,6 @@
       std::make_unique<SharingMessageSpecifics>(specifics),
       callback_checker.GetCommitFinishedCallback());
 
-  ASSERT_TRUE(
-      SharingMessageCommitChecker(GetSyncService(0), GetFakeServer(), payload)
-          .Wait());
   ASSERT_TRUE(RetryingAccessTokenFetchChecker(GetSyncService(0)).Wait());
   SetOAuth2TokenResponse(kValidOAuth2Token, net::HTTP_OK, net::OK);
   GetFakeServer()->ClearHttpError();
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc
index 5491fa1..2c446633 100644
--- a/chrome/browser/sync/test/integration/sync_test.cc
+++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -21,6 +21,9 @@
 #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/task_traits.h"
+#include "base/task/thread_pool.h"
 #include "base/test/test_timeouts.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -36,7 +39,6 @@
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/signin/chrome_signin_client_factory.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
-#include "chrome/browser/sync/sync_invalidations_service_factory.h"
 #include "chrome/browser/sync/sync_service_factory.h"
 #include "chrome/browser/sync/test/integration/committed_all_nudged_changes_checker.h"
 #include "chrome/browser/sync/test/integration/device_info_helper.h"
@@ -64,6 +66,7 @@
 #include "components/invalidation/impl/profile_identity_provider.h"
 #include "components/invalidation/impl/profile_invalidation_provider.h"
 #include "components/invalidation/public/invalidation_service.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/os_crypt/os_crypt_mocker.h"
 #include "components/prefs/scoped_user_pref_update.h"
@@ -75,7 +78,6 @@
 #include "components/sync/driver/sync_service_impl.h"
 #include "components/sync/driver/sync_user_settings.h"
 #include "components/sync/engine/sync_scheduler_impl.h"
-#include "components/sync/invalidations/fcm_handler.h"
 #include "components/sync/invalidations/sync_invalidations_service_impl.h"
 #include "components/sync/test/fake_server_network_resources.h"
 #include "content/public/browser/navigation_entry.h"
@@ -208,6 +210,29 @@
   return it != profile_to_fcm_network_handler_map->end() ? it->second : nullptr;
 }
 
+std::unique_ptr<KeyedService> CreateGCMProfileService(
+    content::BrowserContext* context) {
+  scoped_refptr<base::SequencedTaskRunner> blocking_task_runner(
+      base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+           base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
+
+  Profile* profile = Profile::FromBrowserContext(context);
+  auto service = std::make_unique<gcm::FakeGCMProfileService>(
+      std::make_unique<FakeSyncGCMDriver>(profile, blocking_task_runner));
+
+  service->GetFakeGCMDriver()->WaitForAppIdBeforeConnection(
+      fake_server::FakeServerSyncInvalidationSender::kSyncInvalidationsAppId);
+  return service;
+}
+
+instance_id::FakeGCMDriverForInstanceID* GetFakeGCMDriverForProfile(
+    Profile* profile) {
+  return static_cast<gcm::FakeGCMProfileService*>(
+             gcm::GCMProfileServiceFactory::GetForProfile(profile))
+      ->GetFakeGCMDriver();
+}
+
 }  // namespace
 
 #if !BUILDFLAG(IS_ANDROID)
@@ -665,17 +690,8 @@
     sync_service_impl->OverrideNetworkForTest(
         fake_server::CreateFakeServerHttpPostProviderFactory(
             GetFakeServer()->AsWeakPtr()));
-    // TODO(crbug.com/1331206): use GCM driver directly to deliver
-    // invalidations.
-    syncer::SyncInvalidationsServiceImpl* sync_invalidations_service =
-        static_cast<syncer::SyncInvalidationsServiceImpl*>(
-            SyncInvalidationsServiceFactory::GetForProfile(profile));
-    if (sync_invalidations_service) {
-      profile_to_fcm_handler_map_[profile] =
-          sync_invalidations_service->GetFCMHandlerForTesting();
-      fake_server_sync_invalidation_sender_->AddFCMHandler(
-          sync_invalidations_service->GetFCMHandlerForTesting());
-    }
+    fake_server_sync_invalidation_sender_->AddFakeGCMDriver(
+        GetFakeGCMDriverForProfile(profile));
   }
 
   SyncServiceImplHarness::SigninType signin_type =
@@ -907,7 +923,6 @@
              observer : fake_server_invalidation_observers_) {
       fake_server_->RemoveObserver(observer.get());
     }
-    profile_to_fcm_handler_map_.clear();
     fake_server_sync_invalidation_sender_.reset();
     fake_server_.reset();
   }
@@ -962,19 +977,14 @@
     }
 
     CheckForDataTypeFailures(/*client_index=*/index);
+    fake_server_sync_invalidation_sender_->RemoveFakeGCMDriver(
+        GetFakeGCMDriverForProfile(profile));
     profiles_[index] = nullptr;
     clients_[index].reset();
 #if !BUILDFLAG(IS_ANDROID)
     DCHECK(!browsers_[index]);
 #endif  // !BUILDFLAG(IS_ANDROID)
   }
-
-  if (fake_server_sync_invalidation_sender_) {
-    DCHECK(base::Contains(profile_to_fcm_handler_map_, profile));
-    fake_server_sync_invalidation_sender_->RemoveFCMHandler(
-        profile_to_fcm_handler_map_[profile]);
-    profile_to_fcm_handler_map_.erase(profile);
-  }
 }
 
 void SyncTest::OnWillCreateBrowserContextServices(
@@ -991,7 +1001,7 @@
           base::BindRepeating(&SyncTest::CreateProfileInvalidationProvider,
                               &profile_to_fcm_network_handler_map_));
   gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactory(
-      context, base::BindRepeating(&FakeSyncGCMDriver::Build));
+      context, base::BindRepeating(&CreateGCMProfileService));
 }
 
 // static
@@ -1104,12 +1114,6 @@
           std::make_unique<fake_server::FakeServerSyncInvalidationSender>(
               fake_server_.get());
 
-      // Subscribe to invalidations for all the profiles which were created
-      // before. This is mainly the case on Android platform.
-      for (const auto& profile_and_fcm_handler : profile_to_fcm_handler_map_) {
-        fake_server_sync_invalidation_sender_->AddFCMHandler(
-            profile_and_fcm_handler.second);
-      }
       SetupMockGaiaResponses();
       SetupMockGaiaResponsesForProfile(
           ProfileManager::GetLastUsedProfileIfLoaded());
diff --git a/chrome/browser/sync/test/integration/sync_test.h b/chrome/browser/sync/test/integration/sync_test.h
index e3f3471..a0e4f43 100644
--- a/chrome/browser/sync/test/integration/sync_test.h
+++ b/chrome/browser/sync/test/integration/sync_test.h
@@ -23,7 +23,6 @@
 #include "chrome/browser/sync/test/integration/fake_server_invalidation_sender.h"
 #include "chrome/browser/sync/test/integration/invalidations/fake_server_sync_invalidation_sender.h"
 #include "chrome/common/buildflags.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/sync/base/model_type.h"
 #include "components/sync/base/user_selectable_type.h"
 #include "components/sync/test/fake_server.h"
@@ -75,7 +74,6 @@
 }  // namespace fake_server
 
 namespace syncer {
-class FCMHandler;
 class SyncServiceImpl;
 }  // namespace syncer
 
@@ -446,8 +444,6 @@
   std::map<const Profile*, invalidation::FCMNetworkHandler*>
       profile_to_fcm_network_handler_map_;
 
-  std::map<const Profile*, syncer::FCMHandler*> profile_to_fcm_handler_map_;
-
   // Triggers a GetUpdates via refresh after a configuration.
   std::unique_ptr<ConfigurationRefresher> configuration_refresher_;
 
diff --git a/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc b/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc
index 0cc6417..fb237fa 100644
--- a/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc
+++ b/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc
@@ -26,9 +26,10 @@
 UpdatedProgressMarkerChecker::~UpdatedProgressMarkerChecker() = default;
 
 bool UpdatedProgressMarkerChecker::IsExitConditionSatisfied(std::ostream* os) {
-  *os << "Waiting for progress markers";
+  *os << "Waiting for progress markers... ";
 
   if (!has_unsynced_items_.has_value()) {
+    *os << "Unknown synced values state.";
     return false;
   }
 
@@ -42,9 +43,22 @@
   //    by the test-only 'self-notify' cycle).
   // 3. No pending local changes (which will ultimately generate new progress
   //    markers once submitted to the server).
-  return !snap.download_progress_markers().empty() &&
-         snap.model_neutral_state().num_successful_commits == 0 &&
-         !has_unsynced_items_.value();
+  if (snap.download_progress_markers().empty()) {
+    *os << "Progress markers are empty.";
+    return false;
+  }
+
+  if (snap.model_neutral_state().num_successful_commits > 0) {
+    *os << "Last sync cycle wasn't empty.";
+    return false;
+  }
+
+  if (has_unsynced_items_.value()) {
+    *os << "Has unsynced items.";
+    return false;
+  }
+
+  return true;
 }
 
 void UpdatedProgressMarkerChecker::GotHasUnsyncedItems(
diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc
index 42d9c2d..72516f7 100644
--- a/chrome/browser/task_manager/task_manager_browsertest.cc
+++ b/chrome/browser/task_manager/task_manager_browsertest.cc
@@ -1473,6 +1473,7 @@
         {
             {features::kBackForwardCache,
              {{"TimeToLiveInBackForwardCacheInSeconds", "3600"}}},
+            {features::kOmniboxTriggerForPrerender2, {}},
         },
         /*disabled_features=*/{});
     EXPECT_TRUE(content::BackForwardCache::IsBackForwardCacheFeatureEnabled());
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 a6b8a73..bd277f1 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
@@ -119,6 +119,7 @@
     public void setUp() throws InterruptedException {
         MockitoAnnotations.initMocks(this);
         mActivityTestRule.startMainActivityOnBlankPage();
+        mActivityTestRule.waitForActivityCompletelyLoaded();
         mBottomSheetController = mActivityTestRule.getActivity()
                                          .getRootUiCoordinatorForTesting()
                                          .getBottomSheetController();
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 a7a778a..21d9916d 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
@@ -45,8 +45,8 @@
 import java.util.List;
 
 /**
- * These tests render screenshots of touch to fill for credit cards sheet and compare them
- * to a gold standard.
+ * These tests render screenshots of touch to fill for credit cards sheet and compare them to a gold
+ * standard.
  */
 @RunWith(ParameterizedRunner.class)
 @Batch(Batch.PER_CLASS)
@@ -101,6 +101,7 @@
     @Before
     public void setUp() throws InterruptedException {
         mActivityTestRule.startMainActivityOnBlankPage();
+        mActivityTestRule.waitForActivityCompletelyLoaded();
         mBottomSheetController = mActivityTestRule.getActivity()
                                          .getRootUiCoordinatorForTesting()
                                          .getBottomSheetController();
diff --git a/chrome/browser/ui/autofill/autofill_context_menu_manager.cc b/chrome/browser/ui/autofill/autofill_context_menu_manager.cc
index 784ee86..9ba70b03 100644
--- a/chrome/browser/ui/autofill/autofill_context_menu_manager.cc
+++ b/chrome/browser/ui/autofill/autofill_context_menu_manager.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/ui/autofill/chrome_autofill_client.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/grit/generated_resources.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/core/browser/data_model/autofill_profile.h"
 #include "components/autofill/core/browser/data_model/credit_card.h"
@@ -30,6 +31,8 @@
     IDC_CONTENT_CONTEXT_AUTOFILL_CUSTOM_FIRST;
 static constexpr int kAutofillContextCustomLast =
     IDC_CONTENT_CONTEXT_AUTOFILL_CUSTOM_LAST;
+static constexpr int kAutofillContextFeedback =
+    IDC_CONTENT_CONTEXT_AUTOFILL_FEEDBACK;
 
 }  // namespace
 
@@ -43,6 +46,9 @@
 // static
 bool AutofillContextMenuManager::IsAutofillCustomCommandId(
     CommandId command_id) {
+  if (command_id.value() == kAutofillContextFeedback) {
+    return true;
+  }
   return command_id.value() >= kAutofillContextCustomFirst &&
          command_id.value() <= kAutofillContextCustomLast;
 }
@@ -107,38 +113,42 @@
         {frame_token, FieldRendererId(*params_.field_renderer_id)});
   }
 
-  if (!base::FeatureList::IsEnabled(
+  if (base::FeatureList::IsEnabled(
           features::kAutofillShowManualFallbackInContextMenu)) {
-    return;
+    DCHECK(personal_data_manager_);
+    DCHECK(menu_model_);
+
+    content::WebContents* web_contents = delegate_->GetWebContents();
+    AutofillClient* autofill_client =
+        autofill::ChromeAutofillClient::FromWebContents(web_contents);
+    // If the autofill popup is shown and the user double clicks from within the
+    // bounds of the initiating field, it is assumed that the context menu would
+    // overlap with the autofill popup. In that case, hide the autofill popup.
+    if (autofill_client) {
+      autofill_client->HideAutofillPopup(
+          PopupHidingReason::kOverlappingWithAutofillContextMenu);
+    }
+
+    // Stores all the profile values added to the context menu along with the
+    // command id of the row.
+    std::vector<std::pair<CommandId, ContextMenuItem>>
+        detail_items_added_to_context_menu;
+
+    AddAddressOrCreditCardItemsToMenu(detail_items_added_to_context_menu,
+                                      GetAddressProfilesWithTitles());
+    AddAddressOrCreditCardItemsToMenu(detail_items_added_to_context_menu,
+                                      GetCreditCardProfilesWithTitles());
+
+    command_id_to_menu_item_value_mapper_ =
+        base::flat_map<CommandId, ContextMenuItem>(
+            std::move(detail_items_added_to_context_menu));
   }
 
-  DCHECK(personal_data_manager_);
-  DCHECK(menu_model_);
-
-  content::WebContents* web_contents = delegate_->GetWebContents();
-  AutofillClient* autofill_client =
-      autofill::ChromeAutofillClient::FromWebContents(web_contents);
-  // If the autofill popup is shown and the user double clicks from within the
-  // bounds of the initiating field, it is assumed that the context menu would
-  // overlap with the autofill popup. In that case, hide the autofill popup.
-  if (autofill_client) {
-    autofill_client->HideAutofillPopup(
-        PopupHidingReason::kOverlappingWithAutofillContextMenu);
+  // Includes the option of submitting feedback on Autofill.
+  if (base::FeatureList::IsEnabled(features::kAutofillFeedback)) {
+    menu_model_->AddItemWithStringId(IDC_CONTENT_CONTEXT_AUTOFILL_FEEDBACK,
+                                     IDS_CONTENT_CONTEXT_AUTOFILL_FEEDBACK);
   }
-
-  // Stores all the profile values added to the context menu along with the
-  // command id of the row.
-  std::vector<std::pair<CommandId, ContextMenuItem>>
-      detail_items_added_to_context_menu;
-
-  AddAddressOrCreditCardItemsToMenu(detail_items_added_to_context_menu,
-                                    GetAddressProfilesWithTitles());
-  AddAddressOrCreditCardItemsToMenu(detail_items_added_to_context_menu,
-                                    GetCreditCardProfilesWithTitles());
-
-  command_id_to_menu_item_value_mapper_ =
-      base::flat_map<CommandId, ContextMenuItem>(
-          std::move(detail_items_added_to_context_menu));
 }
 
 bool AutofillContextMenuManager::IsCommandIdChecked(
@@ -161,17 +171,35 @@
   if (!rfh)
     return;
 
-  auto it = command_id_to_menu_item_value_mapper_.find(command_id);
-  if (it == command_id_to_menu_item_value_mapper_.end())
-    return;
-
   DCHECK(IsAutofillCustomCommandId(command_id));
 
+  if (command_id.value() == kAutofillContextFeedback) {
+    ExecuteAutofillFeedbackCommand();
+    return;
+  }
+
+  ExecuteMenuManagerCommand(command_id, rfh);
+}
+
+void AutofillContextMenuManager::ExecuteAutofillFeedbackCommand() {
+  // TODO(crbug.com/1407646) Implement.
+  NOTIMPLEMENTED();
+}
+
+void AutofillContextMenuManager::ExecuteMenuManagerCommand(
+    CommandId command_id,
+    content::RenderFrameHost* rfh) {
+  auto it = command_id_to_menu_item_value_mapper_.find(command_id);
+  if (it == command_id_to_menu_item_value_mapper_.end()) {
+    return;
+  }
+
   // Field Renderer id should be present because the context menu is triggered
   // on a input field. Otherwise, Autofill context menu models would not have
   // been added to the context menu.
-  if (!params_.field_renderer_id)
+  if (!params_.field_renderer_id) {
     return;
+  }
 
   if (it->second.is_manage_item) {
     DCHECK(browser_);
diff --git a/chrome/browser/ui/autofill/autofill_context_menu_manager.h b/chrome/browser/ui/autofill/autofill_context_menu_manager.h
index 3978555..22faac8 100644
--- a/chrome/browser/ui/autofill/autofill_context_menu_manager.h
+++ b/chrome/browser/ui/autofill/autofill_context_menu_manager.h
@@ -81,6 +81,8 @@
 //                                                      2025
 //                     ______________________________
 //                     Manage payment methods
+//
+// Provide Autofill feedback
 // ....
 // ....
 // ....
@@ -88,7 +90,7 @@
 // From the example, there are 3 layers:
 // 1. Outermost layer that distinguishes between address or payment method
 // filling. Refer to `AppendItems` and `AddAddressOrCreditCardItemsToMenu` for
-// more info.
+// more info. It also includes an option to submit user feedback on Autofill.
 // 2. Profile description layer to identify which profile to use for filling.
 // Refer to `AddAddressOrCreditCardItemsToMenu` for more info.
 // 3. Profile data layer that would be used for filling a single field. See
@@ -203,6 +205,13 @@
       base::span<const FieldsToShow> field_types_to_show,
       base::span<const FieldsToShow> other_fields_to_show);
 
+  // Triggers the feedback flow for Autofill command.
+  void ExecuteAutofillFeedbackCommand();
+
+  // Triggers the corresponding menu manager command.
+  void ExecuteMenuManagerCommand(CommandId command_id,
+                                 content::RenderFrameHost* rfh);
+
   // Returns a map of the addresses along with the title to be shown in the
   // context menu.
   AddressProfilesWithTitles GetAddressProfilesWithTitles();
diff --git a/chrome/browser/ui/autofill/autofill_context_menu_manager_unittest.cc b/chrome/browser/ui/autofill/autofill_context_menu_manager_unittest.cc
index ddb401c8..1510297 100644
--- a/chrome/browser/ui/autofill/autofill_context_menu_manager_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_context_menu_manager_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
+#include "chrome/grit/generated_resources.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
 #include "components/autofill/content/browser/content_autofill_driver_factory_test_api.h"
@@ -19,6 +20,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/mojom/context_menu/context_menu.mojom.h"
+#include "ui/base/l10n/l10n_util.h"
 
 using testing::_;
 
@@ -62,8 +64,10 @@
 class AutofillContextMenuManagerTest : public ChromeRenderViewHostTestHarness {
  public:
   AutofillContextMenuManagerTest() {
-    feature_.InitAndEnableFeature(
-        features::kAutofillShowManualFallbackInContextMenu);
+    feature_.InitWithFeatures(
+        {features::kAutofillShowManualFallbackInContextMenu,
+         features::kAutofillFeedback},
+        {});
   }
 
   AutofillContextMenuManagerTest(const AutofillContextMenuManagerTest&) =
@@ -142,11 +146,14 @@
   std::vector<std::u16string> all_added_strings;
 
   // Check for top level menu with autofill options.
-  ASSERT_EQ(2u, menu_model()->GetItemCount());
+  ASSERT_EQ(3u, menu_model()->GetItemCount());
   ASSERT_EQ(u"Fill Address Info", menu_model()->GetLabelAt(0));
   ASSERT_EQ(u"Fill Payment", menu_model()->GetLabelAt(1));
+  ASSERT_EQ(l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_AUTOFILL_FEEDBACK),
+            menu_model()->GetLabelAt(2));
   ASSERT_EQ(menu_model()->GetTypeAt(0), ui::MenuModel::ItemType::TYPE_SUBMENU);
   ASSERT_EQ(menu_model()->GetTypeAt(1), ui::MenuModel::ItemType::TYPE_SUBMENU);
+  ASSERT_EQ(menu_model()->GetTypeAt(2), ui::MenuModel::ItemType::TYPE_COMMAND);
 
   // Check for submenu with address descriptions.
   auto* address_menu_model = menu_model()->GetSubmenuModelAt(0);
diff --git a/chrome/browser/ui/web_applications/BUILD.gn b/chrome/browser/ui/web_applications/BUILD.gn
index 33c25f2..c75f409 100644
--- a/chrome/browser/ui/web_applications/BUILD.gn
+++ b/chrome/browser/ui/web_applications/BUILD.gn
@@ -82,6 +82,7 @@
 
   if (is_chromeos_ash) {
     deps += [
+      "//chrome/browser/ash:test_support",
       "//chrome/browser/ash/system_web_apps/test_support",
       "//chrome/browser/ui/ash/system_web_apps",
     ]
diff --git a/chrome/browser/ui/webui/ash/login/kiosk_autolaunch_screen_handler.cc b/chrome/browser/ui/webui/ash/login/kiosk_autolaunch_screen_handler.cc
index f621b564..e73712f2 100644
--- a/chrome/browser/ui/webui/ash/login/kiosk_autolaunch_screen_handler.cc
+++ b/chrome/browser/ui/webui/ash/login/kiosk_autolaunch_screen_handler.cc
@@ -23,9 +23,6 @@
 
 namespace ash {
 
-// TODO(https://crbug.com/1164001): remove after the migration to namespace ash
-using ::ash::KioskAppManager;
-
 KioskAutolaunchScreenHandler::KioskAutolaunchScreenHandler()
     : BaseScreenHandler(kScreenId) {
   KioskAppManager::Get()->AddObserver(this);
diff --git a/chrome/browser/ui/webui/customize_themes/chrome_customize_themes_handler.cc b/chrome/browser/ui/webui/customize_themes/chrome_customize_themes_handler.cc
index d6bcb671..c246af6 100644
--- a/chrome/browser/ui/webui/customize_themes/chrome_customize_themes_handler.cc
+++ b/chrome/browser/ui/webui/customize_themes/chrome_customize_themes_handler.cc
@@ -138,8 +138,14 @@
       // TODO(elainechien): Once we fully switch to ColorProvider we will be
       // guaranteed a ColorProvider for WebContents and can also clean up the
       // logic that returns a placeholder color.
-      const BrowserWindow* browser_window =
+      BrowserWindow* browser_window =
           BrowserWindow::FindBrowserWindowWithWebContents(web_contents_);
+      // BrowserWindow::FindBrowserWindowWithWebContents() returns null for
+      // modal dialogs and bubbles.
+      if (!browser_window) {
+        const Browser* browser = chrome::FindBrowserWithProfile(profile_);
+        browser_window = browser ? browser->window() : nullptr;
+      }
       const ui::ColorProvider* color_provider =
           browser_window ? browser_window->GetColorProvider() : nullptr;
       theme->type = customize_themes::mojom::ThemeType::kAutogenerated;
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc b/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc
index 6b8ea2a..bb503ccf 100644
--- a/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc
+++ b/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc
@@ -107,7 +107,7 @@
 
   ash::MockUserManager* mock_user_manager_;  // Not owned.
   user_manager::ScopedUserManager user_manager_enabler_;
-  ScopedCrosSettingsTestHelper cros_settings_test_helper_;
+  ash::ScopedCrosSettingsTestHelper cros_settings_test_helper_;
 };
 
 // The test checks following behaviour:
diff --git a/chrome/browser/ui/webui/settings/ash/internet_handler.cc b/chrome/browser/ui/webui/settings/ash/internet_handler.cc
index ff94b1f..2025ce61 100644
--- a/chrome/browser/ui/webui/settings/ash/internet_handler.cc
+++ b/chrome/browser/ui/webui/settings/ash/internet_handler.cc
@@ -143,7 +143,7 @@
 
   // Request that the third-party VPN provider identified by |provider_id|
   // show its "add network" dialog.
-  VpnServiceFactory::GetForBrowserContext(GetProfileForPrimaryUser())
+  chromeos::VpnServiceFactory::GetForBrowserContext(GetProfileForPrimaryUser())
       ->SendShowAddDialogToExtension(app_id);
 }
 
@@ -178,7 +178,7 @@
   if (network->GetVpnProviderType() == shill::kProviderThirdPartyVpn) {
     // Request that the third-party VPN provider used by the |network| show a
     // configuration dialog for it.
-    VpnServiceFactory::GetForBrowserContext(profile_)
+    chromeos::VpnServiceFactory::GetForBrowserContext(profile_)
         ->SendShowConfigureDialogToExtension(network->vpn_provider()->id,
                                              network->name());
     return;
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
index 36a4ef1..c0c9b25 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
@@ -247,10 +247,18 @@
   if (isTangibleSync) {
     title_id = IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_TITLE;
     info_desc_id = IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_DESC;
+
+#if BUILDFLAG(IS_CHROMEOS_LACROS)
+    // The sign-in intercept feature isn't enabled on Lacros. Revisit the title
+    // when enabling it.
+    DCHECK(!isSigninInterceptFre);
+    info_title_id = IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS;
+#else
     info_title_id =
         isSigninInterceptFre
             ? IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_SIGNIN_INTERCEPT_V2
             : IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE;
+#endif
 
     illustration_path = "images/tangible_sync_dialog_illustration.svg";
     illustration_dark_path =
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 74b4b758..7f77e84 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -726,6 +726,7 @@
       "//ash/components/arc/mojom",
       "//ash/constants",
       "//chrome/browser/ash",
+      "//chrome/browser/ash:test_support",
       "//components/arc:arc_test_support",
     ]
   }
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index f346c7d..7548c1cd 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1674172666-17e9e5abb6be1ae06515d73523045700969b577e.profdata
+chrome-linux-main-1674194329-a059a394219ec513de9f8af42adc791866daee1f.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 811480e..db75f7c 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1674172666-b16c2e7404c35b42faef76912fa95cbca84ff4a2.profdata
+chrome-mac-arm-main-1674215703-3ad4b57de793889c3063c79857e79d0e43cbe648.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index ef2efd6..1f28eb4 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1674172666-a6b0cdea53a3cb9e4ce243a00ac4f1c0847b3818.profdata
+chrome-mac-main-1674194329-abbee3af1f1074408f559b140f721ffee2a0ee3f.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 2ef9613..504c3185 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1674159413-e68cd0619f904d382d4a01219e4688610d54921f.profdata
+chrome-win32-main-1674194329-2edea6e89115f4ed0b2cdf08a8980294d4687bf4.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 75cc375..560d1ed 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1674172666-746b6dd38a0be1e72cddfdeb58e1bed8405a5d40.profdata
+chrome-win64-main-1674205099-7bb89a69c78aa4ce3e458f4d657c4b2a488e4820.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 38f11766..1087ee3 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -1411,7 +1411,11 @@
 // Enables omnibox trigger prerendering.
 BASE_FEATURE(kOmniboxTriggerForPrerender2,
              "OmniboxTriggerForPrerender2",
+#if BUILDFLAG(IS_ANDROID)
              base::FEATURE_ENABLED_BY_DEFAULT);
+#else
+             base::FEATURE_DISABLED_BY_DEFAULT);
+#endif
 
 BASE_FEATURE(kSupportSearchSuggestionForPrerender2,
              "SupportSearchSuggestionForPrerender2",
@@ -1439,7 +1443,7 @@
 // TODO(crbug.com/1267731): Remove this flag once the experiments are completed.
 BASE_FEATURE(kOmniboxTriggerForNoStatePrefetch,
              "OmniboxTriggerForNoStatePrefetch",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 // A feature to indicate whether setting wake time >24hours away is supported by
diff --git a/chrome/common/extensions/api/generated_externs_list.txt b/chrome/common/extensions/api/generated_externs_list.txt
index a221363..005e871 100644
--- a/chrome/common/extensions/api/generated_externs_list.txt
+++ b/chrome/common/extensions/api/generated_externs_list.txt
@@ -18,7 +18,6 @@
 language_settings_private.idl
 login_state.idl
 media_player_private.json
-passwords_private.idl
 quick_unlock_private.idl
 resources_private.idl
 safe_browsing_private.idl
diff --git a/chrome/common/extensions/api/passwords_private.idl b/chrome/common/extensions/api/passwords_private.idl
index 1ed29b58..47529b2 100644
--- a/chrome/common/extensions/api/passwords_private.idl
+++ b/chrome/common/extensions/api/passwords_private.idl
@@ -296,6 +296,11 @@
     DOMString? note;
   };
 
+  // An object holding an array of PasswordUiEntries.
+  dictionary PasswordUiEntryList {
+    PasswordUiEntry[] entries;
+  };
+
   callback PlaintextPasswordCallback = void(DOMString password);
   callback ChangeSavedPasswordCallback = void(long newId);
   callback PasswordListCallback = void(PasswordUiEntry[] entries);
@@ -308,6 +313,8 @@
   callback ImportPasswordsCallback = void(ImportResults results);
   callback IsAccountStoreDefaultCallback = void(boolean isDefault);
   callback GetUrlCollectionCallback = void(UrlCollection urlCollection);
+  callback CredentialsWithReusedPasswordCallback =
+      void(PasswordUiEntryList[] entries);
 
   interface Functions {
     // Function that logs that the Passwords page was accessed from the Chrome
@@ -419,6 +426,11 @@
     [supportsPromises] static void getInsecureCredentials(
         PasswordListCallback callback);
 
+    // Requests group of credentials which reuse passwords. Each group contains
+    // credentials with the same password value.
+    [supportsPromises] static void getCredentialsWithReusedPassword(
+        CredentialsWithReusedPasswordCallback callback);
+
     // Requests to mute |credential| from the password store.
     // Invokes |callback| on completion.
     [supportsPromises] static void muteInsecureCredential(
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index e53c6083..3797881 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -169,12 +169,24 @@
     "../browser/password_manager/password_manager_test_util.h",
     "../browser/permissions/crowd_deny_fake_safe_browsing_database_manager.cc",
     "../browser/permissions/crowd_deny_fake_safe_browsing_database_manager.h",
+    "../browser/policy/messaging_layer/util/reporting_server_connector_test_util.cc",
+    "../browser/policy/messaging_layer/util/reporting_server_connector_test_util.h",
+    "../browser/policy/messaging_layer/util/test_request_payload.cc",
+    "../browser/policy/messaging_layer/util/test_request_payload.h",
+    "../browser/policy/messaging_layer/util/test_response_payload.cc",
+    "../browser/policy/messaging_layer/util/test_response_payload.h",
     "../browser/profiles/profile_test_util.cc",
     "../browser/profiles/profile_test_util.h",
+    "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.cc",
+    "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h",
     "../browser/search_engines/template_url_service_factory_test_util.cc",
     "../browser/search_engines/template_url_service_factory_test_util.h",
     "../browser/search_engines/template_url_service_test_util.cc",
     "../browser/search_engines/template_url_service_test_util.h",
+    "../browser/sharing/fake_device_info.cc",
+    "../browser/sharing/fake_device_info.h",
+    "../browser/sharing/mock_sharing_service.cc",
+    "../browser/sharing/mock_sharing_service.h",
     "../browser/signin/identity_test_environment_profile_adaptor.cc",
     "../browser/signin/identity_test_environment_profile_adaptor.h",
     "../browser/signin/test_signin_client_builder.cc",
@@ -233,6 +245,8 @@
       "../browser/apps/platform_apps/app_browsertest_util.h",
       "../browser/extensions/extension_service_test_base.cc",
       "../browser/extensions/extension_service_test_base.h",
+      "../browser/extensions/extension_service_test_with_install.cc",
+      "../browser/extensions/extension_service_test_with_install.h",
     ]
 
     deps += [
@@ -282,6 +296,7 @@
     "//chrome/browser:browser_process",
     "//chrome/browser:test_support",
     "//chrome/browser/safe_browsing",
+    "//chrome/browser/sharing/proto",
     "//chrome/child",
     "//chrome/common:non_code_constants",
     "//chrome/common:test_support",
@@ -295,6 +310,7 @@
     "//components/custom_handlers/",
     "//components/device_reauth:test_support",
     "//components/domain_reliability",
+    "//components/enterprise/common/proto:connectors_proto",
     "//components/find_in_page",
     "//components/gcm_driver:test_support",
     "//components/gcm_driver/crypto:test_support",
@@ -413,6 +429,8 @@
     allow_circular_includes_from = [ ":test_support_ui_android" ]
   } else {
     sources += [
+      "../browser/renderer_context_menu/mock_render_view_context_menu.cc",
+      "../browser/renderer_context_menu/mock_render_view_context_menu.h",
       "../browser/ui/test/test_browser_dialog.cc",
       "../browser/ui/test/test_browser_dialog.h",
     ]
@@ -426,6 +444,7 @@
       "//components/crx_file",
       "//components/keep_alive_registry",
       "//components/pref_registry",
+      "//components/renderer_context_menu",
       "//components/services/app_service/public/cpp:test_support",
       "//components/storage_monitor",
       "//components/storage_monitor:test_support",
@@ -552,58 +571,14 @@
     sources += [
       "../browser/apps/app_service/metrics/app_platform_metrics_service_test_base.cc",
       "../browser/apps/app_service/metrics/app_platform_metrics_service_test_base.h",
-      "../browser/ash/accessibility/speech_monitor.cc",
-      "../browser/ash/accessibility/speech_monitor.h",
-      "../browser/ash/app_list/search/test/test_result.cc",
-      "../browser/ash/app_list/search/test/test_result.h",
-      "../browser/ash/arc/tracing/arc_app_performance_tracing_test_helper.cc",
-      "../browser/ash/arc/tracing/arc_app_performance_tracing_test_helper.h",
-      "../browser/ash/child_accounts/child_account_test_utils.cc",
-      "../browser/ash/child_accounts/child_account_test_utils.h",
-      "../browser/ash/crosapi/metrics_reporting_ash_test_helper.cc",
-      "../browser/ash/crosapi/metrics_reporting_ash_test_helper.h",
-      "../browser/ash/crosapi/test_crosapi_dependency_registry.cc",
-      "../browser/ash/crosapi/test_crosapi_dependency_registry.h",
-      "../browser/ash/file_manager/file_manager_test_util.cc",
-      "../browser/ash/file_manager/file_manager_test_util.h",
-      "../browser/ash/login/test/device_state_mixin.cc",
-      "../browser/ash/login/test/device_state_mixin.h",
-      "../browser/ash/login/test/embedded_policy_test_server_mixin.cc",
-      "../browser/ash/login/test/embedded_policy_test_server_mixin.h",
-      "../browser/ash/login/test/js_checker.cc",
-      "../browser/ash/login/test/js_checker.h",
-      "../browser/ash/login/test/local_state_mixin.cc",
-      "../browser/ash/login/test/local_state_mixin.h",
-      "../browser/ash/login/test/policy_test_server_constants.h",
-      "../browser/ash/login/test/scoped_policy_update.cc",
-      "../browser/ash/login/test/scoped_policy_update.h",
-      "../browser/ash/login/test/test_condition_waiter.h",
-      "../browser/ash/login/test/test_predicate_waiter.cc",
-      "../browser/ash/login/test/test_predicate_waiter.h",
-      "../browser/ash/login/users/avatar/fake_user_image_file_selector.cc",
-      "../browser/ash/login/users/avatar/fake_user_image_file_selector.h",
-      "../browser/ash/login/users/fake_chrome_user_manager.cc",
-      "../browser/ash/login/users/fake_chrome_user_manager.h",
-      "../browser/ash/policy/core/device_policy_cros_browser_test.cc",
-      "../browser/ash/policy/core/device_policy_cros_browser_test.h",
-      "../browser/ash/policy/core/device_policy_cros_test_helper.cc",
-      "../browser/ash/policy/core/device_policy_cros_test_helper.h",
-      "../browser/ash/policy/enrollment/psm/fake_rlwe_client.cc",
-      "../browser/ash/policy/enrollment/psm/fake_rlwe_client.h",
-      "../browser/ash/policy/login/signin_profile_extensions_policy_test_base.cc",
-      "../browser/ash/policy/login/signin_profile_extensions_policy_test_base.h",
-      "../browser/ash/printing/history/test_print_job_database.cc",
-      "../browser/ash/printing/history/test_print_job_database.h",
-      "../browser/ash/printing/history/test_print_job_history_service_observer.cc",
-      "../browser/ash/printing/history/test_print_job_history_service_observer.h",
-      "../browser/ash/settings/device_settings_test_helper.cc",
-      "../browser/ash/settings/device_settings_test_helper.h",
-      "../browser/ash/settings/scoped_cros_settings_test_helper.cc",
-      "../browser/ash/settings/scoped_cros_settings_test_helper.h",
       "../browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc",
       "../browser/chromeos/extensions/login_screen/login_screen_apitest_base.h",
       "../browser/component_updater/fake_cros_component_manager.cc",
       "../browser/component_updater/fake_cros_component_manager.h",
+      "../browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.cc",
+      "../browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.h",
+      "../browser/enterprise/connectors/analysis/source_destination_test_util.cc",
+      "../browser/enterprise/connectors/analysis/source_destination_test_util.h",
       "../browser/nearby_sharing/fake_nearby_connection.cc",
       "../browser/nearby_sharing/fake_nearby_connection.h",
       "../browser/nearby_sharing/fake_nearby_connections_manager.cc",
@@ -614,6 +589,8 @@
       "../browser/ui/ash/clipboard_history_test_util.h",
       "../browser/ui/webui/ash/login/fake_app_launch_splash_screen_handler.cc",
       "../browser/ui/webui/ash/login/fake_app_launch_splash_screen_handler.h",
+      "../browser/ui/webui/ash/login/fake_update_required_screen_handler.cc",
+      "../browser/ui/webui/ash/login/fake_update_required_screen_handler.h",
       "base/browser_process_platform_part_test_api_chromeos.cc",
       "base/browser_process_platform_part_test_api_chromeos.h",
       "base/chromeos/ash_browser_test_starter.cc",
@@ -710,7 +687,6 @@
   }
 
   if (toolkit_views) {
-    public_deps += [ "//ui/views:test_support" ]
     sources += [
       "../browser/password_manager/password_manager_uitest_util.cc",
       "../browser/password_manager/password_manager_uitest_util.h",
@@ -718,6 +694,8 @@
       "../browser/ui/views/chooser_bubble_testapi_views.cc",
       "../browser/ui/views/desktop_capture/desktop_media_picker_views_test_api.cc",
       "../browser/ui/views/desktop_capture/desktop_media_picker_views_test_api.h",
+      "../browser/ui/views/frame/test_with_browser_view.cc",
+      "../browser/ui/views/frame/test_with_browser_view.h",
       "../browser/ui/views/media_router/app_menu_test_api.h",
       "../browser/ui/views/media_router/app_menu_test_api_views.cc",
       "../browser/ui/views/profiles/profile_picker_view_test_utils.cc",
@@ -736,6 +714,10 @@
       "views/chrome_views_test_base.cc",
       "views/chrome_views_test_base.h",
     ]
+    public_deps += [
+      "//chrome/browser/media/router:media_router_feature",
+      "//ui/views:test_support",
+    ]
     deps += [
       "//chrome/browser/ui/color:mixers",
       "//components/user_education/views",
@@ -774,6 +756,8 @@
       "../browser/ui/web_applications/test/web_app_browsertest_util.h",
       "../browser/ui/web_applications/web_app_controller_browsertest.cc",
       "../browser/ui/web_applications/web_app_controller_browsertest.h",
+      "../common/extensions/manifest_tests/chrome_manifest_test.cc",
+      "../common/extensions/manifest_tests/chrome_manifest_test.h",
     ]
 
     public_deps += [
@@ -1465,7 +1449,6 @@
       "//components/proxy_config",
       "//components/reading_list/core",
       "//components/reading_list/features:flags",
-      "//components/renderer_context_menu",
       "//components/resources",
       "//components/safe_browsing:buildflags",
       "//components/safe_browsing/content/browser",
@@ -2082,8 +2065,6 @@
       "../browser/referrer_policy_browsertest.cc",
       "../browser/renderer_context_menu/accessibility_labels_bubble_model_browsertest.cc",
       "../browser/renderer_context_menu/accessibility_labels_menu_observer_browsertest.cc",
-      "../browser/renderer_context_menu/mock_render_view_context_menu.cc",
-      "../browser/renderer_context_menu/mock_render_view_context_menu.h",
       "../browser/renderer_context_menu/render_view_context_menu_browsertest.cc",
       "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc",
       "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.h",
@@ -2099,8 +2080,6 @@
       "../browser/safe_browsing/client_side_detection_service_browsertest.cc",
       "../browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.cc",
       "../browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h",
-      "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.cc",
-      "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h",
       "../browser/safe_browsing/download_protection/download_protection_service_browsertest.cc",
       "../browser/safe_browsing/test_safe_browsing_database_helper.cc",
       "../browser/safe_browsing/test_safe_browsing_database_helper.h",
@@ -3099,8 +3078,6 @@
         "../browser/extensions/extension_dom_clipboard_apitest.cc",
         "../browser/extensions/extension_fileapi_apitest.cc",
         "../browser/extensions/extension_function_registration_test.cc",
-        "../browser/extensions/extension_function_test_utils.cc",
-        "../browser/extensions/extension_function_test_utils.h",
         "../browser/extensions/extension_functional_browsertest.cc",
         "../browser/extensions/extension_geolocation_apitest.cc",
         "../browser/extensions/extension_get_views_apitest.cc",
@@ -3736,16 +3713,8 @@
         "../browser/ash/bluetooth/hats_bluetooth_revamp_trigger_impl_browsertest.cc",
         "../browser/ash/child_accounts/family_user_device_metrics_browsertest.cc",
         "../browser/ash/child_accounts/parent_access_code/parent_access_service_browsertest.cc",
-        "../browser/ash/child_accounts/parent_access_code/parent_access_test_utils.cc",
-        "../browser/ash/child_accounts/parent_access_code/parent_access_test_utils.h",
         "../browser/ash/child_accounts/screen_time_controller_browsertest.cc",
-        "../browser/ash/child_accounts/time_limit_test_utils.cc",
-        "../browser/ash/child_accounts/time_limit_test_utils.h",
         "../browser/ash/child_accounts/time_limits/app_time_browsertest.cc",
-        "../browser/ash/child_accounts/time_limits/app_time_limits_allowlist_policy_test_utils.cc",
-        "../browser/ash/child_accounts/time_limits/app_time_limits_allowlist_policy_test_utils.h",
-        "../browser/ash/child_accounts/time_limits/app_time_limits_policy_builder.cc",
-        "../browser/ash/child_accounts/time_limits/app_time_limits_policy_builder.h",
         "../browser/ash/crostini/crostini_browser_test_util.cc",
         "../browser/ash/crostini/crostini_browser_test_util.h",
         "../browser/ash/crostini/crostini_browsertest.cc",
@@ -3767,10 +3736,6 @@
         "../browser/ash/file_manager/image_loader_jstest.cc",
         "../browser/ash/file_manager/open_with_browser_browsertest.cc",
         "../browser/ash/file_suggest/file_suggest_keyed_service_browsertest.cc",
-        "../browser/ash/file_system_provider/fake_extension_provider.cc",
-        "../browser/ash/file_system_provider/fake_extension_provider.h",
-        "../browser/ash/file_system_provider/fake_provided_file_system.cc",
-        "../browser/ash/file_system_provider/fake_provided_file_system.h",
         "../browser/ash/first_party_sets/first_party_sets_policy_initialization_browsertest.cc",
         "../browser/ash/guest_os/guest_os_registry_service_icon_browsertest.cc",
         "../browser/ash/input_method/input_method_engine_browsertests.cc",
@@ -3806,8 +3771,6 @@
         "../browser/ash/login/debug_overlay_browsertest.cc",
         "../browser/ash/login/demo_mode/demo_session_browsertest.cc",
         "../browser/ash/login/demo_mode/demo_setup_browsertest.cc",
-        "../browser/ash/login/demo_mode/demo_setup_test_utils.cc",
-        "../browser/ash/login/demo_mode/demo_setup_test_utils.h",
         "../browser/ash/login/device_family_link_allowed_policy_browsertest.cc",
         "../browser/ash/login/enable_debugging_browsertest.cc",
         "../browser/ash/login/encryption_migration_browsertest.cc",
@@ -3934,8 +3897,6 @@
         "../browser/ash/login/test/hid_controller_mixin.h",
         "../browser/ash/login/test/kiosk_apps_mixin.cc",
         "../browser/ash/login/test/kiosk_apps_mixin.h",
-        "../browser/ash/login/test/kiosk_test_helpers.cc",
-        "../browser/ash/login/test/kiosk_test_helpers.h",
         "../browser/ash/login/test/network_portal_detector_mixin.cc",
         "../browser/ash/login/test/network_portal_detector_mixin.h",
         "../browser/ash/login/test/offline_login_test_mixin.cc",
@@ -3971,10 +3932,6 @@
         "../browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc",
         "../browser/ash/platform_keys/key_permissions/key_permissions_manager_browsertest.cc",
         "../browser/ash/platform_keys/platform_keys_service_browsertest.cc",
-        "../browser/ash/platform_keys/platform_keys_service_test_util.cc",
-        "../browser/ash/platform_keys/platform_keys_service_test_util.h",
-        "../browser/ash/plugin_vm/plugin_vm_test_helper.cc",
-        "../browser/ash/plugin_vm/plugin_vm_test_helper.h",
         "../browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc",
         "../browser/ash/policy/affiliation/affiliation_mixin.cc",
         "../browser/ash/policy/affiliation/affiliation_mixin.h",
@@ -4021,8 +3978,6 @@
         "../browser/ash/policy/networking/policy_certs_browsertest.cc",
         "../browser/ash/policy/reporting/metrics_reporting/audio/audio_events_observer_browsertest.cc",
         "../browser/ash/policy/reporting/metrics_reporting/cros_healthd_info_metric_sampler_browsertest.cc",
-        "../browser/ash/policy/reporting/metrics_reporting/cros_healthd_info_metric_sampler_test_utils.cc",
-        "../browser/ash/policy/reporting/metrics_reporting/cros_healthd_info_metric_sampler_test_utils.h",
         "../browser/ash/policy/reporting/metrics_reporting/metric_browsertest_utils.cc",
         "../browser/ash/policy/reporting/metrics_reporting/metric_browsertest_utils.h",
         "../browser/ash/policy/reporting/metrics_reporting/network/network_events_observer_browsertest.cc",
@@ -4032,6 +3987,7 @@
         "../browser/ash/policy/status_collector/child_status_collector_browsertest.cc",
         "../browser/ash/policy/status_collector/device_status_collector_browsertest.cc",
         "../browser/ash/preferences_browsertest.cc",
+        "../browser/ash/privacy_hub/privacy_hub_hats_trigger_browsertest.cc",
         "../browser/ash/remote_apps/remote_apps_manager_browsertest.cc",
         "../browser/ash/scoped_test_system_nss_key_slot_mixin.cc",
         "../browser/ash/scoped_test_system_nss_key_slot_mixin.h",
@@ -4063,8 +4019,6 @@
         "../browser/chromeos/video_conference/video_conference_manager_client_browsertest.cc",
         "../browser/device_api/device_attribute_api_browsertest.cc",
         "../browser/drive/drive_notification_manager_factory_browsertest.cc",
-        "../browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.cc",
-        "../browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.h",
         "../browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator_browsertest.cc",
         "../browser/extensions/extension_keeplist_ash_browsertest.cc",
         "../browser/feedback/show_feedback_page_browsertest.cc",
@@ -5552,12 +5506,6 @@
     "../browser/policy/messaging_layer/upload/upload_provider_unittest.cc",
     "../browser/policy/messaging_layer/util/dm_token_retriever_provider_unittest.cc",
     "../browser/policy/messaging_layer/util/report_queue_manual_test_context_unittest.cc",
-    "../browser/policy/messaging_layer/util/reporting_server_connector_test_util.cc",
-    "../browser/policy/messaging_layer/util/reporting_server_connector_test_util.h",
-    "../browser/policy/messaging_layer/util/test_request_payload.cc",
-    "../browser/policy/messaging_layer/util/test_request_payload.h",
-    "../browser/policy/messaging_layer/util/test_response_payload.cc",
-    "../browser/policy/messaging_layer/util/test_response_payload.h",
     "../browser/policy/messaging_layer/util/user_dm_token_retriever_unittest.cc",
     "../browser/policy/profile_policy_connector_unittest.cc",
     "../browser/policy/webusb_allow_devices_for_urls_policy_handler_unittest.cc",
@@ -5634,8 +5582,6 @@
     "../browser/share/share_history_unittest.cc",
     "../browser/share/share_ranking_unittest.cc",
     "../browser/sharing/ack_message_handler_unittest.cc",
-    "../browser/sharing/fake_device_info.cc",
-    "../browser/sharing/fake_device_info.h",
     "../browser/sharing/fake_sharing_handler_registry.cc",
     "../browser/sharing/fake_sharing_handler_registry.h",
     "../browser/sharing/mock_sharing_device_source.cc",
@@ -5644,8 +5590,6 @@
     "../browser/sharing/mock_sharing_message_handler.h",
     "../browser/sharing/mock_sharing_message_sender.cc",
     "../browser/sharing/mock_sharing_message_sender.h",
-    "../browser/sharing/mock_sharing_service.cc",
-    "../browser/sharing/mock_sharing_service.h",
     "../browser/sharing/sharing_device_registration_unittest.cc",
     "../browser/sharing/sharing_device_source_sync_unittest.cc",
     "../browser/sharing/sharing_device_source_unittest.cc",
@@ -6636,7 +6580,6 @@
       "//components/download/internal/common:internal_java",
       "//components/enterprise",
       "//components/enterprise:test_support",
-      "//components/enterprise/common/proto:connectors_proto",
       "//components/favicon/core/test:test_support",
       "//components/feed/core/shared_prefs:feed_shared_prefs",
       "//components/feed/mojom:mojo_bindings",
@@ -6815,8 +6758,6 @@
       "../browser/profiles/guest_profile_creation_logger_unittest.cc",
       "../browser/profiles/profile_avatar_icon_util_unittest.cc",
       "../browser/profiles/profile_destroyer_unittest.cc",
-      "../browser/renderer_context_menu/mock_render_view_context_menu.cc",
-      "../browser/renderer_context_menu/mock_render_view_context_menu.h",
       "../browser/renderer_context_menu/render_view_context_menu_unittest.cc",
       "../browser/resource_coordinator/decision_details_unittest.cc",
       "../browser/resource_coordinator/discard_metrics_lifecycle_unit_observer_unittest.cc",
@@ -7395,107 +7336,12 @@
       "../browser/apps/app_service/publishers/plugin_vm_apps_unittest.cc",
       "../browser/apps/app_service/webapk/webapk_install_task_unittest.cc",
       "../browser/apps/app_service/webapk/webapk_manager_unittest.cc",
-      "../browser/ash/app_list/app_context_menu_unittest.cc",
-      "../browser/ash/app_list/app_list_sort_unittest.cc",
-      "../browser/ash/app_list/app_list_syncable_service_unittest.cc",
-      "../browser/ash/app_list/app_list_test_util.cc",
-      "../browser/ash/app_list/app_list_test_util.h",
-      "../browser/ash/app_list/app_service/app_service_app_model_builder_unittest.cc",
-      "../browser/ash/app_list/arc/arc_app_sync_metrics_helper_unittest.cc",
-      "../browser/ash/app_list/arc/arc_app_test.cc",
-      "../browser/ash/app_list/arc/arc_app_test.h",
-      "../browser/ash/app_list/arc/arc_app_unittest.cc",
-      "../browser/ash/app_list/arc/arc_app_utils_unittest.cc",
-      "../browser/ash/app_list/arc/arc_default_app_list_unittest.cc",
-      "../browser/ash/app_list/arc/arc_vpn_provider_unittest.cc",
-      "../browser/ash/app_list/arc/intent_unittest.cc",
-      "../browser/ash/app_list/arc/mock_arc_app_list_prefs_observer.cc",
-      "../browser/ash/app_list/arc/mock_arc_app_list_prefs_observer.h",
-      "../browser/ash/app_list/chrome_app_list_item_manager_unittest.cc",
-      "../browser/ash/app_list/md_icon_normalizer_unittest.cc",
-      "../browser/ash/app_list/reorder/app_list_reorder_core_unittest.cc",
-      "../browser/ash/app_list/reorder/app_list_reorder_util_unittest.cc",
-      "../browser/ash/app_list/search/app_search_provider_test_base.cc",
-      "../browser/ash/app_list/search/app_search_provider_test_base.h",
-      "../browser/ash/app_list/search/app_search_provider_unittest.cc",
-      "../browser/ash/app_list/search/app_zero_state_provider_unittest.cc",
-      "../browser/ash/app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc",
-      "../browser/ash/app_list/search/arc/arc_playstore_search_provider_unittest.cc",
-      "../browser/ash/app_list/search/arc/recommend_apps_fetcher_impl_unittest.cc",
-      "../browser/ash/app_list/search/assistant_text_search_provider_unittest.cc",
-      "../browser/ash/app_list/search/chrome_search_result_unittest.cc",
-      "../browser/ash/app_list/search/common/keyword_util_unittest.cc",
-      "../browser/ash/app_list/search/common/string_util_unittest.cc",
-      "../browser/ash/app_list/search/cros_action_history/cros_action_recorder_tab_tracker_unittest.cc",
-      "../browser/ash/app_list/search/cros_action_history/cros_action_recorder_unittest.cc",
-      "../browser/ash/app_list/search/files/file_result_unittest.cc",
-      "../browser/ash/app_list/search/files/file_search_provider_unittest.cc",
-      "../browser/ash/app_list/search/files/justifications_unittest.cc",
-      "../browser/ash/app_list/search/files/zero_state_drive_provider_unittest.cc",
-      "../browser/ash/app_list/search/files/zero_state_file_provider_unittest.cc",
-      "../browser/ash/app_list/search/games/game_provider_unittest.cc",
-      "../browser/ash/app_list/search/games/game_result_unittest.cc",
-      "../browser/ash/app_list/search/help_app_provider_unittest.cc",
-      "../browser/ash/app_list/search/help_app_zero_state_provider_unittest.cc",
-      "../browser/ash/app_list/search/keyboard_shortcut_provider_unittest.cc",
-      "../browser/ash/app_list/search/keyboard_shortcut_result_unittest.cc",
-      "../browser/ash/app_list/search/omnibox/omnibox_answer_result_unittest.cc",
-      "../browser/ash/app_list/search/omnibox/omnibox_lacros_provider_unittest.cc",
-      "../browser/ash/app_list/search/omnibox/omnibox_provider_unittest.cc",
-      "../browser/ash/app_list/search/omnibox/omnibox_result_unittest.cc",
-      "../browser/ash/app_list/search/omnibox/open_tab_result_unittest.cc",
-      "../browser/ash/app_list/search/os_settings_provider_unittest.cc",
-      "../browser/ash/app_list/search/personalization_provider_unittest.cc",
-      "../browser/ash/app_list/search/ranking/answer_ranker_unittest.cc",
-      "../browser/ash/app_list/search/ranking/best_match_ranker_unittest.cc",
-      "../browser/ash/app_list/search/ranking/filtering_ranker_unittest.cc",
-      "../browser/ash/app_list/search/ranking/ftrl_ranker_unittest.cc",
-      "../browser/ash/app_list/search/ranking/keyword_ranker_unittest.cc",
-      "../browser/ash/app_list/search/ranking/mrfu_ranker_unittest.cc",
-      "../browser/ash/app_list/search/ranking/query_highlighter_unittest.cc",
-      "../browser/ash/app_list/search/ranking/removed_results_proto_unittest.cc",
-      "../browser/ash/app_list/search/ranking/removed_results_ranker_unittest.cc",
-      "../browser/ash/app_list/search/ranking/score_normalizing_ranker_unittest.cc",
-      "../browser/ash/app_list/search/search_controller_unittest.cc",
-      "../browser/ash/app_list/search/search_metrics_manager_unittest.cc",
-      "../browser/ash/app_list/search/search_session_metrics_manager_unittest.cc",
-      "../browser/ash/app_list/search/system_info/cpu_usage_data_unittest.cc",
-      "../browser/ash/app_list/search/test/ranking_test_util.cc",
-      "../browser/ash/app_list/search/test/ranking_test_util.h",
-      "../browser/ash/app_list/search/test/search_controller_test_util.cc",
-      "../browser/ash/app_list/search/test/search_controller_test_util.h",
-      "../browser/ash/app_list/search/test/search_metrics_test_util.cc",
-      "../browser/ash/app_list/search/test/search_metrics_test_util.h",
-      "../browser/ash/app_list/search/test/test_ranker_manager.cc",
-      "../browser/ash/app_list/search/test/test_ranker_manager.h",
-      "../browser/ash/app_list/search/test/test_search_controller.cc",
-      "../browser/ash/app_list/search/test/test_search_controller.h",
-      "../browser/ash/app_list/search/test/test_search_provider.cc",
-      "../browser/ash/app_list/search/test/test_search_provider.h",
-      "../browser/ash/app_list/search/util/ftrl_optimizer_unittest.cc",
-      "../browser/ash/app_list/search/util/mrfu_cache_unittest.cc",
-      "../browser/ash/app_list/search/util/persistent_proto_unittest.cc",
-      "../browser/ash/app_list/search/util/score_normalizer_unittest.cc",
-      "../browser/ash/app_list/test/app_list_syncable_service_test_base.cc",
-      "../browser/ash/app_list/test/app_list_syncable_service_test_base.h",
-      "../browser/ash/app_list/test/fake_app_list_model_updater.cc",
-      "../browser/ash/app_list/test/fake_app_list_model_updater.h",
-      "../browser/ash/attestation/attestation_policy_unittest.cc",
-      "../browser/ash/dbus/chrome_features_service_provider_unittest.cc",
-      "../browser/ash/file_suggest/file_suggest_keyed_service_unittest.cc",
-      "../browser/ash/file_suggest/item_suggest_cache_unittest.cc",
-      "../browser/ash/file_suggest/local_file_suggestion_provider_unittest.cc",
-      "../browser/ash/login/screens/reset_screen_unittest.cc",
       "../browser/browser_process_platform_part_ash_unittest.cc",
       "../browser/component_updater/cros_component_installer_chromeos_unittest.cc",
       "../browser/component_updater/metadata_table_chromeos_unittest.cc",
       "../browser/device_identity/chromeos/device_oauth2_token_store_chromeos_unittest.cc",
       "../browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc",
-      "../browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.cc",
-      "../browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.h",
       "../browser/enterprise/connectors/analysis/source_destination_matcher_ash_unittest.cc",
-      "../browser/enterprise/connectors/analysis/source_destination_test_util.cc",
-      "../browser/enterprise/connectors/analysis/source_destination_test_util.h",
       "../browser/enterprise/connectors/device_trust/attestation/ash/ash_attestation_service_unittest.cc",
       "../browser/enterprise/reporting/android_app_info_generator_unittest.cc",
       "../browser/extensions/api/terminal/startup_status_unittest.cc",
@@ -7615,8 +7461,6 @@
       "../browser/ui/webui/ash/add_supervision/add_supervision_handler_utils_unittest.cc",
       "../browser/ui/webui/ash/arc_graphics_tracing/arc_graphics_tracing_handler_unittest.cc",
       "../browser/ui/webui/ash/edu_account_login_handler_unittest.cc",
-      "../browser/ui/webui/ash/login/fake_update_required_screen_handler.cc",
-      "../browser/ui/webui/ash/login/fake_update_required_screen_handler.h",
       "../browser/ui/webui/ash/sync/os_sync_handler_unittest.cc",
       "../browser/ui/webui/help/version_updater_chromeos_unittest.cc",
       "../browser/ui/webui/signin/ash/user_cloud_signin_restriction_policy_fetcher_unittest.cc",
@@ -8065,8 +7909,6 @@
       "../browser/extensions/extension_prefs_unittest.h",
       "../browser/extensions/extension_protocols_unittest.cc",
       "../browser/extensions/extension_service_sync_unittest.cc",
-      "../browser/extensions/extension_service_test_with_install.cc",
-      "../browser/extensions/extension_service_test_with_install.h",
       "../browser/extensions/extension_service_unittest.cc",
       "../browser/extensions/extension_special_storage_policy_unittest.cc",
       "../browser/extensions/extension_sync_data_unittest.cc",
@@ -8187,8 +8029,6 @@
       "../common/extensions/manifest_handlers/exclude_matches_manifest_unittest.cc",
       "../common/extensions/manifest_handlers/natively_connectable_handler_unittest.cc",
       "../common/extensions/manifest_handlers/settings_overrides_handler_unittest.cc",
-      "../common/extensions/manifest_tests/chrome_manifest_test.cc",
-      "../common/extensions/manifest_tests/chrome_manifest_test.h",
       "../common/extensions/manifest_tests/extension_manifests_about_unittest.cc",
       "../common/extensions/manifest_tests/extension_manifests_background_unittest.cc",
       "../common/extensions/manifest_tests/extension_manifests_chromepermission_unittest.cc",
@@ -8322,11 +8162,6 @@
 
     if (is_chromeos_ash) {
       sources += [
-        "../browser/ash/extensions/extensions_permissions_tracker_unittest.cc",
-        "../browser/ash/login/easy_unlock/easy_unlock_auth_attempt_unittest.cc",
-        "../browser/ash/login/easy_unlock/easy_unlock_notification_controller_unittest.cc",
-        "../browser/ash/login/easy_unlock/easy_unlock_service_regular_unittest.cc",
-        "../browser/ash/login/easy_unlock/smartlock_feature_usage_metrics_unittest.cc",
         "../browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_api_ash_unittest.cc",
         "../browser/extensions/api/file_system/consent_provider_unittest.cc",
         "../browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc",
@@ -8490,8 +8325,6 @@
       "../browser/safe_browsing/client_side_detection_service_unittest.cc",
       "../browser/safe_browsing/cloud_content_scanning/binary_fcm_service_unittest.cc",
       "../browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service_unittest.cc",
-      "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.cc",
-      "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h",
       "../browser/safe_browsing/cloud_content_scanning/deep_scanning_utils_unittest.cc",
       "../browser/safe_browsing/cloud_content_scanning/file_analysis_request_unittest.cc",
       "../browser/safe_browsing/cloud_content_scanning/file_opening_job_unittest.cc",
@@ -8917,8 +8750,6 @@
       "../browser/ui/views/frame/browser_view_layout_unittest.cc",
       "../browser/ui/views/frame/browser_view_unittest.cc",
       "../browser/ui/views/frame/tab_strip_region_view_unittest.cc",
-      "../browser/ui/views/frame/test_with_browser_view.cc",
-      "../browser/ui/views/frame/test_with_browser_view.h",
       "../browser/ui/views/frame/web_contents_close_handler_unittest.cc",
       "../browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc",
       "../browser/ui/views/global_media_controls/media_item_ui_footer_view_unittest.cc",
@@ -9474,6 +9305,8 @@
         "//chrome:resources",
         "//chrome:strings",
         "//chrome/browser",
+        "//chrome/browser/ash",
+        "//chrome/browser/ash:test_support",
         "//chrome/browser/devtools",
         "//chrome/renderer",
         "//components/resources",
@@ -9538,8 +9371,6 @@
       "../browser/extensions/extension_commands_global_registry_apitest.cc",
       "../browser/extensions/extension_crash_recovery_browsertest.cc",
       "../browser/extensions/extension_fullscreen_apitest.cc",
-      "../browser/extensions/extension_function_test_utils.cc",
-      "../browser/extensions/extension_function_test_utils.h",
       "../browser/extensions/extension_keybinding_apitest.cc",
       "../browser/extensions/omnibox_focus_interactive_test.cc",
       "../browser/focus_ring_browsertest.cc",
@@ -9558,8 +9389,6 @@
       "../browser/portal/portal_interactive_uittest.cc",
       "../browser/preloading/prerender/prerender_omnibox_ui_browsertest.cc",
       "../browser/renderer_context_menu/link_to_text_menu_observer_interactive_uitest.cc",
-      "../browser/renderer_context_menu/mock_render_view_context_menu.cc",
-      "../browser/renderer_context_menu/mock_render_view_context_menu.h",
       "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc",
       "../browser/renderer_context_menu/render_view_context_menu_browsertest_util.h",
       "../browser/renderer_context_menu/render_view_context_menu_interactive_uitest.cc",
@@ -9658,7 +9487,6 @@
       "//chrome/browser/autofill:test_support_ui",
       "//chrome/browser/devtools",
       "//chrome/browser/devtools:test_support",
-      "//chrome/browser/media/router:media_router_feature",
       "//chrome/browser/media/router/discovery/access_code:access_code_cast_feature",
       "//chrome/browser/media/router/discovery/access_code:access_code_sink_service",
       "//chrome/browser/resource_coordinator:tab_metrics_event_proto",
@@ -9699,7 +9527,6 @@
       "//components/privacy_sandbox:privacy_sandbox_prefs",
       "//components/reading_list/core",
       "//components/reading_list/features:flags",
-      "//components/renderer_context_menu",
       "//components/resources",
       "//components/saved_tab_groups:core",
       "//components/search",
@@ -10419,8 +10246,6 @@
   }
   if (is_chromeos_ash) {
     sources += [
-      "../browser/ash/app_list/test/fake_app_list_model_updater.cc",
-      "../browser/ash/app_list/test/fake_app_list_model_updater.h",
       "../browser/sync/test/integration/printers_helper.cc",
       "../browser/sync/test/integration/printers_helper.h",
       "../browser/sync/test/integration/sync_app_list_helper.cc",
@@ -10434,6 +10259,7 @@
       "//ash/app_list:test_support",
       "//ash/components/arc:arc_test_support",
       "//ash/components/arc/mojom",
+      "//chrome/browser/ash:test_support",
       "//chrome/browser/ash/system_web_apps/test_support",
       "//chromeos/ash/components/network/portal_detector",
       "//chromeos/printing",
@@ -10918,8 +10744,6 @@
       "../browser/ash/child_accounts/time_limit_consistency_test/consistency_test_utils.h",
       "../browser/ash/child_accounts/time_limit_consistency_test/proto_matcher.h",
       "../browser/ash/child_accounts/time_limit_consistency_test/run_all_unittests.cc",
-      "../browser/ash/child_accounts/time_limit_test_utils.cc",
-      "../browser/ash/child_accounts/time_limit_test_utils.h",
     ]
     deps = [
       ":consistency_golden_proto",
@@ -10927,6 +10751,7 @@
       "//base/test:test_support",
       "//chrome/browser",
       "//chrome/browser/ash",
+      "//chrome/browser/ash:test_support",
       "//chromeos/ash/components/settings",
       "//components/exo/wayland:ui_controls_protocol_stub",
       "//components/exo/wayland:weston_test_stub",
diff --git a/chrome/test/data/extensions/api_test/passwords_private/test.js b/chrome/test/data/extensions/api_test/passwords_private/test.js
index 7f07c68..e837f48 100644
--- a/chrome/test/data/extensions/api_test/passwords_private/test.js
+++ b/chrome/test/data/extensions/api_test/passwords_private/test.js
@@ -631,6 +631,38 @@
 
     chrome.passwordsPrivate.getCredentialGroups(callback);
   },
+
+  function getCredentialsWithReusedPassword() {
+    chrome.passwordsPrivate.getCredentialsWithReusedPassword(
+      credentialsGroupedByPassword => {
+        chrome.test.assertEq(1, credentialsGroupedByPassword.length);
+
+        var credentialsWithReusedPassword = credentialsGroupedByPassword[0];
+        chrome.test.assertEq(2, credentialsWithReusedPassword.entries.length);
+
+        var firstCredentials = credentialsWithReusedPassword.entries[0];
+        chrome.test.assertEq('example.com', firstCredentials.urls.shown);
+        chrome.test.assertEq('https://example.com', firstCredentials.urls.link);
+        chrome.test.assertFalse(firstCredentials.isAndroidCredential);
+        chrome.test.assertEq(
+            'https://example.com/change-password',
+            firstCredentials.changePasswordUrl);
+        chrome.test.assertEq('bob', firstCredentials.username);
+        chrome.test.assertEq(
+            ['REUSED'],
+            firstCredentials.compromisedInfo.compromiseTypes);
+
+        var secondCredential = credentialsWithReusedPassword.entries[1];
+        chrome.test.assertEq('test.com', secondCredential.urls.shown);
+        chrome.test.assertEq('https://test.com', secondCredential.urls.link);
+        chrome.test.assertFalse(secondCredential.isAndroidCredential);
+        chrome.test.assertEq('angela', secondCredential.username);
+        chrome.test.assertEq(
+            ['REUSED'],
+            secondCredential.compromisedInfo.compromiseTypes);
+        chrome.test.succeed();
+      });
+  },
 ];
 
 var testToRun = window.location.search.substring(1);
diff --git a/chrome/test/data/webrtc/getusermedia.js b/chrome/test/data/webrtc/getusermedia.js
index 37e8da2e..fe4c81b 100644
--- a/chrome/test/data/webrtc/getusermedia.js
+++ b/chrome/test/data/webrtc/getusermedia.js
@@ -70,7 +70,7 @@
         });
   });
   var timeoutPromise = new Promise(function(resolve) {
-    setTimeout(() => resolve('request-timedout'), 10000);
+    setTimeout(() => resolve('request-timedout'), 4000);
   });
   Promise.race([gumPromise, timeoutPromise]).then(function(value) {
     returnToTest(value);
diff --git a/chrome/test/data/webui/password_manager/checkup_section_test.ts b/chrome/test/data/webui/password_manager/checkup_section_test.ts
index 922dbbb..9833c78 100644
--- a/chrome/test/data/webui/password_manager/checkup_section_test.ts
+++ b/chrome/test/data/webui/password_manager/checkup_section_test.ts
@@ -4,7 +4,7 @@
 
 import 'chrome://password-manager/password_manager.js';
 
-import {CheckupSubpage, Page, PasswordCheckInteraction, PasswordManagerImpl, Router} from 'chrome://password-manager/password_manager.js';
+import {CheckupSubpage, Page, PasswordCheckInteraction, PasswordManagerImpl, Router, UrlParam} from 'chrome://password-manager/password_manager.js';
 import {PluralStringProxy, PluralStringProxyImpl} from 'chrome://resources/js/plural_string_proxy.js';
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -297,4 +297,23 @@
                 assertEquals(
                     Page.CHECKUP, Router.getInstance().currentRoute.page);
               }));
+
+  test('Start check automatically', async function() {
+    const newParams = new URLSearchParams();
+    newParams.set(UrlParam.START_CHECK, 'true');
+    Router.getInstance().updateRouterParams(newParams);
+
+    passwordManager.data.checkStatus =
+        makePasswordCheckStatus({state: PasswordCheckState.IDLE});
+
+    const section = document.createElement('checkup-section');
+    document.body.appendChild(section);
+    await flushTasks();
+
+    await passwordManager.whenCalled('startBulkPasswordCheck');
+    const interaction =
+        await passwordManager.whenCalled('recordPasswordCheckInteraction');
+    assertEquals(
+        PasswordCheckInteraction.START_CHECK_AUTOMATICALLY, interaction);
+  });
 });
diff --git a/chrome/test/data/webui/password_manager/password_manager_app_test.ts b/chrome/test/data/webui/password_manager/password_manager_app_test.ts
index 4e8dcec..1b02895f 100644
--- a/chrome/test/data/webui/password_manager/password_manager_app_test.ts
+++ b/chrome/test/data/webui/password_manager/password_manager_app_test.ts
@@ -53,6 +53,12 @@
         const ironItem =
             app.$.sidebar.shadowRoot!.querySelector<HTMLElement>(`#${page}`)!;
         assertTrue(ironItem.classList.contains('iron-selected'));
+        if (page === Page.CHECKUP) {
+          assertEquals(
+              'true',
+              String(Router.getInstance().currentRoute.queryParameters.get(
+                  UrlParam.START_CHECK)));
+        }
       }));
 
   test('app drawer', async () => {
@@ -102,4 +108,21 @@
     // out.
     assertTrue(!!app.shadowRoot!.querySelector('#drawerSidebar'));
   });
+
+  test('Search navigates to Passwords and updates URL parameters', function() {
+    const query = new URLSearchParams();
+    query.set(UrlParam.START_CHECK, 'true');
+    Router.getInstance().navigateTo(Page.CHECKUP);
+    Router.getInstance().updateRouterParams(query);
+
+    app.$.toolbar.$.mainToolbar.getSearchField().setValue('hello');
+
+    assertEquals(Page.PASSWORDS, Router.getInstance().currentRoute.page);
+    assertEquals(
+        'hello',
+        String(Router.getInstance().currentRoute.queryParameters.get(
+            UrlParam.SEARCH_TERM)));
+    assertFalse(Router.getInstance().currentRoute.queryParameters.has(
+        UrlParam.START_CHECK));
+  });
 });
diff --git a/chrome/test/data/webui/signin/signin_browsertest.js b/chrome/test/data/webui/signin/signin_browsertest.js
index e93b072..705209f4 100644
--- a/chrome/test/data/webui/signin/signin_browsertest.js
+++ b/chrome/test/data/webui/signin/signin_browsertest.js
@@ -125,6 +125,7 @@
   mocha.run();
 });
 
+GEN('#if BUILDFLAG(ENABLE_DICE_SUPPORT)');
 /**
  * Test fixture for the Signin Intercept modal dialog version of
  * chrome/browser/resources/signin/sync_confirmation/sync_confirmation.html
@@ -150,6 +151,7 @@
 TEST_F('TangibleSyncSigninInterceptModalTest', 'Dialog', function() {
   mocha.run();
 });
+GEN('#endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)');
 
 /**
  * Test fixture for the window version of
diff --git a/chromeos/ash/components/network/device_state.cc b/chromeos/ash/components/network/device_state.cc
index e1bf45d..fa86b8d8 100644
--- a/chromeos/ash/components/network/device_state.cc
+++ b/chromeos/ash/components/network/device_state.cc
@@ -5,6 +5,7 @@
 #include "chromeos/ash/components/network/device_state.h"
 
 #include <memory>
+#include <string>
 
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
@@ -43,29 +44,37 @@
       country_code_.clear();
       return true;
     }
-    const base::Value* operator_name = value.FindKey(shill::kOperatorNameKey);
-    if (operator_name)
-      operator_name_ = operator_name->GetString();
-    if (operator_name_.empty()) {
-      const base::Value* operator_code = value.FindKey(shill::kOperatorCodeKey);
-      operator_name_ = operator_code ? operator_code->GetString() : "";
+    const base::Value::Dict& dict = value.GetDict();
+
+    const std::string* operator_name = dict.FindString(shill::kOperatorNameKey);
+    if (operator_name) {
+      operator_name_ = *operator_name;
     }
-    const base::Value* country_code = value.FindKey(shill::kOperatorCountryKey);
-    country_code_ = country_code ? country_code->GetString() : "";
+    if (operator_name_.empty()) {
+      const std::string* operator_code =
+          dict.FindString(shill::kOperatorCodeKey);
+      operator_name_ = operator_code ? *operator_code : std::string();
+    }
+    const std::string* country_code =
+        dict.FindString(shill::kOperatorCountryKey);
+    country_code_ = country_code ? *country_code : std::string();
   } else if (key == shill::kTechnologyFamilyProperty) {
     return GetStringValue(key, value, &technology_family_);
   } else if (key == shill::kFoundNetworksProperty) {
-    if (!value.is_list())
+    if (!value.is_list()) {
       return false;
+    }
     CellularScanResults parsed_results;
     if (!network_util::ParseCellularScanResults(value.GetList(),
-                                                &parsed_results))
+                                                &parsed_results)) {
       return false;
+    }
     scan_results_.swap(parsed_results);
     return true;
   } else if (key == shill::kSIMSlotInfoProperty) {
-    if (!value.is_list())
+    if (!value.is_list()) {
       return false;
+    }
     CellularSIMSlotInfos parsed_results;
     if (!network_util::ParseCellularSIMSlotInfo(value.GetList(),
                                                 &parsed_results)) {
@@ -74,8 +83,10 @@
     sim_slot_infos_.swap(parsed_results);
     return true;
   } else if (key == shill::kSIMLockStatusProperty) {
-    if (!value.is_dict())
+    if (!value.is_dict()) {
       return false;
+    }
+    const base::Value::Dict& dict = value.GetDict();
 
     // Set default values for SIM properties.
     sim_lock_type_.erase();
@@ -83,16 +94,16 @@
     sim_lock_enabled_ = false;
 
     const base::Value* out_value = nullptr;
-    out_value = value.FindKey(shill::kSIMLockTypeProperty);
+    out_value = dict.Find(shill::kSIMLockTypeProperty);
     if (out_value) {
       GetStringValue(shill::kSIMLockTypeProperty, *out_value, &sim_lock_type_);
     }
-    out_value = value.FindKey(shill::kSIMLockRetriesLeftProperty);
+    out_value = dict.Find(shill::kSIMLockRetriesLeftProperty);
     if (out_value) {
       GetIntegerValue(shill::kSIMLockRetriesLeftProperty, *out_value,
                       &sim_retries_left_);
     }
-    out_value = value.FindKey(shill::kSIMLockEnabledProperty);
+    out_value = dict.Find(shill::kSIMLockEnabledProperty);
     if (out_value) {
       GetBooleanValue(shill::kSIMLockEnabledProperty, *out_value,
                       &sim_lock_enabled_);
diff --git a/chromeos/ash/components/network/network_state.cc b/chromeos/ash/components/network/network_state.cc
index f396321e..f5fcc3ba1 100644
--- a/chromeos/ash/components/network/network_state.cc
+++ b/chromeos/ash/components/network/network_state.cc
@@ -234,7 +234,7 @@
 bool NetworkState::InitialPropertiesReceived(const base::Value& properties) {
   NET_LOG(EVENT) << "InitialPropertiesReceived: " << NetworkId(this)
                  << " State: " << connection_state_ << " Visible: " << visible_;
-  if (!properties.FindKey(shill::kTypeProperty)) {
+  if (!properties.GetDict().contains(shill::kTypeProperty)) {
     NET_LOG(ERROR) << "NetworkState has no type: " << NetworkId(this);
     return false;
   }
diff --git a/chromeos/ash/components/network/onc/network_onc_utils.cc b/chromeos/ash/components/network/onc/network_onc_utils.cc
index 10b77e1..4933a18 100644
--- a/chromeos/ash/components/network/onc/network_onc_utils.cc
+++ b/chromeos/ash/components/network/onc/network_onc_utils.cc
@@ -104,7 +104,7 @@
 void AppendProxyServerForScheme(const base::Value& onc_manual,
                                 const std::string& onc_scheme,
                                 std::string* spec) {
-  const base::Value* onc_proxy_location = onc_manual.FindKey(onc_scheme);
+  const base::Value* onc_proxy_location = onc_manual.GetDict().Find(onc_scheme);
   if (!onc_proxy_location)
     return;
 
@@ -386,7 +386,7 @@
   }
   if (type == ::onc::proxy::kManual) {
     const base::Value* manual_dict =
-        onc_proxy_settings.FindKey(::onc::proxy::kManual);
+        onc_proxy_settings.GetDict().Find(::onc::proxy::kManual);
     if (!manual_dict) {
       NET_LOG(ERROR) << "Manual proxy missing dictionary";
       return base::Value::Dict();
diff --git a/chromeos/ash/components/network/policy_util.cc b/chromeos/ash/components/network/policy_util.cc
index cb5ea63..7ef0185 100644
--- a/chromeos/ash/components/network/policy_util.cc
+++ b/chromeos/ash/components/network/policy_util.cc
@@ -442,13 +442,13 @@
 const std::string* GetSMDPAddressFromONC(const base::Value& onc_config) {
   const std::string* type =
       onc_config.FindStringKey(::onc::network_config::kType);
-  const base::Value* cellular_dict =
-      onc_config.FindKey(::onc::network_config::kCellular);
+  const base::Value::Dict* cellular_dict =
+      onc_config.GetDict().FindDict(::onc::network_config::kCellular);
   const std::string* smdp_address = nullptr;
 
-  if (type && (*type == ::onc::network_type::kCellular) && cellular_dict &&
-      cellular_dict->is_dict())
-    smdp_address = cellular_dict->FindStringKey(::onc::cellular::kSMDPAddress);
+  if (type && (*type == ::onc::network_type::kCellular) && cellular_dict) {
+    smdp_address = cellular_dict->FindString(::onc::cellular::kSMDPAddress);
+  }
 
   return smdp_address;
 }
diff --git a/chromeos/ash/components/network/shill_property_util.cc b/chromeos/ash/components/network/shill_property_util.cc
index f7860ce0..7725935 100644
--- a/chromeos/ash/components/network/shill_property_util.cc
+++ b/chromeos/ash/components/network/shill_property_util.cc
@@ -8,6 +8,7 @@
 
 #include <memory>
 #include <set>
+#include <string>
 
 #include "ash/constants/ash_features.h"
 #include "base/i18n/encoding_detection.h"
@@ -61,8 +62,8 @@
 }
 
 std::string GetStringFromDictionary(const base::Value* dict, const char* key) {
-  const base::Value* v = dict ? dict->FindKey(key) : nullptr;
-  return v ? v->GetString() : std::string();
+  const std::string* v = dict ? dict->GetDict().FindString(key) : nullptr;
+  return v ? *v : std::string();
 }
 
 }  // namespace
@@ -205,7 +206,7 @@
 std::unique_ptr<NetworkUIData> GetUIDataFromProperties(
     const base::Value& shill_dictionary) {
   const base::Value* ui_data_value =
-      shill_dictionary.FindKey(shill::kUIDataProperty);
+      shill_dictionary.GetDict().Find(shill::kUIDataProperty);
   if (!ui_data_value) {
     VLOG(2) << "Dictionary has no UIData entry.";
     return nullptr;
diff --git a/chromeos/ash/components/phonehub/app_stream_launcher_data_model.cc b/chromeos/ash/components/phonehub/app_stream_launcher_data_model.cc
index e75d5ff..c026e27c 100644
--- a/chromeos/ash/components/phonehub/app_stream_launcher_data_model.cc
+++ b/chromeos/ash/components/phonehub/app_stream_launcher_data_model.cc
@@ -9,6 +9,19 @@
 #include "chromeos/ash/components/phonehub/notification.h"
 
 namespace ash::phonehub {
+namespace {
+void SortStreamableAppsList(
+    std::vector<Notification::AppMetadata>& streamable_apps) {
+  std::sort(
+      streamable_apps.begin(), streamable_apps.end(),
+      [](const Notification::AppMetadata& a,
+         const Notification::AppMetadata& b) {
+        std::u16string a_app_name = base::i18n::ToLower(a.visible_app_name);
+        std::u16string b_app_name = base::i18n::ToLower(b.visible_app_name);
+        return a_app_name < b_app_name;
+      });
+}
+}  // namespace
 
 AppStreamLauncherDataModel::AppStreamLauncherDataModel() = default;
 
@@ -49,14 +62,8 @@
   apps_list_sorted_by_name_ = streamable_apps;
 
   // Alphabetically sort the app list.
-  std::sort(
-      apps_list_sorted_by_name_.begin(), apps_list_sorted_by_name_.end(),
-      [](const Notification::AppMetadata& a,
-         const Notification::AppMetadata& b) {
-        std::u16string a_app_name = base::i18n::ToLower(a.visible_app_name);
-        std::u16string b_app_name = base::i18n::ToLower(b.visible_app_name);
-        return a_app_name < b_app_name;
-      });
+  SortStreamableAppsList(apps_list_sorted_by_name_);
+
   for (auto& observer : observer_list_)
     observer.OnAppListChanged();
 }
@@ -71,4 +78,37 @@
   return &apps_list_sorted_by_name_;
 }
 
+void AppStreamLauncherDataModel::AddAppToList(
+    const Notification::AppMetadata& app) {
+  apps_list_.emplace_back(app);
+  // Alphabetically sort the app list.
+  apps_list_sorted_by_name_.emplace_back(app);
+  SortStreamableAppsList(apps_list_sorted_by_name_);
+
+  for (auto& observer : observer_list_) {
+    observer.OnAppListChanged();
+  }
+}
+
+void AppStreamLauncherDataModel::RemoveAppFromList(
+    const proto::App app_to_remove) {
+  apps_list_.erase(
+      std::remove_if(apps_list_.begin(), apps_list_.end(),
+                     [&app_to_remove](const Notification::AppMetadata& app) {
+                       return app.package_name == app_to_remove.package_name();
+                     }),
+      apps_list_.end());
+
+  apps_list_sorted_by_name_.erase(
+      std::remove_if(apps_list_sorted_by_name_.begin(),
+                     apps_list_sorted_by_name_.end(),
+                     [&app_to_remove](const Notification::AppMetadata& app) {
+                       return app.package_name == app_to_remove.package_name();
+                     }),
+      apps_list_sorted_by_name_.end());
+
+  for (auto& observer : observer_list_) {
+    observer.OnAppListChanged();
+  }
+}
 }  // namespace ash::phonehub
diff --git a/chromeos/ash/components/phonehub/app_stream_launcher_data_model.h b/chromeos/ash/components/phonehub/app_stream_launcher_data_model.h
index 81fd039..3dd24f0 100644
--- a/chromeos/ash/components/phonehub/app_stream_launcher_data_model.h
+++ b/chromeos/ash/components/phonehub/app_stream_launcher_data_model.h
@@ -10,6 +10,7 @@
 #include "base/observer_list.h"
 #include "base/observer_list_types.h"
 #include "chromeos/ash/components/phonehub/notification.h"
+#include "chromeos/ash/components/phonehub/proto/phonehub_api.pb.h"
 
 namespace ash::phonehub {
 
@@ -48,6 +49,8 @@
       const std::vector<Notification::AppMetadata>& streamable_apps);
   const std::vector<Notification::AppMetadata>* GetAppsList();
   const std::vector<Notification::AppMetadata>* GetAppsListSortedByName();
+  void AddAppToList(const Notification::AppMetadata& app);
+  void RemoveAppFromList(const proto::App app);
 
  private:
   // Indicates if the Mini Launcher should be shown when the status is
diff --git a/chromeos/ash/components/phonehub/app_stream_launcher_data_model_unittest.cc b/chromeos/ash/components/phonehub/app_stream_launcher_data_model_unittest.cc
index 0f51c59..b40da92 100644
--- a/chromeos/ash/components/phonehub/app_stream_launcher_data_model_unittest.cc
+++ b/chromeos/ash/components/phonehub/app_stream_launcher_data_model_unittest.cc
@@ -81,6 +81,14 @@
     app_stream_launcher_data_launcher_->SetAppList(streamable_apps);
   }
 
+  void AddAppToList(const Notification::AppMetadata& app_to_add) {
+    app_stream_launcher_data_launcher_->AddAppToList(app_to_add);
+  }
+
+  void RemoveAppFromList(const proto::App app_to_remove) {
+    app_stream_launcher_data_launcher_->RemoveAppFromList(app_to_remove);
+  }
+
   const std::vector<Notification::AppMetadata>* GetAppsList() {
     return app_stream_launcher_data_launcher_->GetAppsList();
   }
@@ -123,5 +131,53 @@
   EXPECT_EQ(GetAppsListSortedByName()->at(0).visible_app_name, u"Gboard");
   EXPECT_EQ(GetAppsListSortedByName()->at(1).visible_app_name, u"GPay");
 }
+
+TEST_F(AppStreamLauncherDataModelTest, AddAppToList) {
+  std::vector<Notification::AppMetadata> apps_list;
+  apps_list.emplace_back(Notification::AppMetadata(
+      u"GPay", "com.fakeapp1", gfx::Image(), absl::nullopt, true, 1,
+      proto::AppStreamabilityStatus::STREAMABLE));
+  apps_list.emplace_back(Notification::AppMetadata(
+      u"Gboard", "com.fakeapp2", gfx::Image(), absl::nullopt, true, 1,
+      proto::AppStreamabilityStatus::STREAMABLE));
+  SetAppList(apps_list);
+  AddAppToList(Notification::AppMetadata(
+      u"added_app", "com.fakeapp3", gfx::Image(), absl::nullopt, true, 1,
+      proto::AppStreamabilityStatus::STREAMABLE));
+  AddAppToList(Notification::AppMetadata(
+      u"a_added_app", "com.fakeapp3", gfx::Image(), absl::nullopt, true, 1,
+      proto::AppStreamabilityStatus::STREAMABLE));
+  EXPECT_TRUE(IsObserverAppListChanged());
+  EXPECT_EQ(GetAppsList()->size(), 4u);
+  EXPECT_EQ(GetAppsList()->at(0).visible_app_name, u"GPay");
+  EXPECT_EQ(GetAppsList()->at(1).visible_app_name, u"Gboard");
+  EXPECT_EQ(GetAppsList()->at(2).visible_app_name, u"added_app");
+  EXPECT_EQ(GetAppsList()->at(3).visible_app_name, u"a_added_app");
+  EXPECT_EQ(GetAppsListSortedByName()->size(), 4u);
+  EXPECT_EQ(GetAppsListSortedByName()->at(0).visible_app_name, u"a_added_app");
+  EXPECT_EQ(GetAppsListSortedByName()->at(1).visible_app_name, u"added_app");
+  EXPECT_EQ(GetAppsListSortedByName()->at(2).visible_app_name, u"Gboard");
+  EXPECT_EQ(GetAppsListSortedByName()->at(3).visible_app_name, u"GPay");
+}
+
+TEST_F(AppStreamLauncherDataModelTest, RemoveAppFromList) {
+  std::vector<Notification::AppMetadata> apps_list;
+  apps_list.emplace_back(Notification::AppMetadata(
+      u"GPay", "com.fakeapp1", gfx::Image(), absl::nullopt, true, 1,
+      proto::AppStreamabilityStatus::STREAMABLE));
+  apps_list.emplace_back(Notification::AppMetadata(
+      u"Gboard", "com.fakeapp2", gfx::Image(), absl::nullopt, true, 1,
+      proto::AppStreamabilityStatus::STREAMABLE));
+  SetAppList(apps_list);
+  auto app_to_remove = proto::App();
+  app_to_remove.set_package_name("com.fakeapp1");
+  app_to_remove.set_visible_name("GPay");
+  RemoveAppFromList(app_to_remove);
+  EXPECT_TRUE(IsObserverAppListChanged());
+  EXPECT_EQ(GetAppsList()->size(), 1u);
+  EXPECT_EQ(GetAppsList()->at(0).visible_app_name, u"Gboard");
+  EXPECT_EQ(GetAppsListSortedByName()->size(), 1u);
+  EXPECT_EQ(GetAppsListSortedByName()->at(0).visible_app_name, u"Gboard");
+}
 }  // namespace phonehub
 }  // namespace ash
diff --git a/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.cc b/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.cc
index 33df52a..05bf5d9 100644
--- a/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.cc
+++ b/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.cc
@@ -68,6 +68,18 @@
   }
 }
 
+void FakeRecentAppsInteractionHandler::RemoveStreamableApp(
+    proto::App app_to_remove) {
+  recent_apps_metadata_.erase(
+      std::remove_if(
+          recent_apps_metadata_.begin(), recent_apps_metadata_.end(),
+          [&app_to_remove](
+              const std::pair<Notification::AppMetadata, base::Time>& app) {
+            return app.first.package_name == app_to_remove.package_name();
+          }),
+      recent_apps_metadata_.end());
+}
+
 void FakeRecentAppsInteractionHandler::ComputeAndUpdateUiState() {
   if (feature_state_ != FeatureState::kEnabledByUser) {
     ui_state_ = RecentAppsUiState::HIDDEN;
diff --git a/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.h b/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.h
index 506937a8..a84d873 100644
--- a/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.h
+++ b/chromeos/ash/components/phonehub/fake_recent_apps_interaction_handler.h
@@ -46,6 +46,7 @@
   std::vector<Notification::AppMetadata> FetchRecentAppMetadataList() override;
   void SetStreamableApps(
       const std::vector<Notification::AppMetadata>& streamable_apps) override;
+  void RemoveStreamableApp(proto::App app_to_remove) override;
 
  private:
   void ComputeAndUpdateUiState();
diff --git a/chromeos/ash/components/phonehub/phone_status_processor.cc b/chromeos/ash/components/phonehub/phone_status_processor.cc
index a7ef8f1..80e17160 100644
--- a/chromeos/ash/components/phonehub/phone_status_processor.cc
+++ b/chromeos/ash/components/phonehub/phone_status_processor.cc
@@ -206,6 +206,12 @@
          PhoneStatusProcessor::AppListUpdateType::kOnlyLauncherApps;
 }
 
+bool IsIncrementalAppUpdate(
+    PhoneStatusProcessor::AppListUpdateType app_list_update_type) {
+  return app_list_update_type ==
+         PhoneStatusProcessor::AppListUpdateType::kIncrementalAppUpdate;
+}
+
 }  // namespace
 
 PhoneStatusProcessor::PhoneStatusProcessor(
@@ -450,6 +456,29 @@
   }
 }
 
+void PhoneStatusProcessor::OnAppListIncrementalUpdateReceived(
+    const proto::AppListIncrementalUpdate app_incremental_update) {
+  if (!features::IsEcheLauncherEnabled()) {
+    return;
+  }
+
+  if (app_incremental_update.has_removed_apps()) {
+    for (const auto& app : app_incremental_update.removed_apps().apps()) {
+      if (app_stream_launcher_data_model_) {
+        app_stream_launcher_data_model_->RemoveAppFromList(app);
+      }
+      if (recent_apps_interaction_handler_) {
+        recent_apps_interaction_handler_->RemoveStreamableApp(app);
+      }
+    }
+  }
+
+  if (app_incremental_update.has_installed_apps()) {
+    GenerateAppListWithIcons(app_incremental_update.installed_apps(),
+                             AppListUpdateType::kIncrementalAppUpdate);
+  }
+}
+
 void PhoneStatusProcessor::GenerateAppListWithIcons(
     const proto::StreamableApps& streamable_apps,
     AppListUpdateType app_list_update_type) {
@@ -519,6 +548,13 @@
         base::TimeTicks::Now() - connection_initialized_timestamp_);
     has_received_first_app_list_update_ = true;
   }
+
+  if (features::IsEcheLauncherEnabled() &&
+      IsIncrementalAppUpdate(app_list_update_type)) {
+    if (app_stream_launcher_data_model_) {
+      app_stream_launcher_data_model_->AddAppToList(apps_list.at(0));
+    }
+  }
 }
 
 }  // namespace phonehub
diff --git a/chromeos/ash/components/phonehub/phone_status_processor.h b/chromeos/ash/components/phonehub/phone_status_processor.h
index 68549f9..2c484959 100644
--- a/chromeos/ash/components/phonehub/phone_status_processor.h
+++ b/chromeos/ash/components/phonehub/phone_status_processor.h
@@ -41,7 +41,8 @@
     kOnlyRecentApps = 0,
     kOnlyLauncherApps,
     kBoth,
-    kMaxValue = kBoth
+    kIncrementalAppUpdate,
+    kMaxValue = kIncrementalAppUpdate
   };
 
   PhoneStatusProcessor(
@@ -79,6 +80,9 @@
       const proto::AppStreamUpdate app_stream_update) override;
   void OnAppListUpdateReceived(
       const proto::AppListUpdate app_list_update) override;
+  void OnAppListIncrementalUpdateReceived(
+      const proto::AppListIncrementalUpdate app_list_incremental_update)
+      override;
 
   // MultiDeviceSetupClient::Observer:
   void OnHostStatusChanged(
diff --git a/chromeos/ash/components/phonehub/phone_status_processor_unittest.cc b/chromeos/ash/components/phonehub/phone_status_processor_unittest.cc
index 12b17e1d..450c4ab 100644
--- a/chromeos/ash/components/phonehub/phone_status_processor_unittest.cc
+++ b/chromeos/ash/components/phonehub/phone_status_processor_unittest.cc
@@ -1155,4 +1155,139 @@
   EXPECT_EQ(0u, app_stream_launcher_data_model_->GetAppsList()->size());
 }
 
+TEST_F(PhoneStatusProcessorTest,
+       OnAppListIncrementalUpdateReceived_installApps) {
+  scoped_feature_list_.Reset();
+  scoped_feature_list_.InitWithFeatures(
+      /*enabled_features=*/{features::kEcheSWA, features::kPhoneHubCameraRoll,
+                            features::kEcheLauncher},
+      /*disabled_features=*/{});
+
+  fake_multidevice_setup_client_->SetHostStatusWithDevice(
+      std::make_pair(HostStatus::kHostVerified, test_remote_device_));
+  CreatePhoneStatusProcessor();
+
+  proto::AppListUpdate expected_update;
+  auto* streamable_apps = expected_update.mutable_all_apps();
+  auto* app1 = streamable_apps->add_apps();
+  app1->set_package_name("pkg1");
+  app1->set_visible_name("first_app");
+  app1->set_icon("icon1");
+
+  // Simulate feature set to enabled and connected.
+  fake_feature_status_provider_->SetStatus(FeatureStatus::kEnabledAndConnected);
+  fake_multidevice_setup_client_->SetFeatureState(
+      Feature::kPhoneHubNotifications, FeatureState::kEnabledByUser);
+
+  // Simulate receiving a proto message.
+  fake_message_receiver_->NotifyAppListUpdateReceived(expected_update);
+  decoder_delegate_->CompleteAllRequests();
+
+  EXPECT_EQ(0u,
+            fake_recent_apps_interaction_handler_->FetchRecentAppMetadataList()
+                .size());
+  EXPECT_EQ(1u, app_stream_launcher_data_model_->GetAppsList()->size());
+  EXPECT_EQ(
+      u"first_app",
+      app_stream_launcher_data_model_->GetAppsList()->at(0).visible_app_name);
+
+  proto::AppListIncrementalUpdate incremental_update;
+  auto* installed_apps = incremental_update.mutable_installed_apps();
+  auto* installed_app = installed_apps->add_apps();
+  installed_app->set_package_name("pkg2");
+  installed_app->set_visible_name("second_app");
+  installed_app->set_icon("icon2");
+
+  // Simulate receiving a proto message.
+  fake_message_receiver_->NotifyAppListIncrementalUpdateReceived(
+      incremental_update);
+  decoder_delegate_->CompleteAllRequests();
+
+  EXPECT_EQ(0u,
+            fake_recent_apps_interaction_handler_->FetchRecentAppMetadataList()
+                .size());
+  EXPECT_EQ(2u, app_stream_launcher_data_model_->GetAppsList()->size());
+  EXPECT_EQ(
+      u"second_app",
+      app_stream_launcher_data_model_->GetAppsList()->at(1).visible_app_name);
+}
+
+TEST_F(PhoneStatusProcessorTest,
+       OnAppListIncrementalUpdateReceived_removeApps) {
+  scoped_feature_list_.Reset();
+  scoped_feature_list_.InitWithFeatures(
+      /*enabled_features=*/{features::kEcheSWA, features::kPhoneHubCameraRoll,
+                            features::kEcheLauncher},
+      /*disabled_features=*/{});
+
+  fake_multidevice_setup_client_->SetHostStatusWithDevice(
+      std::make_pair(HostStatus::kHostVerified, test_remote_device_));
+  CreatePhoneStatusProcessor();
+
+  proto::AppListUpdate list_update;
+  auto* streamable_apps = list_update.mutable_all_apps();
+  auto* app1 = streamable_apps->add_apps();
+  app1->set_package_name("pkg1");
+  app1->set_visible_name("first_app");
+  app1->set_icon("icon1");
+
+  auto* app2 = streamable_apps->add_apps();
+  app2->set_package_name("pkg2");
+  app2->set_visible_name("second_app");
+  app2->set_icon("icon2");
+
+  // Simulate feature set to enabled and connected.
+  fake_feature_status_provider_->SetStatus(FeatureStatus::kEnabledAndConnected);
+  fake_multidevice_setup_client_->SetFeatureState(
+      Feature::kPhoneHubNotifications, FeatureState::kEnabledByUser);
+
+  // Simulate receiving a proto message.
+  fake_message_receiver_->NotifyAppListUpdateReceived(list_update);
+  decoder_delegate_->CompleteAllRequests();
+  EXPECT_EQ(2u, app_stream_launcher_data_model_->GetAppsList()->size());
+
+  proto::AppListUpdate recent_app_update;
+  auto* recent_apps = recent_app_update.mutable_recent_apps();
+  auto* recent_app1 = recent_apps->add_apps();
+  recent_app1->set_package_name("pkg1");
+  recent_app1->set_visible_name("first_app");
+  recent_app1->set_icon("icon1");
+
+  auto* recent_app2 = recent_apps->add_apps();
+  recent_app2->set_package_name("pkg2");
+  recent_app2->set_visible_name("second_app");
+  recent_app2->set_icon("icon2");
+
+  fake_message_receiver_->NotifyAppListUpdateReceived(recent_app_update);
+  decoder_delegate_->CompleteAllRequests();
+
+  EXPECT_EQ(2u,
+            fake_recent_apps_interaction_handler_->FetchRecentAppMetadataList()
+                .size());
+
+  proto::AppListIncrementalUpdate incremental_update;
+  auto* removed_apps = incremental_update.mutable_removed_apps();
+  auto* removed_app = removed_apps->add_apps();
+  removed_app->set_package_name("pkg2");
+  removed_app->set_visible_name("second_app");
+  removed_app->set_icon("icon2");
+
+  // Simulate receiving a proto message.
+  fake_message_receiver_->NotifyAppListIncrementalUpdateReceived(
+      incremental_update);
+  decoder_delegate_->CompleteAllRequests();
+
+  EXPECT_EQ(1u, app_stream_launcher_data_model_->GetAppsList()->size());
+  EXPECT_EQ(
+      u"first_app",
+      app_stream_launcher_data_model_->GetAppsList()->at(0).visible_app_name);
+  EXPECT_EQ(1u,
+            fake_recent_apps_interaction_handler_->FetchRecentAppMetadataList()
+                .size());
+  EXPECT_EQ(u"first_app",
+            fake_recent_apps_interaction_handler_->FetchRecentAppMetadataList()
+                .at(0)
+                .visible_app_name);
+}
+
 }  // namespace ash::phonehub
diff --git a/chromeos/ash/components/phonehub/recent_apps_interaction_handler.h b/chromeos/ash/components/phonehub/recent_apps_interaction_handler.h
index 75b0045e..913efe0 100644
--- a/chromeos/ash/components/phonehub/recent_apps_interaction_handler.h
+++ b/chromeos/ash/components/phonehub/recent_apps_interaction_handler.h
@@ -73,6 +73,7 @@
   FetchRecentAppMetadataList() = 0;
   virtual void SetStreamableApps(
       const std::vector<Notification::AppMetadata>& streamable_apps) = 0;
+  virtual void RemoveStreamableApp(const proto::App streamable_app) = 0;
 
  protected:
   RecentAppsInteractionHandler();
diff --git a/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.cc b/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.cc
index 2429896..34330001 100644
--- a/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.cc
+++ b/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.cc
@@ -205,6 +205,21 @@
   ComputeAndUpdateUiState();
 }
 
+void RecentAppsInteractionHandlerImpl::RemoveStreamableApp(
+    const proto::App app_to_remove) {
+  recent_app_metadata_list_.erase(
+      std::remove_if(
+          recent_app_metadata_list_.begin(), recent_app_metadata_list_.end(),
+          [&app_to_remove](
+              const std::pair<Notification::AppMetadata, base::Time>& app) {
+            return app.first.package_name == app_to_remove.package_name();
+          }),
+      recent_app_metadata_list_.end());
+
+  SaveRecentAppMetadataListToPref();
+  ComputeAndUpdateUiState();
+}
+
 void RecentAppsInteractionHandlerImpl::ComputeAndUpdateUiState() {
   ui_state_ = RecentAppsUiState::HIDDEN;
 
diff --git a/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.h b/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.h
index 965902e..c1d015e7 100644
--- a/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.h
+++ b/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl.h
@@ -65,6 +65,8 @@
   void SetStreamableApps(
       const std::vector<Notification::AppMetadata>& streamable_apps) override;
 
+  void RemoveStreamableApp(const proto::App streamable_app) override;
+
   std::vector<std::pair<Notification::AppMetadata, base::Time>>*
   recent_app_metadata_list_for_testing() {
     return &recent_app_metadata_list_;
diff --git a/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl_unittest.cc b/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl_unittest.cc
index 1730af8..0904ada 100644
--- a/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl_unittest.cc
+++ b/chromeos/ash/components/phonehub/recent_apps_interaction_handler_impl_unittest.cc
@@ -372,6 +372,34 @@
   EXPECT_TRUE(handler().recent_app_metadata_list_for_testing()->empty());
 }
 
+TEST_F(RecentAppsInteractionHandlerTest, RemoveStreamableApp) {
+  std::vector<Notification::AppMetadata> streamable_apps;
+  streamable_apps.emplace_back(
+      Notification::AppMetadata(u"App1", "com.fakeapp1", gfx::Image(),
+                                /*icon_color=*/absl::nullopt,
+                                /*icon_is_monochrome=*/true, 1,
+                                proto::AppStreamabilityStatus::STREAMABLE));
+  streamable_apps.emplace_back(
+      Notification::AppMetadata(u"App2", "com.fakeapp2", gfx::Image(),
+                                /*icon_color=*/absl::nullopt,
+                                /*icon_is_monochrome=*/true, 1,
+                                proto::AppStreamabilityStatus::STREAMABLE));
+
+  handler().SetStreamableApps(streamable_apps);
+
+  EXPECT_EQ(2U, handler().recent_app_metadata_list_for_testing()->size());
+
+  auto app_to_remove = proto::App();
+  app_to_remove.set_package_name("com.fakeapp1");
+  app_to_remove.set_visible_name("App1");
+  handler().RemoveStreamableApp(app_to_remove);
+  EXPECT_EQ(1U, handler().recent_app_metadata_list_for_testing()->size());
+  EXPECT_EQ("com.fakeapp2", handler()
+                                .recent_app_metadata_list_for_testing()
+                                ->at(0)
+                                .first.package_name);
+}
+
 TEST_F(RecentAppsInteractionHandlerTest, FetchRecentAppMetadataList) {
   const char16_t app_visible_name1[] = u"Fake App";
   const char package_name1[] = "com.fakeapp";
diff --git a/chromeos/components/BUILD.gn b/chromeos/components/BUILD.gn
index 428e744e..c3ca8d2 100644
--- a/chromeos/components/BUILD.gn
+++ b/chromeos/components/BUILD.gn
@@ -15,8 +15,6 @@
     "run_all_unittests.cc",
   ]
 
-  # TODO(https://crbug.com/1164001): unit_tests deps should be moved to
-  # the appropriate place during the code migration project.
   deps = [
     "//base",
     "//base/test:test_support",
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom
index 1e3e24f..bf2f01e5 100644
--- a/chromeos/crosapi/mojom/crosapi.mojom
+++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -1296,12 +1296,6 @@
   // VideoConferenceManager in ash.
   [MinVersion=56]
   bool vc_controls_ui_enabled@56;
-
-  // App service block list for extension apps and extensions to be blocked
-  // for app service in lacros.
-  [MinVersion=57]
-  StandaloneBrowserAppServiceBlockList?
-      standalone_browser_app_service_blocklist@57;
 };
 
 // BrowserPostLoginParams is the subset of parameters in BrowserInitParams
diff --git a/chromeos/crosapi/mojom/extension_keeplist.mojom b/chromeos/crosapi/mojom/extension_keeplist.mojom
index 9e919e8..8c52a85 100644
--- a/chromeos/crosapi/mojom/extension_keeplist.mojom
+++ b/chromeos/crosapi/mojom/extension_keeplist.mojom
@@ -22,26 +22,3 @@
   // The ids of the extensions running in both ash-chrome and lacros-chrome.
   array<string> extensions_run_in_os_and_standalonebrowser@3;
 };
-
-// App service block list that lists the extension apps and extensions to be
-// blocked for AppService in Lacros.
-//
-// When Lacros is set as user's primary or only browser, by default, the
-// extensions and extension apps will run in Lacros only. However, there is a
-// small exception list (see ExtensionKeepList above) which allows
-// some extension apps and extensions to run in both ash and lacros. These
-// apps and extensions can be only published in either ash or lacros, but not
-// both. They should be added to StandaloneBrowserAppServiceBlockList if they
-// should not by published in AppService in Lacros.
-// Next version: 1
-// Next id: 2
-[Stable]
-struct StandaloneBrowserAppServiceBlockList {
-  // The ids of the extension apps to be blocked for app service in lacros.
-  // Extension apps include chrome apps and hosted apps.
-  array<string> extension_apps@0;
-
-  // The ids of the regular extensions (not apps) to be blocked for app service
-  // in lacros.
-  array<string> extensions@1;
-};
diff --git a/chromeos/crosapi/mojom/nullable_primitives.mojom b/chromeos/crosapi/mojom/nullable_primitives.mojom
index 57fa262..ca66327a 100644
--- a/chromeos/crosapi/mojom/nullable_primitives.mojom
+++ b/chromeos/crosapi/mojom/nullable_primitives.mojom
@@ -19,6 +19,12 @@
   int64 value@0;
 };
 
+[Stable]
+struct UInt8Value {
+  // The value of the uint8.
+  uint8 value@0;
+};
+
 [Stable, RenamedFrom="ash.health.mojom.UInt32Value"]
 struct UInt32Value {
   // The value of the uint32.
diff --git a/chromeos/crosapi/mojom/probe_service.mojom b/chromeos/crosapi/mojom/probe_service.mojom
index 3bd04d97..401e3a62 100644
--- a/chromeos/crosapi/mojom/probe_service.mojom
+++ b/chromeos/crosapi/mojom/probe_service.mojom
@@ -597,17 +597,17 @@
 [Stable]
 struct ProbeAudioInputNodeInfo {
   // Node id.
-  uint64 id@0;
+  UInt64Value? id@0;
   // The name of this node. For example, "Internal Mic".
-  string name@1;
+  string? name@1;
   // The name of the device that this node belongs to. For example,
   // "HDA Intel PCH: CA0132 Analog:0,0"
-  string device_name@2;
+  string? device_name@2;
   // Whether this node is currently used for input. There is one active
   // node for input.
-  bool active@3;
+  BoolValue? active@3;
   // The input node gain set by UI, the value is in [0, 100].
-  uint8 node_gain@4;
+  UInt8Value? node_gain@4;
 };
 
 // Audio output node information.
@@ -616,17 +616,17 @@
 [Stable]
 struct ProbeAudioOutputNodeInfo {
   // Node id.
-  uint64 id@0;
+  UInt64Value? id@0;
   // The name of this node. For example, "Speaker".
-  string name@1;
+  string? name@1;
   // The name of the device that this node belongs to. For example,
   // "HDA Intel PCH: CA0132 Analog:0,0"
-  string device_name@2;
+  string? device_name@2;
   // Whether this node is currently used for output. There is one active
   // node for output.
-  bool active@3;
+  BoolValue? active@3;
   // The node volume in [0, 100].
-  uint8 node_volume@4;
+  UInt8Value? node_volume@4;
 };
 
 // Audio information.
@@ -635,13 +635,13 @@
 [Stable]
 struct ProbeAudioInfo {
   // Is the active output device mute or not.
-  bool output_mute@0;
+  BoolValue? output_mute@0;
   // Is the active input device mute or not.
-  bool input_mute@1;
+  BoolValue? input_mute@1;
   // Number of underruns.
-  uint32 underruns@2;
+  UInt32Value? underruns@2;
   // Number of severe underruns.
-  uint32 severe_underruns@3;
+  UInt32Value? severe_underruns@3;
   // Output nodes.
   array<ProbeAudioOutputNodeInfo>? output_nodes@4;
   // Input nodes.
diff --git a/chromeos/startup/browser_params_proxy.cc b/chromeos/startup/browser_params_proxy.cc
index 18012af..dced4ee 100644
--- a/chromeos/startup/browser_params_proxy.cc
+++ b/chromeos/startup/browser_params_proxy.cc
@@ -290,9 +290,4 @@
   return BrowserInitParams::Get()->vc_controls_ui_enabled;
 }
 
-const crosapi::mojom::StandaloneBrowserAppServiceBlockListPtr&
-BrowserParamsProxy::StandaloneBrowserAppServiceBlockList() const {
-  return BrowserInitParams::Get()->standalone_browser_app_service_blocklist;
-}
-
 }  // namespace chromeos
diff --git a/chromeos/startup/browser_params_proxy.h b/chromeos/startup/browser_params_proxy.h
index 0cd70eb..dab94d22 100644
--- a/chromeos/startup/browser_params_proxy.h
+++ b/chromeos/startup/browser_params_proxy.h
@@ -129,9 +129,6 @@
 
   bool VcControlsUiEnabled() const;
 
-  const crosapi::mojom::StandaloneBrowserAppServiceBlockListPtr&
-  StandaloneBrowserAppServiceBlockList() const;
-
  private:
   friend base::NoDestructor<BrowserParamsProxy>;
 
diff --git a/components/autofill/core/browser/address_profile_save_manager_unittest.cc b/components/autofill/core/browser/address_profile_save_manager_unittest.cc
index 7a31874..3a9134e 100644
--- a/components/autofill/core/browser/address_profile_save_manager_unittest.cc
+++ b/components/autofill/core/browser/address_profile_save_manager_unittest.cc
@@ -53,16 +53,6 @@
 constexpr char kProfileUpdateNumberOfAffectedTypesHistogram[] =
     "Autofill.ProfileImport.UpdateProfileNumberOfAffectedFields";
 
-// Histograms related to the country complement logic.
-constexpr char kNewProfileWithComplementedCountryDecisionHistogram[] =
-    "Autofill.ProfileImport.NewProfileWithComplementedCountryDecision";
-constexpr char kProfileUpdateWithComplementedCountryDecisionHistogram[] =
-    "Autofill.ProfileImport.UpdateProfileWithComplementedCountryDecision";
-constexpr char kNewProfileEditComplementedCountryHistogram[] =
-    "Autofill.ProfileImport.NewProfileEditedComplementedCountry";
-constexpr char kProfileUpdateEditComplementedCountryHistogram[] =
-    "Autofill.ProfileImport.UpdateProfileEditedComplementedCountry";
-
 // Histograms related to `kAutofillIgnoreInvalidCountryOnImport`.
 // TODO(crbug.com/1362472): Cleanup when launched.
 constexpr char kNewProfileWithIgnoredCountryDecisionHistogram[] =
@@ -70,17 +60,6 @@
 constexpr char kProfileUpdateWithIgnoredCountryDecisionHistogram[] =
     "Autofill.ProfileImport.UpdateProfileWithIgnoredCountryDecision";
 
-// Histograms related to |kAutofillRemoveInvalidPhoneNumberOnImport|
-// TODO(crbug.com/1298424): Cleanup when launched.
-constexpr char kNewProfileWithRemovedPhoneNumberDecisionHistogram[] =
-    "Autofill.ProfileImport.NewProfileWithRemovedPhoneNumberDecision";
-constexpr char kProfileUpdateWithRemovedPhoneNumberDecisionHistogram[] =
-    "Autofill.ProfileImport.UpdateProfileWithRemovedPhoneNumberDecision";
-constexpr char
-    kSilentUpdatesWithRemovedPhoneNumberProfileImportTypeHistogram[] =
-        "Autofill.ProfileImport."
-        "SilentUpdatesWithRemovedPhoneNumberProfileImportType";
-
 class MockPersonalDataManager : public TestPersonalDataManager {
  public:
   MockPersonalDataManager() = default;
@@ -180,7 +159,7 @@
 
 class AddressProfileSaveManagerTest
     : public testing::Test,
-      public testing::WithParamInterface<std::tuple<bool, bool, bool, bool>> {
+      public testing::WithParamInterface<std::tuple<bool, bool, bool>> {
  public:
   void SetUp() override {
     // These parameters would typically be set by `FormDataImporter` when
@@ -188,13 +167,12 @@
     // precedes the saving logic tested here. They expand the
     // `ImportScenarioTestCase`, but are part of the fixture, so they can be
     // tested in a parameterized way.
-    import_metadata_ = {.did_complement_country = std::get<0>(GetParam()),
-                        .did_ignore_invalid_country = std::get<1>(GetParam()),
-                        .phone_import_status = std::get<2>(GetParam())
+    import_metadata_ = {.did_ignore_invalid_country = std::get<0>(GetParam()),
+                        .phone_import_status = std::get<1>(GetParam())
                                                    ? PhoneImportStatus::kInvalid
                                                    : PhoneImportStatus::kValid,
                         .did_import_from_unrecognized_autocomplete_field =
-                            std::get<3>(GetParam())};
+                            std::get<2>(GetParam())};
   }
 
   void BlockProfileForUpdates(const std::string& guid) {
@@ -346,12 +324,6 @@
           ? kSilentUpdatesProfileImportTypeHistogram
           : kProfileImportTypeHistogram,
       test_scenario.expected_import_type, 1);
-  if (test_scenario.allow_only_silent_updates &&
-      import_metadata().phone_import_status == PhoneImportStatus::kInvalid) {
-    histogram_tester.ExpectUniqueSample(
-        kSilentUpdatesWithRemovedPhoneNumberProfileImportTypeHistogram,
-        test_scenario.expected_import_type, 1);
-  }
 
   const bool is_new_profile = test_scenario.expected_import_type ==
                               AutofillProfileImportType::kNewProfile;
@@ -367,10 +339,8 @@
     ExpectEmptyHistograms(
         histogram_tester,
         {kNewProfileEditsHistogram, kNewProfileDecisionHistogram,
-         kNewProfileWithComplementedCountryDecisionHistogram,
          kNewProfileWithIgnoredCountryDecisionHistogram,
          kProfileUpdateEditsHistogram, kProfileUpdateDecisionHistogram,
-         kProfileUpdateWithComplementedCountryDecisionHistogram,
          kProfileUpdateWithIgnoredCountryDecisionHistogram});
   } else {
     DCHECK(!is_new_profile || !is_confirmable_merge);
@@ -405,56 +375,6 @@
         affected_edits_histo,
         test_scenario.expected_edited_types_for_metrics.size());
 
-    // Metrics related to country complemention.
-    if (import_metadata().did_complement_country) {
-      if (is_new_profile) {
-        histogram_tester.ExpectTotalCount(
-            kProfileUpdateWithComplementedCountryDecisionHistogram, 0);
-        histogram_tester.ExpectUniqueSample(
-            kNewProfileWithComplementedCountryDecisionHistogram,
-            test_scenario.user_decision, 1);
-      } else {
-        histogram_tester.ExpectTotalCount(
-            kNewProfileWithComplementedCountryDecisionHistogram, 0);
-        // For updates we only expect a difference if the country changed.
-        if (test_scenario.observed_profile.GetRawInfo(ADDRESS_HOME_COUNTRY) !=
-            test_scenario.merge_candidate->GetRawInfo(ADDRESS_HOME_COUNTRY)) {
-          histogram_tester.ExpectUniqueSample(
-              kProfileUpdateWithComplementedCountryDecisionHistogram,
-              test_scenario.user_decision, 1);
-        } else {
-          histogram_tester.ExpectTotalCount(
-              kProfileUpdateWithComplementedCountryDecisionHistogram, 0);
-        }
-      }
-
-      // In case the country was edited, expect increased metrics.
-      if (base::Contains(
-              test_scenario.expected_edited_types_for_metrics,
-              AutofillMetrics::SettingsVisibleFieldTypeForMetrics::kCountry)) {
-        histogram_tester.ExpectTotalCount(
-            !is_new_profile ? kNewProfileEditComplementedCountryHistogram
-                            : kProfileUpdateEditComplementedCountryHistogram,
-            0);
-        histogram_tester.ExpectTotalCount(
-            is_new_profile ? kNewProfileEditComplementedCountryHistogram
-                           : kProfileUpdateEditComplementedCountryHistogram,
-            1);
-      } else {
-        histogram_tester.ExpectTotalCount(
-            kNewProfileEditComplementedCountryHistogram, 0);
-        histogram_tester.ExpectTotalCount(
-            kProfileUpdateEditComplementedCountryHistogram, 0);
-      }
-    } else {
-      ExpectEmptyHistograms(
-          histogram_tester,
-          {kNewProfileWithComplementedCountryDecisionHistogram,
-           kProfileUpdateWithComplementedCountryDecisionHistogram,
-           kNewProfileEditComplementedCountryHistogram,
-           kProfileUpdateEditComplementedCountryHistogram});
-    }
-
     // Metrics related to ignoring an invalid country.
     TestFeatureSpecificNewOrUpdateProfileMetrics(
         histogram_tester, test_scenario,
@@ -462,13 +382,6 @@
         kNewProfileWithIgnoredCountryDecisionHistogram,
         kProfileUpdateWithIgnoredCountryDecisionHistogram);
 
-    // Metrics related to removing invalid phone numbers.
-    TestFeatureSpecificNewOrUpdateProfileMetrics(
-        histogram_tester, test_scenario,
-        import_metadata().phone_import_status == PhoneImportStatus::kInvalid,
-        kNewProfileWithRemovedPhoneNumberDecisionHistogram,
-        kProfileUpdateWithRemovedPhoneNumberDecisionHistogram);
-
     for (auto edited_type : test_scenario.expected_edited_types_for_metrics) {
       histogram_tester.ExpectBucketCount(affected_edits_histo, edited_type, 1);
     }
@@ -709,30 +622,6 @@
   TestImportScenario(test_scenario);
 }
 
-// Test that the country complemention metric is correctly increased.
-TEST_P(AddressProfileSaveManagerTest, SaveNewProfile_EditedCountry) {
-  AutofillProfile observed_profile = test::StandardProfile();
-  AutofillProfile edited_profile = observed_profile;
-  edited_profile.SetRawInfoWithVerificationStatus(
-      ADDRESS_HOME_COUNTRY, u"DE", VerificationStatus::kObserved);
-
-  ImportScenarioTestCase test_scenario{
-      .existing_profiles = {},
-      .observed_profile = observed_profile,
-      .is_prompt_expected = true,
-      .user_decision = UserDecision::kEditAccepted,
-      .edited_profile = edited_profile,
-      .expected_import_type = AutofillProfileImportType::kNewProfile,
-      .is_profile_change_expected = true,
-      .merge_candidate = absl::nullopt,
-      .import_candidate = observed_profile,
-      .expected_final_profiles = {edited_profile},
-      .expected_edited_types_for_metrics = {
-          AutofillMetrics::SettingsVisibleFieldTypeForMetrics::kCountry}};
-
-  TestImportScenario(test_scenario);
-}
-
 // Test that a decline to import a new profile is handled correctly.
 TEST_P(AddressProfileSaveManagerTest, SaveNewProfile_Declined) {
   AutofillProfile observed_profile = test::StandardProfile();
@@ -1449,14 +1338,17 @@
   TestImportScenario(test_scenario);
 }
 
-// Runs the suite as if the the country was (not) complemented and as if the
-// phone number was (not) removed with
-// `kAutofillRemoveInvalidPhoneNumberOnImport`.
+// Runs the suite as if:
+// - an invalid country was ignored through
+//   `kAutofillIgnoreInvalidCountryOnImport`.
+// - the phone number was (not) removed (relevant for UKM metrics).
+// - the imported profile contains information from an input with an
+//   unrecognized autocomplete attribute. Such fields are considered for import
+//   when `kAutofillFillAndImportFromMoreFields` is active.
 INSTANTIATE_TEST_SUITE_P(,
                          AddressProfileSaveManagerTest,
                          testing::Combine(testing::Bool(),
                                           testing::Bool(),
-                                          testing::Bool(),
                                           testing::Bool()));
 
 }  // namespace
diff --git a/components/autofill/core/browser/autofill_profile_import_process.cc b/components/autofill/core/browser/autofill_profile_import_process.cc
index ffb49e7..60e0f47 100644
--- a/components/autofill/core/browser/autofill_profile_import_process.cc
+++ b/components/autofill/core/browser/autofill_profile_import_process.cc
@@ -393,10 +393,6 @@
   if (allow_only_silent_updates_) {
     // Record the import type for the silent updates.
     AutofillMetrics::LogSilentUpdatesProfileImportType(import_type_);
-    if (import_metadata_.phone_import_status == PhoneImportStatus::kInvalid) {
-      AutofillMetrics::LogSilentUpdatesWithRemovedPhoneNumberProfileImportType(
-          import_type_);
-    }
     if (import_type_ == AutofillProfileImportType::kSilentUpdate ||
         import_type_ ==
             AutofillProfileImportType::kSilentUpdateForIncompleteProfile)
@@ -419,16 +415,8 @@
     for (const auto& difference : edit_difference) {
       if (import_type_ == AutofillProfileImportType::kNewProfile) {
         AutofillMetrics::LogNewProfileEditedType(difference.type);
-        if (import_metadata_.did_complement_country &&
-            difference.type == ServerFieldType::ADDRESS_HOME_COUNTRY) {
-          AutofillMetrics::LogNewProfileEditedComplementedCountry();
-        }
       } else {
         AutofillMetrics::LogProfileUpdateEditedType(difference.type);
-        if (import_metadata_.did_complement_country &&
-            difference.type == ServerFieldType::ADDRESS_HOME_COUNTRY) {
-          AutofillMetrics::LogProfileUpdateEditedComplementedCountry();
-        }
       }
     }
     num_edited_fields = edit_difference.size();
@@ -443,31 +431,17 @@
   // decision.
   if (import_type_ == AutofillProfileImportType::kNewProfile) {
     AutofillMetrics::LogNewProfileImportDecision(user_decision_);
-    if (import_metadata_.did_complement_country) {
-      AutofillMetrics::LogNewProfileWithComplementedCountryImportDecision(
-          user_decision_);
-    }
     if (import_metadata_.did_ignore_invalid_country) {
       AutofillMetrics::LogNewProfileWithIgnoredCountryImportDecision(
           user_decision_);
     }
-    if (import_metadata_.phone_import_status == PhoneImportStatus::kInvalid) {
-      AutofillMetrics::LogNewProfileWithRemovedPhoneNumberImportDecision(
-          user_decision_);
-    }
-
     LogUkmMetrics(num_edited_fields);
   } else if (import_type_ == AutofillProfileImportType::kConfirmableMerge ||
              import_type_ ==
                  AutofillProfileImportType::kConfirmableMergeAndSilentUpdate) {
     AutofillMetrics::LogProfileUpdateImportDecision(user_decision_);
-    if (import_metadata_.phone_import_status == PhoneImportStatus::kInvalid) {
-      AutofillMetrics::LogProfileUpdateWithRemovedPhoneNumberImportDecision(
-          user_decision_);
-    }
 
     DCHECK(merge_candidate_.has_value() && import_candidate_.has_value());
-
     // For all update prompts, log the field types and total number of fields
     // that would change due to the update. Note that this does not include
     // additional manual edits the user can perform in the storage dialog.
@@ -476,17 +450,9 @@
         AutofillProfileComparator::GetSettingsVisibleProfileDifference(
             import_candidate_.value(), merge_candidate_.value(), app_locale_);
 
-    bool difference_in_country = false;
     for (const auto& difference : merge_difference) {
       AutofillMetrics::LogProfileUpdateAffectedType(difference.type,
                                                     user_decision_);
-      difference_in_country |= difference.type == ADDRESS_HOME_COUNTRY;
-    }
-    // If the country was complemented, but already stored, it didn't make a
-    // difference and we should not count it in the metrics.
-    if (import_metadata_.did_complement_country && difference_in_country) {
-      AutofillMetrics::LogProfileUpdateWithComplementedCountryImportDecision(
-          user_decision_);
     }
     // Ignoring an invalid country made the update possible, so this should be
     // logged in any case.
diff --git a/components/autofill/core/browser/autofill_profile_import_process.h b/components/autofill/core/browser/autofill_profile_import_process.h
index 6951b8252..7de7c9a 100644
--- a/components/autofill/core/browser/autofill_profile_import_process.h
+++ b/components/autofill/core/browser/autofill_profile_import_process.h
@@ -75,14 +75,12 @@
 struct ProfileImportMetadata {
   // Whether the profile's country was complemented automatically.
   bool did_complement_country = false;
-  // Whether the form original contained an invalid country, that was ignored
+  // Whether the form original contained an invalid country that was ignored
   // due to AutofillOverwriteInvalidCountryOnImport.
   // TODO(crbug.com/1362472): Cleanup when launched.
   bool did_ignore_invalid_country = false;
-  // Whether the form originally contained an invalid phone number, that was:
-  // - Removed due to AutofillRemoveInvalidPhoneNumberOnImport.
-  // - The only requirement preventing an import.
-  // TODO(crbug.com/1298424): Cleanup when launched.
+  // Whether the form originally contained a phone number and if that phone
+  // number is considered valid by libphonenumber.
   PhoneImportStatus phone_import_status = PhoneImportStatus::kNone;
   // Whether the profile import from any field that contained an unrecognized
   // autocomplete attribute.
diff --git a/components/autofill/core/browser/form_data_importer.cc b/components/autofill/core/browser/form_data_importer.cc
index b3d1bc4..6879264 100644
--- a/components/autofill/core/browser/form_data_importer.cc
+++ b/components/autofill/core/browser/form_data_importer.cc
@@ -621,8 +621,6 @@
   }
 
   if (!complement_country_early) {
-    // For multi-step imports, this can set `did_complement_country` twice. But
-    // as the metric is only logged if it wasn't present before, this is fine.
     import_metadata.did_complement_country =
         should_complement_country &&
         ComplementCountry(candidate_profile, predicted_country_code);
diff --git a/components/autofill/core/browser/metrics/autofill_metrics.cc b/components/autofill/core/browser/metrics/autofill_metrics.cc
index e02f577..766df3a3 100644
--- a/components/autofill/core/browser/metrics/autofill_metrics.cc
+++ b/components/autofill/core/browser/metrics/autofill_metrics.cc
@@ -2958,52 +2958,24 @@
       "Autofill.ProfileImport.SilentUpdatesProfileImportType", import_type);
 }
 
-void AutofillMetrics::LogSilentUpdatesWithRemovedPhoneNumberProfileImportType(
-    AutofillProfileImportType import_type) {
-  base::UmaHistogramEnumeration(
-      "Autofill.ProfileImport."
-      "SilentUpdatesWithRemovedPhoneNumberProfileImportType",
-      import_type);
-}
-
 void AutofillMetrics::LogNewProfileImportDecision(
     AutofillClient::SaveAddressProfileOfferUserDecision decision) {
   base::UmaHistogramEnumeration("Autofill.ProfileImport.NewProfileDecision",
                                 decision);
 }
 
-void AutofillMetrics::LogNewProfileWithComplementedCountryImportDecision(
-    AutofillClient::SaveAddressProfileOfferUserDecision decision) {
-  base::UmaHistogramEnumeration(
-      "Autofill.ProfileImport.NewProfileWithComplementedCountryDecision",
-      decision);
-}
-
 void AutofillMetrics::LogNewProfileWithIgnoredCountryImportDecision(
     AutofillClient::SaveAddressProfileOfferUserDecision decision) {
   base::UmaHistogramEnumeration(
       "Autofill.ProfileImport.NewProfileWithIgnoredCountryDecision", decision);
 }
 
-void AutofillMetrics::LogNewProfileWithRemovedPhoneNumberImportDecision(
-    AutofillClient::SaveAddressProfileOfferUserDecision decision) {
-  base::UmaHistogramEnumeration(
-      "Autofill.ProfileImport.NewProfileWithRemovedPhoneNumberDecision",
-      decision);
-}
-
 void AutofillMetrics::LogNewProfileEditedType(ServerFieldType edited_type) {
   base::UmaHistogramEnumeration(
       "Autofill.ProfileImport.NewProfileEditedType",
       ConvertSettingsVisibleFieldTypeForMetrics(edited_type));
 }
 
-void AutofillMetrics::LogNewProfileEditedComplementedCountry() {
-  base::UmaHistogramEnumeration(
-      "Autofill.ProfileImport.NewProfileEditedComplementedCountry",
-      AutofillMetrics::SettingsVisibleFieldTypeForMetrics::kCountry);
-}
-
 void AutofillMetrics::LogNewProfileNumberOfEditedFields(
     int number_of_edited_fields) {
   base::UmaHistogramExactLinear(
@@ -3017,13 +2989,6 @@
                                 decision);
 }
 
-void AutofillMetrics::LogProfileUpdateWithComplementedCountryImportDecision(
-    AutofillClient::SaveAddressProfileOfferUserDecision decision) {
-  base::UmaHistogramEnumeration(
-      "Autofill.ProfileImport.UpdateProfileWithComplementedCountryDecision",
-      decision);
-}
-
 void AutofillMetrics::LogProfileUpdateWithIgnoredCountryImportDecision(
     AutofillClient::SaveAddressProfileOfferUserDecision decision) {
   base::UmaHistogramEnumeration(
@@ -3031,13 +2996,6 @@
       decision);
 }
 
-void AutofillMetrics::LogProfileUpdateWithRemovedPhoneNumberImportDecision(
-    AutofillClient::SaveAddressProfileOfferUserDecision decision) {
-  base::UmaHistogramEnumeration(
-      "Autofill.ProfileImport.UpdateProfileWithRemovedPhoneNumberDecision",
-      decision);
-}
-
 void AutofillMetrics::LogProfileUpdateAffectedType(
     ServerFieldType affected_type,
     AutofillClient::SaveAddressProfileOfferUserDecision decision) {
@@ -3059,12 +3017,6 @@
       ConvertSettingsVisibleFieldTypeForMetrics(edited_type));
 }
 
-void AutofillMetrics::LogProfileUpdateEditedComplementedCountry() {
-  base::UmaHistogramEnumeration(
-      "Autofill.ProfileImport.UpdateProfileEditedComplementedCountry",
-      AutofillMetrics::SettingsVisibleFieldTypeForMetrics::kCountry);
-}
-
 void AutofillMetrics::LogUpdateProfileNumberOfEditedFields(
     int number_of_edited_fields) {
   base::UmaHistogramExactLinear(
diff --git a/components/autofill/core/browser/metrics/autofill_metrics.h b/components/autofill/core/browser/metrics/autofill_metrics.h
index 70fdebd..8851a956 100644
--- a/components/autofill/core/browser/metrics/autofill_metrics.h
+++ b/components/autofill/core/browser/metrics/autofill_metrics.h
@@ -1363,38 +1363,18 @@
   static void LogSilentUpdatesProfileImportType(
       AutofillProfileImportType import_type);
 
-  // Logs the type of profile import used for a silent update, which was only
-  // possible after an invalid phone number was removed.
-  // TODO(crbug.com/1298424): Cleanup when launched.
-  static void LogSilentUpdatesWithRemovedPhoneNumberProfileImportType(
-      AutofillProfileImportType import_type);
-
   // Logs the user decision for importing a new profile.
   static void LogNewProfileImportDecision(
       AutofillClient::SaveAddressProfileOfferUserDecision decision);
 
-  // Logs the user decision for importing a new profile with a complemented
-  // country.
-  static void LogNewProfileWithComplementedCountryImportDecision(
-      AutofillClient::SaveAddressProfileOfferUserDecision decision);
-
   // Logs the user decision for importing a new profile, which could only
   // be imported after an invalid country was ignored.
   static void LogNewProfileWithIgnoredCountryImportDecision(
       AutofillClient::SaveAddressProfileOfferUserDecision decision);
 
-  // Logs the user decision for importing a new profile, which was only possible
-  // after an invalid phone number was removed.
-  // TODO(crbug.com/1298424): Cleanup when launched.
-  static void LogNewProfileWithRemovedPhoneNumberImportDecision(
-      AutofillClient::SaveAddressProfileOfferUserDecision decision);
-
   // Logs that a specific type was edited in a save prompt.
   static void LogNewProfileEditedType(ServerFieldType edited_type);
 
-  // Logs that the auto complemented country was edited in a save prompt.
-  static void LogNewProfileEditedComplementedCountry();
-
   // Logs the number of edited fields for an accepted profile save.
   static void LogNewProfileNumberOfEditedFields(int number_of_edited_fields);
 
@@ -1402,22 +1382,11 @@
   static void LogProfileUpdateImportDecision(
       AutofillClient::SaveAddressProfileOfferUserDecision decision);
 
-  // Logs the user decision for updating an exiting profile with a complemented
-  // country.
-  static void LogProfileUpdateWithComplementedCountryImportDecision(
-      AutofillClient::SaveAddressProfileOfferUserDecision decision);
-
   // Logs the user decision for updating an exiting profile, which could only
   // be imported after an invalid country was ignored.
   static void LogProfileUpdateWithIgnoredCountryImportDecision(
       AutofillClient::SaveAddressProfileOfferUserDecision decision);
 
-  // Logs the user decision for updating an existing profile, which was only
-  // possible after an invalid phone number was removed.
-  // TODO(crbug.com/1298424): Cleanup when launched.
-  static void LogProfileUpdateWithRemovedPhoneNumberImportDecision(
-      AutofillClient::SaveAddressProfileOfferUserDecision decision);
-
   // Logs that a specific type changed in a profile update that received the
   // user |decision|. Note that additional manual edits in the update prompt are
   // not accounted for in this metric.
@@ -1428,9 +1397,6 @@
   // Logs that a specific type was edited in an update prompt.
   static void LogProfileUpdateEditedType(ServerFieldType edited_type);
 
-  // Logs that the auto complemented country was edited in an update prompt.
-  static void LogProfileUpdateEditedComplementedCountry();
-
   // Logs the number of edited fields for an accepted profile update.
   static void LogUpdateProfileNumberOfEditedFields(int number_of_edited_fields);
 
diff --git a/components/cronet/tools/generators/cronet_c_generator.py b/components/cronet/tools/generators/cronet_c_generator.py
index a3c978f..71cf9ba 100644
--- a/components/cronet/tools/generators/cronet_c_generator.py
+++ b/components/cronet/tools/generators/cronet_c_generator.py
@@ -132,11 +132,6 @@
   return namespace.split(".") if namespace else []
 
 
-def GetWtfHashFnNameForEnum(enum):
-  return _NameFormatter(enum, None).Format("_", internal=True,
-                                           flatten_nested_kind=True) + "HashFn"
-
-
 def IsNativeOnlyKind(kind):
   return (mojom.IsStructKind(kind) or mojom.IsEnumKind(kind)) and \
       kind.native_only
@@ -376,7 +371,6 @@
       "struct_constructors": self._GetStructConstructors,
       "under_to_camel": generator.ToCamel,
       "unmapped_type_for_serializer": self._GetUnmappedTypeForSerializer,
-      "wtf_hash_fn_name_for_enum": GetWtfHashFnNameForEnum,
     }
     return cpp_filters
 
diff --git a/components/gcm_driver/fake_gcm_profile_service.cc b/components/gcm_driver/fake_gcm_profile_service.cc
index 6437627..fa81e44 100644
--- a/components/gcm_driver/fake_gcm_profile_service.cc
+++ b/components/gcm_driver/fake_gcm_profile_service.cc
@@ -11,12 +11,10 @@
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "components/gcm_driver/crypto/gcm_encryption_result.h"
-#include "components/gcm_driver/fake_gcm_client_factory.h"
 #include "components/gcm_driver/gcm_driver.h"
 #include "components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h"
 
@@ -25,7 +23,10 @@
 class FakeGCMProfileService::CustomFakeGCMDriver
     : public instance_id::FakeGCMDriverForInstanceID {
  public:
-  explicit CustomFakeGCMDriver(FakeGCMProfileService* service);
+  CustomFakeGCMDriver();
+
+  // Must be called before any other methods.
+  void SetService(FakeGCMProfileService* service);
 
   CustomFakeGCMDriver(const CustomFakeGCMDriver&) = delete;
   CustomFakeGCMDriver& operator=(const CustomFakeGCMDriver&) = delete;
@@ -39,9 +40,6 @@
                       const std::string& message_id,
                       GCMClient::Result result);
 
-  void OnDispatchMessage(const std::string& app_id,
-                         const IncomingMessage& message);
-
   // GCMDriver overrides:
   void EncryptMessage(const std::string& app_id,
                       const std::string& authorized_entity,
@@ -80,7 +78,7 @@
               const std::string& receiver_id,
               const OutgoingMessage& message);
 
-  raw_ptr<FakeGCMProfileService> service_;
+  raw_ptr<FakeGCMProfileService> service_ = nullptr;
 
   // Used to give each registration a unique registration id. Does not decrease
   // when unregister is called.
@@ -90,11 +88,9 @@
       this};  // Must be last.
 };
 
-FakeGCMProfileService::CustomFakeGCMDriver::CustomFakeGCMDriver(
-    FakeGCMProfileService* service)
-    : service_(service) {}
+FakeGCMProfileService::CustomFakeGCMDriver::CustomFakeGCMDriver() = default;
 
-FakeGCMProfileService::CustomFakeGCMDriver::~CustomFakeGCMDriver() {}
+FakeGCMProfileService::CustomFakeGCMDriver::~CustomFakeGCMDriver() = default;
 
 void FakeGCMProfileService::CustomFakeGCMDriver::RegisterImpl(
     const std::string& app_id,
@@ -171,6 +167,11 @@
   std::move(callback).Run(GCMEncryptionResult::ENCRYPTED_DRAFT_08, message);
 }
 
+void FakeGCMProfileService::CustomFakeGCMDriver::SetService(
+    FakeGCMProfileService* service) {
+  service_ = service;
+}
+
 void FakeGCMProfileService::CustomFakeGCMDriver::DoSend(
     const std::string& app_id,
     const std::string& receiver_id,
@@ -207,24 +208,22 @@
       app_id, authorized_entity, scope, std::move(callback));
 }
 
-void FakeGCMProfileService::CustomFakeGCMDriver::OnDispatchMessage(
-    const std::string& app_id,
-    const IncomingMessage& message) {
-  DispatchMessage(app_id, message);
-}
-
 // static
 std::unique_ptr<KeyedService> FakeGCMProfileService::Build(
     content::BrowserContext* context) {
-  std::unique_ptr<FakeGCMProfileService> service =
-      std::make_unique<FakeGCMProfileService>();
-  service->SetDriverForTesting(
-      std::make_unique<CustomFakeGCMDriver>(service.get()));
+  auto custom_driver = std::make_unique<CustomFakeGCMDriver>();
+  CustomFakeGCMDriver* custom_driver_ptr = custom_driver.get();
 
+  std::unique_ptr<FakeGCMProfileService> service =
+      std::make_unique<FakeGCMProfileService>(std::move(custom_driver));
+
+  custom_driver_ptr->SetService(service.get());
   return service;
 }
 
-FakeGCMProfileService::FakeGCMProfileService() = default;
+FakeGCMProfileService::FakeGCMProfileService(
+    std::unique_ptr<instance_id::FakeGCMDriverForInstanceID> fake_gcm_driver)
+    : GCMProfileService(std::move(fake_gcm_driver)) {}
 
 FakeGCMProfileService::~FakeGCMProfileService() = default;
 
@@ -235,9 +234,12 @@
 
 void FakeGCMProfileService::DispatchMessage(const std::string& app_id,
                                             const IncomingMessage& message) {
-  CustomFakeGCMDriver* custom_driver =
-      static_cast<CustomFakeGCMDriver*>(driver());
-  custom_driver->OnDispatchMessage(app_id, message);
+  GetFakeGCMDriver()->DispatchMessage(app_id, message);
+}
+
+instance_id::FakeGCMDriverForInstanceID*
+FakeGCMProfileService::GetFakeGCMDriver() {
+  return static_cast<instance_id::FakeGCMDriverForInstanceID*>(driver());
 }
 
 }  // namespace gcm
diff --git a/components/gcm_driver/fake_gcm_profile_service.h b/components/gcm_driver/fake_gcm_profile_service.h
index d53777c..0adf038 100644
--- a/components/gcm_driver/fake_gcm_profile_service.h
+++ b/components/gcm_driver/fake_gcm_profile_service.h
@@ -18,6 +18,10 @@
 class BrowserContext;
 }  // namespace content
 
+namespace instance_id {
+class FakeGCMDriverForInstanceID;
+}  // namespace instance_id
+
 namespace gcm {
 
 // Acts as a bridge between GCM API and GCM Client layer for testing purposes.
@@ -26,7 +30,8 @@
   // Helper function to be used with KeyedServiceFactory::SetTestingFactory().
   static std::unique_ptr<KeyedService> Build(content::BrowserContext* context);
 
-  FakeGCMProfileService();
+  explicit FakeGCMProfileService(
+      std::unique_ptr<instance_id::FakeGCMDriverForInstanceID> fake_gcm_driver);
 
   FakeGCMProfileService(const FakeGCMProfileService&) = delete;
   FakeGCMProfileService& operator=(const FakeGCMProfileService&) = delete;
@@ -38,6 +43,8 @@
   void DispatchMessage(const std::string& app_id,
                        const IncomingMessage& message);
 
+  instance_id::FakeGCMDriverForInstanceID* GetFakeGCMDriver();
+
   const OutgoingMessage& last_sent_message() const {
     return last_sent_message_;
   }
diff --git a/components/gcm_driver/gcm_profile_service.cc b/components/gcm_driver/gcm_profile_service.cc
index addd858..0f2be5a 100644
--- a/components/gcm_driver/gcm_profile_service.cc
+++ b/components/gcm_driver/gcm_profile_service.cc
@@ -184,9 +184,17 @@
 }
 #endif  // BUILDFLAG(USE_GCM_FROM_PLATFORM)
 
-GCMProfileService::GCMProfileService() {}
+GCMProfileService::GCMProfileService(std::unique_ptr<GCMDriver> gcm_driver)
+    : driver_(std::move(gcm_driver)) {
+#if !BUILDFLAG(USE_GCM_FROM_PLATFORM)
+  if (identity_observer_) {
+    identity_observer_ = std::make_unique<IdentityObserver>(
+        identity_manager_, url_loader_factory_, driver_.get());
+  }
+#endif  // !BUILDFLAG(USE_GCM_FROM_PLATFORM)
+}
 
-GCMProfileService::~GCMProfileService() {}
+GCMProfileService::~GCMProfileService() = default;
 
 void GCMProfileService::Shutdown() {
 #if !BUILDFLAG(USE_GCM_FROM_PLATFORM)
@@ -198,15 +206,4 @@
   }
 }
 
-void GCMProfileService::SetDriverForTesting(std::unique_ptr<GCMDriver> driver) {
-  driver_ = std::move(driver);
-
-#if !BUILDFLAG(USE_GCM_FROM_PLATFORM)
-  if (identity_observer_) {
-    identity_observer_ = std::make_unique<IdentityObserver>(
-        identity_manager_, url_loader_factory_, driver.get());
-  }
-#endif  // !BUILDFLAG(USE_GCM_FROM_PLATFORM)
-}
-
 }  // namespace gcm
diff --git a/components/gcm_driver/gcm_profile_service.h b/components/gcm_driver/gcm_profile_service.h
index 81a282cc..aeead5c 100644
--- a/components/gcm_driver/gcm_profile_service.h
+++ b/components/gcm_driver/gcm_profile_service.h
@@ -78,14 +78,11 @@
   // KeyedService:
   void Shutdown() override;
 
-  // For testing purposes.
-  void SetDriverForTesting(std::unique_ptr<GCMDriver> driver);
-
   GCMDriver* driver() const { return driver_.get(); }
 
  protected:
   // Used for constructing fake GCMProfileService for testing purpose.
-  GCMProfileService();
+  explicit GCMProfileService(std::unique_ptr<GCMDriver> driver);
 
  private:
   std::unique_ptr<GCMDriver> driver_;
diff --git a/components/gcm_driver/instance_id/BUILD.gn b/components/gcm_driver/instance_id/BUILD.gn
index fc71330..f9bfee62f 100644
--- a/components/gcm_driver/instance_id/BUILD.gn
+++ b/components/gcm_driver/instance_id/BUILD.gn
@@ -53,6 +53,7 @@
   deps = [
     "//base",
     "//components/gcm_driver",
+    "//net",
     "//testing/gtest",
   ]
 
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 22b64453..1a4be74 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
@@ -11,12 +11,18 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/rand_util.h"
+#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 "base/task/single_thread_task_runner.h"
+#include "base/task/task_runner.h"
 #include "base/threading/thread_restrictions.h"
+#include "base/time/time.h"
+#include "components/gcm_driver/common/gcm_message.h"
 #include "components/gcm_driver/gcm_client.h"
+#include "components/gcm_driver/gcm_connection_observer.h"
+#include "net/base/ip_endpoint.h"
 
 namespace instance_id {
 
@@ -53,10 +59,10 @@
       << "Failed to read data from stored FCM tokens file";
 
   for (const auto [key, value] : data.value().GetDict()) {
+    DVLOG(1) << "Loaded FCM token from file, key: " << key
+             << ", value: " << value.GetString();
     tokens_[key] = value.GetString();
   }
-
-  DVLOG(1) << "Loaded tokens from file: " << tokens_.size();
 }
 
 FakeGCMDriverForInstanceID::~FakeGCMDriverForInstanceID() = default;
@@ -66,6 +72,48 @@
   return this;
 }
 
+void FakeGCMDriverForInstanceID::AddConnectionObserver(
+    gcm::GCMConnectionObserver* observer) {
+  connection_observers_.AddObserver(observer);
+}
+
+void FakeGCMDriverForInstanceID::RemoveConnectionObserver(
+    gcm::GCMConnectionObserver* observer) {
+  connection_observers_.RemoveObserver(observer);
+}
+
+void FakeGCMDriverForInstanceID::AddAppHandler(const std::string& app_id,
+                                               gcm::GCMAppHandler* handler) {
+  FakeGCMDriver::AddAppHandler(app_id, handler);
+
+  DVLOG(1) << "GCMAppHandler was added: " << app_id;
+
+  if (app_id_for_connection_.empty() || app_id == app_id_for_connection_) {
+    ConnectIfNeeded();
+  }
+}
+
+bool FakeGCMDriverForInstanceID::HasTokenForAppId(
+    const std::string& app_id,
+    const std::string& token) const {
+#if BUILDFLAG(IS_ANDROID)
+  // FCM registration tokens on Android should be handled by
+  // FakeInstanceIDWithSubtype.
+  NOTREACHED();
+#endif  // BUILDFLAG(IS_ANDROID)
+  for (const auto& [key, stored_token] : tokens_) {
+    if (token == stored_token && base::StartsWith(key, app_id)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+void FakeGCMDriverForInstanceID::WaitForAppIdBeforeConnection(
+    const std::string& app_id) {
+  app_id_for_connection_ = app_id;
+}
+
 void FakeGCMDriverForInstanceID::AddInstanceIDData(
     const std::string& app_id,
     const std::string& instance_id,
@@ -183,4 +231,16 @@
   DCHECK(success) << "Failed to store FCM tokens";
 }
 
+void FakeGCMDriverForInstanceID::ConnectIfNeeded() {
+  if (connected_) {
+    return;
+  }
+
+  DVLOG(1) << "GCMDriver connected.";
+  connected_ = true;
+  for (gcm::GCMConnectionObserver& observer : connection_observers_) {
+    observer.OnConnected(net::IPEndPoint());
+  }
+}
+
 }  // namespace instance_id
diff --git a/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h b/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h
index 8e2f7bf..d3263a8a 100644
--- a/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h
+++ b/components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h
@@ -10,6 +10,8 @@
 #include <utility>
 
 #include "base/files/file_path.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
 #include "components/gcm_driver/fake_gcm_driver.h"
 
 namespace base {
@@ -34,6 +36,21 @@
 
   // FakeGCMDriver overrides:
   gcm::InstanceIDHandler* GetInstanceIDHandlerInternal() override;
+  void AddConnectionObserver(gcm::GCMConnectionObserver* observer) override;
+  void RemoveConnectionObserver(gcm::GCMConnectionObserver* observer) override;
+  void AddAppHandler(const std::string& app_id,
+                     gcm::GCMAppHandler* handler) override;
+
+  // Expose protected method for testing.
+  using gcm::FakeGCMDriver::DispatchMessage;
+
+  // Returns true if the given |app_id| has the expected |token|. Note that
+  // tokens may be loaded before GCMDriver is connected.
+  bool HasTokenForAppId(const std::string& app_id,
+                        const std::string& token) const;
+
+  // GCMDriver will not connect until the given |app_id| is added.
+  void WaitForAppIdBeforeConnection(const std::string& app_id);
 
   const std::string& last_gettoken_app_id() const {
     return last_gettoken_app_id_;
@@ -69,8 +86,14 @@
                          GetInstanceIDDataCallback callback) override;
 
  private:
+  // Stores generated FCM registration tokens to a file, to keep the same tokens
+  // across browser restarts in tests.
   void StoreTokensIfNeeded();
 
+  // Used to simulate connection of GCMDriver after adding the first
+  // GCMAppHandler.
+  void ConnectIfNeeded();
+
   std::string GenerateTokenImpl(const std::string& app_id,
                                 const std::string& authorized_entity,
                                 const std::string& scope);
@@ -83,6 +106,20 @@
   std::string last_gettoken_app_id_;
   std::string last_gettoken_authorized_entity_;
   std::string last_deletetoken_app_id_;
+
+  // Simulate a connection to the server only after the given AppHandler has
+  // been added. This is required to prevent message loss in GCMDriver while
+  // dispatching a message.
+  // TODO(crbug.com/1408769): remove once GCMDriver fixes it.
+  std::string app_id_for_connection_;
+  bool connected_ = false;
+
+  base::ObserverList<gcm::GCMConnectionObserver,
+                     /*check_empty=*/false,
+                     /*allow_reentrancy=*/false>::Unchecked
+      connection_observers_;
+
+  base::WeakPtrFactory<FakeGCMDriverForInstanceID> weak_ptr_factory_{this};
 };
 
 }  // namespace instance_id
diff --git a/components/page_info/core/features.cc b/components/page_info/core/features.cc
index ffadf084..642e4d6 100644
--- a/components/page_info/core/features.cc
+++ b/components/page_info/core/features.cc
@@ -15,6 +15,9 @@
 BASE_FEATURE(kPageInfoStoreInfo,
              "PageInfoStoreInfo",
              base::FEATURE_DISABLED_BY_DEFAULT);
+BASE_FEATURE(kPageInfoAboutThisSiteImprovedBottomSheet,
+             "PageInfoAboutThisSiteImprovedBottomSheet",
+             base::FEATURE_DISABLED_BY_DEFAULT);
 #endif
 
 extern bool IsAboutThisSiteFeatureEnabled(const std::string& locale) {
diff --git a/components/page_info/core/features.h b/components/page_info/core/features.h
index 6856164..12e2bdd6 100644
--- a/components/page_info/core/features.h
+++ b/components/page_info/core/features.h
@@ -17,6 +17,8 @@
 BASE_DECLARE_FEATURE(kPageInfoHistory);
 // Enables the store info row for Page Info.
 BASE_DECLARE_FEATURE(kPageInfoStoreInfo);
+// Enables an improved "About this site" bottomsheet in Page Info.
+BASE_DECLARE_FEATURE(kPageInfoAboutThisSiteImprovedBottomSheet);
 #endif
 
 // Enables the "About this site" section in Page Info.
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index ada9bb2..f4d1593 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -544,10 +544,6 @@
   return password_save_manager_->IsPasswordUpdate();
 }
 
-bool PasswordFormManager::IsSamePassword() const {
-  return password_save_manager_->IsSamePassword();
-}
-
 base::WeakPtr<PasswordManagerDriver> PasswordFormManager::GetDriver() const {
   return driver_;
 }
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h
index 5629d39..5fd567f 100644
--- a/components/password_manager/core/browser/password_form_manager.h
+++ b/components/password_manager/core/browser/password_form_manager.h
@@ -189,7 +189,6 @@
   void SetGenerationElement(autofill::FieldRendererId generation_element);
   bool HasLikelyChangePasswordFormSubmitted() const;
   bool IsPasswordUpdate() const;
-  bool IsSamePassword() const;
   base::WeakPtr<PasswordManagerDriver> GetDriver() const;
   const PasswordForm* GetSubmittedForm() const;
 
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index 4495eb5..e00ebc1b 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -1091,7 +1091,6 @@
   EXPECT_TRUE(
       form_manager_->ProvisionallySave(submitted_form, &driver_, nullptr));
   EXPECT_FALSE(form_manager_->IsNewLogin());
-  EXPECT_FALSE(form_manager_->IsSamePassword());
   EXPECT_TRUE(form_manager_->IsPasswordUpdate());
 
   MockFormSaver& form_saver = MockFormSaver::Get(form_manager_.get());
@@ -1125,7 +1124,6 @@
   EXPECT_TRUE(
       form_manager_->ProvisionallySave(submitted_form, &driver_, nullptr));
   EXPECT_FALSE(form_manager_->IsNewLogin());
-  EXPECT_FALSE(form_manager_->IsSamePassword());
   EXPECT_TRUE(form_manager_->IsPasswordUpdate());
 
   MockFormSaver& form_saver = MockFormSaver::Get(form_manager_.get());
@@ -1251,7 +1249,6 @@
 
   CheckPendingCredentials(expected, form_manager_->GetPendingCredentials());
   EXPECT_FALSE(form_manager_->IsNewLogin());
-  EXPECT_FALSE(form_manager_->IsSamePassword());
   EXPECT_TRUE(form_manager_->IsPasswordUpdate());
 }
 
@@ -1292,7 +1289,6 @@
 
   CheckPendingCredentials(saved_match_, form_manager_->GetPendingCredentials());
   EXPECT_FALSE(form_manager_->IsNewLogin());
-  EXPECT_TRUE(form_manager_->IsSamePassword());
   EXPECT_FALSE(form_manager_->IsPasswordUpdate());
 }
 
@@ -2059,7 +2055,6 @@
   // in state new login nor password overridden.
   ASSERT_TRUE(form_manager_->ProvisionallySaveHttpAuthForm(http_auth_form));
   EXPECT_FALSE(form_manager_->IsNewLogin());
-  EXPECT_TRUE(form_manager_->IsSamePassword());
   EXPECT_FALSE(form_manager_->IsPasswordUpdate());
 }
 
@@ -2086,7 +2081,6 @@
   ASSERT_TRUE(
       form_manager_->ProvisionallySaveHttpAuthForm(submitted_http_auth_form));
   EXPECT_FALSE(form_manager_->IsNewLogin());
-  EXPECT_FALSE(form_manager_->IsSamePassword());
   EXPECT_TRUE(form_manager_->IsPasswordUpdate());
 
   // Check that the password is updated in the stored credential.
@@ -2333,7 +2327,6 @@
     ASSERT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_,
                                                  &possible_username_data));
     EXPECT_EQ(form_manager_->IsPasswordUpdate(), is_password_update);
-    EXPECT_FALSE(form_manager_->IsSamePassword());
 
     // Check that uploads for both username and password form happen.
     testing::InSequence in_sequence;
@@ -3003,7 +2996,6 @@
                void(autofill::mojom::SubmissionIndicatorEvent));
   MOCK_CONST_METHOD0(IsNewLogin, bool());
   MOCK_CONST_METHOD0(IsPasswordUpdate, bool());
-  MOCK_CONST_METHOD0(IsSamePassword, bool());
   MOCK_CONST_METHOD0(HasGeneratedPassword, bool());
   MOCK_METHOD0(UsernameUpdatedInBubble, void());
   std::unique_ptr<PasswordSaveManager> Clone() override {
@@ -3255,11 +3247,6 @@
   form_manager_->IsPasswordUpdate();
 }
 
-TEST_F(PasswordFormManagerTestWithMockedSaver, IsSamePassword) {
-  EXPECT_CALL(*mock_password_save_manager(), IsSamePassword());
-  form_manager_->IsSamePassword();
-}
-
 TEST_F(PasswordFormManagerTestWithMockedSaver, HasGeneratedPassword) {
   EXPECT_CALL(*mock_password_save_manager(), HasGeneratedPassword());
   form_manager_->HasGeneratedPassword();
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index 2fc5a74..9a0a2d25 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -1281,21 +1281,6 @@
   return nullptr;
 }
 
-bool PasswordManager::HasSubmittedManager() const {
-  return GetSubmittedManager() != nullptr;
-}
-
-bool PasswordManager::HasSubmittedManagerWithSamePassword() const {
-  PasswordFormManager* submitted_manager = GetSubmittedManager();
-  return submitted_manager && submitted_manager->IsSamePassword();
-}
-
-void PasswordManager::SaveSubmittedManager() {
-  PasswordFormManager* submitted_manager = GetSubmittedManager();
-  DCHECK(submitted_manager);
-  submitted_manager->Save();
-}
-
 absl::optional<PasswordForm> PasswordManager::GetSubmittedCredentials() {
   PasswordFormManager* submitted_manager = GetSubmittedManager();
   if (submitted_manager)
@@ -1425,12 +1410,6 @@
   });
 }
 
-void PasswordManager::ResetPendingCredentials() {
-  for (auto& form_manager : form_managers_)
-    form_manager->ResetState();
-  owned_submitted_form_manager_.reset();
-}
-
 bool PasswordManager::IsFormManagerPendingPasswordUpdate() const {
   for (const auto& form_manager : form_managers_) {
     if (form_manager->IsPasswordUpdate())
diff --git a/components/password_manager/core/browser/password_manager.h b/components/password_manager/core/browser/password_manager.h
index 272ea9b9..6aa7b2a 100644
--- a/components/password_manager/core/browser/password_manager.h
+++ b/components/password_manager/core/browser/password_manager.h
@@ -206,27 +206,12 @@
   // Notifies that Credential Management API function store() is called.
   void NotifyStorePasswordCalled();
 
-  // Resets pending credentials.
-  void ResetPendingCredentials();
-
   // Returns true if a form manager is processing a password update.
   bool IsFormManagerPendingPasswordUpdate() const;
 
-  // Returns true if password manager has recorded a submitted manager.
-  bool HasSubmittedManager() const;
-
-  // Returns true if the password manager has recorded a submitted form
-  // and the new password in that form is the same as the old one.
-  bool HasSubmittedManagerWithSamePassword() const;
-
   // Returns the submitted PasswordForm if there exists one.
-  // TODO (crbug.com/1310169): Eliminate "HasSubmittedManager".
   absl::optional<PasswordForm> GetSubmittedCredentials();
 
-  // Saves the current submitted password to the disk. Password manager must
-  // have a submitted manager.
-  void SaveSubmittedManager();
-
  private:
   FRIEND_TEST_ALL_PREFIXES(
       PasswordManagerTest,
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.cc b/components/password_manager/core/browser/password_manager_metrics_util.cc
index 1b003be..0fb0d7e 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.cc
+++ b/components/password_manager/core/browser/password_manager_metrics_util.cc
@@ -375,22 +375,6 @@
 
 void LogProtectedPasswordReuse(PasswordType reused_password_type) {}
 
-void LogPasswordEditResult(IsUsernameChanged username_changed,
-                           IsPasswordChanged password_changed) {
-  PasswordEditUpdatedValues values;
-  if (username_changed && password_changed) {
-    values = PasswordEditUpdatedValues::kBoth;
-  } else if (username_changed) {
-    values = PasswordEditUpdatedValues::kUsername;
-  } else if (password_changed) {
-    values = PasswordEditUpdatedValues::kPassword;
-  } else {
-    values = PasswordEditUpdatedValues::kNone;
-  }
-  base::UmaHistogramEnumeration("PasswordManager.PasswordEditUpdatedValues",
-                                values);
-}
-
 void LogUserInteractionsWhenAddingCredentialFromSettings(
     AddCredentialFromSettingsUserInteractions
         add_credential_from_settings_user_interaction) {
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h
index c707d20..d6af439 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.h
+++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -806,10 +806,6 @@
                                     bool does_primary_account_exists,
                                     bool is_signed_in);
 
-// Log the result of the password edit action.
-void LogPasswordEditResult(IsUsernameChanged password_changed,
-                           IsPasswordChanged username_changed);
-
 // Log the user interaction events when creating a new credential from settings.
 void LogUserInteractionsWhenAddingCredentialFromSettings(
     AddCredentialFromSettingsUserInteractions
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index bdb87889..efdc0dc3 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -4039,66 +4039,6 @@
   EXPECT_TRUE(manager()->IsFormManagerPendingPasswordUpdate());
 }
 
-TEST_P(PasswordManagerTest, GetSubmittedCredentials) {
-  PasswordForm form(MakeSimpleForm());
-  store_->AddLogin(form);
-
-  std::vector<FormData> observed = {form.form_data};
-  EXPECT_CALL(client_, IsSavingAndFillingEnabled).WillRepeatedly(Return(true));
-  manager()->OnPasswordFormsParsed(&driver_, observed);
-  manager()->OnPasswordFormsRendered(&driver_, observed);
-  task_environment_.RunUntilIdle();
-
-  // The user updates the password and submits the form.
-  FormData updated_data(form.form_data);
-  updated_data.fields[1].value = u"new_password";
-  manager()->OnInformAboutUserInput(&driver_, updated_data);
-  OnPasswordFormSubmitted(updated_data);
-
-  absl::optional<PasswordForm> submitted_credentials =
-      manager()->GetSubmittedCredentials();
-  ASSERT_TRUE(submitted_credentials.has_value());
-  EXPECT_EQ(submitted_credentials.value().password_value,
-            updated_data.fields[1].value);
-  EXPECT_EQ(submitted_credentials.value().username_value, form.username_value);
-  EXPECT_EQ(submitted_credentials.value().url, form.url);
-}
-
-TEST_P(PasswordManagerTest, SaveSubmittedManager) {
-  PasswordForm form(MakeSimpleForm());
-  store_->AddLogin(form);
-
-  std::vector<FormData> observed = {form.form_data};
-  EXPECT_CALL(client_, IsSavingAndFillingEnabled).WillRepeatedly(Return(true));
-  manager()->OnPasswordFormsParsed(&driver_, observed);
-  manager()->OnPasswordFormsRendered(&driver_, observed);
-  task_environment_.RunUntilIdle();
-
-  // Password was not updated yet.
-  EXPECT_FALSE(manager()->IsFormManagerPendingPasswordUpdate());
-
-  // The user updates the password.
-  FormData updated_data(form.form_data);
-  updated_data.fields[1].value = u"new_password";
-  manager()->OnInformAboutUserInput(&driver_, updated_data);
-  EXPECT_TRUE(manager()->IsFormManagerPendingPasswordUpdate());
-
-  // The user submits the form.
-  OnPasswordFormSubmitted(updated_data);
-  EXPECT_TRUE(manager()->GetSubmittedManagerForTest());
-
-  PasswordForm expected_form(form);
-  // The expected form with a new password.
-  expected_form.password_value = updated_data.fields[1].value;
-  // The form is saved.
-  manager()->SaveSubmittedManager();
-  task_environment_.RunUntilIdle();
-
-  EXPECT_THAT(store_->stored_passwords(),
-              ElementsAre(Pair(expected_form.signon_realm,
-                               ElementsAre(FormMatches(expected_form)))));
-}
-
 // Test submission of "PasswordManager.FormVisited.PerProfileType" and
 // "PasswordManager.FormSubmission.PerProfileType" for Incognito mode.
 TEST_P(PasswordManagerTest, IncognitoProfileTypeMetricSubmission) {
diff --git a/components/password_manager/core/browser/password_save_manager.h b/components/password_manager/core/browser/password_save_manager.h
index 9ddd879..184fd45 100644
--- a/components/password_manager/core/browser/password_save_manager.h
+++ b/components/password_manager/core/browser/password_save_manager.h
@@ -109,7 +109,6 @@
 
   virtual bool IsNewLogin() const = 0;
   virtual bool IsPasswordUpdate() const = 0;
-  virtual bool IsSamePassword() const = 0;
   virtual bool HasGeneratedPassword() const = 0;
 
   // Signals that the user updated the username value in the bubble prompt.
diff --git a/components/password_manager/core/browser/password_save_manager_impl.cc b/components/password_manager/core/browser/password_save_manager_impl.cc
index 5592f81..97da383 100644
--- a/components/password_manager/core/browser/password_save_manager_impl.cc
+++ b/components/password_manager/core/browser/password_save_manager_impl.cc
@@ -486,11 +486,6 @@
   return pending_credentials_state_ == PendingCredentialsState::UPDATE;
 }
 
-bool PasswordSaveManagerImpl::IsSamePassword() const {
-  return pending_credentials_state_ ==
-         PendingCredentialsState::EQUAL_TO_SAVED_MATCH;
-}
-
 bool PasswordSaveManagerImpl::HasGeneratedPassword() const {
   return generation_manager_ && generation_manager_->HasGeneratedPassword();
 }
diff --git a/components/password_manager/core/browser/password_save_manager_impl.h b/components/password_manager/core/browser/password_save_manager_impl.h
index 0db2ee8d..5af1731 100644
--- a/components/password_manager/core/browser/password_save_manager_impl.h
+++ b/components/password_manager/core/browser/password_save_manager_impl.h
@@ -81,7 +81,6 @@
 
   bool IsNewLogin() const override;
   bool IsPasswordUpdate() const override;
-  bool IsSamePassword() const override;
   bool HasGeneratedPassword() const override;
 
   void UsernameUpdatedInBubble() override;
diff --git a/components/password_manager/core/browser/password_save_manager_impl_unittest.cc b/components/password_manager/core/browser/password_save_manager_impl_unittest.cc
index 6b7ae12..92ff311 100644
--- a/components/password_manager/core/browser/password_save_manager_impl_unittest.cc
+++ b/components/password_manager/core/browser/password_save_manager_impl_unittest.cc
@@ -608,7 +608,6 @@
   // Check that save manager is in None state.
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
   EXPECT_FALSE(password_save_manager_impl()->IsPasswordUpdate());
-  EXPECT_FALSE(password_save_manager_impl()->IsSamePassword());
   EXPECT_FALSE(password_save_manager_impl()->HasGeneratedPassword());
 }
 
@@ -729,7 +728,6 @@
       /*is_credential_api_save=*/false);
 
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
-  EXPECT_FALSE(password_save_manager_impl()->IsSamePassword());
   EXPECT_TRUE(password_save_manager_impl()->IsPasswordUpdate());
 
   PasswordForm updated_form;
@@ -844,7 +842,6 @@
   CheckPendingCredentials(
       expected, password_save_manager_impl()->GetPendingCredentials());
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
-  EXPECT_FALSE(password_save_manager_impl()->IsSamePassword());
   EXPECT_TRUE(password_save_manager_impl()->IsPasswordUpdate());
 }
 
@@ -912,7 +909,6 @@
 
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
   EXPECT_FALSE(password_save_manager_impl()->IsPasswordUpdate());
-  EXPECT_TRUE(password_save_manager_impl()->IsSamePassword());
 }
 
 TEST_P(PasswordSaveManagerImplTest, UpdatePasswordValueMultiplePasswordFields) {
@@ -1212,7 +1208,6 @@
       /*is_credential_api_save=*/false);
 
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
-  EXPECT_FALSE(password_save_manager_impl()->IsSamePassword());
   EXPECT_TRUE(password_save_manager_impl()->IsPasswordUpdate());
 
   // Check that the password is updated in the stored credential.
@@ -1349,7 +1344,6 @@
       /*is_credential_api_save=*/false);
 
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
-  EXPECT_FALSE(password_save_manager_impl()->IsSamePassword());
   // An update prompt should be shown.
   EXPECT_TRUE(password_save_manager_impl()->IsPasswordUpdate());
 
@@ -1374,7 +1368,6 @@
       /*is_credential_api_save=*/false);
 
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
-  EXPECT_FALSE(password_save_manager_impl()->IsSamePassword());
   // An update prompt should be shown.
   EXPECT_TRUE(password_save_manager_impl()->IsPasswordUpdate());
 
@@ -1414,7 +1407,6 @@
       /*is_credential_api_save=*/false);
 
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
-  EXPECT_FALSE(password_save_manager_impl()->IsSamePassword());
   // An update prompt should be shown.
   EXPECT_TRUE(password_save_manager_impl()->IsPasswordUpdate());
 
@@ -1483,7 +1475,6 @@
 
   // No save or update prompts should be shown.
   EXPECT_FALSE(password_save_manager_impl()->IsNewLogin());
-  EXPECT_TRUE(password_save_manager_impl()->IsSamePassword());
   EXPECT_FALSE(password_save_manager_impl()->IsPasswordUpdate());
 
   // We still should update both credentials to update the |date_last_used| and
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter.cc b/components/password_manager/core/browser/ui/saved_passwords_presenter.cc
index 7d281358..357c308 100644
--- a/components/password_manager/core/browser/ui/saved_passwords_presenter.cc
+++ b/components/password_manager/core/browser/ui/saved_passwords_presenter.cc
@@ -333,8 +333,6 @@
   // Nothing changed.
   if (!username_changed && !password_changed && !note_changed &&
       !issues_changed) {
-    password_manager::metrics_util::LogPasswordEditResult(username_changed,
-                                                          password_changed);
     return EditResult::kNothingChanged;
   }
 
@@ -383,8 +381,6 @@
     }
   }
 
-  password_manager::metrics_util::LogPasswordEditResult(username_changed,
-                                                        password_changed);
   return EditResult::kSuccess;
 }
 
@@ -392,17 +388,27 @@
     const {
   std::vector<CredentialUIEntry> credentials;
 
-  auto it = sort_key_to_password_forms_.begin();
-  while (it != sort_key_to_password_forms_.end()) {
-    auto current_key = it->first;
-    // Aggregate all passwords for the current key.
-    std::vector<PasswordForm> current_passwords_group;
-    while (it != sort_key_to_password_forms_.end() &&
-           it->first == current_key) {
-      current_passwords_group.push_back(it->second);
-      ++it;
+  if (!base::FeatureList::IsEnabled(features::kPasswordsGrouping)) {
+    auto it = sort_key_to_password_forms_.begin();
+    while (it != sort_key_to_password_forms_.end()) {
+      auto current_key = it->first;
+      // Aggregate all passwords for the current key.
+      std::vector<PasswordForm> current_passwords_group;
+      while (it != sort_key_to_password_forms_.end() &&
+             it->first == current_key) {
+        current_passwords_group.push_back(it->second);
+        ++it;
+      }
+      credentials.emplace_back(current_passwords_group);
     }
-    credentials.emplace_back(current_passwords_group);
+    return credentials;
+  }
+
+  for (const auto& [group_id, affiliated_credentials] :
+       password_grouping_info_.map_group_id_to_forms) {
+    for (const auto& [username_password_key, forms] : affiliated_credentials) {
+      credentials.emplace_back(forms);
+    }
   }
   return credentials;
 }
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc b/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc
index 337da35..6df524bb 100644
--- a/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc
+++ b/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc
@@ -306,10 +306,6 @@
       store().stored_passwords(),
       ElementsAre(Pair(form.signon_realm, ElementsAre(updated_username))));
 
-  histogram_tester.ExpectUniqueSample(
-      "PasswordManager.PasswordEditUpdatedValues",
-      metrics_util::PasswordEditUpdatedValues::kUsername, 1);
-
   presenter().RemoveObserver(&observer);
 }
 
@@ -404,9 +400,6 @@
   EXPECT_THAT(
       store().stored_passwords(),
       ElementsAre(Pair(form.signon_realm, ElementsAre(updated_password))));
-  histogram_tester.ExpectUniqueSample(
-      "PasswordManager.PasswordEditUpdatedValues",
-      metrics_util::PasswordEditUpdatedValues::kPassword, 1);
 
   presenter().RemoveObserver(&observer);
 }
@@ -600,9 +593,6 @@
   RunUntilIdle();
   EXPECT_THAT(store().stored_passwords(),
               ElementsAre(Pair(form.signon_realm, ElementsAre(updated_both))));
-  histogram_tester.ExpectBucketCount(
-      "PasswordManager.PasswordEditUpdatedValues",
-      metrics_util::PasswordEditUpdatedValues::kBoth, 1);
 
   presenter().RemoveObserver(&observer);
 }
@@ -665,9 +655,6 @@
             presenter().EditSavedCredentials(CredentialUIEntry(form),
                                              CredentialUIEntry(form)));
   RunUntilIdle();
-  histogram_tester.ExpectBucketCount(
-      "PasswordManager.PasswordEditUpdatedValues",
-      metrics_util::PasswordEditUpdatedValues::kNone, 1);
 
   presenter().RemoveObserver(&observer);
 }
diff --git a/components/policy/resources/templates/policy_definitions/ActiveDirectoryManagement/CloudAPAuthEnabled.yaml b/components/policy/resources/templates/policy_definitions/ActiveDirectoryManagement/CloudAPAuthEnabled.yaml
index 95c78e84..51fc4473 100644
--- a/components/policy/resources/templates/policy_definitions/ActiveDirectoryManagement/CloudAPAuthEnabled.yaml
+++ b/components/policy/resources/templates/policy_definitions/ActiveDirectoryManagement/CloudAPAuthEnabled.yaml
@@ -14,8 +14,6 @@
 features:
   dynamic_refresh: true
   per_profile: false
-future_on:
-- chrome.win
 items:
 - caption: Disable Microsoft® cloud authentication
   name: Disabled
@@ -31,5 +29,7 @@
   - 0
   - 1
   type: integer
+supported_on:
+- chrome.win:111-
 tags: []
 type: int-enum
diff --git a/components/privacy_sandbox_strings.grdp b/components/privacy_sandbox_strings.grdp
index ee27cad..d702ccd 100644
--- a/components/privacy_sandbox_strings.grdp
+++ b/components/privacy_sandbox_strings.grdp
@@ -65,7 +65,7 @@
   </message>
 
   <message name="IDS_PRIVACY_SANDBOX_M1_CONSENT_LEARN_MORE_BULLET_1" desc="* This is 1 of 3 bullets. The label above the bullets is 'More about ad topics'. That string appears on the Consent page as an actionable label that leads the user to more information (this page) about the Ad topics setting. * 'What data is used:': This string appears in bold and serves as a label for this bullet. * 'Your ad topics': 'Ad topics' is the name of the setting. Here, it's referring to a list of topics that are generated by Chrome when the user turns this setting on. It's useful to use the same string, 'ad topics', to reinforce that the list of topics is associated with the setting of that name, but it's not strictly necessary. * 'recent browsing history': Chrome estimates the user's interests based on the URLs of the sites they visit. Every 4 weeks, Chrome deletes ad topics so that the list of topics is always 'recent'. **** 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." formatter_data="android_java">
-    <ph name="BEGIN_BOLD">&lt;b&gt;</ph>What data is used:<ph name="END_BOLD">&lt;/b&gt;</ph> Your ad topics are based on your recent  browsing history, a list of sites you’ve visited using Chrome on this device.
+    <ph name="BEGIN_BOLD">&lt;b&gt;</ph>What data is used:<ph name="END_BOLD">&lt;/b&gt;</ph> Your ad topics are based on your recent browsing history, a list of sites you’ve visited using Chrome on this device.
   </message>
   <message name="IDS_PRIVACY_SANDBOX_M1_CONSENT_LEARN_MORE_BULLET_2" desc="* This is 2 of 3 bullets. The label above the bullets is 'More about ad topics'. That string appears on the Consent page as an actionable label that leads the user to more information (this page) about the Ad topics setting. * 'How we use this data:': This string appears in bold and serves as a label for this bullet. * 'Chrome notes...': This user uses Chrome to browse the web, so Chrome already has a notion of their browsing history. With this setting on, Chrome considers the recent browsing history to make a list of topics of interest. * 'Topic labels are predefined': Right now, the publicly-availabel list of topics is here: https://github.com/patcg-individual-drafts/topics/blob/main/taxonomy_v1.md. * 'Later' helps the user understand that there are 2 stages relative to this setting. In the first stage, Chrome can estimate the user's interests based on their browsing history. Later, as the user continues browsing, a site can ask Chrome for topics of interest used to personalize ads. It's not instantaneous. * 'a few of your topics': The actual number is 3, so 'a few' is referring to 3. We don't want to be precise about the number, even though it's a small number and should feel reassuring to the user, because concrete numbers often invite questions. * 'but not your browsing history': we include this to reassure the user. If a site could access the user's browsing history, that site could track the user across the Web. This setting uses info from the user's browsing history, but it doesn't share the actual browsing history. **** 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." formatter_data="android_java">
     <ph name="BEGIN_BOLD">&lt;b&gt;</ph>How we use this data:<ph name="END_BOLD">&lt;/b&gt;</ph> Chrome notes topics of interest as you browse. Topic labels are predefined and include things like, Arts &amp; Entertainment, Shopping, and Sports. Later, a site you visit can ask Chrome for a few of your topics (but not your browsing history) to personalize the ads you see.
@@ -94,7 +94,7 @@
     More about site-suggested ads and ad measurement
   </message>
   <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_DESCRIPTION_2" desc="We inform the user that they can always change these new settings in Chrome settings. This is the second of two screens that comprise this Consent/Notice moment. On the first screen, for the Ad topics settings, we must ask the user for their consent to turn on the setting. On this page, we only need to provide notice to the user that we're launching two new settings. By default, these new settings will be on. This string reminds the user that they can find and change the state of these settings in Chrome settings.  **** 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. **** CONTEXT EEA NOTICE **** 1) This screen provides notice to Chrome users in the European Economic Area (EEA). It follows guidelines established by the GDPR.  2) This screen is the second of 2 screens. This second screen describes 2 settings: “Site-suggested ads” and “Ad measurement”. The first screen describes the “Ad topics” setting. " formatter_data="android_java">
-    You can make changes in Chrome settings.
+    You can make changes in Chrome settings
   </message>
   <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_ACK_BUTTON" desc="Because this isn't a moment of Consent, the button label reflects acknowledgement of this setting, and not explicit consent with something like 'Yes, I'm in'. **** 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. **** CONTEXT EEA NOTICE **** 1) This screen provides notice to Chrome users in the European Economic Area (EEA). It follows guidelines established by the GDPR.  2) This screen is the second of 2 screens. This second screen describes 2 settings: “Site-suggested ads” and “Ad measurement”. The first screen describes the “Ad topics” setting. " formatter_data="android_java">
     Got it
@@ -139,7 +139,7 @@
     More about ads in Chrome
   </message>
   <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_ROW_DESCRIPTION_4" desc="We inform the user that they can always change these new settings in Chrome settings. By default, these new settings will be on.  " formatter_data="android_java">
-    You can make changes in Chrome settings.
+    You can make changes in Chrome settings
   </message>
   <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_ROW_ACK_BUTTON" desc="Because this isn't a moment of Consent, the button label reflects acknowledgement of this setting, and not explicit consent with something like 'Yes, I'm in'. " formatter_data="android_java">
     Got it
diff --git a/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_CONSENT_LEARN_MORE_BULLET_1.png.sha1 b/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_CONSENT_LEARN_MORE_BULLET_1.png.sha1
index 96a1474..e5c879f 100644
--- a/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_CONSENT_LEARN_MORE_BULLET_1.png.sha1
+++ b/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_CONSENT_LEARN_MORE_BULLET_1.png.sha1
@@ -1 +1 @@
-9e38568df683b03b1319f9d485d48cabed67667b
\ No newline at end of file
+111219918fd5ebfc005d4f9979568cc695ca8b34
\ No newline at end of file
diff --git a/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_DESCRIPTION_2.png.sha1 b/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_DESCRIPTION_2.png.sha1
index c7a2258..27070e83 100644
--- a/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_DESCRIPTION_2.png.sha1
+++ b/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_DESCRIPTION_2.png.sha1
@@ -1 +1 @@
-218efb264ae3dcadd1763b46b7031450b14d17aa
\ No newline at end of file
+650ec9d71c7774e6c95f4093d5ac9e183b951b0d
\ No newline at end of file
diff --git a/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_ROW_DESCRIPTION_4.png.sha1 b/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_ROW_DESCRIPTION_4.png.sha1
index 19022181..b4a321f 100644
--- a/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_ROW_DESCRIPTION_4.png.sha1
+++ b/components/privacy_sandbox_strings_grdp/IDS_PRIVACY_SANDBOX_M1_NOTICE_ROW_DESCRIPTION_4.png.sha1
@@ -1 +1 @@
-a3f7e6ea7a33f52bca394407c956ac3f1fc0cce4
\ No newline at end of file
+b9cbcc0ec1afd0ec6e3eb4adbd82236f3582bf85
\ No newline at end of file
diff --git a/components/services/screen_ai/screen_ai_service_impl.cc b/components/services/screen_ai/screen_ai_service_impl.cc
index 7ae00e8..60eaf84 100644
--- a/components/services/screen_ai/screen_ai_service_impl.cc
+++ b/components/services/screen_ai/screen_ai_service_impl.cc
@@ -211,8 +211,14 @@
 
 LibraryFunctions::LibraryFunctions(const base::FilePath& library_path) {
   library_ = base::ScopedNativeLibrary(library_path);
-  std::string library_error = library_.GetError()->ToString();
-  DCHECK(library_error.empty()) << library_error;
+  DCHECK(library_.GetError());
+#if BUILDFLAG(IS_WIN)
+  DCHECK_EQ(0u, library_.GetError()->code)
+      << "Library load error: " << library_.GetError()->code;
+#else
+  DCHECK(library_.GetError()->message.empty())
+      << "Library load error: " << library_.GetError()->message;
+#endif
 
   // General functions.
   get_library_version_ = reinterpret_cast<GetLibraryVersionFn>(
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 a9dc672..6b53487 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
@@ -165,7 +165,7 @@
 void ServiceWorkerStorageControlImpl::FindRegistrationForScope(
     const GURL& scope,
     const blink::StorageKey& key,
-    FindRegistrationForClientUrlCallback callback) {
+    FindRegistrationForScopeCallback callback) {
   storage_->FindRegistrationForScope(
       scope, key,
       base::BindOnce(&ServiceWorkerStorageControlImpl::DidFindRegistration,
@@ -175,7 +175,7 @@
 void ServiceWorkerStorageControlImpl::FindRegistrationForId(
     int64_t registration_id,
     const absl::optional<blink::StorageKey>& key,
-    FindRegistrationForClientUrlCallback callback) {
+    FindRegistrationForIdCallback callback) {
   if (key.has_value()) {
     storage_->FindRegistrationForId(
         registration_id, *key,
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc
index 75fe2c7d..11b1bc8 100644
--- a/content/browser/browser_interface_binders.cc
+++ b/content/browser/browser_interface_binders.cc
@@ -376,10 +376,18 @@
         DCHECK_CURRENTLY_ON(BrowserThread::UI);
         auto* process_host = static_cast<RenderProcessHostImpl*>(
             RenderProcessHost::FromID(host->worker_process_id()));
-        process_host->CreateNotificationService(
-            GlobalRenderFrameHostId(),
-            RenderProcessHost::NotificationServiceCreatorType::kServiceWorker,
-            info.storage_key, std::move(receiver));
+
+        // It's possible that the callback is run between the destruction of the
+        // RenderProcessHost and the disconnection of the ServiceWorkerHost, so
+        // we should add the check here to avoid unexpected behaviour if the
+        // `process_host` is cast from a nullptr.
+        // See `ServiceWorkerHost::GetStoragePartition()`.
+        if (process_host) {
+          process_host->CreateNotificationService(
+              GlobalRenderFrameHostId(),
+              RenderProcessHost::NotificationServiceCreatorType::kServiceWorker,
+              info.storage_key, std::move(receiver));
+        }
       },
       base::Unretained(host));
 }
diff --git a/content/browser/devtools/web_contents_devtools_agent_host.cc b/content/browser/devtools/web_contents_devtools_agent_host.cc
index fb8e10a1..2b4276b 100644
--- a/content/browser/devtools/web_contents_devtools_agent_host.cc
+++ b/content/browser/devtools/web_contents_devtools_agent_host.cc
@@ -181,6 +181,14 @@
   auto_attacher_->UpdateChildFrameTrees(update_target_info);
 }
 
+void WebContentsDevToolsAgentHost::InspectElement(RenderFrameHost* frame_host,
+                                                  int x,
+                                                  int y) {
+  if (auto host = GetOrCreatePrimaryFrameAgent()) {
+    host->InspectElement(frame_host, x, y);
+  }
+}
+
 WebContentsDevToolsAgentHost::~WebContentsDevToolsAgentHost() {
   DCHECK(!web_contents());
 }
@@ -253,19 +261,22 @@
 }
 
 bool WebContentsDevToolsAgentHost::Activate() {
-  if (DevToolsAgentHost* host = GetPrimaryFrameAgent())
+  if (auto host = GetOrCreatePrimaryFrameAgent()) {
     return host->Activate();
+  }
   return false;
 }
 
 void WebContentsDevToolsAgentHost::Reload() {
-  if (DevToolsAgentHost* host = GetPrimaryFrameAgent())
+  if (auto host = GetOrCreatePrimaryFrameAgent()) {
     host->Reload();
+  }
 }
 
 bool WebContentsDevToolsAgentHost::Close() {
-  if (DevToolsAgentHost* host = GetPrimaryFrameAgent())
+  if (auto host = GetOrCreatePrimaryFrameAgent()) {
     return host->Close();
+  }
   return false;
 }
 
@@ -297,6 +308,17 @@
   return nullptr;
 }
 
+scoped_refptr<DevToolsAgentHost>
+WebContentsDevToolsAgentHost::GetOrCreatePrimaryFrameAgent() {
+  if (WebContents* wc = web_contents()) {
+    return RenderFrameDevToolsAgentHost::GetOrCreateFor(
+        static_cast<WebContentsImpl*>(web_contents())
+            ->GetPrimaryFrameTree()
+            .root());
+  }
+  return nullptr;
+}
+
 void WebContentsDevToolsAgentHost::WebContentsDestroyed() {
   DCHECK_EQ(this, FindAgentHost(web_contents()));
   ForceDetachAllSessions();
diff --git a/content/browser/devtools/web_contents_devtools_agent_host.h b/content/browser/devtools/web_contents_devtools_agent_host.h
index 37570c5..477eb88 100644
--- a/content/browser/devtools/web_contents_devtools_agent_host.h
+++ b/content/browser/devtools/web_contents_devtools_agent_host.h
@@ -40,6 +40,7 @@
   void WillInitiatePrerender(FrameTreeNode* ftn);
   // TODO(caseq): do we need more specific signals here?
   void UpdateChildFrameTrees(bool update_target_info);
+  void InspectElement(RenderFrameHost* frame_host, int x, int y) override;
 
  private:
   class AutoAttacher;
@@ -80,6 +81,7 @@
   void WebContentsDestroyed() override;
 
   DevToolsAgentHostImpl* GetPrimaryFrameAgent();
+  scoped_refptr<DevToolsAgentHost> GetOrCreatePrimaryFrameAgent();
 
   std::unique_ptr<AutoAttacher> auto_attacher_;
 };
diff --git a/content/browser/media/capture/desktop_capture_device.cc b/content/browser/media/capture/desktop_capture_device.cc
index 043a0c50..d5876ef 100644
--- a/content/browser/media/capture/desktop_capture_device.cc
+++ b/content/browser/media/capture/desktop_capture_device.cc
@@ -358,6 +358,16 @@
   }
   DCHECK(frame);
 
+  // Continue capturing frames when there are no changes in updated regions
+  // since the last captured frame but don't send the same frame again to the
+  // client. Clients may call RequestRefreshFrame() to ask for a copy of the
+  // last captured frame. Check |output_frame_| to ensure that at least one
+  // valid frame has already been captured and delivered.
+  if (output_frame_ && frame->updated_region().is_empty()) {
+    ScheduleNextCaptureFrame();
+    return;
+  }
+
   // If the frame size has changed, drop the output frame (if any), and
   // determine the new output size.
   if (!last_frame_size_.equals(frame->size())) {
diff --git a/content/browser/media/capture/desktop_capture_device_unittest.cc b/content/browser/media/capture/desktop_capture_device_unittest.cc
index 1ce58b11..461fd586 100644
--- a/content/browser/media/capture/desktop_capture_device_unittest.cc
+++ b/content/browser/media/capture/desktop_capture_device_unittest.cc
@@ -9,6 +9,7 @@
 #include <string.h>
 
 #include <algorithm>
+#include <limits>
 #include <memory>
 #include <string>
 #include <utility>
@@ -74,6 +75,12 @@
 // Creates a DesktopFrame that has the first pixel bytes set to
 // kFakePixelValueFirst, and the rest of the bytes set to kFakePixelValue, for
 // UnpackedFrame and InvertedFrame verification.
+// The complete frame is marked as updated by default independently of size,
+// position and content to ensure that the frame is not marked as "not changed"
+// by the DesktopCaptureDevice since that would prevent the frame from being
+// forwarded to the client.
+// See DesktopCapturerDifferWrapperTest for a more realistic example of how the
+// content of frames should affect the updated region part of each frame.
 std::unique_ptr<webrtc::BasicDesktopFrame> CreateBasicFrame(
     const webrtc::DesktopSize& size) {
   std::unique_ptr<webrtc::BasicDesktopFrame> frame(
@@ -84,6 +91,7 @@
          frame->stride() * frame->size().height());
   memset(frame->data(), kFakePixelValueFirst,
          webrtc::DesktopFrame::kBytesPerPixel);
+  frame->mutable_updated_region()->SetRect(webrtc::DesktopRect::MakeSize(size));
   return frame;
 }
 
@@ -154,19 +162,33 @@
     run_callback_asynchronously_ = run_callback_asynchronously;
   }
 
-  // VideoFrameCapturer interface.
+  void set_generate_non_updated_frames(bool generate_non_updated_frames,
+                                       int no_update_period) {
+    generate_non_updated_frames_ = generate_non_updated_frames;
+    no_update_period_ = no_update_period;
+  }
+
+  // DesktopCapturer interface.
   void Start(Callback* callback) override { callback_ = callback; }
 
   void CaptureFrame() override {
     webrtc::DesktopSize size;
-    if (frame_index_ % 2 == 0) {
+    if (generate_non_updated_frames_) {
+      size = webrtc::DesktopSize(kTestFrameWidth3, kTestFrameHeight3);
+    } else if (captured_frames_ % 2 == 0) {
       size = webrtc::DesktopSize(kTestFrameWidth1, kTestFrameHeight1);
     } else {
       size = webrtc::DesktopSize(kTestFrameWidth2, kTestFrameHeight2);
     }
-    frame_index_++;
+    captured_frames_++;
 
     std::unique_ptr<webrtc::DesktopFrame> frame = CreateBasicFrame(size);
+    if (generate_non_updated_frames_ &&
+        captured_frames_ % no_update_period_ == 0) {
+      // Indicates that no region of the screen has been updated since the last
+      // captured frame. Frame size and content is ignored to simplify testing.
+      frame->mutable_updated_region()->Clear();
+    }
 
     if (generate_inverted_frames_) {
       frame = std::make_unique<InvertedDesktopFrame>(std::move(frame));
@@ -186,6 +208,8 @@
     }
   }
 
+  int captured_frames() const { return captured_frames_; }
+
   bool GetSourceList(SourceList* screens) override { return false; }
 
   bool SelectSource(SourceId id) override { return false; }
@@ -197,10 +221,14 @@
   }
 
   Callback* callback_ = nullptr;
-  int frame_index_ = 0;
+  int captured_frames_ = 0;
   bool generate_inverted_frames_ = false;
   bool generate_cropped_frames_ = false;
   bool run_callback_asynchronously_ = false;
+  // Every |no_update_period_| frame will have an empty updated region if
+  // this member is true.
+  bool generate_non_updated_frames_ = false;
+  int no_update_period_ = std::numeric_limits<int>::max();
   base::WeakPtrFactory<FakeScreenCapturer> weak_factory_{this};
 };
 
@@ -687,6 +715,55 @@
             memcmp(output_frame_->data(), expected_frame->data(), frame_size));
 }
 
+// Verifies that only captured frames which contains updated regions are
+// forwarded to the client. In reality such a "no change" event should be an
+// effect of static size, content and position of the frame, but to allow for a
+// less complex verification, frames are here periodically marked as
+// "not updated" independently of its own content or the content of the previous
+// frame.
+TEST_F(DesktopCaptureDeviceTest,
+       OnlyCapturedFramesWithUpdatedRegionsAreForwardedToTheClient) {
+  FakeScreenCapturer* mock_capturer = new FakeScreenCapturer();
+  // Marks captured frame #2, #4, etc. (first frame is #1) as not updated.
+  mock_capturer->set_generate_non_updated_frames(true, 2);
+  CreateScreenCaptureDevice(
+      std::unique_ptr<webrtc::DesktopCapturer>(mock_capturer));
+
+  base::WaitableEvent done_event1(
+      base::WaitableEvent::ResetPolicy::AUTOMATIC,
+      base::WaitableEvent::InitialState::NOT_SIGNALED);
+  base::WaitableEvent done_event2(
+      base::WaitableEvent::ResetPolicy::AUTOMATIC,
+      base::WaitableEvent::InitialState::NOT_SIGNALED);
+
+  // Drive two frames to the registered client. A non-forwarded captured frame
+  // due to "no-change" is silently discarded by the VideoCaptureDevice but the
+  // rate of capturing new frames is not affected.
+  std::unique_ptr<media::MockVideoCaptureDeviceClient> client(
+      CreateMockVideoCaptureDeviceClient());
+  EXPECT_CALL(*client, OnError).Times(0);
+  EXPECT_CALL(*client, OnFrameDropped).Times(0);
+  EXPECT_CALL(*client, OnIncomingCapturedData)
+      .WillOnce(InvokeWithoutArgs(&done_event1, &base::WaitableEvent::Signal))
+      .WillOnce(InvokeWithoutArgs(&done_event2, &base::WaitableEvent::Signal));
+
+  media::VideoCaptureParams capture_params;
+  capture_params.requested_format.frame_size.SetSize(kTestFrameWidth3,
+                                                     kTestFrameHeight3);
+  capture_params.requested_format.frame_rate = kFrameRate;
+  capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420;
+
+  capture_device_->AllocateAndStart(capture_params, std::move(client));
+
+  // Ensure that the client gets two captured frames but the capturer had to
+  // capture three frames to do so since frame #2 is marked as "not updated".
+  EXPECT_TRUE(done_event1.TimedWait(TestTimeouts::action_max_timeout()));
+  EXPECT_TRUE(done_event2.TimedWait(TestTimeouts::action_max_timeout()));
+  EXPECT_EQ(mock_capturer->captured_frames(), 3);
+
+  capture_device_->StopAndDeAllocate();
+}
+
 class DesktopCaptureDeviceThrottledTest : public DesktopCaptureDeviceTest {
  public:
   // Capture frames at kFrameRate for a duration of total_capture_duration and
diff --git a/content/browser/media/media_internals.cc b/content/browser/media/media_internals.cc
index a77dfc8..d8d83aa 100644
--- a/content/browser/media/media_internals.cc
+++ b/content/browser/media/media_internals.cc
@@ -497,7 +497,7 @@
       GetContentClient()->browser()->ShouldSandboxAudioService());
 #if BUILDFLAG(CHROME_WIDE_ECHO_CANCELLATION)
   std::string chrome_wide_echo_cancellation_value_string =
-      base::FeatureList::IsEnabled(media::kChromeWideEchoCancellation)
+      media::IsChromeWideEchoCancellationEnabled()
           ? base::StrCat(
                 {"Enabled, processing_fifo_size = ",
                  base::NumberToString(
diff --git a/content/browser/preloading/prerender/prerender_host_registry.cc b/content/browser/preloading/prerender/prerender_host_registry.cc
index 5d1bc56f9..95a91d0 100644
--- a/content/browser/preloading/prerender/prerender_host_registry.cc
+++ b/content/browser/preloading/prerender/prerender_host_registry.cc
@@ -29,7 +29,6 @@
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/renderer_host/navigation_request.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
-#include "content/browser/web_contents/web_contents_impl.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/visibility.h"
@@ -129,7 +128,10 @@
 
     // Check whether preloading is enabled. If it is not enabled, report the
     // reason.
-    if (auto reason = initiator_web_contents.IsPrerender2Disabled();
+    WebContentsDelegate* web_contents_delegate =
+        initiator_web_contents.GetDelegate();
+    if (auto reason = web_contents_delegate->IsPrerender2Supported(
+            initiator_web_contents);
         reason != PreloadingEligibility::kEligible) {
       switch (reason) {
         case PreloadingEligibility::kPreloadingDisabled:
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 39109dd..59d6015 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -9588,22 +9588,6 @@
   return nullptr;
 }
 
-void WebContentsImpl::DisablePrerender2() {
-  prerender2_disabled_ = true;
-}
-
-void WebContentsImpl::ResetPrerender2Disabled() {
-  prerender2_disabled_ = false;
-}
-
-PreloadingEligibility WebContentsImpl::IsPrerender2Disabled() {
-  if (prerender2_disabled_) {
-    return PreloadingEligibility::kPreloadingDisabled;
-  }
-
-  return GetDelegate()->IsPrerender2Supported(*this);
-}
-
 void WebContentsImpl::AboutToBeDiscarded(WebContents* new_contents) {
   observers_.NotifyObservers(&WebContentsObserver::AboutToBeDiscarded,
                              new_contents);
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index a100c626..6a53c4ff 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -581,12 +581,6 @@
   void SetWebPreferences(const blink::web_pref::WebPreferences& prefs) override;
   void OnWebPreferencesChanged() override;
 
-  void DisablePrerender2() override;
-  void ResetPrerender2Disabled() override;
-  // Resets the bit to explicitly disable Prerender2 for this WebContents. Note
-  // that this may not equate to the feature being enabled.
-  PreloadingEligibility IsPrerender2Disabled();
-
   void AboutToBeDiscarded(WebContents* new_contents) override;
 
   // RenderFrameHostDelegate ---------------------------------------------------
@@ -2360,8 +2354,6 @@
   // navigation commits in the primary main frame.
   bool last_navigation_was_prerender_activation_for_devtools_ = false;
 
-  bool prerender2_disabled_ = false;
-
   base::WeakPtrFactory<WebContentsImpl> loading_weak_factory_{this};
   base::WeakPtrFactory<WebContentsImpl> weak_factory_{this};
 };
diff --git a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
index da28c03..b5e1cf7 100644
--- a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
+++ b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc
@@ -207,6 +207,9 @@
 #elif BUILDFLAG(IS_MAC) && defined(ARCH_CPU_ARM64)
 // Fails on Mac/Arm, https://crbug.com/1222675
 #define MAYBE_PeerConnection DISABLED_PeerConnection
+#elif BUILDFLAG(IS_FUCHSIA) && defined(ARCH_CPU_X86_64)
+// Flaky on Fuchsia-x64, https://crbug.com/1408820
+#define MAYBE_PeerConnection DISABLED_PeerConnection
 #else
 #define MAYBE_PeerConnection PeerConnection
 #endif
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index 80bafeb..1a6f344 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -1390,14 +1390,6 @@
       absl::optional<base::RepeatingCallback<bool(const GURL&)>>
           url_match_predicate = absl::nullopt) = 0;
 
-  // Disables Prerender2 for this WebContents.
-  // See
-  // https://docs.google.com/document/d/1P2VKCLpmnNm_cRAjUeE-bqLL0bslL_zKqiNeCzNom_w/
-  virtual void DisablePrerender2() = 0;
-  // Set Prerender2 disabled = false, but this does not imply Prerender2 is
-  // enabled.
-  virtual void ResetPrerender2Disabled() = 0;
-
  private:
   // This interface should only be implemented inside content.
   friend class WebContentsImpl;
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 9dd12ac..46f7028f 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -332,7 +332,7 @@
 // false (and the command-line override is not set in the renderer), the API
 // will appear as unsupported if asked for by a plugin.
 BASE_FEATURE(kSupportPepperVideoDecoderDevAPI,
-             "kSupportPepperVideoDecoderDevAPI",
+             "SupportPepperVideoDecoderDevAPI",
              base::FEATURE_ENABLED_BY_DEFAULT);
 
 // Enables service workers on chrome-untrusted:// urls.
diff --git a/content/renderer/pepper/resource_creation_impl.cc b/content/renderer/pepper/resource_creation_impl.cc
index f275f66..25f03cb4 100644
--- a/content/renderer/pepper/resource_creation_impl.cc
+++ b/content/renderer/pepper/resource_creation_impl.cc
@@ -313,7 +313,8 @@
     PP_Resource graphics3d_id,
     PP_VideoDecoder_Profile profile) {
   if (IsVideoDecoderDevAPIEnabled()) {
-    return PPB_VideoDecoder_Impl::Create(instance, graphics3d_id, profile);
+    return create_video_decoder_dev_impl_callback_.Run(instance, graphics3d_id,
+                                                       profile);
   }
 
   return 0;
diff --git a/content/renderer/pepper/resource_creation_impl.h b/content/renderer/pepper/resource_creation_impl.h
index 9ff98de..53c2dfa1 100644
--- a/content/renderer/pepper/resource_creation_impl.h
+++ b/content/renderer/pepper/resource_creation_impl.h
@@ -7,6 +7,9 @@
 
 #include <stdint.h>
 
+#include "base/functional/callback.h"
+#include "content/common/content_export.h"
+#include "content/renderer/pepper/ppb_video_decoder_impl.h"
 #include "ppapi/thunk/resource_creation_api.h"
 
 namespace content {
@@ -17,8 +20,17 @@
 // "old-style" resources are handled here. See
 // content/renderer/pepper/pepper_in_process_resource_creation.h for functions
 // that implement "new-style" resources.
-class ResourceCreationImpl : public ppapi::thunk::ResourceCreationAPI {
+class CONTENT_EXPORT ResourceCreationImpl
+    : public ppapi::thunk::ResourceCreationAPI {
  public:
+  using CreateVideoDecoderDevImplCallback = base::RepeatingCallback<
+      PP_Resource(PP_Instance, PP_Resource, PP_VideoDecoder_Profile)>;
+
+  void SetCreateVideoDecoderDevImplCallbackForTesting(
+      const CreateVideoDecoderDevImplCallback& callback) {
+    create_video_decoder_dev_impl_callback_ = callback;
+  }
+
   explicit ResourceCreationImpl(PepperPluginInstanceImpl* instance);
 
   ResourceCreationImpl(const ResourceCreationImpl&) = delete;
@@ -128,6 +140,10 @@
                                     const PP_FloatPoint* wheel_ticks,
                                     PP_Bool scroll_by_page) override;
   PP_Resource CreateX509CertificatePrivate(PP_Instance instance) override;
+
+ private:
+  CreateVideoDecoderDevImplCallback create_video_decoder_dev_impl_callback_ =
+      base::BindRepeating(&PPB_VideoDecoder_Impl::Create);
 };
 
 }  // namespace content
diff --git a/content/renderer/pepper/resource_creation_impl_unittest.cc b/content/renderer/pepper/resource_creation_impl_unittest.cc
new file mode 100644
index 0000000..3422d64
--- /dev/null
+++ b/content/renderer/pepper/resource_creation_impl_unittest.cc
@@ -0,0 +1,166 @@
+// 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 "content/renderer/pepper/resource_creation_impl.h"
+#include "base/functional/bind.h"
+#include "base/test/scoped_feature_list.h"
+#include "content/public/common/content_features.h"
+#include "content/public/common/content_switches.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+namespace {
+
+class ResourceCreationImplForTesting : public ResourceCreationImpl {
+ public:
+  ResourceCreationImplForTesting() : ResourceCreationImpl(nullptr) {}
+
+  ResourceCreationImplForTesting(const ResourceCreationImplForTesting&) =
+      delete;
+  ResourceCreationImplForTesting& operator=(
+      const ResourceCreationImplForTesting&) = delete;
+
+  ~ResourceCreationImplForTesting() override = default;
+
+  // ResourceCreation_API:
+  PP_Resource CreateBrowserFont(
+      PP_Instance instance,
+      const PP_BrowserFont_Trusted_Description* description) override {
+    return 0;
+  }
+  PP_Resource CreateFileChooser(PP_Instance instance,
+                                PP_FileChooserMode_Dev mode,
+                                const PP_Var& accept_types) override {
+    return 0;
+  }
+  PP_Resource CreateFileIO(PP_Instance instance) override { return 0; }
+  PP_Resource CreateFileRef(
+      PP_Instance instance,
+      const ppapi::FileRefCreateInfo& create_info) override {
+    return 0;
+  }
+  PP_Resource CreateFileSystem(PP_Instance instance,
+                               PP_FileSystemType type) override {
+    return 0;
+  }
+  PP_Resource CreateGraphics2D(PP_Instance pp_instance,
+                               const PP_Size* size,
+                               PP_Bool is_always_opaque) override {
+    return 0;
+  }
+  PP_Resource CreatePrinting(PP_Instance instance) override { return 0; }
+  PP_Resource CreateURLLoader(PP_Instance instance) override { return 0; }
+  PP_Resource CreateURLRequestInfo(PP_Instance instance) override { return 0; }
+  PP_Resource CreateWebSocket(PP_Instance instance) override { return 0; }
+};
+
+}  // namespace
+
+class ResourceCreationImplTest : public testing::Test {
+ public:
+  ResourceCreationImplTest() = default;
+
+  void SetUp() override {
+    resource_creation_impl_.SetCreateVideoDecoderDevImplCallbackForTesting(
+        base::BindRepeating(
+            &ResourceCreationImplTest::CreateVideoDecoderDevImpl,
+            base::Unretained(this)));
+  }
+
+  void TearDown() override {}
+
+ protected:
+  bool was_video_decoder_impl_created() {
+    return was_video_decoder_impl_created_;
+  }
+
+  ResourceCreationImpl* resource_creation_impl() {
+    return &resource_creation_impl_;
+  }
+
+ private:
+  PP_Resource CreateVideoDecoderDevImpl(PP_Instance instance,
+                                        PP_Resource graphics_context,
+                                        PP_VideoDecoder_Profile profile) {
+    was_video_decoder_impl_created_ = true;
+    return 0;
+  }
+
+  ResourceCreationImplForTesting resource_creation_impl_;
+  bool was_video_decoder_impl_created_ = false;
+};
+
+TEST_F(ResourceCreationImplTest, APISupportedByDefault) {
+  resource_creation_impl()->CreateVideoDecoderDev(
+      0, 0, static_cast<PP_VideoDecoder_Profile>(-1));
+
+  EXPECT_TRUE(was_video_decoder_impl_created());
+}
+
+TEST_F(ResourceCreationImplTest,
+       APISupportedWhenFeatureEnabledAndSwitchNotPresent) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(features::kSupportPepperVideoDecoderDevAPI);
+
+  resource_creation_impl()->CreateVideoDecoderDev(
+      0, 0, static_cast<PP_VideoDecoder_Profile>(-1));
+
+  EXPECT_TRUE(was_video_decoder_impl_created());
+}
+
+TEST_F(ResourceCreationImplTest,
+       APINotSupportedWhenFeatureDisabledAndSwitchNotPresent) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndDisableFeature(
+      features::kSupportPepperVideoDecoderDevAPI);
+
+  resource_creation_impl()->CreateVideoDecoderDev(
+      0, 0, static_cast<PP_VideoDecoder_Profile>(-1));
+
+  EXPECT_FALSE(was_video_decoder_impl_created());
+}
+
+TEST_F(ResourceCreationImplTest,
+       APISupportedWhenFeatureHasDefaultValueAndSwitchIsPresent) {
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kForceEnablePepperVideoDecoderDevAPI);
+
+  resource_creation_impl()->CreateVideoDecoderDev(
+      0, 0, static_cast<PP_VideoDecoder_Profile>(-1));
+
+  EXPECT_TRUE(was_video_decoder_impl_created());
+}
+
+TEST_F(ResourceCreationImplTest,
+       APISupportedWhenFeatureIsEnabledAndSwitchIsPresent) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(features::kSupportPepperVideoDecoderDevAPI);
+
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kForceEnablePepperVideoDecoderDevAPI);
+
+  resource_creation_impl()->CreateVideoDecoderDev(
+      0, 0, static_cast<PP_VideoDecoder_Profile>(-1));
+
+  EXPECT_TRUE(was_video_decoder_impl_created());
+}
+
+// The command-line switch should override the Feature.
+TEST_F(ResourceCreationImplTest,
+       APISupportedWhenFeatureIsDisabledButSwitchIsPresent) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndDisableFeature(
+      features::kSupportPepperVideoDecoderDevAPI);
+
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kForceEnablePepperVideoDecoderDevAPI);
+
+  resource_creation_impl()->CreateVideoDecoderDev(
+      0, 0, static_cast<PP_VideoDecoder_Profile>(-1));
+
+  EXPECT_TRUE(was_video_decoder_impl_created());
+}
+
+}  // namespace content
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 27e10e0..1772376 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -2900,6 +2900,7 @@
       "../renderer/pepper/event_conversion_unittest.cc",
       "../renderer/pepper/host_var_tracker_unittest.cc",
       "../renderer/pepper/mock_resource.h",
+      "../renderer/pepper/resource_creation_impl_unittest.cc",
       "../renderer/pepper/v8_var_converter_unittest.cc",
     ]
     deps += [
diff --git a/content/test/data/forms/form_controls_browsertest_multi_select_chromeos.png b/content/test/data/forms/form_controls_browsertest_multi_select_chromeos.png
index 88732b05..c9d2399b 100644
--- a/content/test/data/forms/form_controls_browsertest_multi_select_chromeos.png
+++ b/content/test/data/forms/form_controls_browsertest_multi_select_chromeos.png
Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_select_chromeos.png b/content/test/data/forms/form_controls_browsertest_select_chromeos.png
index ad7e471..f0c0ccae 100644
--- a/content/test/data/forms/form_controls_browsertest_select_chromeos.png
+++ b/content/test/data/forms/form_controls_browsertest_select_chromeos.png
Binary files differ
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
index 5b63223..a9f803e 100644
--- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -408,7 +408,6 @@
 crbug.com/1382332 [ chromeos ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
 crbug.com/1382332 [ android android-webview-instrumentation angle-disabled no-passthrough ] Pixel_MediaRecorderFromVideoElement [ Failure ]
 crbug.com/1382332 [ android-chromium android-nexus-5x android-nougat angle-disabled no-passthrough qualcomm renderer-skia-gl target-cpu-64 ] Pixel_MediaRecorderFromVideoElement [ Failure ]
-crbug.com/1382332 [ android-chromium android-pixel-4 android-r angle-opengles passthrough qualcomm renderer-skia-gl target-cpu-32 ] Pixel_MediaRecorderFromVideoElement [ Failure ]
 crbug.com/1382332 [ android-chromium android-s android-sm-a135m angle-disabled arm no-passthrough renderer-skia-gl target-cpu-32 ] Pixel_MediaRecorderFromVideoElement [ Failure ]
 crbug.com/1382332 [ android ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
 crbug.com/1382332 [ fuchsia ] Pixel_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ]
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index f0f2b36d..cd73d0e 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1816,6 +1816,7 @@
   SMARTCARDPROVIDERPRIVATE_REPORTLISTREADERSRESULT = 1753,
   SMARTCARDPROVIDERPRIVATE_REPORTGETSTATUSCHANGERESULT = 1754,
   FILEMANAGERPRIVATE_RESUMEIOTASK = 1755,
+  PASSWORDSPRIVATE_GETCREDENTIALSWITHREUSEDPASSWORD = 1756,
   // Last entry: Add new entries above, then run:
   // tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd
index 38bc24b7..b90cc623 100644
--- a/ios/chrome/app/strings/ios_chromium_strings.grd
+++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -309,12 +309,6 @@
       <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE" desc="Title of the screen suggesting to the user to sign in. [iOS only]">
         Make Chromium Your Own
       </message>
-      <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D" desc="This string appears as a heading on a full-page screen that tells users the benefits of signing in to Chrome. It appears when the user launches Chrome for the first time. The tone should be inviting and alluring. [CHAR_LIMIT=35][iOS only]">
-        Do More with Chromium
-      </message>
-      <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E" desc="This string appears as a heading on a full-page screen that welcomes users to Chrome. It appears when the user launches Chrome for the first time. The tone should be inviting and motivating. [CHAR_LIMIT=35][iOS only]">
-        Welcome to Chromium
-      </message>
       <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX" desc="Checkbox to accept the metrics reporting consent. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION and IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE. [iOS only]">
         Help Improve Chromium's Features and Performance
         </message>
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D.png.sha1
deleted file mode 100644
index 5a5f6e9..0000000
--- a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-80d5addb17f02b7245578209c7f47db87d93fc11
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E.png.sha1
deleted file mode 100644
index 3933086..0000000
--- a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-214e8f45133f598aa0e41242e54b195c793e2cd1
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd
index 5d88a0f..40dad38b 100644
--- a/ios/chrome/app/strings/ios_google_chrome_strings.grd
+++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -309,12 +309,6 @@
       <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE" desc="Title of the screen suggesting to the user to sign in. [iOS only]">
         Make Chrome Your Own
       </message>
-      <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D" desc="This string appears as a heading on a full-page screen that tells users the benefits of signing in to Chrome. It appears when the user launches Chrome for the first time. The tone should be inviting and alluring. [CHAR_LIMIT=35][iOS only]">
-        Do More with Chrome
-      </message>
-      <message name="IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E" desc="This string appears as a heading on a full-page screen that welcomes users to Chrome. It appears when the user launches Chrome for the first time. The tone should be inviting and motivating. [CHAR_LIMIT=35][iOS only]">
-        Welcome to Chrome
-      </message>
       <message name="IDS_IOS_FIRST_RUN_UMA_DIALOG_CHECKBOX" desc="Checkbox to accept the metrics reporting consent. Related to IDS_IOS_FIRST_RUN_UMA_DIALOG_EXPLANATION and IDS_IOS_FIRST_RUN_UMA_DIALOG_TITLE. [iOS only]">
         Help Improve Chrome's Features and Performance
         </message>
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D.png.sha1
deleted file mode 100644
index ac73ea2..0000000
--- a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ba86472cb061983003bb74b15b95ef45976e9591
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E.png.sha1
deleted file mode 100644
index ad0913f..0000000
--- a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b21c8e8a4d9cc96663702b06b401b3f007e26074
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index ba49f294..802f895 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -3483,21 +3483,12 @@
       <message name="IDS_IOS_TANGIBLE_SYNC_DATA_TYPE_AUTOFILL" desc="This string appears as an item in a list of sync data types on a full-page screen that asks users if they want to turn on sync. Translate 'autofill' according to https://localization.google.com/glossary/termset?gid=27517723&amp;tsid=77d3626. [iOS only][CHAR_LIMIT=25]">
         Autofill
         </message>
-      <message name="IDS_IOS_TANGIBLE_SYNC_TITLE_SYNC" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. [iOS only][CHAR_LIMIT=20]">
-        Sync
-      </message>
       <message name="IDS_IOS_TANGIBLE_SYNC_TITLE_TURN_ON_SYNC" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. The tone should be informative and inviting. [iOS only][CHAR_LIMIT=35]">
         Turn On Sync
       </message>
       <message name="IDS_IOS_TANGIBLE_SYNC_SUBTITLE_BACK_UP" desc="This string appears as a subheading a full-page screen that asks users if they want to turn on sync. This string explains to users that they can back up their Chrome/Chromium data and use it on all their computers, phones, and other devices; a user's Chrome/Chromium data includes their bookmarks, passwords, history, settings, and more. The word 'stuff' can be translated as 'data' or similar if there is no natural translation of 'stuff'. Maintain the level of formality that your language generally uses in the Chrome/Chromium app. The tone should be informative and inviting. [iOS only][CHAR_LIMIT=100]">
         Back up your stuff and use it on any device.
       </message>
-      <message name="IDS_IOS_TANGIBLE_SYNC_SUBTITLE_SYNC" desc="This string appears as a subheading a full-page screen that asks users if they want to turn on sync. This string explains to users that they can get their Chrome data on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting. [iOS only][CHAR_LIMIT=100]">
-        Sync your data on all devices.
-      </message>
-      <message name="IDS_IOS_TANGIBLE_SYNC_TURN_ON_SYNC" desc="This string appears as the primary button on a full-page screen that asks users if they want to turn on sync. It appears when the user launches Chrome for the first time, after they have signed in. When the user chooses this button, they opt in to the sync feature. The tone should be straightforward. [CHAR_LIMIT=15][iOS only]">
-        Turn On
-      </message>
       <message name="IDS_IOS_TERMS_OF_SERVICE" desc="The label to access the terms of service, displayed in the application settings, with no product name. [Length: 30em] [iOS only]">
         Terms of Service
       </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_SUBTITLE_SYNC.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_SUBTITLE_SYNC.png.sha1
deleted file mode 100644
index 543aa0d2..0000000
--- a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_SUBTITLE_SYNC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e5dfc1e7e0a53214d28d7d13ad86f1b7211f7f1b
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_TITLE_SYNC.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_TITLE_SYNC.png.sha1
deleted file mode 100644
index 74d98aa..0000000
--- a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_TITLE_SYNC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-79378194e46093ad9c649d8ec82db0d166b82844
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_TURN_ON_SYNC.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_TURN_ON_SYNC.png.sha1
deleted file mode 100644
index 04357ba..0000000
--- a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_TANGIBLE_SYNC_TURN_ON_SYNC.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8cdf2e288aa5bf9d9ae11951d74e48de778ceb2f
\ No newline at end of file
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.mm b/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.mm
index e0f3c712..1a08155 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.mm
@@ -18,11 +18,6 @@
   NSMutableArray* screens = [NSMutableArray array];
   switch (fre_field_trial::GetNewMobileIdentityConsistencyFRE()) {
     case NewMobileIdentityConsistencyFRE::kTangibleSyncA:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncB:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncC:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncD:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncE:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncF:
       [screens addObject:@(kSignIn)];
       break;
     case NewMobileIdentityConsistencyFRE::kOld:
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm
index f6486b2..42c1536 100644
--- a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm
@@ -86,31 +86,6 @@
       subtitleStringID = IDS_IOS_TANGIBLE_SYNC_SUBTITLE_BACK_UP;
       _activateSyncButtonID = IDS_IOS_ACCOUNT_UNIFIED_CONSENT_OK_BUTTON;
       break;
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncB:
-      titleStringID = IDS_IOS_TANGIBLE_SYNC_TITLE_SYNC;
-      subtitleStringID = IDS_IOS_TANGIBLE_SYNC_SUBTITLE_BACK_UP;
-      _activateSyncButtonID = IDS_IOS_ACCOUNT_UNIFIED_CONSENT_OK_BUTTON;
-      break;
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncC:
-      titleStringID = IDS_IOS_TANGIBLE_SYNC_TITLE_TURN_ON_SYNC;
-      subtitleStringID = IDS_IOS_TANGIBLE_SYNC_SUBTITLE_SYNC;
-      _activateSyncButtonID = IDS_IOS_ACCOUNT_UNIFIED_CONSENT_OK_BUTTON;
-      break;
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncD:
-      titleStringID = IDS_IOS_TANGIBLE_SYNC_TITLE_TURN_ON_SYNC;
-      subtitleStringID = IDS_IOS_TANGIBLE_SYNC_SUBTITLE_BACK_UP;
-      _activateSyncButtonID = IDS_IOS_ACCOUNT_UNIFIED_CONSENT_OK_BUTTON;
-      break;
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncE:
-      titleStringID = IDS_IOS_TANGIBLE_SYNC_TITLE_TURN_ON_SYNC;
-      subtitleStringID = IDS_IOS_TANGIBLE_SYNC_SUBTITLE_BACK_UP;
-      _activateSyncButtonID = IDS_IOS_ACCOUNT_UNIFIED_CONSENT_OK_BUTTON;
-      break;
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncF:
-      titleStringID = IDS_IOS_TANGIBLE_SYNC_TITLE_TURN_ON_SYNC;
-      subtitleStringID = IDS_IOS_TANGIBLE_SYNC_SUBTITLE_BACK_UP;
-      _activateSyncButtonID = IDS_IOS_TANGIBLE_SYNC_TURN_ON_SYNC;
-      break;
     case NewMobileIdentityConsistencyFRE::kOld:
       NOTREACHED();
       break;
diff --git a/ios/chrome/browser/ui/first_run/first_run_screen_provider.mm b/ios/chrome/browser/ui/first_run/first_run_screen_provider.mm
index 492619c..4884d85 100644
--- a/ios/chrome/browser/ui/first_run/first_run_screen_provider.mm
+++ b/ios/chrome/browser/ui/first_run/first_run_screen_provider.mm
@@ -20,11 +20,6 @@
 
   switch (fre_field_trial::GetNewMobileIdentityConsistencyFRE()) {
     case NewMobileIdentityConsistencyFRE::kTangibleSyncA:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncB:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncC:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncD:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncE:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncF:
       [screens addObject:@(kSignIn)];
       [screens addObject:@(kTangibleSync)];
       break;
diff --git a/ios/chrome/browser/ui/first_run/fre_field_trial.h b/ios/chrome/browser/ui/first_run/fre_field_trial.h
index af3c126..23818c2 100644
--- a/ios/chrome/browser/ui/first_run/fre_field_trial.h
+++ b/ios/chrome/browser/ui/first_run/fre_field_trial.h
@@ -12,17 +12,8 @@
   // Strings in TangibleSyncViewController are set according to the A, B or C
   // variants.
   kTangibleSyncA = 0,
-  kTangibleSyncB,
-  kTangibleSyncC,
   // Old FRE.
   kOld,
-  // New MICE FRE with tangible sync (welcome with sign-in + tangible sync
-  // screens).
-  // Strings in TangibleSyncViewController are set according to the D, E or F
-  // variants.
-  kTangibleSyncD,
-  kTangibleSyncE,
-  kTangibleSyncF,
 };
 
 namespace fre_field_trial {
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm b/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm
index ffdf8c0..95356cd 100644
--- a/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm
+++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm
@@ -73,20 +73,9 @@
     case SigninScreenConsumerSigninStatusAvailable: {
       switch (fre_field_trial::GetNewMobileIdentityConsistencyFRE()) {
         case NewMobileIdentityConsistencyFRE::kTangibleSyncA:
-        case NewMobileIdentityConsistencyFRE::kTangibleSyncB:
-        case NewMobileIdentityConsistencyFRE::kTangibleSyncC:
-        case NewMobileIdentityConsistencyFRE::kTangibleSyncF:
           self.titleText =
               l10n_util::GetNSString(IDS_IOS_FIRST_RUN_SIGNIN_TITLE);
           break;
-        case NewMobileIdentityConsistencyFRE::kTangibleSyncD:
-          self.titleText = l10n_util::GetNSString(
-              IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_D);
-          break;
-        case NewMobileIdentityConsistencyFRE::kTangibleSyncE:
-          self.titleText = l10n_util::GetNSString(
-              IDS_IOS_FIRST_RUN_SIGNIN_TITLE_TANGIBLE_SYNC_E);
-          break;
         case NewMobileIdentityConsistencyFRE::kOld:
           NOTREACHED();
           break;
diff --git a/ios/chrome/browser/ui/first_run/welcome/tos_coordinator.mm b/ios/chrome/browser/ui/first_run/welcome/tos_coordinator.mm
index 845cc1fb..a7f7f15 100644
--- a/ios/chrome/browser/ui/first_run/welcome/tos_coordinator.mm
+++ b/ios/chrome/browser/ui/first_run/welcome/tos_coordinator.mm
@@ -64,12 +64,7 @@
 - (WKWebView*)newWebViewDisplayingTOS {
   NSURL* TOSURL = nil;
   switch (fre_field_trial::GetNewMobileIdentityConsistencyFRE()) {
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncA:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncB:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncC:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncD:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncE:
-    case NewMobileIdentityConsistencyFRE::kTangibleSyncF: {
+    case NewMobileIdentityConsistencyFRE::kTangibleSyncA: {
       TOSURL =
           net::NSURLWithGURL(GetUnifiedTermsOfServiceURL(/*embbeded=*/true));
       break;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_cell.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_cell.mm
index b2477f1..81d9282 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_cell.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_cell.mm
@@ -78,8 +78,6 @@
 - (void)setupSelectedBackgroundView {
   UIView* selectedBackgroundBorderView = [[UIView alloc] init];
   selectedBackgroundBorderView.translatesAutoresizingMaskIntoConstraints = NO;
-  selectedBackgroundBorderView.backgroundColor =
-      [UIColor colorNamed:kGridBackgroundColor];
   selectedBackgroundBorderView.layer.cornerRadius =
       kPinnedCellCornerRadius + kPinnedCellSelectionRingGapWidth +
       kPinnedCellSelectionRingTintWidth;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_constants.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_constants.mm
index 955a946..907edb7 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_constants.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_constants.mm
@@ -16,7 +16,7 @@
 // Pinned view constraints.
 const CGFloat kPinnedViewHorizontalPadding = 6.0f;
 const CGFloat kPinnedViewBottomPadding = 8.0f;
-const CGFloat kPinnedViewTopPadding = 24.0f;
+const CGFloat kPinnedViewTopPadding = 6.0f;
 const CGFloat kPinnedViewMaxWidthInPercent = 0.5f;
 
 // Pinned view animations.
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
index 8a586c2e..711c1e3f 100644
--- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-6d517d4f2fa9f6a627b2a5483d3a794c161c78da
\ No newline at end of file
+e7acc0032511c8d82dcdd796703a53f4a10226d0
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
index 65f39f1..2da2361 100644
--- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-a3a13c93fb5505e32ccaf33e8900be2a415defe7
\ No newline at end of file
+fa00f536a766050e3ae853af5f47b0d586154f8a
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1 b/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1
index 0aca43bd..55487723 100644
--- a/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1
+++ b/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1
@@ -1 +1 @@
-9a2519bd4af4e085afa809c39bf9867aee250f80
\ No newline at end of file
+d0df3b40444ffa67fd315c242b643bf9b9540ecb
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
index d13056a..ff0b9c5 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-76f46aa2754ebdf02d09f5164c31a200abc3dc1c
\ No newline at end of file
+18cc06065aa204ef33a1a3d1153ac2d10496a312
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
index 56a6c63..a6e4dcca 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-f074b2ba85c76775a05efda0197915e9321f0c3a
\ No newline at end of file
+0cc4aaf44ff38799f98e13ba9fe0813b3ba62b60
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
index 75c44c2..fc456fa 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-2effcc1b04813c09bc8088e541b601d4cd7ff34b
\ No newline at end of file
+071eba01aa04ec41e6f9f86fb9c9ab010a765824
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
index 3c40f56..43d83bc 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-db5997b6c4f94f34db78d8d50f6ec4f76d064545
\ No newline at end of file
+c9c8a0d526ed41478f8253fd4e02cf155a17ac0b
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
index 1726a6f..eae093d 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-a85384fa2def594e3977b45ddcf31a078434070a
\ No newline at end of file
+5b9a88e517f58b1bb8981b45dc21fdaa53f4c1bf
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
index 162a3b9..f8c2413 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-e23fa67af176babf6426cba03d2b8852afc22e53
\ No newline at end of file
+5e5a2bc09c5b7a660302f3e1975a4cf2eecb1c6f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
index 67946bc..20b9c54e 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-5ea59f91d9e1b4069019e62b4e1a20a7feb967af
\ No newline at end of file
+5e188e1113cde7ff6ae26ed1a695ea32dc23e472
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
index d4ae02d..90299b3d 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-e5a5fc2d9535acca533bfb98f3e78d6d2521a93b
\ No newline at end of file
+d19697f81d2a675d6dcc39cced16c36fc00987e1
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
index f5a88c7..891ea613 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-5fc79db478cba0bd1d029c41d8226eea838609b9
\ No newline at end of file
+c3586220b585dce4edae3bd64370d6d37890eb2f
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
index 5b6356fc..8007f9a 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-910268e6049939271c1806ea1645e34772b3b92c
\ No newline at end of file
+a890797dcc5875589bf828ce4a27dec64fb2d658
\ No newline at end of file
diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn
index 855b1e0..7902107 100644
--- a/media/audio/BUILD.gn
+++ b/media/audio/BUILD.gn
@@ -431,6 +431,7 @@
       "mac/audio_auhal_mac_unittest.cc",
       "mac/audio_device_listener_mac_unittest.cc",
       "mac/audio_low_latency_input_mac_unittest.cc",
+      "mac/audio_manager_mac_unittest.cc",
     ]
   }
 
diff --git a/media/audio/audio_features.cc b/media/audio/audio_features.cc
index d6235fa..9bca58ee 100644
--- a/media/audio/audio_features.cc
+++ b/media/audio/audio_features.cc
@@ -23,48 +23,6 @@
              base::FEATURE_ENABLED_BY_DEFAULT);
 #endif
 
-#if BUILDFLAG(IS_CHROMEOS)
-BASE_FEATURE(kCrOSSystemAEC,
-             "CrOSSystemAECWithBoardTuningsAllowed",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSSystemAECDeactivatedGroups,
-             "CrOSSystemAECDeactivatedGroups",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSEnforceSystemAecNsAgc,
-             "CrOSEnforceSystemAecNsAgc",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSEnforceSystemAecNs,
-             "CrOSEnforceSystemAecNs",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSEnforceSystemAecAgc,
-             "CrOSEnforceSystemAecAgc",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSEnforceSystemAec,
-             "CrOSEnforceSystemAec",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
-BASE_FEATURE(kCrOSDspBasedAecDeactivatedGroups,
-             "CrOSDspBasedAecDeactivatedGroups",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSDspBasedNsDeactivatedGroups,
-             "CrOSDspBasedNsDeactivatedGroups",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSDspBasedAgcDeactivatedGroups,
-             "CrOSDspBasedAgcDeactivatedGroups",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
-BASE_FEATURE(kCrOSDspBasedAecAllowed,
-             "CrOSDspBasedAecAllowed",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSDspBasedNsAllowed,
-             "CrOSDspBasedNsAllowed",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-BASE_FEATURE(kCrOSDspBasedAgcAllowed,
-             "CrOSDspBasedAgcAllowed",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
-#endif
-
 #if BUILDFLAG(IS_WIN)
 BASE_FEATURE(kAllowIAudioClient3,
              "AllowIAudioClient3",
diff --git a/media/audio/audio_features.h b/media/audio/audio_features.h
index dadc996..97d6fa2 100644
--- a/media/audio/audio_features.h
+++ b/media/audio/audio_features.h
@@ -18,21 +18,6 @@
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseAAudioDriver);
 #endif
 
-#if BUILDFLAG(IS_CHROMEOS)
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSSystemAEC);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSSystemAECDeactivatedGroups);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAecNsAgc);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAecNs);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAecAgc);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAec);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAecDeactivatedGroups);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedNsDeactivatedGroups);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAgcDeactivatedGroups);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAecAllowed);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedNsAllowed);
-MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAgcAllowed);
-#endif
-
 #if BUILDFLAG(IS_WIN)
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kAllowIAudioClient3);
 #endif
diff --git a/media/audio/cras/audio_manager_cras.cc b/media/audio/cras/audio_manager_cras.cc
index aaccd6f..2b3ef7c 100644
--- a/media/audio/cras/audio_manager_cras.cc
+++ b/media/audio/cras/audio_manager_cras.cc
@@ -20,10 +20,10 @@
 #include "base/system/sys_info.h"
 #include "base/task/single_thread_task_runner.h"
 #include "media/audio/audio_device_description.h"
-#include "media/audio/audio_features.h"
 #include "media/audio/cras/cras_input.h"
 #include "media/audio/cras/cras_unified.h"
 #include "media/audio/cras/cras_util.h"
+#include "media/base/media_switches.h"
 #include "media/base/channel_layout.h"
 #include "media/base/limits.h"
 #include "media/base/localized_strings.h"
@@ -87,7 +87,7 @@
 // by the field trial.
 bool IsSystemAecDeactivated(int aec_group_id) {
   return base::GetFieldTrialParamByFeatureAsBool(
-      features::kCrOSSystemAECDeactivatedGroups,
+      media::kCrOSSystemAECDeactivatedGroups,
       base::NumberToString(aec_group_id), false);
 }
 
@@ -95,27 +95,27 @@
 // allow using DSP-based AEC effect.
 bool IsDspBasedAecDeactivated(int aec_group_id) {
   return base::GetFieldTrialParamByFeatureAsBool(
-             features::kCrOSDspBasedAecDeactivatedGroups,
+             media::kCrOSDspBasedAecDeactivatedGroups,
              base::NumberToString(aec_group_id), false) ||
-         !base::FeatureList::IsEnabled(features::kCrOSDspBasedAecAllowed);
+         !base::FeatureList::IsEnabled(media::kCrOSDspBasedAecAllowed);
 }
 
 // Checks if the board with `aec_group_id` is flagged by the field trial to not
 // allow using DSP-based NS effect.
 bool IsDspBasedNsDeactivated(int aec_group_id) {
   return base::GetFieldTrialParamByFeatureAsBool(
-             features::kCrOSDspBasedNsDeactivatedGroups,
+             media::kCrOSDspBasedNsDeactivatedGroups,
              base::NumberToString(aec_group_id), false) ||
-         !base::FeatureList::IsEnabled(features::kCrOSDspBasedNsAllowed);
+         !base::FeatureList::IsEnabled(media::kCrOSDspBasedNsAllowed);
 }
 
 // Checks if the board with `aec_group_id` is flagged by the field trial to not
 // allow using DSP-based AGC effect.
 bool IsDspBasedAgcDeactivated(int aec_group_id) {
   return base::GetFieldTrialParamByFeatureAsBool(
-             features::kCrOSDspBasedAgcDeactivatedGroups,
+             media::kCrOSDspBasedAgcDeactivatedGroups,
              base::NumberToString(aec_group_id), false) ||
-         !base::FeatureList::IsEnabled(features::kCrOSDspBasedAgcAllowed);
+         !base::FeatureList::IsEnabled(media::kCrOSDspBasedAgcAllowed);
 }
 
 // Specifies which DSP-based effects are allowed based on media constraints and
@@ -161,13 +161,13 @@
                                   bool& enforce_system_agc,
                                   bool& tuned_system_aec_allowed) {
   const bool enforce_system_aec_ns_agc_feature =
-      base::FeatureList::IsEnabled(features::kCrOSEnforceSystemAecNsAgc);
+      base::FeatureList::IsEnabled(media::kCrOSEnforceSystemAecNsAgc);
   const bool enforce_system_aec_ns_feature =
-      base::FeatureList::IsEnabled(features::kCrOSEnforceSystemAecNs);
+      base::FeatureList::IsEnabled(media::kCrOSEnforceSystemAecNs);
   const bool enforce_system_aec_agc_feature =
-      base::FeatureList::IsEnabled(features::kCrOSEnforceSystemAecAgc);
+      base::FeatureList::IsEnabled(media::kCrOSEnforceSystemAecAgc);
   const bool enforce_system_aec_feature =
-      base::FeatureList::IsEnabled(features::kCrOSEnforceSystemAec);
+      base::FeatureList::IsEnabled(media::kCrOSEnforceSystemAec);
 
   enforce_system_aec =
       enforce_system_aec_feature || enforce_system_aec_ns_agc_feature ||
@@ -178,7 +178,7 @@
       enforce_system_aec_ns_agc_feature || enforce_system_aec_agc_feature;
 
   tuned_system_aec_allowed =
-      base::FeatureList::IsEnabled(features::kCrOSSystemAEC);
+      base::FeatureList::IsEnabled(media::kCrOSSystemAEC);
 }
 
 AudioParameters AudioManagerCras::GetStreamParametersForSystem(
diff --git a/media/audio/cras/audio_manager_cras_unittest.cc b/media/audio/cras/audio_manager_cras_unittest.cc
index 90344aa..f2b65bc 100644
--- a/media/audio/cras/audio_manager_cras_unittest.cc
+++ b/media/audio/cras/audio_manager_cras_unittest.cc
@@ -8,10 +8,10 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
-#include "media/audio/audio_features.h"
 #include "media/audio/cras/cras_util.h"
 #include "media/audio/fake_audio_log_factory.h"
 #include "media/audio/test_audio_thread.h"
+#include "media/base/media_switches.h"
 #include "media/base/limits.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -449,7 +449,7 @@
 
 TEST_P(AudioManagerCrasTestAEC, BehaviorWithCrOSEnforceSystemAecDisallowed) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndDisableFeature(features::kCrOSSystemAEC);
+  feature_list.InitAndDisableFeature(media::kCrOSSystemAEC);
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
   EXPECT_TRUE(ExperimentalAecActive(params));
@@ -460,7 +460,7 @@
 
 TEST_P(AudioManagerCrasTestAEC, BehaviorWithCrOSEnforceSystemAecNsAgc) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(features::kCrOSEnforceSystemAecNsAgc);
+  feature_list.InitAndEnableFeature(media::kCrOSEnforceSystemAecNsAgc);
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
   auto aec_supported = std::get<0>(GetParam());
@@ -479,8 +479,8 @@
 TEST_P(AudioManagerCrasTestAEC, BehaviorWithCrOSEnforceSystemAecNsAndAecAgc) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitWithFeaturesAndParameters(
-      {{features::kCrOSEnforceSystemAecNs, {}},
-       {features::kCrOSEnforceSystemAecAgc, {}}},
+      {{media::kCrOSEnforceSystemAecNs, {}},
+       {media::kCrOSEnforceSystemAecAgc, {}}},
       {});
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
@@ -501,8 +501,8 @@
        BehaviorWithCrOSEnforceSystemAecNsAgcAndDisallowedSystemAec) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitWithFeaturesAndParameters(
-      {{features::kCrOSEnforceSystemAecNsAgc, {}}},
-      {{features::kCrOSSystemAEC}});
+      {{media::kCrOSEnforceSystemAecNsAgc, {}}},
+      {{media::kCrOSSystemAEC}});
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
   auto aec_supported = std::get<0>(GetParam());
@@ -529,21 +529,21 @@
     agc_on_dsp_allowed_ = std::get<2>(GetParam());
 
     if (aec_on_dsp_allowed_) {
-      enabled_features_.emplace_back(features::kCrOSDspBasedAecAllowed);
+      enabled_features_.emplace_back(media::kCrOSDspBasedAecAllowed);
     } else {
-      disabled_features_.emplace_back(features::kCrOSDspBasedAecAllowed);
+      disabled_features_.emplace_back(media::kCrOSDspBasedAecAllowed);
     }
 
     if (ns_on_dsp_allowed_) {
-      enabled_features_.emplace_back(features::kCrOSDspBasedNsAllowed);
+      enabled_features_.emplace_back(media::kCrOSDspBasedNsAllowed);
     } else {
-      disabled_features_.emplace_back(features::kCrOSDspBasedNsAllowed);
+      disabled_features_.emplace_back(media::kCrOSDspBasedNsAllowed);
     }
 
     if (agc_on_dsp_allowed_) {
-      enabled_features_.emplace_back(features::kCrOSDspBasedAgcAllowed);
+      enabled_features_.emplace_back(media::kCrOSDspBasedAgcAllowed);
     } else {
-      disabled_features_.emplace_back(features::kCrOSDspBasedAgcAllowed);
+      disabled_features_.emplace_back(media::kCrOSDspBasedAgcAllowed);
     }
 
     EXPECT_CALL(*util, CrasGetAecSupported()).WillOnce(testing::Return(false));
@@ -576,7 +576,7 @@
 
 TEST_P(AudioManagerCrasTestDSP, BehaviorWithCrOSEnforceSystemAec) {
   base::test::ScopedFeatureList feature_list;
-  enabled_features_.emplace_back(features::kCrOSEnforceSystemAec);
+  enabled_features_.emplace_back(media::kCrOSEnforceSystemAec);
   feature_list.InitWithFeatures(enabled_features_, disabled_features_);
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
@@ -590,7 +590,7 @@
 
 TEST_P(AudioManagerCrasTestDSP, BehaviorWithCrOSEnforceSystemAecNs) {
   base::test::ScopedFeatureList feature_list;
-  enabled_features_.emplace_back(features::kCrOSEnforceSystemAecNs);
+  enabled_features_.emplace_back(media::kCrOSEnforceSystemAecNs);
   feature_list.InitWithFeatures(enabled_features_, disabled_features_);
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
@@ -604,7 +604,7 @@
 
 TEST_P(AudioManagerCrasTestDSP, BehaviorWithCrOSEnforceSystemAecAgc) {
   base::test::ScopedFeatureList feature_list;
-  enabled_features_.emplace_back(features::kCrOSEnforceSystemAecAgc);
+  enabled_features_.emplace_back(media::kCrOSEnforceSystemAecAgc);
   feature_list.InitWithFeatures(enabled_features_, disabled_features_);
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
@@ -618,7 +618,7 @@
 
 TEST_P(AudioManagerCrasTestDSP, BehaviorWithCrOSEnforceSystemAecNsAgc) {
   base::test::ScopedFeatureList feature_list;
-  enabled_features_.emplace_back(features::kCrOSEnforceSystemAecNsAgc);
+  enabled_features_.emplace_back(media::kCrOSEnforceSystemAecNsAgc);
   feature_list.InitWithFeatures(enabled_features_, disabled_features_);
   AudioParameters params = audio_manager_->GetInputStreamParameters("");
 
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc
index b8e7c10..2cd163b 100644
--- a/media/audio/mac/audio_manager_mac.cc
+++ b/media/audio/mac/audio_manager_mac.cc
@@ -19,6 +19,7 @@
 #include "base/power_monitor/power_monitor.h"
 #include "base/power_monitor/power_observer.h"
 #include "base/ranges/algorithm.h"
+#include "base/strings/string_split.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
@@ -551,6 +552,86 @@
   AudioManagerBase::ShutdownOnAudioThread();
 }
 
+std::vector<AudioObjectID> AudioManagerMac::GetAllAudioDeviceIDs() {
+  DCHECK(AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
+  return core_audio_mac::GetAllAudioDeviceIDs();
+}
+
+std::vector<AudioObjectID> AudioManagerMac::GetRelatedNonBluetoothDeviceIDs(
+    AudioObjectID device_id) {
+  DCHECK(AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
+  return core_audio_mac::GetRelatedDeviceIDs(device_id);
+}
+
+std::vector<AudioObjectID> AudioManagerMac::GetRelatedBluetoothDeviceIDs(
+    AudioObjectID device_id) {
+  DCHECK(AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
+  std::vector<AudioObjectID> result_ids;
+
+  // Get unique ID of input device which would be used to match with unique IDs
+  // of all other devices.
+  absl::optional<std::string> input_unique_id = GetDeviceUniqueID(device_id);
+  if (!input_unique_id) {
+    return result_ids;
+  }
+
+  // Get the base name from the unique ID by removing :input/:output from it.
+  // A bluetooth audio input device uniqueID is of the format
+  // "F3-A2-14-A9-1D-F8:input", while the corresponding output device uniqueID
+  // is of the format "F3-A2-14-A9-1D-F8:output".
+  std::vector<std::string> trimmed_input_vector =
+      SplitString(input_unique_id.value(), ":", base::TRIM_WHITESPACE,
+                  base::SPLIT_WANT_NONEMPTY);
+  if (trimmed_input_vector.empty()) {
+    return result_ids;
+  }
+  std::string& trimmed_input_unique_id = trimmed_input_vector[0];
+
+  // Iterate through all device IDs and match the unique IDs base to find the
+  // related devices.
+  for (const auto& id : GetAllAudioDeviceIDs()) {
+    absl::optional<std::string> unique_id = GetDeviceUniqueID(id);
+    if (!unique_id) {
+      continue;
+    }
+
+    std::vector<std::string> trimmed_vector =
+        SplitString(unique_id.value(), ":", base::TRIM_WHITESPACE,
+                    base::SPLIT_WANT_NONEMPTY);
+    if (trimmed_vector.empty()) {
+      continue;
+    }
+
+    std::string& trimmed_id = trimmed_vector[0];
+    if (trimmed_id == trimmed_input_unique_id) {
+      result_ids.push_back(id);
+    }
+  }
+  return result_ids;
+}
+
+std::vector<AudioObjectID> AudioManagerMac::GetRelatedDeviceIDs(
+    AudioObjectID device_id) {
+  DCHECK(AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
+  absl::optional<uint32_t> transport_type = GetDeviceTransportType(device_id);
+  if (transport_type && *transport_type == kAudioDeviceTransportTypeBluetooth) {
+    return GetRelatedBluetoothDeviceIDs(device_id);
+  }
+  return GetRelatedNonBluetoothDeviceIDs(device_id);
+}
+
+absl::optional<std::string> AudioManagerMac::GetDeviceUniqueID(
+    AudioObjectID device_id) {
+  DCHECK(AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
+  return core_audio_mac::GetDeviceUniqueID(device_id);
+}
+
+absl::optional<uint32_t> AudioManagerMac::GetDeviceTransportType(
+    AudioObjectID device_id) {
+  DCHECK(AudioManager::Get()->GetTaskRunner()->BelongsToCurrentThread());
+  return core_audio_mac::GetDeviceTransportType(device_id);
+}
+
 bool AudioManagerMac::HasAudioOutputDevices() {
   return HasAudioHardware(kAudioHardwarePropertyDefaultOutputDevice);
 }
@@ -654,8 +735,7 @@
   // cancellation or mono with echo cancellation.
   if ((params.channel_layout() == CHANNEL_LAYOUT_MONO ||
        params.channel_layout() == CHANNEL_LAYOUT_STEREO) &&
-      core_audio_mac::GetDeviceTransportType(device) !=
-          kAudioDeviceTransportTypeAggregate) {
+      GetDeviceTransportType(device) != kAudioDeviceTransportTypeAggregate) {
     params.set_effects(params.effects() |
                        AudioParameters::EXPERIMENTAL_ECHO_CANCELLER);
   }
@@ -672,7 +752,7 @@
     return std::string();
 
   std::vector<AudioObjectID> related_device_ids =
-      core_audio_mac::GetRelatedDeviceIDs(input_device_id);
+      GetRelatedDeviceIDs(input_device_id);
 
   // Defined as a set as device IDs might be duplicated in
   // GetRelatedDeviceIDs().
@@ -688,7 +768,7 @@
   // to an endpoint, so we cannot randomly pick a device.
   if (related_output_device_ids.size() == 1) {
     absl::optional<std::string> related_unique_id =
-        core_audio_mac::GetDeviceUniqueID(*related_output_device_ids.begin());
+        GetDeviceUniqueID(*related_output_device_ids.begin());
     if (related_unique_id)
       return std::move(*related_unique_id);
   }
diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h
index c562ad5b..8519b59 100644
--- a/media/audio/mac/audio_manager_mac.h
+++ b/media/audio/mac/audio_manager_mac.h
@@ -85,6 +85,11 @@
   static AudioDeviceID GetAudioDeviceIdByUId(bool is_input,
                                              const std::string& device_id);
 
+  // Returns a vector with the IDs of all devices related to the given
+  // |device_id|. The vector is empty if there are no related devices or
+  // if there is an error.
+  std::vector<AudioObjectID> GetRelatedDeviceIDs(AudioObjectID device_id);
+
   // OSX has issues with starting streams as the system goes into suspend and
   // immediately after it wakes up from resume.  See http://crbug.com/160920.
   // As a workaround we delay Start() when it occurs after suspend and for a
@@ -154,6 +159,34 @@
   AudioParameters GetPreferredOutputStreamParameters(
       const std::string& output_device_id,
       const AudioParameters& input_params) override;
+
+  // Returns a vector with the IDs of all bluetooth devices related to the given
+  // |device_id|, which is also a bluetooth device. The vector is empty if there
+  // are no related devices or if there is an error.
+  std::vector<AudioObjectID> GetRelatedBluetoothDeviceIDs(
+      AudioObjectID device_id);
+
+  // Virtual for testing.
+
+  // Returns a vector with the IDs of all audio devices in the system.
+  // The vector is empty if there are no devices or if there is an error.
+  virtual std::vector<AudioObjectID> GetAllAudioDeviceIDs();
+
+  // Returns a vector with the IDs of all non-bluetooth devices related to the
+  // given |device_id|, which is also a non-bluetooth device. The vector is
+  // empty if there are no related devices or if there is an error.
+  virtual std::vector<AudioObjectID> GetRelatedNonBluetoothDeviceIDs(
+      AudioObjectID device_id);
+
+  // Returns a string with a unique device ID for the given |device_id|, or no
+  // value if there is an error.
+  virtual absl::optional<std::string> GetDeviceUniqueID(
+      AudioObjectID device_id);
+
+  // Returns the transport type of the given |device_id|, or no value if
+  // |device_id| has no source or if there is an error.
+  virtual absl::optional<uint32_t> GetDeviceTransportType(
+      AudioObjectID device_id);
   void ShutdownOnAudioThread() override;
 
  private:
diff --git a/media/audio/mac/audio_manager_mac_unittest.cc b/media/audio/mac/audio_manager_mac_unittest.cc
new file mode 100644
index 0000000..935d566
--- /dev/null
+++ b/media/audio/mac/audio_manager_mac_unittest.cc
@@ -0,0 +1,150 @@
+// 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 "media/audio/mac/audio_manager_mac.h"
+
+#include "base/run_loop.h"
+#include "base/test/test_message_loop.h"
+#include "media/audio/audio_unittest_util.h"
+#include "media/audio/fake_audio_log_factory.h"
+#include "media/audio/fake_audio_manager.h"
+#include "media/audio/test_audio_thread.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+using testing::Return;
+
+namespace media {
+// This class is used to mock audio devices and test their behavior in
+// AudioManagerMac.
+class AudioManagerMacUnderTest final : public AudioManagerMac {
+ public:
+  AudioManagerMacUnderTest(std::unique_ptr<AudioThread> audio_thread,
+                           AudioLogFactory* audio_log_factory)
+      : AudioManagerMac(std::move(audio_thread), audio_log_factory) {}
+
+  MOCK_METHOD0(GetAllAudioDeviceIDs, std::vector<AudioObjectID>());
+  MOCK_METHOD1(GetDeviceTransportType, absl::optional<uint32_t>(AudioObjectID));
+  MOCK_METHOD1(GetDeviceUniqueID, absl::optional<std::string>(AudioObjectID));
+  MOCK_METHOD1(GetRelatedNonBluetoothDeviceIDs,
+               std::vector<AudioObjectID>(AudioObjectID));
+};
+
+class AudioManagerMacTest : public ::testing::Test {
+ protected:
+  AudioManagerMacTest() : message_loop_(base::MessagePumpType::IO) {
+    audio_manager_ = std::make_unique<AudioManagerMacUnderTest>(
+        std::make_unique<TestAudioThread>(), &fake_audio_log_factory_);
+    base::RunLoop().RunUntilIdle();
+  }
+  ~AudioManagerMacTest() override { audio_manager_->Shutdown(); }
+
+  base::TestMessageLoop message_loop_;
+  FakeAudioLogFactory fake_audio_log_factory_;
+  std::unique_ptr<AudioManagerMacUnderTest> audio_manager_;
+};
+
+// This creates a test which mocks the following input and output bluetooth
+// device. The device configuration is as follows:
+// Input: DeviceID: 1, uniqueID: "F3-A2-14-A9-1D-F8:input"
+// Output: DeviceID: 2, uniqueID: "F3-A2-14-A9-1D-F8:output"
+TEST_F(AudioManagerMacTest, SameGroupIdForBluetoothInputAndOutputDevice) {
+  AudioManagerMacUnderTest& audio_manager_mock = *audio_manager_.get();
+  EXPECT_CALL(audio_manager_mock, GetAllAudioDeviceIDs())
+      .WillRepeatedly(Return(std::vector<AudioObjectID>{1, 2}));
+  // DeviceID: 1
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/1))
+      .WillRepeatedly(Return(kAudioDeviceTransportTypeBluetooth));
+  EXPECT_CALL(audio_manager_mock, GetDeviceUniqueID(/*device_id=*/1))
+      .WillRepeatedly(Return("F3-A2-14-A9-1D-F8:input"));
+  // DeviceID: 2
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/2))
+      .WillRepeatedly(Return(kAudioDeviceTransportTypeBluetooth));
+  EXPECT_CALL(audio_manager_mock, GetDeviceUniqueID(/*device_id=*/2))
+      .WillRepeatedly(Return("F3-A2-14-A9-1D-F8:output"));
+
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/1),
+            std::vector<AudioObjectID>({1, 2}));
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/2),
+            std::vector<AudioObjectID>({1, 2}));
+}
+
+// This creates a test which mocks 2 related built-in audio devices.
+TEST_F(AudioManagerMacTest, SameGroupIdForNonBluetoothInputAndOutputDevice) {
+  AudioManagerMacUnderTest& audio_manager_mock = *audio_manager_.get();
+  // DeviceID: 1
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/1))
+      .WillRepeatedly(Return(kAudioDeviceTransportTypeBuiltIn));
+  EXPECT_CALL(audio_manager_mock,
+              GetRelatedNonBluetoothDeviceIDs(/*device_id=*/1))
+      .WillRepeatedly(Return(std::vector<AudioObjectID>{1, 2}));
+
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/1),
+            std::vector<AudioObjectID>({1, 2}));
+}
+
+// This creates a test which mocks the following unrelated input and output
+// bluetooth device. The device configuration is as follows:
+// Input: DeviceID: 1, uniqueID: "A3-C2-E3-19-D3-81:input"
+// Output: DeviceID: 2, uniqueID: "F3-A2-14-A9-1D-F8:output"
+TEST_F(AudioManagerMacTest,
+       DifferentGroupIdForDifferentBluetoothInputAndOutputDevice) {
+  AudioManagerMacUnderTest& audio_manager_mock = *audio_manager_.get();
+  EXPECT_CALL(audio_manager_mock, GetAllAudioDeviceIDs())
+      .WillRepeatedly(Return(std::vector<AudioObjectID>{1, 2}));
+  // DeviceID: 1
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/1))
+      .WillRepeatedly(Return(kAudioDeviceTransportTypeBluetooth));
+  EXPECT_CALL(audio_manager_mock, GetDeviceUniqueID(/*device_id=*/1))
+      .WillRepeatedly(Return("A3-C2-E3-19-D3-81:input"));
+  // DeviceID: 2
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/2))
+      .WillRepeatedly(Return(kAudioDeviceTransportTypeBluetooth));
+  EXPECT_CALL(audio_manager_mock, GetDeviceUniqueID(/*device_id=*/2))
+      .WillRepeatedly(Return("F3-A2-14-A9-1D-F8:output"));
+
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/1),
+            std::vector<AudioObjectID>{1});
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/2),
+            std::vector<AudioObjectID>{2});
+}
+
+// This creates a test which mocks the following unrelated input and output
+// devices. The device configuration is as follows:
+// Input: DeviceID: 1, uniqueID: "A3-C2-E3-19-D3-81:input"
+// Input: DeviceID: 2, uniqueID: "default_input_device"
+// Output: DeviceID: 3, uniqueID: "inbuilt_output_device"
+TEST_F(AudioManagerMacTest, DifferentGroupIdForDifferentInputAndOutputDevices) {
+  AudioManagerMacUnderTest& audio_manager_mock = *audio_manager_.get();
+  EXPECT_CALL(audio_manager_mock, GetAllAudioDeviceIDs())
+      .WillRepeatedly(Return(std::vector<AudioObjectID>{1, 2, 3}));
+  // DeviceID: 1
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/1))
+      .WillRepeatedly(Return(kAudioDeviceTransportTypeBluetooth));
+  EXPECT_CALL(audio_manager_mock, GetDeviceUniqueID(/*device_id=*/1))
+      .WillRepeatedly(Return("A3-C2-E3-19-D3-81:input"));
+  // DeviceID: 2
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/2))
+      .WillRepeatedly(Return(kAudioDeviceTransportTypeBuiltIn));
+  EXPECT_CALL(audio_manager_mock, GetDeviceUniqueID(/*device_id=*/2))
+      .WillRepeatedly(Return("default_input_device"));
+  EXPECT_CALL(audio_manager_mock,
+              GetRelatedNonBluetoothDeviceIDs(/*device_id=*/2))
+      .WillRepeatedly(Return(std::vector<AudioObjectID>{2}));
+  // DeviceID: 3
+  EXPECT_CALL(audio_manager_mock, GetDeviceTransportType(/*device_id=*/3))
+      .WillRepeatedly(Return(absl::nullopt));
+  EXPECT_CALL(audio_manager_mock, GetDeviceUniqueID(/*device_id=*/3))
+      .WillRepeatedly(Return("inbuilt_output_device"));
+  EXPECT_CALL(audio_manager_mock,
+              GetRelatedNonBluetoothDeviceIDs(/*device_id=*/3))
+      .WillRepeatedly(Return(std::vector<AudioObjectID>{3}));
+
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/1),
+            std::vector<AudioObjectID>{1});
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/2),
+            std::vector<AudioObjectID>{2});
+  EXPECT_EQ(audio_manager_->GetRelatedDeviceIDs(/*device_id=*/3),
+            std::vector<AudioObjectID>{3});
+}
+}  // namespace media
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index 6ba52a6f..9ce7e06 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -457,6 +457,48 @@
     &kChromeWideEchoCancellation, "allow_all_sample_rates", true};
 #endif
 
+#if BUILDFLAG(IS_CHROMEOS)
+// To control running audio communication effect on Chrome OS Audio Server.
+BASE_FEATURE(kCrOSSystemAEC,
+             "CrOSSystemAECWithBoardTuningsAllowed",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSSystemAECDeactivatedGroups,
+             "CrOSSystemAECDeactivatedGroups",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSEnforceSystemAecNsAgc,
+             "CrOSEnforceSystemAecNsAgc",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSEnforceSystemAecNs,
+             "CrOSEnforceSystemAecNs",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSEnforceSystemAecAgc,
+             "CrOSEnforceSystemAecAgc",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSEnforceSystemAec,
+             "CrOSEnforceSystemAec",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
+BASE_FEATURE(kCrOSDspBasedAecDeactivatedGroups,
+             "CrOSDspBasedAecDeactivatedGroups",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSDspBasedNsDeactivatedGroups,
+             "CrOSDspBasedNsDeactivatedGroups",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSDspBasedAgcDeactivatedGroups,
+             "CrOSDspBasedAgcDeactivatedGroups",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+
+BASE_FEATURE(kCrOSDspBasedAecAllowed,
+             "CrOSDspBasedAecAllowed",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSDspBasedNsAllowed,
+             "CrOSDspBasedNsAllowed",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+BASE_FEATURE(kCrOSDspBasedAgcAllowed,
+             "CrOSDspBasedAgcAllowed",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+#endif
+
 // Make MSE garbage collection algorithm more aggressive when we are under
 // moderate or critical memory pressure. This will relieve memory pressure by
 // releasing stale data from MSE buffers.
@@ -1309,6 +1351,14 @@
 
 bool IsChromeWideEchoCancellationEnabled() {
 #if BUILDFLAG(CHROME_WIDE_ECHO_CANCELLATION)
+#if BUILDFLAG(IS_CHROMEOS_DEVICE)
+  if (base::FeatureList::IsEnabled(kCrOSEnforceSystemAecNsAgc) ||
+      base::FeatureList::IsEnabled(kCrOSEnforceSystemAecNs) ||
+      base::FeatureList::IsEnabled(kCrOSEnforceSystemAecAgc) ||
+      base::FeatureList::IsEnabled(kCrOSEnforceSystemAec)) {
+    return false;
+  }
+#endif
   return base::FeatureList::IsEnabled(kChromeWideEchoCancellation);
 #else
   return false;
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
index e9a6f8f..bec11ca 100644
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -172,6 +172,20 @@
 MEDIA_EXPORT extern const base::FeatureParam<bool>
     kChromeWideEchoCancellationAllowAllSampleRates;
 #endif
+#if BUILDFLAG(IS_CHROMEOS)
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSSystemAEC);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSSystemAECDeactivatedGroups);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAecNsAgc);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAecNs);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAecAgc);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSEnforceSystemAec);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAecDeactivatedGroups);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedNsDeactivatedGroups);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAgcDeactivatedGroups);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAecAllowed);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedNsAllowed);
+MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSDspBasedAgcAllowed);
+#endif
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kD3D11VideoDecoderUseSharedHandle);
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kDedicatedMediaServiceThread);
 MEDIA_EXPORT BASE_DECLARE_FEATURE(kEnableTabMuting);
diff --git a/media/capture/video/mac/test/mock_video_capture_device_avfoundation_frame_receiver_mac.h b/media/capture/video/mac/test/mock_video_capture_device_avfoundation_frame_receiver_mac.h
index 12cac6ec..278fb73e 100644
--- a/media/capture/video/mac/test/mock_video_capture_device_avfoundation_frame_receiver_mac.h
+++ b/media/capture/video/mac/test/mock_video_capture_device_avfoundation_frame_receiver_mac.h
@@ -49,6 +49,8 @@
                const base::Location& from_here,
                const std::string& reason),
               (override));
+
+  MOCK_METHOD(void, ReceiveCaptureConfigurationChanged, (), (override));
 };
 
 }  // namespace media
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 30d238b..115bbf9 100644
--- a/media/capture/video/mac/video_capture_device_avfoundation_mac.h
+++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.h
@@ -58,6 +58,9 @@
   virtual void ReceiveError(VideoCaptureError error,
                             const base::Location& from_here,
                             const std::string& reason) = 0;
+
+  // Forwarder to VideoCaptureDevice::Client::OnCaptureConfigurationChanged().
+  virtual void ReceiveCaptureConfigurationChanged() = 0;
 };
 
 // When this feature is enabled, the capturer can be configured using
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 e852ae5..3f2ea0d5 100644
--- a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
+++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
@@ -243,6 +243,9 @@
     [self stopPhotoOutput];
     if (_captureDeviceInput) {
       DCHECK(_captureDevice);
+      if (@available(macOS 12.0, *)) {
+        [_captureDevice removeObserver:self forKeyPath:@"portraitEffectActive"];
+      }
       [_captureSession stopRunning];
       [_captureSession removeInput:_captureDeviceInput];
       _captureDeviceInput.reset();
@@ -287,6 +290,13 @@
   [_captureVideoDataOutput setSampleBufferDelegate:self queue:_sampleQueue];
   [_captureSession addOutput:_captureVideoDataOutput];
 
+  if (@available(macOS 12.0, *)) {
+    [_captureDevice addObserver:self
+                     forKeyPath:@"portraitEffectActive"
+                        options:0
+                        context:_captureDevice.get()];
+  }
+
   return YES;
 }
 
@@ -1154,7 +1164,12 @@
 
 - (void)setIsPortraitEffectActiveForTesting:
     (bool)isPortraitEffectActiveForTesting {
+  if (_isPortraitEffectActiveForTesting.has_value() &&
+      _isPortraitEffectActiveForTesting == isPortraitEffectActiveForTesting) {
+    return;
+  }
   _isPortraitEffectActiveForTesting = isPortraitEffectActiveForTesting;
+  [self captureConfigurationChanged];
 }
 
 - (bool)isPortraitEffectActive {
@@ -1168,6 +1183,24 @@
   return false;
 }
 
+- (void)observeValueForKeyPath:(NSString*)keyPath
+                      ofObject:(id)object
+                        change:(NSDictionary*)change
+                       context:(void*)context {
+  if (@available(macOS 12.0, *)) {
+    if ([keyPath isEqual:@"portraitEffectActive"]) {
+      [self captureConfigurationChanged];
+    }
+  }
+}
+
+- (void)captureConfigurationChanged {
+  base::AutoLock lock(_lock);
+  if (_frameReceiver) {
+    _frameReceiver->ReceiveCaptureConfigurationChanged();
+  }
+}
+
 - (void)onVideoError:(NSNotification*)errorNotification {
   NSError* error = base::mac::ObjCCast<NSError>(
       [errorNotification userInfo][AVCaptureSessionErrorKey]);
diff --git a/media/capture/video/mac/video_capture_device_mac.h b/media/capture/video/mac/video_capture_device_mac.h
index 5f57073..8d025bd 100644
--- a/media/capture/video/mac/video_capture_device_mac.h
+++ b/media/capture/video/mac/video_capture_device_mac.h
@@ -96,6 +96,7 @@
   void ReceiveError(VideoCaptureError error,
                     const base::Location& from_here,
                     const std::string& reason) override;
+  void ReceiveCaptureConfigurationChanged() override;
 
   // Forwarder to VideoCaptureDevice::Client::OnLog().
   void LogMessage(const std::string& message);
@@ -115,6 +116,7 @@
                      const base::Location& from_here,
                      const std::string& reason);
   bool UpdateCaptureResolution();
+  void OnCaptureConfigurationChanged();
 
   // Flag indicating the internal state.
   enum InternalState { kNotInitialized, kIdle, kCapturing, kError };
diff --git a/media/capture/video/mac/video_capture_device_mac.mm b/media/capture/video/mac/video_capture_device_mac.mm
index d6c3dd6..3667d9a5 100644
--- a/media/capture/video/mac/video_capture_device_mac.mm
+++ b/media/capture/video/mac/video_capture_device_mac.mm
@@ -887,6 +887,20 @@
     client_->OnLog(message);
 }
 
+void VideoCaptureDeviceMac::ReceiveCaptureConfigurationChanged() {
+  task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(&VideoCaptureDeviceMac::OnCaptureConfigurationChanged,
+                     weak_factory_.GetWeakPtr()));
+}
+
+void VideoCaptureDeviceMac::OnCaptureConfigurationChanged() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (client_) {
+    client_->OnCaptureConfigurationChanged();
+  }
+}
+
 void VideoCaptureDeviceMac::SetIsPortraitEffectSupportedForTesting(
     bool isPortraitEffectSupported) {
   [capture_device_
diff --git a/media/capture/video/mac/video_capture_device_mac_unittest.mm b/media/capture/video/mac/video_capture_device_mac_unittest.mm
index 4be5d7d..9ca6a24 100644
--- a/media/capture/video/mac/video_capture_device_mac_unittest.mm
+++ b/media/capture/video/mac/video_capture_device_mac_unittest.mm
@@ -12,7 +12,9 @@
 
 #include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_nsobject.h"
+#import "base/run_loop.h"
 #include "base/test/bind.h"
+#include "base/test/gmock_callback_support.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace media {
@@ -149,6 +151,7 @@
 class VideoCaptureDeviceMacWithImageCaptureTest : public ::testing::Test {
  public:
   void RunCheckBackgroundBlurTestCase();
+  void RunCaptureConfigurationChangeTestCase();
 
  protected:
   VideoCaptureDeviceMacWithImageCaptureTest()
@@ -228,4 +231,48 @@
   }
 }
 
+TEST_F(VideoCaptureDeviceMacWithImageCaptureTest,
+       CheckCaptureConfigurationChange) {
+  RunTestCase(base::BindOnce(&VideoCaptureDeviceMacWithImageCaptureTest::
+                                 RunCaptureConfigurationChangeTestCase,
+                             base::Unretained(this)));
+}
+
+void VideoCaptureDeviceMacWithImageCaptureTest::
+    RunCaptureConfigurationChangeTestCase() {
+  auto* device = GetFirstAvailableDevice();
+  if (!device) {
+    DVLOG(1) << "No camera available. Exiting test.";
+    return;
+  }
+
+  VideoCaptureParams arbitrary_params;
+  arbitrary_params.requested_format.frame_size = gfx::Size(1280, 720);
+  arbitrary_params.requested_format.frame_rate = 30.0f;
+  arbitrary_params.requested_format.pixel_format = PIXEL_FORMAT_I420;
+  auto client = std::make_unique<NiceMockVideoCaptureDeviceClient>();
+  MockVideoCaptureDeviceClient* client_ptr = client.get();
+
+  device->AllocateAndStart(arbitrary_params, std::move(client));
+
+  {
+    base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed);
+    EXPECT_CALL(*client_ptr, OnCaptureConfigurationChanged())
+        .WillOnce(base::test::RunOnceClosure(run_loop.QuitClosure()));
+
+    device->SetIsPortraitEffectActiveForTesting(false);
+    run_loop.Run();
+  }
+  {
+    base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed);
+    EXPECT_CALL(*client_ptr, OnCaptureConfigurationChanged())
+        .WillOnce(base::test::RunOnceClosure(run_loop.QuitClosure()));
+
+    device->SetIsPortraitEffectActiveForTesting(true);
+    run_loop.Run();
+  }
+
+  device->StopAndDeAllocate();
+}
+
 }  // namespace media
diff --git a/media/capture/video/mock_video_capture_device_client.h b/media/capture/video/mock_video_capture_device_client.h
index c65dcc3fa..0d8690d 100644
--- a/media/capture/video/mock_video_capture_device_client.h
+++ b/media/capture/video/mock_video_capture_device_client.h
@@ -18,6 +18,7 @@
   MockVideoCaptureDeviceClient();
   ~MockVideoCaptureDeviceClient() override;
 
+  MOCK_METHOD0(OnCaptureConfigurationChanged, void(void));
   MOCK_METHOD9(OnIncomingCapturedData,
                void(const uint8_t* data,
                     int length,
diff --git a/media/capture/video/video_capture_device.h b/media/capture/video/video_capture_device.h
index 94f6e8e..4d2a567 100644
--- a/media/capture/video/video_capture_device.h
+++ b/media/capture/video/video_capture_device.h
@@ -145,6 +145,10 @@
 
     virtual ~Client() {}
 
+    // The configuration of the VideoCaptureDevice has changed.
+    // TODO(crbug.com/1338665): Add VideoCaptureDevice::Client implementation.
+    virtual void OnCaptureConfigurationChanged() {}
+
     // Captured a new video frame, data for which is pointed to by |data|.
     //
     // The format of the frame is described by |frame_format|, and is assumed to
diff --git a/mojo/public/cpp/bindings/lib/wtf_hash_util.h b/mojo/public/cpp/bindings/lib/wtf_hash_util.h
index 63a20a2..103cc59 100644
--- a/mojo/public/cpp/bindings/lib/wtf_hash_util.h
+++ b/mojo/public/cpp/bindings/lib/wtf_hash_util.h
@@ -48,7 +48,7 @@
 template <>
 struct WTFHashTraits<WTF::String, false> {
   static size_t Hash(size_t seed, const WTF::String& value) {
-    return HashCombine(seed, WTF::StringHash::GetHash(value));
+    return HashCombine(seed, WTF::GetHash(value));
   }
 };
 
@@ -63,7 +63,8 @@
 namespace WTF {
 
 template <typename T>
-struct DefaultHash<mojo::StructPtr<T>> {
+struct HashTraits<mojo::StructPtr<T>>
+    : public GenericHashTraits<mojo::StructPtr<T>> {
   static unsigned GetHash(const mojo::StructPtr<T>& value) {
     return static_cast<unsigned>(value.Hash(mojo::internal::kHashSeed));
   }
@@ -71,13 +72,7 @@
                     const mojo::StructPtr<T>& right) {
     return left.Equals(right);
   }
-  static const bool safe_to_compare_to_empty_or_deleted = false;
-};
-
-template <typename T>
-struct HashTraits<mojo::StructPtr<T>>
-    : public GenericHashTraits<mojo::StructPtr<T>> {
-  static const bool kHasIsEmptyValueFunction = true;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
   static bool IsEmptyValue(const mojo::StructPtr<T>& value) {
     return value.is_null();
   }
@@ -91,7 +86,8 @@
 };
 
 template <typename T>
-struct DefaultHash<mojo::InlinedStructPtr<T>> {
+struct HashTraits<mojo::InlinedStructPtr<T>>
+    : public GenericHashTraits<mojo::InlinedStructPtr<T>> {
   static unsigned GetHash(const mojo::InlinedStructPtr<T>& value) {
     return static_cast<unsigned>(value.Hash(mojo::internal::kHashSeed));
   }
@@ -99,13 +95,7 @@
                     const mojo::InlinedStructPtr<T>& right) {
     return left.Equals(right);
   }
-  static const bool safe_to_compare_to_empty_or_deleted = false;
-};
-
-template <typename T>
-struct HashTraits<mojo::InlinedStructPtr<T>>
-    : public GenericHashTraits<mojo::InlinedStructPtr<T>> {
-  static const bool kHasIsEmptyValueFunction = true;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
   static bool IsEmptyValue(const mojo::InlinedStructPtr<T>& value) {
     return value.is_null();
   }
diff --git a/mojo/public/cpp/bindings/tests/wtf_hash_unittest.cc b/mojo/public/cpp/bindings/tests/wtf_hash_unittest.cc
index 81c3552..ff18d9f 100644
--- a/mojo/public/cpp/bindings/tests/wtf_hash_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/wtf_hash_unittest.cc
@@ -30,19 +30,19 @@
 
   // Top-level.
   ASSERT_EQ(
-      WTF::DefaultHash<blink::TopLevelEnum>::GetHash(blink::TopLevelEnum::E0),
-      WTF::DefaultHash<blink::TopLevelEnum>::GetHash(blink::TopLevelEnum::E0));
+      WTF::HashTraits<blink::TopLevelEnum>::GetHash(blink::TopLevelEnum::E0),
+      WTF::HashTraits<blink::TopLevelEnum>::GetHash(blink::TopLevelEnum::E0));
 
   // Nested in struct.
-  ASSERT_EQ(WTF::DefaultHash<blink::TestWTFStruct::NestedEnum>::GetHash(
+  ASSERT_EQ(WTF::HashTraits<blink::TestWTFStruct::NestedEnum>::GetHash(
                 blink::TestWTFStruct::NestedEnum::E0),
-            WTF::DefaultHash<blink::TestWTFStruct::NestedEnum>::GetHash(
+            WTF::HashTraits<blink::TestWTFStruct::NestedEnum>::GetHash(
                 blink::TestWTFStruct::NestedEnum::E0));
 
   // Nested in interface.
-  ASSERT_EQ(WTF::DefaultHash<blink::TestWTF::NestedEnum>::GetHash(
+  ASSERT_EQ(WTF::HashTraits<blink::TestWTF::NestedEnum>::GetHash(
                 blink::TestWTF::NestedEnum::E0),
-            WTF::DefaultHash<blink::TestWTF::NestedEnum>::GetHash(
+            WTF::HashTraits<blink::TestWTF::NestedEnum>::GetHash(
                 blink::TestWTF::NestedEnum::E0));
 }
 
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
index 537ff35..8bd4c2c 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
@@ -136,39 +136,19 @@
 {%- macro enum_hash_blink(enum) %}
 {%-   set enum_name = enum|get_qualified_name_for_kind(
           flatten_nested_kind=True, include_variant=False) %}
-{%-   set hash_fn_name = enum|wtf_hash_fn_name_for_enum %}
 {#    We need two unused enum values: #}
 {%-   set empty_value = -1000000 %}
 {%-   set deleted_value = -1000001 %}
 {%-   set empty_value_unused = "false" if empty_value in enum|all_enum_values else "true" %}
 {%-   set deleted_value_unused = "false" if empty_value in enum|all_enum_values else "true" %}
 namespace WTF {
-struct {{hash_fn_name}} {
-  static unsigned GetHash(const {{enum_name}}& value) {
-    using utype = std::underlying_type<{{enum_name}}>::type;
-    return DefaultHash<utype>::GetHash(static_cast<utype>(value));
-  }
-  static bool Equal(const {{enum_name}}& left, const {{enum_name}}& right) {
-    return left == right;
-  }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
 template <>
 struct HashTraits<{{enum_name}}>
-    : public GenericHashTraits<{{enum_name}}> {
+    : EnumHashTraits<{{enum_name}}, {{empty_value}}, {{deleted_value}}> {
   static_assert({{empty_value_unused}},
                 "{{empty_value}} is a reserved enum value");
   static_assert({{deleted_value_unused}},
                 "{{deleted_value}} is a reserved enum value");
-  static const bool kEmptyValueIsZero = false;
-  static {{enum_name}} EmptyValue() { return static_cast<{{enum_name}}>({{empty_value}}); }
-  static void ConstructDeletedValue({{enum_name}}& slot, bool) {
-    slot = static_cast<{{enum_name}}>({{deleted_value}});
-  }
-  static bool IsDeletedValue(const {{enum_name}}& value) {
-    return value == static_cast<{{enum_name}}>({{deleted_value}});
-  }
 };
 }  // namespace WTF
 {%- endmacro %}
diff --git a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
index f420c26..5d2ad08 100644
--- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
@@ -130,10 +130,6 @@
   return namespace.split(".") if namespace else []
 
 
-def GetWtfHashFnNameForEnum(enum):
-  return _NameFormatter(enum, None).Format("_", internal=True,
-                                           flatten_nested_kind=True) + "HashFn"
-
 def GetEnumNameWithoutNamespace(enum):
   full_enum_name = _NameFormatter(enum, None).Format(
         "::", prefixed=True,
@@ -438,7 +434,6 @@
         "under_to_camel": self._UnderToCamel,
         "unmapped_type_for_serializer": self._GetUnmappedTypeForSerializer,
         "use_custom_serializer": UseCustomSerializer,
-        "wtf_hash_fn_name_for_enum": GetWtfHashFnNameForEnum,
     }
     return cpp_filters
 
diff --git a/services/audio/input_controller.cc b/services/audio/input_controller.cc
index f4e44e8..1cd3740 100644
--- a/services/audio/input_controller.cc
+++ b/services/audio/input_controller.cc
@@ -259,7 +259,7 @@
     return;
 
   int fifo_size =
-      base::FeatureList::IsEnabled(media::kChromeWideEchoCancellation)
+      media::IsChromeWideEchoCancellationEnabled()
           ? media::kChromeWideEchoCancellationProcessingFifoSize.Get()
           : 0;
 
diff --git a/services/audio/sync_reader.cc b/services/audio/sync_reader.cc
index ba7981e..424c802 100644
--- a/services/audio/sync_reader.cc
+++ b/services/audio/sync_reader.cc
@@ -75,7 +75,7 @@
   maximum_wait_time_for_mixing_ = maximum_wait_time_;
 
 #if BUILDFLAG(CHROME_WIDE_ECHO_CANCELLATION)
-  if (base::FeatureList::IsEnabled(media::kChromeWideEchoCancellation)) {
+  if (media::IsChromeWideEchoCancellationEnabled()) {
     double mixing_timeout_percent =
         media::kChromeWideEchoCancellationDynamicMixingTimeout.Get();
 
diff --git a/services/network/public/cpp/link_header_parser.cc b/services/network/public/cpp/link_header_parser.cc
index da17f51..8f32194 100644
--- a/services/network/public/cpp/link_header_parser.cc
+++ b/services/network/public/cpp/link_header_parser.cc
@@ -54,15 +54,15 @@
     return absl::nullopt;
 
   std::string value = base::ToLowerASCII(attr.value());
-  if (value == "font")
+  if (value == "font") {
     return mojom::LinkAsAttribute::kFont;
-  else if (value == "image")
+  } else if (value == "image") {
     return mojom::LinkAsAttribute::kImage;
-  else if (value == "script")
+  } else if (value == "script") {
     return mojom::LinkAsAttribute::kScript;
-  // TODO(crbug.com/671310): Disallow "stylesheet", it was allowed accidentally.
-  else if (value == "style" || value == "stylesheet")
+  } else if (value == "style") {
     return mojom::LinkAsAttribute::kStyleSheet;
+  }
   return absl::nullopt;
 }
 
diff --git a/services/network/public/mojom/url_loader.mojom b/services/network/public/mojom/url_loader.mojom
index 2f0df16..af07d51e 100644
--- a/services/network/public/mojom/url_loader.mojom
+++ b/services/network/public/mojom/url_loader.mojom
@@ -132,7 +132,7 @@
   // The loader should only call this after it has finished the load or
   // errored, as the client could potentially close the Mojo connection upon
   // receiving this which may delete the loader. For example, if it passed a
-  // data pipe to OnStartLoadingResponseBody(), the loader should only call
+  // data pipe to OnReceiveResponse(), the loader should only call
   // OnComplete() after it has finished writing to the data pipe (or errored).
   // Note that the client might not have finished reading the body by the time
   // it receives this message, and only knows it is done when the data pipe is
diff --git a/testing/buildbot/chromium.cft.json b/testing/buildbot/chromium.cft.json
index b2d0a28..4c8ea70 100644
--- a/testing/buildbot/chromium.cft.json
+++ b/testing/buildbot/chromium.cft.json
@@ -259,7 +259,7 @@
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 10
+          "shards": 20
         },
         "test": "browser_tests",
         "test_id_prefix": "ninja://chrome/test:browser_tests/"
@@ -1624,7 +1624,8 @@
         "args": [
           "--num-retries=3",
           "--write-run-histories-to=${ISOLATED_OUTDIR}/run_histories.json",
-          "--git-revision=${got_revision}"
+          "--git-revision=${got_revision}",
+          "--additional-env-var=LLVM_PROFILE_FILE=${ISOLATED_OUTDIR}/profraw/default-%2m.profraw"
         ],
         "check_flakiness_for_new_tests": false,
         "isolate_name": "blink_web_tests",
@@ -1653,7 +1654,7 @@
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 5
+          "shards": 8
         },
         "test_id_prefix": "ninja://:blink_web_tests/"
       },
@@ -1661,7 +1662,8 @@
         "args": [
           "--num-retries=3",
           "--write-run-histories-to=${ISOLATED_OUTDIR}/run_histories.json",
-          "--git-revision=${got_revision}"
+          "--git-revision=${got_revision}",
+          "--additional-env-var=LLVM_PROFILE_FILE=${ISOLATED_OUTDIR}/profraw/default-%2m.profraw"
         ],
         "check_flakiness_for_new_tests": false,
         "isolate_name": "blink_wpt_tests",
@@ -1690,7 +1692,7 @@
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 10
         },
         "test_id_prefix": "ninja://:blink_wpt_tests/"
       },
@@ -1980,7 +1982,8 @@
           "--flag-specific=disable-site-isolation-trials",
           "--num-retries=3",
           "--write-run-histories-to=${ISOLATED_OUTDIR}/run_histories.json",
-          "--git-revision=${got_revision}"
+          "--git-revision=${got_revision}",
+          "--additional-env-var=LLVM_PROFILE_FILE=${ISOLATED_OUTDIR}/profraw/default-%2m.profraw"
         ],
         "check_flakiness_for_new_tests": false,
         "isolate_name": "blink_web_tests",
@@ -2008,6 +2011,7 @@
               "os": "Ubuntu-18.04"
             }
           ],
+          "quickrun_shards": 18,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
           "shards": 8
         },
@@ -2215,28 +2219,6 @@
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test_id_prefix": "ninja://:blink_web_tests/"
-      },
-      {
-        "isolate_name": "webdriver_wpt_tests",
-        "isolate_profile_data": true,
-        "merge": {
-          "args": [
-            "--verbose"
-          ],
-          "script": "//third_party/blink/tools/merge_web_test_results.py"
-        },
-        "name": "webdriver_tests_suite",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "os": "Ubuntu-18.04"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 4
-        },
-        "test_id_prefix": "ninja://:webdriver_wpt_tests/"
       }
     ],
     "scripts": [
@@ -2520,6 +2502,7 @@
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/mac.mac-rel-cft.browser_tests.filter"
         ],
+        "ci_only": true,
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -2689,6 +2672,7 @@
               "os": "Mac-12"
             }
           ],
+          "inverse_quickrun_shards": 2,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "components_unittests",
@@ -2708,8 +2692,9 @@
               "os": "Mac-12"
             }
           ],
+          "inverse_quickrun_shards": 24,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 8
+          "shards": 12
         },
         "test": "content_browsertests",
         "test_id_prefix": "ninja://content/test:content_browsertests/"
@@ -3111,8 +3096,9 @@
               "os": "Mac-12"
             }
           ],
+          "inverse_quickrun_shards": 12,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 3
+          "shards": 6
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/"
@@ -3593,6 +3579,7 @@
         "test_id_prefix": "ninja://storage:storage_unittests/"
       },
       {
+        "ci_only": true,
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -3606,7 +3593,8 @@
               "os": "Mac-12"
             }
           ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
+          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
+          "shards": 4
         },
         "test": "sync_integration_tests",
         "test_id_prefix": "ninja://chrome/test:sync_integration_tests/"
@@ -3663,6 +3651,7 @@
               "os": "Mac-12"
             }
           ],
+          "inverse_quickrun_shards": 2,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "unit_tests",
@@ -3860,8 +3849,9 @@
               "os": "Mac-12"
             }
           ],
+          "inverse_quickrun_shards": 24,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 5
+          "shards": 12
         },
         "test_id_prefix": "ninja://:blink_web_tests/"
       },
@@ -3869,7 +3859,8 @@
         "args": [
           "--num-retries=3",
           "--write-run-histories-to=${ISOLATED_OUTDIR}/run_histories.json",
-          "--git-revision=${got_revision}"
+          "--git-revision=${got_revision}",
+          "--driver-logging"
         ],
         "check_flakiness_for_new_tests": false,
         "isolate_name": "blink_wpt_tests",
@@ -3898,8 +3889,9 @@
               "os": "Mac-12"
             }
           ],
+          "inverse_quickrun_shards": 36,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 7
+          "shards": 18
         },
         "test_id_prefix": "ninja://:blink_wpt_tests/"
       },
@@ -4097,6 +4089,7 @@
         "args": [
           "--extra-browser-args=--enable-crashpad"
         ],
+        "ci_only": true,
         "isolate_name": "telemetry_perf_unittests",
         "isolate_profile_data": true,
         "merge": {
@@ -4178,6 +4171,9 @@
     ],
     "scripts": [
       {
+        "args": [
+          "--allow-coverage-initializer"
+        ],
         "isolate_profile_data": true,
         "name": "check_static_initializers",
         "script": "check_static_initializers.py",
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index a18a7d6a..bb1e4e8 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5839,9 +5839,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -5853,8 +5853,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -6010,9 +6010,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -6024,8 +6024,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -6162,9 +6162,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -6176,8 +6176,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index a23406e..791a9f2 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -80772,9 +80772,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -80786,8 +80786,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -80913,9 +80913,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -80927,8 +80927,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -81040,9 +81040,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -81054,8 +81054,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -82388,9 +82388,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -82401,8 +82401,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -82559,9 +82559,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -82572,8 +82572,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -82711,9 +82711,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -82724,8 +82724,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -84249,9 +84249,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -84262,8 +84262,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -84420,9 +84420,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -84433,8 +84433,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -84572,9 +84572,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -84585,8 +84585,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -85358,9 +85358,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -85371,8 +85371,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index edf9927a..153b325e 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -18532,12 +18532,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18549,8 +18549,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -18723,12 +18723,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18740,8 +18740,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
@@ -18890,12 +18890,12 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always",
           "--combine-ash-logs-on-bots",
           "--asan-symbolize-output"
         ],
-        "description": "Run with ash-chrome version 111.0.5548.0",
+        "description": "Run with ash-chrome version 111.0.5549.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18907,8 +18907,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v111.0.5548.0",
-              "revision": "version:111.0.5548.0"
+              "location": "lacros_version_skew_tests_v111.0.5549.0",
+              "revision": "version:111.0.5549.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 448d5753..f79349cb 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -469,6 +469,25 @@
           '--flag-specific=enable-editing-ng',
         ],
       },
+      'linux-rel-cft': {
+        "args": [
+          "--additional-env-var=LLVM_PROFILE_FILE=${ISOLATED_OUTDIR}/profraw/default-%2m.profraw",
+        ],
+        'swarming': {
+          'shards': 8,
+        },
+      },
+      'mac-rel-cft': {
+        'swarming': {
+          'dimension_sets': [
+            {
+              'gpu': None,
+            },
+          ],
+          'shards': 12,
+          'inverse_quickrun_shards': 24,
+        },
+      },
       'mac10.13-blink-rel': {
         'swarming': {
           'shards': 1,
@@ -782,6 +801,28 @@
           '--flag-specific=enable-editing-ng',
         ],
       },
+      'linux-rel-cft': {
+        "args": [
+          "--additional-env-var=LLVM_PROFILE_FILE=${ISOLATED_OUTDIR}/profraw/default-%2m.profraw",
+        ],
+        'swarming': {
+          'shards': 10,
+        },
+      },
+      'mac-rel-cft': {
+        'args': [
+          '--driver-logging',
+        ],
+        'swarming': {
+          'dimension_sets': [
+            {
+              'gpu': None,
+            },
+          ],
+          'shards': 18,
+          'inverse_quickrun_shards': 36,
+        },
+      },
       'mac10.13-blink-rel': {
         'swarming': {
           'shards': 1,
@@ -1096,6 +1137,9 @@
         'args': [
           '--test-launcher-filter-file=../../testing/buildbot/filters/linux.linux-rel-cft.browser_tests.filter',
         ],
+        'swarming': {
+          'shards': 20,
+        },
       },
       'mac-code-coverage': {
         'args': [
@@ -1111,6 +1155,7 @@
         'args': [
           '--test-launcher-filter-file=../../testing/buildbot/filters/mac.mac-rel-cft.browser_tests.filter',
         ],
+        'ci_only': True,
         'swarming': {
           'shards': 20,  # crbug.com/1361887
         },
@@ -1199,6 +1244,11 @@
           '--allow-coverage-initializer',
         ],
       },
+      'mac-rel-cft': {
+        'args': [
+          '--allow-coverage-initializer',
+        ],
+      },
     },
   },
   'chrome_all_tast_tests': {
@@ -1588,6 +1638,11 @@
           'inverse_quickrun_shards': 12,
         },
       },
+      'mac-rel-cft': {
+        'swarming': {
+          'inverse_quickrun_shards': 2,
+        },
+      },
       'win-asan': {
         # With a single shard seems to hit time limit.
         'swarming': {
@@ -1835,6 +1890,12 @@
           '--coverage-continuous-mode=1',
         ],
       },
+      'mac-rel-cft': {
+        'swarming': {
+          'shards': 12,
+          'inverse_quickrun_shards': 24,
+        },
+      },
       # https://crbug.com/1255940
       'mac-rel-swarming': {
         'swarming': {
@@ -2568,6 +2629,10 @@
         'args': [
           '--test-launcher-filter-file=../../testing/buildbot/filters/mac.mac-rel-cft.interactive_ui_tests.filter',
         ],
+        'swarming': {
+          'shards': 6,
+          'inverse_quickrun_shards': 12,
+        },
       },
       'win-rel-cft': {
         'args': [
@@ -2953,6 +3018,14 @@
           'shards': 20,
         },
       },
+      'linux-rel-cft': {
+        "args": [
+          "--additional-env-var=LLVM_PROFILE_FILE=${ISOLATED_OUTDIR}/profraw/default-%2m.profraw",
+        ],
+        'swarming': {
+          'quickrun_shards': 18,
+        },
+      },
     },
   },
   'notification_helper_unittests': {
@@ -3365,6 +3438,12 @@
           '--coverage-continuous-mode=1',
         ],
       },
+      'mac-rel-cft': {
+        'ci_only': True,
+        'swarming': {
+          'shards': 4,
+        },
+      },
       'win-rel-cft': {
         'swarming': {
           'shards': 3,
@@ -3465,6 +3544,9 @@
           '--jobs=1',
         ],
       },
+      'mac-rel-cft': {
+        'ci_only': True,
+      },
     },
     'remove_from': [
       'android-pie-arm64-rel',
@@ -3602,6 +3684,11 @@
           'shards': 2,
         },
       },
+      'mac-rel-cft': {
+        'swarming': {
+          'inverse_quickrun_shards': 2,
+        },
+      },
     },
   },
   'variations_smoke_tests': {
@@ -3759,6 +3846,7 @@
   'webdriver_tests_suite': {
     'remove_from': [
       'Linux Tests',  # https://crbug.com/929689, https://crbug.com/936557
+      'linux-rel-cft',
     ],
   },
   'webgl2_conformance_d3d11_passthrough_tests': {
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 4899a14f..4cfcf7c 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,16 +22,16 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5548.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v111.0.5549.0/test_ash_chrome',
     ],
-    'description': 'Run with ash-chrome version 111.0.5548.0',
+    'description': 'Run with ash-chrome version 111.0.5549.0',
     'identifier': 'Lacros version skew testing ash canary',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v111.0.5548.0',
-          'revision': 'version:111.0.5548.0',
+          'location': 'lacros_version_skew_tests_v111.0.5549.0',
+          'revision': 'version:111.0.5549.0',
         },
       ],
     },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 6edc80db..8eb2d4c1 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -1249,7 +1249,7 @@
     'name': 'chromium.cft',
     'mixins': ['chromium-tester-service-account'],
     'machines': {
-      # Mirrors Linux Builder and Linux Tests.
+      # Mirrors "Linux Builder" and "Linux Tests".
       'linux-rel-cft': {
         'mixins': [
           'isolate_profile_data',
@@ -1265,7 +1265,7 @@
         }
       },
 
-      # Mirrors Mac Builder and Mac12 Tests, except that we don't run
+      # Mirrors "Mac Builder" and "Mac12 Tests", except that we don't run
       # 'mac_signing_tests' (it is removed in test_suite_exceptions.pyl),
       # which doesn't exist in the CfT config.
       'mac-rel-cft': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 3bffad7a..9da4bff 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -13397,6 +13397,21 @@
             ]
         }
     ],
+    "WebViewBrotliSupport": [
+        {
+            "platforms": [
+                "android_webview"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "WebViewBrotliSupport"
+                    ]
+                }
+            ]
+        }
+    ],
     "WebViewRecordAppDataDirectorySize": [
         {
             "platforms": [
@@ -13443,6 +13458,21 @@
             ]
         }
     ],
+    "WebViewUmaUploadQualityOfServiceSetToDefault": [
+        {
+            "platforms": [
+                "android_webview"
+            ],
+            "experiments": [
+                {
+                    "name": "WebViewUmaUploadQualityOfServiceSetToDefault",
+                    "enable_features": [
+                        "WebViewUmaUploadQualityOfServiceSetToDefault"
+                    ]
+                }
+            ]
+        }
+    ],
     "WebViewUseMetricsUploadService": [
         {
             "platforms": [
diff --git a/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h b/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h
index f1aba61d..cf4195b8 100644
--- a/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h
+++ b/third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h
@@ -34,31 +34,7 @@
  private:
   TraceWrapperV8Reference<v8::Module> record_;
   const unsigned identity_hash_;
-  friend struct BoxedV8ModuleHash;
-};
-
-struct BoxedV8ModuleHash {
- public:
-  static unsigned GetHash(const Member<BoxedV8Module>& key) {
-    return key->identity_hash_;
-  }
-
-  static bool Equal(const Member<BoxedV8Module>& a,
-                    const Member<BoxedV8Module>& b) {
-    if (IsHashTableDeletedValue(a) && IsHashTableDeletedValue(b))
-      return true;
-    if (IsHashTableDeletedValue(a) || IsHashTableDeletedValue(b))
-      return false;
-
-    if (!a && !b)
-      return true;
-    if (!a || !b)
-      return false;
-
-    return a->record_ == b->record_;
-  }
-
-  static constexpr bool safe_to_compare_to_empty_or_deleted = true;
+  friend struct HashTraits<Member<BoxedV8Module>>;
 };
 
 }  // namespace blink
@@ -66,8 +42,19 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::Member<blink::BoxedV8Module>>
-    : blink::BoxedV8ModuleHash {};
+struct HashTraits<blink::Member<blink::BoxedV8Module>>
+    : MemberHashTraits<blink::BoxedV8Module> {
+  static unsigned GetHash(const blink::Member<blink::BoxedV8Module>& key) {
+    return key->identity_hash_;
+  }
+
+  static bool Equal(const blink::Member<blink::BoxedV8Module>& a,
+                    const blink::Member<blink::BoxedV8Module>& b) {
+    return a->record_ == b->record_;
+  }
+
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
+};
 
 }  // namespace WTF
 
diff --git a/third_party/blink/renderer/bindings/core/v8/boxed_v8_module_test.cc b/third_party/blink/renderer/bindings/core/v8/boxed_v8_module_test.cc
index bc167228..0e74157 100644
--- a/third_party/blink/renderer/bindings/core/v8/boxed_v8_module_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/boxed_v8_module_test.cc
@@ -4,15 +4,9 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/boxed_v8_module.h"
 
-#include "testing/gmock/include/gmock/gmock-matchers.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/renderer/bindings/core/v8/module_record.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
 #include "third_party/blink/renderer/core/testing/module_test_base.h"
-#include "third_party/blink/renderer/platform/bindings/exception_state.h"
-#include "third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h"
-#include "third_party/blink/renderer/platform/wtf/text/text_position.h"
-#include "v8/include/v8.h"
 
 namespace blink {
 
@@ -23,9 +17,6 @@
   const KURL js_url_a("https://example.com/a.js");
   const KURL js_url_b("https://example.com/b.js");
 
-  Member<BoxedV8Module> module_empty = nullptr;
-  Member<BoxedV8Module> module_deleted(kMemberDeletedValue);
-
   v8::Local<v8::Module> local_module_a = ModuleTestBase::CompileModule(
       scope.GetScriptState(), "export const a = 'a';", js_url_a);
   Member<BoxedV8Module> module_a =
@@ -35,21 +26,13 @@
   Member<BoxedV8Module> module_b =
       MakeGarbageCollected<BoxedV8Module>(scope.GetIsolate(), local_module_b);
 
-  EXPECT_TRUE(BoxedV8ModuleHash::Equal(module_deleted, module_deleted));
-  EXPECT_FALSE(BoxedV8ModuleHash::Equal(module_deleted, module_a));
-  EXPECT_FALSE(BoxedV8ModuleHash::Equal(module_deleted, module_b));
-  EXPECT_FALSE(BoxedV8ModuleHash::Equal(module_deleted, module_empty));
+  using Traits = HashTraits<blink::Member<blink::BoxedV8Module>>;
+  static_assert(!Traits::kSafeToCompareToEmptyOrDeleted);
 
-  EXPECT_TRUE(BoxedV8ModuleHash::Equal(module_empty, module_empty));
-  EXPECT_FALSE(BoxedV8ModuleHash::Equal(module_empty, module_a));
-  EXPECT_FALSE(BoxedV8ModuleHash::Equal(module_empty, module_b));
+  EXPECT_TRUE(Traits::Equal(module_a, module_a));
+  EXPECT_FALSE(Traits::Equal(module_a, module_b));
 
-  EXPECT_TRUE(BoxedV8ModuleHash::Equal(module_a, module_a));
-  EXPECT_FALSE(BoxedV8ModuleHash::Equal(module_a, module_b));
-
-  EXPECT_NE(
-      DefaultHash<blink::Member<blink::BoxedV8Module>>::GetHash(module_a),
-      DefaultHash<blink::Member<blink::BoxedV8Module>>::GetHash(module_b));
+  EXPECT_NE(WTF::GetHash(module_a), WTF::GetHash(module_b));
 }
 
 }  // namespace
diff --git a/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h b/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h
index f467d6b..6ded7ff 100644
--- a/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h
+++ b/third_party/blink/renderer/bindings/core/v8/profiler_trace_builder.h
@@ -30,9 +30,7 @@
 class ScriptState;
 
 // A hash uniquely identified by the substack associated with the node.
-struct ProfilerNodeStackHash {
-  STATIC_ONLY(ProfilerNodeStackHash);
-
+struct ProfilerNodeStackHashTraits : HashTraits<const v8::CpuProfileNode*> {
   static bool Equal(const v8::CpuProfileNode* a, const v8::CpuProfileNode* b) {
     return a->GetNodeId() == b->GetNodeId();
   }
@@ -41,13 +39,11 @@
     return node->GetNodeId();
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 // A hash uniquely identified by the stack frame associated with the node.
-struct ProfilerNodeFrameHash {
-  STATIC_ONLY(ProfilerNodeFrameHash);
-
+struct ProfilerNodeFrameHashTraits : HashTraits<const v8::CpuProfileNode*> {
   static bool Equal(const v8::CpuProfileNode* a, const v8::CpuProfileNode* b) {
     return a->GetFunctionName() == b->GetFunctionName() &&
            a->GetScriptResourceName() == b->GetScriptResourceName() &&
@@ -56,13 +52,13 @@
   }
 
   static unsigned GetHash(const v8::CpuProfileNode* node) {
-    return StringHash::GetHash(node->GetFunctionNameStr()) ^
-           StringHash::GetHash(node->GetScriptResourceNameStr()) ^
-           DefaultHash<unsigned>::GetHash(node->GetLineNumber()) ^
-           DefaultHash<unsigned>::GetHash(node->GetColumnNumber());
+    return WTF::GetHash(node->GetFunctionNameStr()) ^
+           WTF::GetHash(node->GetScriptResourceNameStr()) ^
+           WTF::GetHash(node->GetLineNumber()) ^
+           WTF::GetHash(node->GetColumnNumber());
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 // Produces a structurally compressed trace from a v8::CpuProfile relative to a
@@ -149,9 +145,9 @@
 
   // Maps V8-managed resource strings to their indices in the resources table.
   HashMap<const char*, wtf_size_t> resource_map_;
-  HashMap<const v8::CpuProfileNode*, wtf_size_t, ProfilerNodeStackHash>
+  HashMap<const v8::CpuProfileNode*, wtf_size_t, ProfilerNodeStackHashTraits>
       node_to_stack_map_;
-  HashMap<const v8::CpuProfileNode*, wtf_size_t, ProfilerNodeFrameHash>
+  HashMap<const v8::CpuProfileNode*, wtf_size_t, ProfilerNodeFrameHashTraits>
       node_to_frame_map_;
 
   // A mapping from a V8 internal script ID to whether or not it passes the
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_code_cache.cc b/third_party/blink/renderer/bindings/core/v8/v8_code_cache.cc
index 5e55fa6..286d0e2 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_code_cache.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_code_cache.cc
@@ -43,7 +43,7 @@
   // later load the script from the cache and interpret it with a different
   // encoding, the cached data is not valid for that encoding.
   return (v8_cache_data_version | kind) +
-         (encoding.IsNull() ? 0 : StringHash::GetHash(encoding));
+         (encoding.IsNull() ? 0 : WTF::GetHash(encoding));
 }
 
 // Check previously stored timestamp.
diff --git a/third_party/blink/renderer/core/animation/BUILD.gn b/third_party/blink/renderer/core/animation/BUILD.gn
index 226112c..2d39f82 100644
--- a/third_party/blink/renderer/core/animation/BUILD.gn
+++ b/third_party/blink/renderer/core/animation/BUILD.gn
@@ -62,6 +62,7 @@
     "css/css_keyframe_effect_model.h",
     "css/css_scroll_timeline.cc",
     "css/css_scroll_timeline.h",
+    "css/css_timeline_map.h",
     "css/css_timing_data.cc",
     "css/css_timing_data.h",
     "css/css_transition.cc",
diff --git a/third_party/blink/renderer/core/animation/css/css_animation_update.h b/third_party/blink/renderer/core/animation/css/css_animation_update.h
index e59efc0..d53c5a58 100644
--- a/third_party/blink/renderer/core/animation/css/css_animation_update.h
+++ b/third_party/blink/renderer/core/animation/css/css_animation_update.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/core/animation/animation_timeline.h"
 #include "third_party/blink/renderer/core/animation/css/css_scroll_timeline.h"
+#include "third_party/blink/renderer/core/animation/css/css_timeline_map.h"
 #include "third_party/blink/renderer/core/animation/css/css_view_timeline.h"
 #include "third_party/blink/renderer/core/animation/effect_stack.h"
 #include "third_party/blink/renderer/core/animation/inert_effect.h"
@@ -233,14 +234,6 @@
       return absl::nullopt;
     return changed_scroll_timeline_.Get();
   }
-  absl::optional<CSSViewTimeline*> ChangedViewTimeline(
-      const ScopedCSSName& name) const {
-    auto i = changed_view_timelines_.find(&name);
-    if (i == changed_view_timelines_.end()) {
-      return absl::nullopt;
-    }
-    return i->value.Get();
-  }
   const CSSViewTimelineMap& ChangedViewTimelines() const {
     return changed_view_timelines_;
   }
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc
index 20037075..039131d 100644
--- a/third_party/blink/renderer/core/animation/css/css_animations.cc
+++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -633,10 +633,11 @@
 
 // Update the matching timeline if the candidate is a more proximate match
 // than the existing match.
+template <typename TimelineType>
 void UpdateMatchingTimeline(const ScopedCSSName& target_name,
                             const ScopedCSSName& candidate_name,
-                            CSSViewTimeline* candidate,
-                            CSSViewTimeline*& matching_timeline,
+                            TimelineType* candidate,
+                            TimelineType*& matching_timeline,
                             size_t& matching_distance) {
   if (target_name.GetName() != candidate_name.GetName()) {
     return;
@@ -704,15 +705,28 @@
     const ScopedCSSName& target_name,
     const CSSAnimationUpdate* update,
     const TimelineData* timeline_data) {
-  CSSViewTimeline* matching_timeline = nullptr;
+  const CSSViewTimelineMap* existing_timelines =
+      timeline_data ? &timeline_data->GetViewTimelines() : nullptr;
+  const CSSViewTimelineMap* changed_timelines =
+      update ? &update->ChangedViewTimelines() : nullptr;
+  return FindTimelineForElement<CSSViewTimeline>(
+      target_name, existing_timelines, changed_timelines);
+}
+
+template <typename TimelineType>
+TimelineType* CSSAnimations::FindTimelineForElement(
+    const ScopedCSSName& target_name,
+    const CSSTimelineMap<TimelineType>* existing_timelines,
+    const CSSTimelineMap<TimelineType>* changed_timelines) {
+  TimelineType* matching_timeline = nullptr;
   size_t matching_distance = std::numeric_limits<size_t>::max();
 
   // First, search through existing named timelines.
-  if (timeline_data) {
-    for (auto [name, value] : timeline_data->GetViewTimelines()) {
+  if (existing_timelines) {
+    for (auto [name, value] : *existing_timelines) {
       // Skip timelines affected by the current CSSAnimationUpdate:
       // they will be handled by the next for-loop.
-      if (update && update->ChangedViewTimeline(*name)) {
+      if (changed_timelines && changed_timelines->Contains(name)) {
         continue;
       }
       UpdateMatchingTimeline(target_name, *name, value.Get(), matching_timeline,
@@ -721,8 +735,8 @@
   }
 
   // Search through timelines created or modified this CSSAnimationUpdate.
-  if (update) {
-    for (auto [name, value] : update->ChangedViewTimelines()) {
+  if (changed_timelines) {
+    for (auto [name, value] : *changed_timelines) {
       if (!value) {
         // A value of nullptr means that a currently existing timeline
         // was removed.
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.h b/third_party/blink/renderer/core/animation/css/css_animations.h
index 71a52399..19527cf 100644
--- a/third_party/blink/renderer/core/animation/css/css_animations.h
+++ b/third_party/blink/renderer/core/animation/css/css_animations.h
@@ -34,6 +34,7 @@
 #include "base/check_op.h"
 #include "third_party/blink/renderer/core/animation/css/css_animation_data.h"
 #include "third_party/blink/renderer/core/animation/css/css_animation_update.h"
+#include "third_party/blink/renderer/core/animation/css/css_timeline_map.h"
 #include "third_party/blink/renderer/core/animation/css/css_transition_data.h"
 #include "third_party/blink/renderer/core/animation/inert_effect.h"
 #include "third_party/blink/renderer/core/animation/interpolation.h"
@@ -308,6 +309,11 @@
   static CSSViewTimeline* FindViewTimelineForElement(const ScopedCSSName& name,
                                                      const CSSAnimationUpdate*,
                                                      const TimelineData*);
+  template <typename TimelineType>
+  static TimelineType* FindTimelineForElement(
+      const ScopedCSSName& name,
+      const CSSTimelineMap<TimelineType>* existing_timelines,
+      const CSSTimelineMap<TimelineType>* changed_timelines);
 
   static ScrollTimeline* FindPreviousSiblingAncestorTimeline(
       const ScopedCSSName& name,
diff --git a/third_party/blink/renderer/core/animation/css/css_timeline_map.h b/third_party/blink/renderer/core/animation/css/css_timeline_map.h
new file mode 100644
index 0000000..0801337
--- /dev/null
+++ b/third_party/blink/renderer/core/animation/css/css_timeline_map.h
@@ -0,0 +1,25 @@
+// 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 THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CSS_TIMELINE_MAP_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CSS_TIMELINE_MAP_H_
+
+#include "third_party/blink/renderer/core/core_export.h"
+
+#include "third_party/blink/renderer/core/style/scoped_css_name.h"
+#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
+
+namespace blink {
+
+class CSSViewTimeline;
+
+template <typename TimelineType>
+using CSSTimelineMap =
+    HeapHashMap<Member<const ScopedCSSName>, Member<TimelineType>>;
+
+using CSSViewTimelineMap = CSSTimelineMap<CSSViewTimeline>;
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_ANIMATION_CSS_CSS_TIMELINE_MAP_H_
diff --git a/third_party/blink/renderer/core/animation/css/css_view_timeline.h b/third_party/blink/renderer/core/animation/css/css_view_timeline.h
index 5fa2c49b..6db15ba 100644
--- a/third_party/blink/renderer/core/animation/css/css_view_timeline.h
+++ b/third_party/blink/renderer/core/animation/css/css_view_timeline.h
@@ -41,9 +41,6 @@
   bool Matches(const Options&) const;
 };
 
-using CSSViewTimelineMap =
-    HeapHashMap<Member<const ScopedCSSName>, Member<CSSViewTimeline>>;
-
 template <>
 struct DowncastTraits<CSSViewTimeline> {
   static bool AllowFrom(const AnimationTimeline& value) {
diff --git a/third_party/blink/renderer/core/animation/property_handle.cc b/third_party/blink/renderer/core/animation/property_handle.cc
index 09034f7..e2e08c2 100644
--- a/third_party/blink/renderer/core/animation/property_handle.cc
+++ b/third_party/blink/renderer/core/animation/property_handle.cc
@@ -30,11 +30,11 @@
     case kHandleCSSProperty:
       return static_cast<int>(css_property_->PropertyID());
     case kHandleCSSCustomProperty:
-      return AtomicStringHash::GetHash(property_name_);
+      return WTF::GetHash(property_name_);
     case kHandlePresentationAttribute:
       return -static_cast<int>(css_property_->PropertyID());
     case kHandleSVGAttribute:
-      return QualifiedNameHash::GetHash(*svg_attribute_);
+      return WTF::GetHash(*svg_attribute_);
     default:
       NOTREACHED();
       return 0;
diff --git a/third_party/blink/renderer/core/animation/property_handle.h b/third_party/blink/renderer/core/animation/property_handle.h
index 3646e97..0145a7c 100644
--- a/third_party/blink/renderer/core/animation/property_handle.h
+++ b/third_party/blink/renderer/core/animation/property_handle.h
@@ -132,24 +132,12 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::PropertyHandle> {
-  STATIC_ONLY(DefaultHash);
+struct HashTraits<blink::PropertyHandle>
+    : SimpleClassHashTraits<blink::PropertyHandle> {
   static unsigned GetHash(const blink::PropertyHandle& handle) {
     return handle.GetHash();
   }
 
-  static bool Equal(const blink::PropertyHandle& a,
-                    const blink::PropertyHandle& b) {
-    return a == b;
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-template <>
-struct HashTraits<blink::PropertyHandle>
-    : SimpleClassHashTraits<blink::PropertyHandle> {
-  static const bool kNeedsDestruction = true;
   static void ConstructDeletedValue(blink::PropertyHandle& slot, bool) {
     new (NotNullTag::kNotNull, &slot) blink::PropertyHandle(
         blink::PropertyHandle::DeletedValueForHashTraits());
diff --git a/third_party/blink/renderer/core/css/container_selector.cc b/third_party/blink/renderer/core/css/container_selector.cc
index 8318813..a27fe6ef 100644
--- a/third_party/blink/renderer/core/css/container_selector.cc
+++ b/third_party/blink/renderer/core/css/container_selector.cc
@@ -31,7 +31,7 @@
 }
 
 unsigned ContainerSelector::GetHash() const {
-  unsigned hash = !name_.empty() ? AtomicStringHash::GetHash(name_) : 0;
+  unsigned hash = !name_.empty() ? WTF::GetHash(name_) : 0;
   WTF::AddIntToHash(hash, physical_axes_.value());
   WTF::AddIntToHash(hash, logical_axes_.value());
   WTF::AddIntToHash(hash, has_style_query_);
diff --git a/third_party/blink/renderer/core/css/container_selector.h b/third_party/blink/renderer/core/css/container_selector.h
index c9d72e4d..7207c920 100644
--- a/third_party/blink/renderer/core/css/container_selector.h
+++ b/third_party/blink/renderer/core/css/container_selector.h
@@ -80,26 +80,14 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::ContainerSelector> {
-  STATIC_ONLY(DefaultHash);
+struct HashTraits<blink::ContainerSelector>
+    : SimpleClassHashTraits<blink::ContainerSelector> {
   static unsigned GetHash(const blink::ContainerSelector& selector) {
     return selector.GetHash();
   }
-
-  static bool Equal(const blink::ContainerSelector& a,
-                    const blink::ContainerSelector& b) {
-    return a == b;
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted =
-      DefaultHash<AtomicString>::safe_to_compare_to_empty_or_deleted;
-};
-
-template <>
-struct HashTraits<blink::ContainerSelector>
-    : SimpleClassHashTraits<blink::ContainerSelector> {
+  static constexpr bool kSafeToCompareToEmptyOrDeleted =
+      HashTraits<AtomicString>::kSafeToCompareToEmptyOrDeleted;
   static const bool kEmptyValueIsZero = false;
-  static const bool kNeedsDestruction = true;
 };
 
 }  // namespace WTF
diff --git a/third_party/blink/renderer/core/css/css_property_name.cc b/third_party/blink/renderer/core/css/css_property_name.cc
index 853f0bc..93f199b 100644
--- a/third_party/blink/renderer/core/css/css_property_name.cc
+++ b/third_party/blink/renderer/core/css/css_property_name.cc
@@ -41,7 +41,7 @@
 
 unsigned CSSPropertyName::GetHash() const {
   if (IsCustomProperty()) {
-    return AtomicStringHash::GetHash(custom_property_name_);
+    return WTF::GetHash(custom_property_name_);
   }
   return value_;
 }
diff --git a/third_party/blink/renderer/core/css/css_property_name.h b/third_party/blink/renderer/core/css/css_property_name.h
index ad96969..37492b7 100644
--- a/third_party/blink/renderer/core/css/css_property_name.h
+++ b/third_party/blink/renderer/core/css/css_property_name.h
@@ -81,7 +81,6 @@
   AtomicString custom_property_name_;
 
   friend class CSSPropertyNameTest;
-  friend struct ::WTF::DefaultHash<blink::CSSPropertyName>;
   friend struct ::WTF::HashTraits<blink::CSSPropertyName>;
 };
 
@@ -90,26 +89,14 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::CSSPropertyName> {
-  STATIC_ONLY(DefaultHash);
+struct HashTraits<blink::CSSPropertyName>
+    : SimpleClassHashTraits<blink::CSSPropertyName> {
   static unsigned GetHash(const blink::CSSPropertyName& name) {
     return name.GetHash();
   }
 
-  static bool Equal(const blink::CSSPropertyName& a,
-                    const blink::CSSPropertyName& b) {
-    return a == b;
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-template <>
-struct HashTraits<blink::CSSPropertyName>
-    : SimpleClassHashTraits<blink::CSSPropertyName> {
   using CSSPropertyName = blink::CSSPropertyName;
   static const bool kEmptyValueIsZero = false;
-  static const bool kNeedsDestruction = true;
   static void ConstructDeletedValue(CSSPropertyName& slot, bool) {
     new (NotNullTag::kNotNull, &slot)
         CSSPropertyName(CSSPropertyName::kDeletedValue);
diff --git a/third_party/blink/renderer/core/css/cssom/css_numeric_sum_value.h b/third_party/blink/renderer/core/css/cssom/css_numeric_sum_value.h
index a22230d..fc90979 100644
--- a/third_party/blink/renderer/core/css/cssom/css_numeric_sum_value.h
+++ b/third_party/blink/renderer/core/css/cssom/css_numeric_sum_value.h
@@ -18,9 +18,7 @@
   // A UnitMap maps units to exponents. e.g. the term
   // 1m/s^2 would have a unit map of { m: 1, s: -2 }.
   // UnitMaps must not contain entries with a zero value.
-  using UnitMap = WTF::HashMap<CSSPrimitiveValue::UnitType,
-                               int,
-                               WTF::IntHash<CSSPrimitiveValue::UnitType>>;
+  using UnitMap = WTF::HashMap<CSSPrimitiveValue::UnitType, int>;
 
   // A term is a number and a unit map e.g. 1px is represented as
   // (1, { px: 1 })
diff --git a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc
index fd23175..351316e 100644
--- a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc
+++ b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc
@@ -1658,7 +1658,6 @@
     const LayoutObject* layout_object,
     const ComputedStyle& style) {
   const bool is_for_columns = direction == kForColumns;
-  const bool is_layout_ng = RuntimeEnabledFeatures::LayoutNGEnabled();
   const ComputedGridTrackList& computed_grid_track_list =
       is_for_columns ? style.GridTemplateColumns() : style.GridTemplateRows();
   const Vector<GridTrackSize, 1>& legacy_track_sizes =
@@ -1671,9 +1670,7 @@
 
   // Handle the 'none' case.
   bool is_track_list_empty =
-      is_layout_ng
-          ? !computed_grid_track_list.TrackList().RepeaterCount()
-          : (legacy_track_sizes.empty() && auto_repeat_track_sizes.empty());
+      !computed_grid_track_list.TrackList().RepeaterCount();
   if (is_layout_grid && is_track_list_empty) {
     // For grids we should consider every listed track, whether implicitly or
     // explicitly created. Empty grids have a sole grid line per axis.
@@ -1756,13 +1753,6 @@
   };
 
   if (auto_repeat_track_sizes.empty()) {
-    if (!is_layout_ng) {
-      // If it's legacy grid or there's no repeat(), just add all the line names
-      // and track sizes.
-      PopulateGridTrackList(list, collector, legacy_track_sizes, getTrackSize);
-      return list;
-    }
-
     // TODO(ansollan): Add support for track lists with auto and integer
     // repeaters.
     wtf_size_t track_index = 0;
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
index 285b031..f3c1d3b 100644
--- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
@@ -1336,12 +1336,9 @@
         repeated_track_sizes.push_back(
             ConvertGridTrackSize(state, *auto_repeat_value));
       }
-      if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-        track_sizes.NGTrackList().AddRepeater(
-            repeated_track_sizes,
-            static_cast<NGGridTrackRepeater::RepeatType>(
-                computed_grid_track_list.auto_repeat_type));
-      }
+      track_sizes.NGTrackList().AddRepeater(
+          repeated_track_sizes, static_cast<NGGridTrackRepeater::RepeatType>(
+                                    computed_grid_track_list.auto_repeat_type));
       DCHECK(auto_repeat_track_sizes.empty());
       auto_repeat_track_sizes = std::move(repeated_track_sizes);
       computed_grid_track_list.auto_repeat_insertion_point =
@@ -1361,9 +1358,7 @@
         }
       }
 
-      if (RuntimeEnabledFeatures::LayoutNGEnabled() &&
-          (computed_grid_track_list.axis_type ==
-           GridAxisType::kStandaloneAxis)) {
+      if (computed_grid_track_list.axis_type == GridAxisType::kStandaloneAxis) {
         Vector<GridTrackSize, 1> repeater_track_sizes;
         for (auto integer_repeat_value : *grid_integer_repeat_value) {
           if (!integer_repeat_value->IsGridLineNamesValue()) {
@@ -1379,8 +1374,7 @@
     }
 
     ConvertLineNameOrTrackSize(**curr_value);
-    if (RuntimeEnabledFeatures::LayoutNGEnabled() &&
-        !curr_value->Get()->IsGridLineNamesValue()) {
+    if (!curr_value->Get()->IsGridLineNamesValue()) {
       track_sizes.NGTrackList().AddRepeater(
           {ConvertGridTrackSize(state, **curr_value)});
     }
diff --git a/third_party/blink/renderer/core/css/scripts/style_perftest_snap_page b/third_party/blink/renderer/core/css/scripts/style_perftest_snap_page
new file mode 100755
index 0000000..d8a4b9e
--- /dev/null
+++ b/third_party/blink/renderer/core/css/scripts/style_perftest_snap_page
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+# Copyright (c) 2017 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.
+
+"""
+Create a JSON bundle containing a snapshot of any webpage
+(HTML and stylesheets), suitable for the style perftest
+(style_perftest.cc).
+
+Use e.g. as:
+
+  third_party/blink/renderer/core/css/scripts/style_perftest_snap_page
+      --browser=content-shell-default \
+      --url=https://www.sesse.net/ \
+      --snapshot-path=whatever.json
+
+The file can then be put in third_party/blink/renderer/core/css/perftest_data/
+and/or be uploaded to the cloud buckets.
+
+User stylesheets are not included due to JavaScript limitations.
+
+Note that some pages with CORS profiles will deny getting stylesheets;
+if so, you may need to hack CSSStyleSheet::CanAccessRules()
+in your local build.
+"""
+
+import os
+import sys
+import codecs
+
+TELEMETRY_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), '../../../../../catapult/telemetry')
+sys.path.append(TELEMETRY_DIR)
+
+from telemetry.util import wpr_modes
+from telemetry.internal.browser import browser_options
+from telemetry.internal.browser import browser_finder
+from telemetry.internal.util import binary_manager
+
+JSON_SUFFIX = '.json'
+EXPENSIVE_JS_TIMEOUT_SECONDS = 240
+
+def _CreateBrowser(finder_options):
+  possible_browser = browser_finder.FindBrowser(finder_options)
+  return possible_browser.BrowserSession(finder_options.browser_options)
+
+def SnapPageToFile(finder_options, url, snapshot_path):
+  """ Save the HTML snapshot of the page whose address is |url| to
+  |snapshot_file|. If there are multiple iframes, only the first
+  (numerically lowest ID) will be saved.
+  """
+  with _CreateBrowser(finder_options) as browser:
+    tab = browser.tabs[0]
+    tab.Navigate(url)
+
+    print('Snapshotting content of %s. This could take a while...' % url)
+    tab.WaitForDocumentReadyStateToBeComplete()
+    tab.action_runner.WaitForNetworkQuiescence(
+        timeout_in_seconds=EXPENSIVE_JS_TIMEOUT_SECONDS)
+
+    context_id = list(tab.EnableAllContexts())[0]
+    tab.ExecuteJavaScript(
+       '''
+       var serializedDom = {
+         "html": document.documentElement.outerHTML,
+         "stylesheets": [],
+       };
+       for (let i = 0; i < document.styleSheets.length; ++i) {
+         let sheet = document.styleSheets[i];
+         let text = "";
+         for (let j = 0; j < sheet.rules.length; ++j) {
+           text += sheet.rules[j].cssText + '\\n';
+         }
+         serializedDom.stylesheets.push({
+           "type": "author",
+           "text": text
+         });
+       }
+       ''', context_id=context_id,
+       timeout=EXPENSIVE_JS_TIMEOUT_SECONDS)
+
+    page_snapshot = tab.EvaluateJavaScript('JSON.stringify(serializedDom)',
+                                           context_id=context_id)
+
+    print('Writing page snapshot [path=%s].' % snapshot_path)
+    with codecs.open(snapshot_path, 'w', 'utf-8') as f:
+      f.write(page_snapshot)
+
+def main(args):
+  options = browser_options.BrowserFinderOptions()
+  parser = options.CreateParser(
+      usage='Create a snapshot of the page, suitable for the style perftest')
+  parser.add_option('--url', help='URL of the web page to record')
+  parser.add_option('--snapshot-path', help='Where to save the snapshot',
+      default='snapshot.json')
+  parser.parse_args(args)
+
+  binary_manager.InitDependencyManager([])
+
+  if not options.snapshot_path.endswith(JSON_SUFFIX):
+    raise ValueError('Snapshot path should end with \'%s\' [value=\'%s\'].' % (
+        JSON_SUFFIX, options.snapshot_path))
+
+  SnapPageToFile(options, options.url, options.snapshot_path)
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/third_party/blink/renderer/core/css/style_recalc_context.cc b/third_party/blink/renderer/core/css/style_recalc_context.cc
index 0b6096bd..fff95c1 100644
--- a/third_party/blink/renderer/core/css/style_recalc_context.cc
+++ b/third_party/blink/renderer/core/css/style_recalc_context.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/css/style_recalc_context.h"
 
+#include "base/debug/dump_without_crashing.h"
 #include "third_party/blink/renderer/core/dom/layout_tree_builder_traversal.h"
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/html/html_slot_element.h"
@@ -19,8 +20,10 @@
     const ComputedStyle* style = container->GetComputedStyle();
     if (!style) {
       // TODO(crbug.com/1400631): Eliminate all invalid calls to
-      // StyleRecalcContext::From[Inclusive]Ancestors.
-      NOTREACHED();
+      // StyleRecalcContext::From[Inclusive]Ancestors, then either turn
+      // if (!style) into CHECK(style) or simplify into checking:
+      // container->GetComputedStyle()->IsContainerForSizeContainerQueries()
+      base::debug::DumpWithoutCrashing();
       return nullptr;
     }
     if (style->IsContainerForSizeContainerQueries()) {
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 84c3ef6..d87d2e1 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -593,9 +593,6 @@
 // `NGBlockNode::Layout`, then we recalc the skipped descendants during
 // layout-tree building instead.
 bool IsGuaranteedToEnterNGBlockNodeLayout(const LayoutObject& layout_object) {
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    return false;
-  }
   auto* box = DynamicTo<LayoutBox>(layout_object);
   if (!box) {
     return false;
@@ -3782,10 +3779,8 @@
         old_style->HasChildDependentFlags()) {
       new_style->CopyChildDependentFlagsFrom(*old_style);
     }
-    if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-      if (UpdateForceLegacyLayout(*new_style, old_style.get())) {
-        child_change = child_change.ForceReattachLayoutTree();
-      }
+    if (UpdateForceLegacyLayout(*new_style, old_style.get())) {
+      child_change = child_change.ForceReattachLayoutTree();
     }
     auto* evaluator =
         ComputeContainerQueryEvaluator(*this, old_style.get(), *new_style);
@@ -6743,9 +6738,7 @@
   // that we don't get to RecalcOwnStyle() (regular DOM nodes do get there,
   // since their style isn't calculated directly upon insertion). Need to check
   // now if the element requires legacy layout.
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    pseudo_element->UpdateForceLegacyLayout(*pseudo_style, nullptr);
-  }
+  pseudo_element->UpdateForceLegacyLayout(*pseudo_style, nullptr);
 
   probe::PseudoElementCreated(pseudo_element);
 
diff --git a/third_party/blink/renderer/core/dom/node_lists_node_data.h b/third_party/blink/renderer/core/dom/node_lists_node_data.h
index 79cc7234..62c0139 100644
--- a/third_party/blink/renderer/core/dom/node_lists_node_data.h
+++ b/third_party/blink/renderer/core/dom/node_lists_node_data.h
@@ -30,6 +30,7 @@
 #include "third_party/blink/renderer/core/html/collection_type.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "third_party/blink/renderer/platform/wtf/hash_traits.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
 
@@ -59,25 +60,21 @@
   }
 
   using NamedNodeListKey = std::pair<CollectionType, AtomicString>;
-  struct NodeListAtomicCacheMapEntryHash {
-    STATIC_ONLY(NodeListAtomicCacheMapEntryHash);
+  struct NodeListAtomicCacheMapEntryHashTraits
+      : HashTraits<std::pair<CollectionType, AtomicString>> {
     static unsigned GetHash(const NamedNodeListKey& entry) {
-      return DefaultHash<AtomicString>::GetHash(
-                 entry.second == CSSSelector::UniversalSelectorAtom()
-                     ? g_star_atom
-                     : entry.second) +
+      return WTF::GetHash(entry.second == CSSSelector::UniversalSelectorAtom()
+                              ? g_star_atom
+                              : entry.second) +
              entry.first;
     }
-    static bool Equal(const NamedNodeListKey& a, const NamedNodeListKey& b) {
-      return a == b;
-    }
-    static const bool safe_to_compare_to_empty_or_deleted =
-        DefaultHash<AtomicString>::safe_to_compare_to_empty_or_deleted;
+    static constexpr bool kSafeToCompareToEmptyOrDeleted =
+        HashTraits<AtomicString>::kSafeToCompareToEmptyOrDeleted;
   };
 
   typedef HeapHashMap<NamedNodeListKey,
                       Member<LiveNodeListBase>,
-                      NodeListAtomicCacheMapEntryHash>
+                      NodeListAtomicCacheMapEntryHashTraits>
       NodeListAtomicNameCacheMap;
   typedef HeapHashMap<QualifiedName, Member<TagCollectionNS>>
       TagCollectionNSCache;
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 b7b3394..c7ef985 100644
--- a/third_party/blink/renderer/core/dom/nth_index_cache.cc
+++ b/third_party/blink/renderer/core/dom/nth_index_cache.cc
@@ -33,12 +33,12 @@
 }
 
 unsigned NthIndexCache::Key::GetHash() const {
-  unsigned hash = WTF::MemberHash<Node>::GetHash(parent);
+  unsigned hash = WTF::GetHash(parent);
   if (filter != nullptr) {
-    WTF::AddIntToHash(hash, WTF::MemberHash<CSSSelectorList>::GetHash(filter));
+    WTF::AddIntToHash(hash, WTF::GetHash(filter));
   }
   if (!child_tag_name.empty()) {
-    WTF::AddIntToHash(hash, DefaultHash<String>::GetHash(child_tag_name));
+    WTF::AddIntToHash(hash, WTF::GetHash(child_tag_name));
   }
   return hash;
 }
@@ -239,7 +239,7 @@
 void NthIndexCache::EnsureCache() {
   if (!cache_) {
     cache_ = MakeGarbageCollected<
-        HeapHashMap<Member<Key>, Member<NthIndexData>, KeyHash>>();
+        HeapHashMap<Member<Key>, Member<NthIndexData>, KeyHashTraits>>();
   }
 }
 
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 6f58598a..533702e 100644
--- a/third_party/blink/renderer/core/dom/nth_index_cache.h
+++ b/third_party/blink/renderer/core/dom/nth_index_cache.h
@@ -126,15 +126,12 @@
 
   // Helper needed to make sure Key is compared by value and not by pointer,
   // even though the hash map key is a Member<> (which Oilpan forces us to).
-  struct KeyHash {
-    STATIC_ONLY(KeyHash);
-
+  struct KeyHashTraits : WTF::MemberHashTraits<Key> {
     static unsigned GetHash(const Member<Key>& key) { return key->GetHash(); }
     static bool Equal(const Member<Key>& a, const Member<Key>& b) {
-      return (!a && !b) || (a && b && *a == *b);
+      return *a == *b;
     }
-
-    static const bool safe_to_compare_to_empty_or_deleted = true;
+    static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
   };
 
   // Helper needed to allow calling Find() with a Key instead of Member<Key>
@@ -177,7 +174,8 @@
 
   // Effectively maps (parent, optional tag name, child) → index.
   // (The child part of the key is in NthIndexData.)
-  HeapHashMap<Member<Key>, Member<NthIndexData>, KeyHash>* cache_ = nullptr;
+  HeapHashMap<Member<Key>, Member<NthIndexData>, KeyHashTraits>* cache_ =
+      nullptr;
 
 #if DCHECK_IS_ON()
   uint64_t dom_tree_version_;
diff --git a/third_party/blink/renderer/core/dom/qualified_name.cc b/third_party/blink/renderer/core/dom/qualified_name.cc
index c17ad38..c00d80b 100644
--- a/third_party/blink/renderer/core/dom/qualified_name.cc
+++ b/third_party/blink/renderer/core/dom/qualified_name.cc
@@ -40,8 +40,7 @@
 
 ASSERT_SIZE(QualifiedName::QualifiedNameImpl, SameSizeAsQualifiedNameImpl);
 
-using QualifiedNameCache =
-    HashSet<QualifiedName::QualifiedNameImpl*, QualifiedNameHash>;
+using QualifiedNameCache = HashSet<QualifiedName::QualifiedNameImpl*>;
 
 static QualifiedNameCache& GetQualifiedNameCache() {
   // This code is lockless and thus assumes it all runs on one thread!
diff --git a/third_party/blink/renderer/core/dom/qualified_name.h b/third_party/blink/renderer/core/dom/qualified_name.h
index a63d5a1..0ff5a09 100644
--- a/third_party/blink/renderer/core/dom/qualified_name.h
+++ b/third_party/blink/renderer/core/dom/qualified_name.h
@@ -197,29 +197,6 @@
   return StringHasher::HashMemory<sizeof(QualifiedNameComponents)>(&buf);
 }
 
-struct CORE_EXPORT QualifiedNameHash {
-  STATIC_ONLY(QualifiedNameHash);
-  static unsigned GetHash(const QualifiedName& name) {
-    return GetHash(name.Impl());
-  }
-
-  static unsigned GetHash(const QualifiedName::QualifiedNameImpl* name) {
-    if (!name->existing_hash_)
-      name->existing_hash_ = name->ComputeHash();
-    return name->existing_hash_;
-  }
-
-  static bool Equal(const QualifiedName& a, const QualifiedName& b) {
-    return a == b;
-  }
-  static bool Equal(const QualifiedName::QualifiedNameImpl* a,
-                    const QualifiedName::QualifiedNameImpl* b) {
-    return a == b;
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = false;
-};
-
 CORE_EXPORT std::ostream& operator<<(std::ostream&, const QualifiedName&);
 
 }  // namespace blink
@@ -229,28 +206,37 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::QualifiedName> : blink::QualifiedNameHash {};
+struct HashTraits<blink::QualifiedName::QualifiedNameImpl*>
+    : GenericHashTraits<blink::QualifiedName::QualifiedNameImpl*> {
+  static unsigned GetHash(const blink::QualifiedName::QualifiedNameImpl* name) {
+    if (!name->existing_hash_) {
+      name->existing_hash_ = name->ComputeHash();
+    }
+    return name->existing_hash_;
+  }
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
+};
 
 template <>
 struct HashTraits<blink::QualifiedName>
-    : SimpleClassHashTraits<blink::QualifiedName> {
-  static const bool kEmptyValueIsZero = false;
-  static bool IsEmptyValue(const blink::QualifiedName& value) {
-    return value == EmptyValue();
+    : GenericHashTraits<blink::QualifiedName> {
+  using QualifiedNameImpl = blink::QualifiedName::QualifiedNameImpl;
+  static unsigned GetHash(const blink::QualifiedName& name) {
+    return WTF::GetHash(name.Impl());
   }
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
+
+  static constexpr bool kEmptyValueIsZero = false;
   static const blink::QualifiedName& EmptyValue() {
     return blink::QualifiedName::Null();
   }
 
   static bool IsDeletedValue(const blink::QualifiedName& value) {
-    using QualifiedNameImpl = blink::QualifiedName::QualifiedNameImpl;
     return HashTraits<scoped_refptr<QualifiedNameImpl>>::IsDeletedValue(
         value.impl_);
   }
-
   static void ConstructDeletedValue(blink::QualifiedName& slot,
                                     bool zero_value) {
-    using QualifiedNameImpl = blink::QualifiedName::QualifiedNameImpl;
     HashTraits<scoped_refptr<QualifiedNameImpl>>::ConstructDeletedValue(
         slot.impl_, zero_value);
   }
diff --git a/third_party/blink/renderer/core/dom/visited_link_state.h b/third_party/blink/renderer/core/dom/visited_link_state.h
index b5202cb..d2956d7 100644
--- a/third_party/blink/renderer/core/dom/visited_link_state.h
+++ b/third_party/blink/renderer/core/dom/visited_link_state.h
@@ -61,7 +61,7 @@
   EInsideLink DetermineLinkStateSlowCase(const Element&);
 
   Member<const Document> document_;
-  HashSet<LinkHash, LinkHashHash> links_checked_for_visited_state_;
+  HashSet<LinkHash, LinkHashHashTraits> links_checked_for_visited_state_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/editing/layout_selection.cc b/third_party/blink/renderer/core/editing/layout_selection.cc
index 4554a91..d831bb8 100644
--- a/third_party/blink/renderer/core/editing/layout_selection.cc
+++ b/third_party/blink/renderer/core/editing/layout_selection.cc
@@ -924,8 +924,6 @@
 
   SelectionPaintRange* new_range = MakeGarbageCollected<SelectionPaintRange>(
       *start_node, start_offset, *end_node, end_offset);
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return {new_range, std::move(selected_objects)};
   return {ComputeNewPaintRange(*new_range), std::move(selected_objects)};
 }
 
diff --git a/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc b/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc
index 935181c..3a43aef9 100644
--- a/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc
+++ b/third_party/blink/renderer/core/editing/markers/document_marker_controller.cc
@@ -796,7 +796,7 @@
       text, DocumentMarker::MarkerTypes(DocumentMarker::kCustomHighlight));
   DocumentMarkerVector result{};
   using NameToCustomHighlightMarkerMap =
-      HashMap<String, Member<CustomHighlightMarker>, StringHash>;
+      HashMap<String, Member<CustomHighlightMarker>>;
   NameToCustomHighlightMarkerMap name_to_last_custom_highlight_marker_seen;
 
   for (const auto& current_marker : custom_highlight_markers) {
diff --git a/third_party/blink/renderer/core/editing/visible_position.cc b/third_party/blink/renderer/core/editing/visible_position.cc
index 0a8417b..062766be 100644
--- a/third_party/blink/renderer/core/editing/visible_position.cc
+++ b/third_party/blink/renderer/core/editing/visible_position.cc
@@ -91,18 +91,10 @@
   if (InSameLine(position1, position2))
     return false;
   // Return whether the positions are in the same inline formatting context.
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    const LayoutBlockFlow* block1 =
-        NGInlineFormattingContextOf(position1.GetPosition());
-    return block1 &&
-           block1 == NGInlineFormattingContextOf(position2.GetPosition());
-  }
-  const InlineBox* inline_box1 = ComputeInlineBoxPosition(position1).inline_box;
-  if (!inline_box1)
-    return false;
-  const InlineBox* inline_box2 = ComputeInlineBoxPosition(position2).inline_box;
-  return inline_box2 &&
-         inline_box1->Root().LineBoxes() == inline_box2->Root().LineBoxes();
+  const LayoutBlockFlow* block1 =
+      NGInlineFormattingContextOf(position1.GetPosition());
+  return block1 &&
+         block1 == NGInlineFormattingContextOf(position2.GetPosition());
 }
 
 template <typename Strategy>
diff --git a/third_party/blink/renderer/core/editing/visible_units_line.cc b/third_party/blink/renderer/core/editing/visible_units_line.cc
index 202b02e..ab1f73f 100644
--- a/third_party/blink/renderer/core/editing/visible_units_line.cc
+++ b/third_party/blink/renderer/core/editing/visible_units_line.cc
@@ -464,24 +464,24 @@
   DCHECK_EQ(position1.GetDocument(), position2.GetDocument());
   DCHECK(!position1.GetDocument()->NeedsLayoutTreeUpdate());
 
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    const LayoutBlockFlow* block1 =
-        NGInlineFormattingContextOf(position1.GetPosition());
-    const LayoutBlockFlow* block2 =
-        NGInlineFormattingContextOf(position2.GetPosition());
-    if (block1 || block2) {
-      if (block1 != block2)
-        return false;
-      if (!InSameNGLineBox(position1, position2))
-        return false;
-      // See (ParameterizedVisibleUnitsLineTest.InSameLineWithMixedEditability
-      return RootEditableElementOf(position1.GetPosition()) ==
-             RootEditableElementOf(position2.GetPosition());
+  const LayoutBlockFlow* block1 =
+      NGInlineFormattingContextOf(position1.GetPosition());
+  const LayoutBlockFlow* block2 =
+      NGInlineFormattingContextOf(position2.GetPosition());
+  if (block1 || block2) {
+    if (block1 != block2) {
+      return false;
     }
-
-    // Neither positions are in LayoutNG. Fall through to legacy handling.
+    if (!InSameNGLineBox(position1, position2)) {
+      return false;
+    }
+    // See (ParameterizedVisibleUnitsLineTest.InSameLineWithMixedEditability
+    return RootEditableElementOf(position1.GetPosition()) ==
+           RootEditableElementOf(position2.GetPosition());
   }
 
+  // Neither positions are in LayoutNG. Fall through to legacy handling.
+
   PositionWithAffinityTemplate<Strategy> start_of_line1 =
       StartOfLine(position1);
   PositionWithAffinityTemplate<Strategy> start_of_line2 =
diff --git a/third_party/blink/renderer/core/execution_context/window_agent_factory.cc b/third_party/blink/renderer/core/execution_context/window_agent_factory.cc
index 82ecdace..662629a 100644
--- a/third_party/blink/renderer/core/execution_context/window_agent_factory.cc
+++ b/third_party/blink/renderer/core/execution_context/window_agent_factory.cc
@@ -110,8 +110,8 @@
 // static
 unsigned WindowAgentFactory::SchemeAndRegistrableDomainTraits::GetHash(
     const SchemeAndRegistrableDomain& value) {
-  return WTF::HashInts(StringHash::GetHash(value.scheme),
-                       StringHash::GetHash(value.registrable_domain));
+  return WTF::HashInts(WTF::GetHash(value.scheme),
+                       WTF::GetHash(value.registrable_domain));
 }
 
 // static
diff --git a/third_party/blink/renderer/core/execution_context/window_agent_factory.h b/third_party/blink/renderer/core/execution_context/window_agent_factory.h
index 81e443d..d7af66d 100644
--- a/third_party/blink/renderer/core/execution_context/window_agent_factory.h
+++ b/third_party/blink/renderer/core/execution_context/window_agent_factory.h
@@ -87,7 +87,7 @@
   // Use the SecurityOrigin itself as the key for opaque origins.
   HeapHashMap<scoped_refptr<const SecurityOrigin>,
               WeakMember<WindowAgent>,
-              SecurityOriginHash>
+              SecurityOriginHashTraits>
       opaque_origin_agents_;
 
   // Use the SecurityOrigin itself as the key for origin-keyed origins.
@@ -96,7 +96,7 @@
   // origin-keyed isolation relies on a single mechanism.
   HeapHashMap<scoped_refptr<const SecurityOrigin>,
               WeakMember<WindowAgent>,
-              SecurityOriginHash>
+              SecurityOriginHashTraits>
       origin_keyed_agent_cluster_agents_;
 
   // Use registerable domain as the key for general tuple origins.
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
index 33baa5f2..21530c5 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client.h
+++ b/third_party/blink/renderer/core/frame/local_frame_client.h
@@ -232,7 +232,7 @@
   // optimizations can be preloaded.
   virtual void PreloadSubresourceOptimizationsForOrigins(
       const WTF::HashSet<scoped_refptr<const SecurityOrigin>,
-                         SecurityOriginHash>& origins) {}
+                         SecurityOriginHashTraits>& origins) {}
 
   // Transmits the change in the set of watched CSS selectors property that
   // match any element on the frame.
diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
index dccf5ca..4cb6976 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
@@ -774,8 +774,8 @@
 }
 
 void LocalFrameClientImpl::PreloadSubresourceOptimizationsForOrigins(
-    const WTF::HashSet<scoped_refptr<const SecurityOrigin>, SecurityOriginHash>&
-        origins) {
+    const WTF::HashSet<scoped_refptr<const SecurityOrigin>,
+                       SecurityOriginHashTraits>& origins) {
   if (WebLocalFrameClient* client = web_frame_->Client()) {
     std::vector<WebSecurityOrigin> origins_list;
     for (const auto& origin : origins) {
diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.h b/third_party/blink/renderer/core/frame/local_frame_client_impl.h
index 9592a957..aac491c 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client_impl.h
+++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.h
@@ -160,7 +160,7 @@
   void DidObserveLayoutShift(double score, bool after_input_or_scroll) override;
   void PreloadSubresourceOptimizationsForOrigins(
       const WTF::HashSet<scoped_refptr<const SecurityOrigin>,
-                         SecurityOriginHash>& origins) override;
+                         SecurityOriginHashTraits>& origins) override;
   void SelectorMatchChanged(const Vector<String>& added_selectors,
                             const Vector<String>& removed_selectors) override;
 
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index 6e465e4..4db8e65f 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -1478,21 +1478,21 @@
       root.IsLayoutFlowThread())
     return false;
 
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    // Do not pre-layout objects that are fully managed by LayoutNG; it is not
-    // necessary and may lead to double layouts. We do need to pre-layout
-    // objects whose containing block is a legacy object so that it can
-    // properly compute its intrinsic size.
-    if (IsManagedByLayoutNG(root))
-      return false;
+  // Do not pre-layout objects that are fully managed by LayoutNG; it is not
+  // necessary and may lead to double layouts. We do need to pre-layout objects
+  // whose containing block is a legacy object so that it can properly compute
+  // its intrinsic size.
+  if (IsManagedByLayoutNG(root)) {
+    return false;
+  }
 
-    // If the root is legacy but has |CachedLayoutResult|, its parent is NG,
-    // which called |RunLegacyLayout()|. This parent not only needs to run
-    // pre-layout, but also clearing |NeedsLayout()| without updating
-    // |CachedLayoutResult| is harmful.
-    if (const auto* box = DynamicTo<LayoutBox>(root)) {
-      if (box->GetSingleCachedLayoutResult())
-        return false;
+  // If the root is legacy but has |CachedLayoutResult|, its parent is NG, which
+  // called |RunLegacyLayout()|. This parent not only needs to run pre-layout,
+  // but also clearing |NeedsLayout()| without updating |CachedLayoutResult| is
+  // harmful.
+  if (const auto* box = DynamicTo<LayoutBox>(root)) {
+    if (box->GetSingleCachedLayoutResult()) {
+      return false;
     }
   }
 
diff --git a/third_party/blink/renderer/core/frame/location_report_body.cc b/third_party/blink/renderer/core/frame/location_report_body.cc
index 142e45c..ccd4712 100644
--- a/third_party/blink/renderer/core/frame/location_report_body.cc
+++ b/third_party/blink/renderer/core/frame/location_report_body.cc
@@ -44,9 +44,8 @@
   const absl::optional<uint32_t> line = lineNumber(), column = columnNumber();
 
   unsigned hash = sourceFile().IsNull() ? 0 : sourceFile().Impl()->GetHash();
-  hash = WTF::HashInts(hash, line ? DefaultHash<uint32_t>::GetHash(*line) : 0);
-  hash =
-      WTF::HashInts(hash, column ? DefaultHash<uint32_t>::GetHash(*column) : 0);
+  hash = WTF::HashInts(hash, line ? WTF::GetHash(*line) : 0);
+  hash = WTF::HashInts(hash, column ? WTF::GetHash(*column) : 0);
   return hash;
 }
 
diff --git a/third_party/blink/renderer/core/highlight/highlight_registry_map_entry.h b/third_party/blink/renderer/core/highlight/highlight_registry_map_entry.h
index 0fc4ad70..35443c6 100644
--- a/third_party/blink/renderer/core/highlight/highlight_registry_map_entry.h
+++ b/third_party/blink/renderer/core/highlight/highlight_registry_map_entry.h
@@ -32,9 +32,8 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::Member<blink::HighlightRegistryMapEntry>> {
-  STATIC_ONLY(DefaultHash);
-
+struct HashTraits<blink::Member<blink::HighlightRegistryMapEntry>>
+    : MemberHashTraits<blink::HighlightRegistryMapEntry> {
   // Note that GetHash and Equal only take into account the |highlight_name|
   // because |HighlightRegistryMapEntry| is used for storing map entries
   // inside a set (i.e. there can only be one map entry in the set with the
@@ -42,16 +41,17 @@
   static inline unsigned GetHash(
       const blink::Member<blink::HighlightRegistryMapEntry>& key) {
     DCHECK(key);
-    return AtomicStringHash::GetHash(key->highlight_name);
+    return WTF::GetHash(key->highlight_name);
   }
   static inline bool Equal(
       const blink::Member<blink::HighlightRegistryMapEntry>& a,
       const blink::Member<blink::HighlightRegistryMapEntry>& b) {
     DCHECK(a && b);
-    return AtomicStringHash::Equal(a->highlight_name, b->highlight_name);
+    return HashTraits<AtomicString>::Equal(a->highlight_name,
+                                           b->highlight_name);
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 }  // namespace WTF
diff --git a/third_party/blink/renderer/core/html/anchor_element_metrics.cc b/third_party/blink/renderer/core/html/anchor_element_metrics.cc
index 33e30a25..af562d9 100644
--- a/third_party/blink/renderer/core/html/anchor_element_metrics.cc
+++ b/third_party/blink/renderer/core/html/anchor_element_metrics.cc
@@ -154,7 +154,7 @@
 // destroyed and a new one is created with the same address. We don't mind this
 // issue as the anchor ID is only used for metric collection.
 uint32_t AnchorElementId(const HTMLAnchorElement& element) {
-  return WTF::PtrHash<const HTMLAnchorElement>::GetHash(&element);
+  return WTF::GetHash(&element);
 }
 
 mojom::blink::AnchorElementMetricsPtr CreateAnchorElementMetrics(
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_descriptor_hash.h b/third_party/blink/renderer/core/html/custom/custom_element_descriptor_hash.h
index f807472..780aee6 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element_descriptor_hash.h
+++ b/third_party/blink/renderer/core/html/custom/custom_element_descriptor_hash.h
@@ -10,31 +10,16 @@
 #include "third_party/blink/renderer/platform/wtf/hash_traits.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
 
-namespace blink {
-
-struct CustomElementDescriptorHash {
-  STATIC_ONLY(CustomElementDescriptorHash);
-  static unsigned GetHash(const CustomElementDescriptor& descriptor) {
-    return WTF::HashInts(AtomicStringHash::GetHash(descriptor.GetName()),
-                         AtomicStringHash::GetHash(descriptor.LocalName()));
-  }
-
-  static bool Equal(const CustomElementDescriptor& a,
-                    const CustomElementDescriptor& b) {
-    return a == b;
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-}  // namespace blink
-
 namespace WTF {
 
 template <>
 struct HashTraits<blink::CustomElementDescriptor>
     : SimpleClassHashTraits<blink::CustomElementDescriptor> {
   STATIC_ONLY(HashTraits);
+  static unsigned GetHash(const blink::CustomElementDescriptor& descriptor) {
+    return WTF::HashInts(WTF::GetHash(descriptor.GetName()),
+                         WTF::GetHash(descriptor.LocalName()));
+  }
   static const bool kEmptyValueIsZero =
       HashTraits<AtomicString>::kEmptyValueIsZero;
 
@@ -48,10 +33,6 @@
   }
 };
 
-template <>
-struct DefaultHash<blink::CustomElementDescriptor>
-    : blink::CustomElementDescriptorHash {};
-
 }  // namespace WTF
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_CUSTOM_CUSTOM_ELEMENT_DESCRIPTOR_HASH_H_
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_registry.h b/third_party/blink/renderer/core/html/custom/custom_element_registry.h
index 5a6cf89..ae19553 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element_registry.h
+++ b/third_party/blink/renderer/core/html/custom/custom_element_registry.h
@@ -81,22 +81,21 @@
   bool element_definition_is_running_;
 
   // Hashes Member<V8CustomElementConstructor> by their v8 callback objects.
-  struct V8CustomElementConstructorHash {
-    STATIC_ONLY(V8CustomElementConstructorHash);
+  struct V8CustomElementConstructorHashTraits
+      : WTF::MemberHashTraits<V8CustomElementConstructor> {
     static unsigned GetHash(
         const Member<V8CustomElementConstructor>& constructor) {
       return constructor->CallbackObject()->GetIdentityHash();
     }
     static bool Equal(const Member<V8CustomElementConstructor>& a,
                       const Member<V8CustomElementConstructor>& b) {
-      return (!a && !b) ||
-             (a && b && a->CallbackObject() == b->CallbackObject());
+      return a->CallbackObject() == b->CallbackObject();
     }
-    static const bool safe_to_compare_to_empty_or_deleted = true;
+    static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
   };
   using ConstructorMap = HeapHashMap<Member<V8CustomElementConstructor>,
                                      Member<CustomElementDefinition>,
-                                     V8CustomElementConstructorHash>;
+                                     V8CustomElementConstructorHashTraits>;
   ConstructorMap constructor_map_;
 
   using NameMap = HeapHashMap<AtomicString, Member<CustomElementDefinition>>;
diff --git a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
index a1c7702..02b4e479 100644
--- a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
@@ -1283,34 +1283,17 @@
     return;
 
   FontCachePurgePreventer preventer;
-  auto* layout_text = To<LayoutText>(layout_object);
-
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    if (layout_object->IsInLayoutNGInlineFormattingContext()) {
-      NGInlineCursor cursor;
-      cursor.MoveTo(*layout_object);
-      for (; cursor; cursor.MoveToNextForSameLayoutObject()) {
-        const ShapeResultView* shape_result =
-            cursor.Current().TextShapeResult();
-        if (!shape_result)
-          continue;
-        Vector<ShapeResult::RunFontData> run_font_data_list;
-        shape_result->GetRunFontData(&run_font_data_list);
-        CollectPlatformFontsFromRunFontDataList(run_font_data_list, font_stats);
-      }
-      return;
+  DCHECK(layout_object->IsInLayoutNGInlineFormattingContext());
+  NGInlineCursor cursor;
+  cursor.MoveTo(*layout_object);
+  for (; cursor; cursor.MoveToNextForSameLayoutObject()) {
+    const ShapeResultView* shape_result = cursor.Current().TextShapeResult();
+    if (!shape_result) {
+      continue;
     }
-    // If !IsInLayoutNGInlineFormattingContext, the LayoutText is in legacy
-    // inline formatting context. Fallback to InlineTextBox code below.
-  }
-
-  for (InlineTextBox* box : layout_text->TextBoxes()) {
-    const ComputedStyle& style = layout_text->StyleRef(box->IsFirstLineStyle());
-    const Font& font = style.GetFont();
-    TextRun run = box->ConstructTextRunForInspector(style);
-    CachingWordShaper shaper(font);
-    CollectPlatformFontsFromRunFontDataList(shaper.GetRunFontData(run),
-                                            font_stats);
+    Vector<ShapeResult::RunFontData> run_font_data_list;
+    shape_result->GetRunFontData(&run_font_data_list);
+    CollectPlatformFontsFromRunFontDataList(run_font_data_list, font_stats);
   }
 }
 
diff --git a/third_party/blink/renderer/core/inspector/legacy_dom_snapshot_agent.cc b/third_party/blink/renderer/core/inspector/legacy_dom_snapshot_agent.cc
index 3879909..b82ea3b 100644
--- a/third_party/blink/renderer/core/inspector/legacy_dom_snapshot_agent.cc
+++ b/third_party/blink/renderer/core/inspector/legacy_dom_snapshot_agent.cc
@@ -61,9 +61,9 @@
 struct LegacyDOMSnapshotAgent::VectorStringHashTraits
     : public WTF::GenericHashTraits<Vector<String>> {
   static unsigned GetHash(const Vector<String>& vec) {
-    unsigned h = DefaultHash<size_t>::GetHash(vec.size());
+    unsigned h = WTF::GetHash(vec.size());
     for (const String& s : vec) {
-      h = WTF::HashInts(h, DefaultHash<String>::GetHash(s));
+      h = WTF::HashInts(h, WTF::GetHash(s));
     }
     return h;
   }
@@ -89,8 +89,8 @@
 
   static bool IsEmptyValue(const Vector<String>& vec) { return vec.empty(); }
 
-  static const bool kEmptyValueIsZero = false;
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kEmptyValueIsZero = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 LegacyDOMSnapshotAgent::LegacyDOMSnapshotAgent(
diff --git a/third_party/blink/renderer/core/layout/api/line_layout_item.h b/third_party/blink/renderer/core/layout/api/line_layout_item.h
index 23f0e6d..7e94177c 100644
--- a/third_party/blink/renderer/core/layout/api/line_layout_item.h
+++ b/third_party/blink/renderer/core/layout/api/line_layout_item.h
@@ -284,17 +284,7 @@
 
   bool EverHadLayout() const { return layout_object_->EverHadLayout(); }
 
-  struct LineLayoutItemHash {
-    STATIC_ONLY(LineLayoutItemHash);
-    static unsigned GetHash(const LineLayoutItem& key) {
-      return WTF::PtrHash<LayoutObject>::GetHash(key.layout_object_);
-    }
-    static bool Equal(const LineLayoutItem& a, const LineLayoutItem& b) {
-      return WTF::PtrHash<LayoutObject>::Equal(a.layout_object_,
-                                               b.layout_object_);
-    }
-    static const bool safe_to_compare_to_empty_or_deleted = true;
-  };
+  unsigned GetHash() const { return WTF::GetHash(layout_object_); }
 
 #if DCHECK_IS_ON()
 
@@ -328,10 +318,6 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::LineLayoutItem>
-    : blink::LineLayoutItem::LineLayoutItemHash {};
-
-template <>
 struct HashTraits<blink::LineLayoutItem>
     : SimpleClassHashTraits<blink::LineLayoutItem> {};
 
diff --git a/third_party/blink/renderer/core/layout/floating_objects.h b/third_party/blink/renderer/core/layout/floating_objects.h
index b561fa7..2c1e139f 100644
--- a/third_party/blink/renderer/core/layout/floating_objects.h
+++ b/third_party/blink/renderer/core/layout/floating_objects.h
@@ -181,7 +181,7 @@
 
 struct FloatingObjectHashTraits : HashTraits<Member<FloatingObject>> {
   static unsigned GetHash(const Member<FloatingObject>& key) {
-    return DefaultHash<LayoutBox*>::GetHash(key->GetLayoutObject());
+    return WTF::GetHash(key->GetLayoutObject());
   }
   static bool Equal(const Member<FloatingObject>& a, FloatingObject* b) {
     return a->GetLayoutObject() == b->GetLayoutObject();
@@ -193,11 +193,10 @@
 
   static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
+
 struct FloatingObjectHashTranslator {
   STATIC_ONLY(FloatingObjectHashTranslator);
-  static unsigned GetHash(LayoutBox* key) {
-    return DefaultHash<LayoutBox*>::GetHash(key);
-  }
+  static unsigned GetHash(LayoutBox* key) { return WTF::GetHash(key); }
   static bool Equal(FloatingObject* a, LayoutBox* b) {
     return a->GetLayoutObject() == b;
   }
diff --git a/third_party/blink/renderer/core/layout/layout_block_flow.cc b/third_party/blink/renderer/core/layout/layout_block_flow.cc
index bce4ee7..86110a2 100644
--- a/third_party/blink/renderer/core/layout/layout_block_flow.cc
+++ b/third_party/blink/renderer/core/layout/layout_block_flow.cc
@@ -362,6 +362,7 @@
     DCHECK(CreatesNewFormattingContext());
     return false;
   }
+  DCHECK(!RuntimeEnabledFeatures::LayoutNGPrintingEnabled());
   if (!IsLayoutNGObject())
     DCHECK_EQ(!is_self_collapsing_, !CheckIfIsSelfCollapsingBlock());
   return is_self_collapsing_;
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index 098f2d3..60887e9c 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -1035,8 +1035,7 @@
 
 void LayoutBox::LayoutSubtreeRoot() {
   NOT_DESTROYED();
-  if (RuntimeEnabledFeatures::LayoutNGEnabled() && !IsLayoutNGObject() &&
-      GetSingleCachedLayoutResult()) {
+  if (!IsLayoutNGObject() && GetSingleCachedLayoutResult()) {
     // If this object is laid out by the legacy engine, while its containing
     // block is laid out by NG, it means that we normally (when laying out
     // starting at the real root, i.e. LayoutView) enter layout of this object
@@ -5060,13 +5059,7 @@
   // then we must subtract the border and padding from the cell's
   // |available_height| (given by |OverrideLogicalHeight|) to arrive
   // at the child's computed height.
-  bool subtract_border_and_padding =
-      IsTable() ||
-      (!RuntimeEnabledFeatures::LayoutNGEnabled() && cb->IsTableCell() &&
-       !skipped_auto_height_containing_block &&
-       cb->HasOverrideLogicalHeight() &&
-       StyleRef().BoxSizing() == EBoxSizing::kContentBox);
-  if (subtract_border_and_padding) {
+  if (IsTable()) {
     result -= BorderAndPaddingLogicalHeight();
     return std::max(LayoutUnit(), result);
   }
@@ -5299,15 +5292,6 @@
         while (!IsA<LayoutView>(cb) &&
                (cb->StyleRef().LogicalHeight().IsAuto() ||
                 cb->StyleRef().LogicalHeight().IsPercentOrCalc())) {
-          if (!RuntimeEnabledFeatures::LayoutNGEnabled() && cb->IsTableCell()) {
-            // Don't let table cells squeeze percent-height replaced elements
-            // <http://bugs.webkit.org/show_bug.cgi?id=15359>
-            available_height =
-                std::max(available_height, IntrinsicLogicalHeight());
-            return ValueForLength(
-                logical_height,
-                available_height - BorderAndPaddingLogicalHeight());
-          }
           To<LayoutBlock>(cb)->AddPercentHeightDescendant(
               const_cast<LayoutBox*>(this));
           cb = cb->ContainingBlock();
@@ -5315,8 +5299,7 @@
       }
 
       return AdjustContentBoxLogicalHeightForBoxSizing(
-          (RuntimeEnabledFeatures::LayoutNGEnabled() &&
-           available_height == kIndefiniteSize)
+          available_height == kIndefiniteSize
               ? IntrinsicLogicalHeight()
               : ValueForLength(logical_height, available_height));
     }
@@ -5336,25 +5319,12 @@
 LayoutUnit LayoutBox::AvailableLogicalHeight(
     AvailableLogicalHeightType height_type) const {
   NOT_DESTROYED();
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    // LayoutNG code is correct, Legacy code incorrectly ConstrainsMinMax
-    // when height is -1, and returns 0, not -1.
-    // The reason this code is NG-only is that this code causes performance
-    // regression for nested-percent-height-tables test case.
-    // This code gets executed 740 times in the test case.
-    // https://chromium-review.googlesource.com/c/chromium/src/+/1103289
-    LayoutUnit height =
-        AvailableLogicalHeightUsing(StyleRef().LogicalHeight(), height_type);
-    if (UNLIKELY(height == -1))
-      return height;
-    return ConstrainContentBoxLogicalHeightByMinMax(height, LayoutUnit(-1));
+  LayoutUnit height =
+      AvailableLogicalHeightUsing(StyleRef().LogicalHeight(), height_type);
+  if (UNLIKELY(height == -1)) {
+    return height;
   }
-  // http://www.w3.org/TR/CSS2/visudet.html#propdef-height - We are interested
-  // in the content height.
-  // FIXME: Should we pass intrinsicContentLogicalHeight() instead of -1 here?
-  return ConstrainContentBoxLogicalHeightByMinMax(
-      AvailableLogicalHeightUsing(StyleRef().LogicalHeight(), height_type),
-      LayoutUnit(-1));
+  return ConstrainContentBoxLogicalHeightByMinMax(height, LayoutUnit(-1));
 }
 
 LayoutUnit LayoutBox::AvailableLogicalHeightUsing(
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h
index 7cc1bce..7163258 100644
--- a/third_party/blink/renderer/core/layout/layout_box.h
+++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -1454,6 +1454,7 @@
   }
   virtual LayoutUnit IntrinsicContentLogicalHeight() const {
     NOT_DESTROYED();
+    DCHECK(!RuntimeEnabledFeatures::LayoutNGPrintingEnabled());
     return HasOverrideIntrinsicContentLogicalHeight()
                ? OverrideIntrinsicContentLogicalHeight()
                : intrinsic_content_logical_height_;
diff --git a/third_party/blink/renderer/core/layout/layout_inline.cc b/third_party/blink/renderer/core/layout/layout_inline.cc
index 46c67ed..f46aaf0 100644
--- a/third_party/blink/renderer/core/layout/layout_inline.cc
+++ b/third_party/blink/renderer/core/layout/layout_inline.cc
@@ -1581,7 +1581,6 @@
 PhysicalRect LayoutInline::LocalVisualRectIgnoringVisibility() const {
   NOT_DESTROYED();
   if (IsInLayoutNGInlineFormattingContext()) {
-    DCHECK(RuntimeEnabledFeatures::LayoutNGEnabled());
     return NGFragmentItem::LocalVisualRectFor(*this);
   }
 
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index 08cd202..f706c4b 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -1199,8 +1199,6 @@
 
 LayoutBox* LayoutObject::ContainingNGBox() const {
   NOT_DESTROYED();
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return nullptr;
   if (RuntimeEnabledFeatures::LayoutMediaNGContainerEnabled() && Parent() &&
       Parent()->IsMedia())
     return To<LayoutBox>(Parent());
@@ -1387,9 +1385,6 @@
 // pay attention whether it should mark its inner context or outer.
 void LayoutObject::SetNeedsCollectInlines() {
   NOT_DESTROYED();
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return;
-
   if (NeedsCollectInlines())
     return;
 
@@ -1407,9 +1402,6 @@
 
 void LayoutObject::SetChildNeedsCollectInlines() {
   NOT_DESTROYED();
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return;
-
   LayoutObject* object = this;
   do {
     // Should not stop at |LayoutFlowThread| as |CollectInlines()| skips them.
@@ -1631,8 +1623,6 @@
   // in this context.
   // There's a similar issue for flow thread objects, as they are invisible to
   // LayoutNG.
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return false;
   if (o->IsLayoutInline() || o->IsText() || o->IsLayoutFlowThread())
     return true;
   return false;
@@ -3078,10 +3068,8 @@
     // anchoring on the containing scroller.
     if (old_style->HasOutOfFlowPosition() != style_->HasOutOfFlowPosition()) {
       SetScrollAnchorDisablingStyleChangedOnAncestor();
-      if (RuntimeEnabledFeatures::LayoutNGEnabled())
-        MarkParentForSpannerOrOutOfFlowPositionedChange();
-    } else if (old_style->GetColumnSpan() != style_->GetColumnSpan() &&
-               RuntimeEnabledFeatures::LayoutNGEnabled()) {
+      MarkParentForSpannerOrOutOfFlowPositionedChange();
+    } else if (old_style->GetColumnSpan() != style_->GetColumnSpan()) {
       MarkParentForSpannerOrOutOfFlowPositionedChange();
     }
 
diff --git a/third_party/blink/renderer/core/layout/layout_object_child_list.cc b/third_party/blink/renderer/core/layout/layout_object_child_list.cc
index b840acb6..ea1685a 100644
--- a/third_party/blink/renderer/core/layout/layout_object_child_list.cc
+++ b/third_party/blink/renderer/core/layout/layout_object_child_list.cc
@@ -106,10 +106,9 @@
     if (notify_layout_object && old_child->EverHadLayout()) {
       old_child->SetNeedsLayoutAndIntrinsicWidthsRecalc(
           layout_invalidation_reason::kRemovedFromLayout);
-      if ((old_child->IsOutOfFlowPositioned() ||
-           old_child->IsColumnSpanAll()) &&
-          RuntimeEnabledFeatures::LayoutNGEnabled())
+      if (old_child->IsOutOfFlowPositioned() || old_child->IsColumnSpanAll()) {
         old_child->MarkParentForSpannerOrOutOfFlowPositionedChange();
+      }
     }
     InvalidatePaintOnRemoval(*old_child);
   }
@@ -244,9 +243,9 @@
 
   new_child->SetNeedsLayoutAndIntrinsicWidthsRecalc(
       layout_invalidation_reason::kAddedToLayout);
-  if ((new_child->IsOutOfFlowPositioned() || new_child->IsColumnSpanAll()) &&
-      RuntimeEnabledFeatures::LayoutNGEnabled())
+  if (new_child->IsOutOfFlowPositioned() || new_child->IsColumnSpanAll()) {
     new_child->MarkParentForSpannerOrOutOfFlowPositionedChange();
+  }
   new_child->SetShouldDoFullPaintInvalidation(
       PaintInvalidationReason::kAppeared);
   new_child->AddSubtreePaintPropertyUpdateReason(
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.cc b/third_party/blink/renderer/core/layout/layout_object_factory.cc
index c280958..3bcadcd 100644
--- a/third_party/blink/renderer/core/layout/layout_object_factory.cc
+++ b/third_party/blink/renderer/core/layout/layout_object_factory.cc
@@ -96,7 +96,7 @@
   // If no reason has been found for disabling NG for this particular type,
   // check if the NG feature is enabled at all, before considering creating an
   // NG object.
-  if (!disable_ng_for_type && RuntimeEnabledFeatures::LayoutNGEnabled()) {
+  if (!disable_ng_for_type) {
     // The last thing to check is whether we should force legacy layout. This
     // happens when the NG feature is enabled for the object in question, but
     // we're dealing with something that isn't implemented in NG yet (such as
@@ -270,11 +270,9 @@
     PseudoElement& pseduo,
     const CounterContentData& counter,
     LegacyLayout legacy) {
-  bool force_legacy = false;
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    force_legacy = legacy == LegacyLayout::kForce;
-    if (!force_legacy)
-      return MakeGarbageCollected<LayoutNGCounter>(pseduo, counter);
+  bool force_legacy = legacy == LegacyLayout::kForce;
+  if (!force_legacy) {
+    return MakeGarbageCollected<LayoutNGCounter>(pseduo, counter);
   }
   auto* const new_object = MakeGarbageCollected<LayoutCounter>(pseduo, counter);
   if (force_legacy)
@@ -338,11 +336,9 @@
 LayoutText* LayoutObjectFactory::CreateText(Node* node,
                                             scoped_refptr<StringImpl> str,
                                             LegacyLayout legacy) {
-  bool force_legacy = false;
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    force_legacy = legacy == LegacyLayout::kForce;
-    if (!force_legacy)
-      return MakeGarbageCollected<LayoutNGText>(node, str);
+  bool force_legacy = legacy == LegacyLayout::kForce;
+  if (!force_legacy) {
+    return MakeGarbageCollected<LayoutNGText>(node, str);
   }
   LayoutText* layout_text = MakeGarbageCollected<LayoutText>(node, str);
   if (force_legacy)
@@ -354,11 +350,9 @@
     Node* node,
     scoped_refptr<StringImpl> str,
     LegacyLayout legacy) {
-  bool force_legacy = false;
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    force_legacy = legacy == LegacyLayout::kForce;
-    if (!force_legacy)
-      return MakeGarbageCollected<LayoutNGText>(node, str);
+  bool force_legacy = legacy == LegacyLayout::kForce;
+  if (!force_legacy) {
+    return MakeGarbageCollected<LayoutNGText>(node, str);
   }
   LayoutText* const layout_text =
       MakeGarbageCollected<LayoutTextCombine>(node, str);
@@ -373,13 +367,10 @@
     int start_offset,
     int length,
     LegacyLayout legacy) {
-  bool force_legacy = false;
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    force_legacy = legacy == LegacyLayout::kForce;
-    if (!force_legacy) {
-      return MakeGarbageCollected<LayoutNGTextFragment>(node, str, start_offset,
-                                                        length);
-    }
+  bool force_legacy = legacy == LegacyLayout::kForce;
+  if (!force_legacy) {
+    return MakeGarbageCollected<LayoutNGTextFragment>(node, str, start_offset,
+                                                      length);
   }
   LayoutTextFragment* layout_text_fragment =
       MakeGarbageCollected<LayoutTextFragment>(node, str, start_offset, length);
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc
index 5e5f1c9..8e6a9f4 100644
--- a/third_party/blink/renderer/core/layout/layout_text.cc
+++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -2351,7 +2351,6 @@
 PhysicalRect LayoutText::PhysicalVisualOverflowRect() const {
   NOT_DESTROYED();
   if (IsInLayoutNGInlineFormattingContext()) {
-    DCHECK(RuntimeEnabledFeatures::LayoutNGEnabled());
     return NGFragmentItem::LocalVisualRectFor(*this);
   }
 
@@ -2468,8 +2467,6 @@
 
 const NGOffsetMapping* LayoutText::GetNGOffsetMapping() const {
   NOT_DESTROYED();
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return nullptr;
   return NGOffsetMapping::GetFor(this);
 }
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc
index 032c015..8a17b03e 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc
@@ -67,8 +67,6 @@
 }  // namespace
 
 LayoutBlockFlow* NGInlineFormattingContextOf(const Position& position) {
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return nullptr;
   LayoutBlockFlow* block_flow =
       NGOffsetMapping::GetInlineFormattingContextOf(position);
   if (!block_flow || !block_flow->IsLayoutNGObject())
@@ -226,8 +224,6 @@
 
 // static
 const NGOffsetMapping* NGOffsetMapping::GetFor(const Position& position) {
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return nullptr;
   return ForceGetFor(position);
 }
 
@@ -244,8 +240,6 @@
 // static
 const NGOffsetMapping* NGOffsetMapping::GetFor(
     const LayoutObject* layout_object) {
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled())
-    return nullptr;
   if (!layout_object)
     return nullptr;
   LayoutBlockFlow* context = layout_object->FragmentItemsContainer();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
index 59ae871..db45895ee 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -1275,7 +1275,6 @@
 }
 
 bool NGBlockNode::CanUseNewLayout(const LayoutBox& box) {
-  DCHECK(RuntimeEnabledFeatures::LayoutNGEnabled());
   if (box.ForceLegacyLayout())
     return false;
   return box.IsLayoutNGObject() || box.IsLayoutReplaced();
@@ -1327,19 +1326,21 @@
   if (LIKELY(physical_fragment.IsFirstForNode())) {
     box_->SetSize(LayoutSize(physical_fragment.Size().width,
                              physical_fragment.Size().height));
-    // If this is a fragment from a node that didn't break into multiple
-    // fragments, write back the intrinsic size. We skip this if the node has
-    // fragmented, since intrinsic block-size is rather meaningless in that
-    // case, because the block-size may have been affected by something on the
-    // outside (i.e. the fragmentainer).
-    //
-    // If we had a fixed block size, our children will have sized themselves
-    // relative to the fixed size, which would make our intrinsic size incorrect
-    // (too big). So skip the write-back in that case, too.
-    if (LIKELY(is_last_fragment && !constraint_space.IsFixedBlockSize())) {
-      box_->SetIntrinsicContentLogicalHeight(
-          layout_result.IntrinsicBlockSize() -
-          border_scrollbar_padding.BlockSum());
+    if (!RuntimeEnabledFeatures::LayoutNGNoCopyBackEnabled()) {
+      // If this is a fragment from a node that didn't break into multiple
+      // fragments, write back the intrinsic size. We skip this if the node has
+      // fragmented, since intrinsic block-size is rather meaningless in that
+      // case, because the block-size may have been affected by something on
+      // the outside (i.e. the fragmentainer).
+      //
+      // If we had a fixed block size, our children will have sized themselves
+      // relative to the fixed size, which would make our intrinsic size
+      // incorrect (too big). So skip the write-back in that case, too.
+      if (LIKELY(is_last_fragment && !constraint_space.IsFixedBlockSize())) {
+        box_->SetIntrinsicContentLogicalHeight(
+            layout_result.IntrinsicBlockSize() -
+            border_scrollbar_padding.BlockSum());
+      }
     }
   } else {
     // Update logical height, unless this fragment is past the block-end of the
@@ -1423,9 +1424,12 @@
   else
     box_->ClearNeedsLayout();
 
-  // Overflow computation depends on this being set.
-  if (LIKELY(block_flow))
-    block_flow->SetIsSelfCollapsingFromNG(layout_result.IsSelfCollapsing());
+  if (!RuntimeEnabledFeatures::LayoutNGNoCopyBackEnabled()) {
+    // Overflow computation depends on this being set.
+    if (LIKELY(block_flow)) {
+      block_flow->SetIsSelfCollapsingFromNG(layout_result.IsSelfCollapsing());
+    }
+  }
 
   // We should notify the display lock that we've done layout on self, and if
   // it's not blocked, on children.
diff --git a/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc b/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc
index 99fb744..7cda628 100644
--- a/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc
+++ b/third_party/blink/renderer/core/layout/shapes/shape_outside_info.cc
@@ -137,8 +137,6 @@
 
 void ShapeOutsideInfo::SetPercentageResolutionInlineSize(
     LayoutUnit percentage_resolution_inline_size) {
-  DCHECK(RuntimeEnabledFeatures::LayoutNGEnabled());
-
   if (percentage_resolution_inline_size_ == percentage_resolution_inline_size)
     return;
 
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.cc
index 0ad7f6dc..b698527 100644
--- a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.cc
+++ b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.cc
@@ -45,6 +45,18 @@
   return context.ResolveViewport();
 }
 
+float MakeViewportDimension(const SVGLengthContext& context,
+                            const Length& radius,
+                            SVGUnitTypes::SVGUnitType type) {
+  if (!radius.IsPercentOrCalc()) {
+    return 0;
+  }
+  if (type == SVGUnitTypes::kSvgUnitTypeObjectboundingbox) {
+    return 1;
+  }
+  return context.ViewportDimension(SVGLengthMode::kOther);
+}
+
 }  // unnamed namespace
 
 struct GradientData {
@@ -168,6 +180,15 @@
   return PointForLengthPoint(point, MakeViewport(context, point, type));
 }
 
+float LayoutSVGResourceGradient::ResolveRadius(SVGUnitTypes::SVGUnitType type,
+                                               const SVGLength& r) const {
+  NOT_DESTROYED();
+  const SVGLengthContext context(GetElement());
+  const Length& radius = context.ConvertToLength(r);
+  return FloatValueForLength(radius,
+                             MakeViewportDimension(context, radius, type));
+}
+
 GradientSpreadMethod LayoutSVGResourceGradient::PlatformSpreadMethodFromSVGType(
     SVGSpreadMethodType method) {
   switch (method) {
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.h b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.h
index cb72861..86bf5520 100644
--- a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.h
+++ b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_gradient.h
@@ -59,6 +59,7 @@
   gfx::PointF ResolvePoint(SVGUnitTypes::SVGUnitType,
                            const SVGLength& x,
                            const SVGLength& y) const;
+  float ResolveRadius(SVGUnitTypes::SVGUnitType type, const SVGLength& r) const;
   static GradientSpreadMethod PlatformSpreadMethodFromSVGType(
       SVGSpreadMethodType);
 
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_radial_gradient.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_radial_gradient.cc
index 1a3c4fd..f8992ee 100644
--- a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_radial_gradient.cc
+++ b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_radial_gradient.cc
@@ -64,15 +64,13 @@
 float LayoutSVGResourceRadialGradient::Radius(
     const RadialGradientAttributes& attributes) const {
   NOT_DESTROYED();
-  return SVGLengthContext::ResolveLength(
-      GetElement(), attributes.GradientUnits(), *attributes.R());
+  return ResolveRadius(attributes.GradientUnits(), *attributes.R());
 }
 
 float LayoutSVGResourceRadialGradient::FocalRadius(
     const RadialGradientAttributes& attributes) const {
   NOT_DESTROYED();
-  return SVGLengthContext::ResolveLength(
-      GetElement(), attributes.GradientUnits(), *attributes.Fr());
+  return ResolveRadius(attributes.GradientUnits(), *attributes.Fr());
 }
 
 scoped_refptr<Gradient> LayoutSVGResourceRadialGradient::BuildGradient() const {
diff --git a/third_party/blink/renderer/core/layout/text_autosizer.cc b/third_party/blink/renderer/core/layout/text_autosizer.cc
index 146752b4..b4ad9e3 100644
--- a/third_party/blink/renderer/core/layout/text_autosizer.cc
+++ b/third_party/blink/renderer/core/layout/text_autosizer.cc
@@ -858,7 +858,7 @@
   if (LayoutObject* parent = ParentElementLayoutObject(layout_object))
     data.parent_hash_ = GetFingerprint(parent);
 
-  data.qualified_name_hash_ = QualifiedNameHash::GetHash(element->TagQName());
+  data.qualified_name_hash_ = WTF::GetHash(element->TagQName());
 
   if (const ComputedStyle* style = layout_object->Style()) {
     data.packed_style_properties_ = static_cast<unsigned>(style->Direction());
diff --git a/third_party/blink/renderer/core/loader/cookie_jar.cc b/third_party/blink/renderer/core/loader/cookie_jar.cc
index e74924f..431bc83 100644
--- a/third_party/blink/renderer/core/loader/cookie_jar.cc
+++ b/third_party/blink/renderer/core/loader/cookie_jar.cc
@@ -164,9 +164,9 @@
 
 void CookieJar::UpdateCacheAfterGetRequest(const KURL& cookie_url,
                                            const String& cookie_string) {
-  absl::optional<unsigned> new_hash = WTF::HashInts(
-      KURLHash::GetHash(cookie_url),
-      cookie_string.IsNull() ? 0 : StringHash::GetHash(cookie_string));
+  absl::optional<unsigned> new_hash =
+      WTF::HashInts(WTF::GetHash(cookie_url),
+                    cookie_string.IsNull() ? 0 : WTF::GetHash(cookie_string));
 
   CookieCacheLookupResult result =
       CookieCacheLookupResult::kCacheMissFirstAccess;
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index 3f5efe9..b7c353d 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -1153,8 +1153,7 @@
         state.rendering_context_id = context_.rendering_context_id;
         if (handling_transform_property && style.Preserves3D() &&
             !state.rendering_context_id) {
-          state.rendering_context_id =
-              PtrHash<const LayoutObject>::GetHash(&object_);
+          state.rendering_context_id = WTF::GetHash(&object_);
         }
 
         // TODO(crbug.com/1185254): Make this work correctly for block
diff --git a/third_party/blink/renderer/core/script/module_record_resolver_impl.cc b/third_party/blink/renderer/core/script/module_record_resolver_impl.cc
index fe9e682..f7fd056 100644
--- a/third_party/blink/renderer/core/script/module_record_resolver_impl.cc
+++ b/third_party/blink/renderer/core/script/module_record_resolver_impl.cc
@@ -22,7 +22,7 @@
   BoxedV8Module* record = MakeGarbageCollected<BoxedV8Module>(isolate, module);
   DVLOG(1) << "ModuleRecordResolverImpl::RegisterModuleScript(url="
            << module_script->BaseUrl().GetString()
-           << ", hash=" << BoxedV8ModuleHash::GetHash(record) << ")";
+           << ", hash=" << WTF::GetHash(record) << ")";
 
   auto result = record_to_module_script_map_.Set(record, module_script);
 
@@ -40,7 +40,7 @@
   BoxedV8Module* record = MakeGarbageCollected<BoxedV8Module>(isolate, module);
   DVLOG(1) << "ModuleRecordResolverImpl::UnregisterModuleScript(url="
            << module_script->BaseUrl().GetString()
-           << ", hash=" << BoxedV8ModuleHash::GetHash(record) << ")";
+           << ", hash=" << WTF::GetHash(record) << ")";
 
   record_to_module_script_map_.erase(record);
 }
@@ -66,7 +66,7 @@
   v8::Isolate* isolate = modulator_->GetScriptState()->GetIsolate();
   DVLOG(1) << "ModuleRecordResolverImpl::resolve(specifier=\""
            << module_request.specifier << ", referrer.hash="
-           << BoxedV8ModuleHash::GetHash(
+           << WTF::GetHash(
                   MakeGarbageCollected<BoxedV8Module>(isolate, referrer))
            << ")";
 
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc
index 9951b1d..7469497 100644
--- a/third_party/blink/renderer/core/style/computed_style.cc
+++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -353,15 +353,9 @@
     return true;
   }
 
-  if (!RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    return false;
-  }
-
   // We use LayoutNGTextCombine only for vertical writing mode.
-  if (RuntimeEnabledFeatures::LayoutNGEnabled() &&
-      new_style->HasTextCombine() &&
-      old_style->IsHorizontalWritingMode() !=
-          new_style->IsHorizontalWritingMode()) {
+  if (new_style->HasTextCombine() && old_style->IsHorizontalWritingMode() !=
+                                         new_style->IsHorizontalWritingMode()) {
     DCHECK_EQ(old_style->HasTextCombine(), new_style->HasTextCombine());
     return true;
   }
@@ -2433,8 +2427,7 @@
 }
 
 bool ComputedStyle::CanMatchSizeContainerQueries(const Element& element) const {
-  return RuntimeEnabledFeatures::LayoutNGEnabled() &&
-         IsContainerForSizeContainerQueries() &&
+  return IsContainerForSizeContainerQueries() &&
          !element.ShouldForceLegacyLayout() &&
          (RuntimeEnabledFeatures::LayoutNGPrintingEnabled() ||
           !element.GetDocument().Printing()) &&
diff --git a/third_party/blink/renderer/core/style/grid_area.h b/third_party/blink/renderer/core/style/grid_area.h
index 00db5a23..71b46a0 100644
--- a/third_party/blink/renderer/core/style/grid_area.h
+++ b/third_party/blink/renderer/core/style/grid_area.h
@@ -164,9 +164,7 @@
 
   template <typename T>
   GridSpan(T start_line, T end_line, GridSpanType type) : type_(type) {
-    const int grid_max_tracks = RuntimeEnabledFeatures::LayoutNGEnabled()
-                                    ? kGridMaxTracks
-                                    : kLegacyGridMaxTracks;
+    const int grid_max_tracks = kGridMaxTracks;
     start_line_ =
         ClampTo<int>(start_line, -grid_max_tracks, grid_max_tracks - 1);
     end_line_ = ClampTo<int>(end_line, start_line_ + 1, grid_max_tracks);
diff --git a/third_party/blink/renderer/core/style/grid_track_list.cc b/third_party/blink/renderer/core/style/grid_track_list.cc
index 545a34a..8c08303 100644
--- a/third_party/blink/renderer/core/style/grid_track_list.cc
+++ b/third_party/blink/renderer/core/style/grid_track_list.cc
@@ -175,18 +175,13 @@
 }
 
 GridTrackList::GridTrackList(const GridTrackSize& default_track_size) {
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    ng_track_list_.AddRepeater({default_track_size});
-  }
-
+  ng_track_list_.AddRepeater({default_track_size});
   legacy_track_list_.push_back(default_track_size);
 }
 
 GridTrackList::GridTrackList(Vector<GridTrackSize, 1>& legacy_tracks)
     : legacy_track_list_(std::move(legacy_tracks)) {
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    ng_track_list_.AddRepeater(legacy_track_list_);
-  }
+  ng_track_list_.AddRepeater(legacy_track_list_);
 }
 
 Vector<GridTrackSize, 1>& GridTrackList::LegacyTrackList() {
@@ -198,16 +193,13 @@
 }
 
 NGGridTrackList& GridTrackList::NGTrackList() {
-  DCHECK(RuntimeEnabledFeatures::LayoutNGEnabled());
   return ng_track_list_;
 }
 const NGGridTrackList& GridTrackList::NGTrackList() const {
-  DCHECK(RuntimeEnabledFeatures::LayoutNGEnabled());
   return ng_track_list_;
 }
 
 void GridTrackList::SetNGGridTrackList(const NGGridTrackList& other) {
-  DCHECK(RuntimeEnabledFeatures::LayoutNGEnabled());
   ng_track_list_ = other;
 }
 
@@ -216,11 +208,7 @@
 }
 
 bool GridTrackList::operator==(const GridTrackList& other) const {
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    return ng_track_list_ == other.ng_track_list_;
-  }
-
-  return LegacyTrackList() == other.LegacyTrackList();
+  return ng_track_list_ == other.ng_track_list_;
 }
 
 bool GridTrackList::operator!=(const GridTrackList& other) const {
@@ -228,10 +216,7 @@
 }
 
 void GridTrackList::AssignFrom(const GridTrackList& other) {
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    ng_track_list_ = other.ng_track_list_;
-  }
-
+  ng_track_list_ = other.ng_track_list_;
   legacy_track_list_ = other.legacy_track_list_;
 }
 
diff --git a/third_party/blink/renderer/core/style/scoped_css_name.h b/third_party/blink/renderer/core/style/scoped_css_name.h
index c59d713..1518b7549 100644
--- a/third_party/blink/renderer/core/style/scoped_css_name.h
+++ b/third_party/blink/renderer/core/style/scoped_css_name.h
@@ -41,9 +41,8 @@
   }
 
   unsigned GetHash() const {
-    unsigned hash = WTF::AtomicStringHash::GetHash(name_);
-    WTF::AddIntToHash(
-        hash, WTF::PtrHash<const TreeScope>::GetHash(tree_scope_.Get()));
+    unsigned hash = WTF::GetHash(name_);
+    WTF::AddIntToHash(hash, WTF::GetHash(tree_scope_.Get()));
     return hash;
   }
 
@@ -97,27 +96,26 @@
 // HeapHashSet<Member<ScopedCSSName>>) that hashes the ScopedCSSNames directly
 // instead of the wrapper pointers.
 
-template <typename ScopedCSSNameWrapperPtr>
-struct ScopedCSSNameWrapperPtrHash {
-  STATIC_ONLY(ScopedCSSNameWrapperPtrHash);
-  static unsigned GetHash(const ScopedCSSNameWrapperPtr& name) {
-    return name->GetHash();
-  }
-  static bool Equal(const ScopedCSSNameWrapperPtr& a,
-                    const ScopedCSSNameWrapperPtr& b) {
+template <typename ScopedCSSNameWrapperType>
+struct ScopedCSSNameWrapperPtrHashTraits
+    : MemberHashTraits<ScopedCSSNameWrapperType> {
+  using TraitType =
+      typename MemberHashTraits<ScopedCSSNameWrapperType>::TraitType;
+  static unsigned GetHash(const TraitType& name) { return name->GetHash(); }
+  static bool Equal(const TraitType& a, const TraitType& b) {
     return base::ValuesEquivalent(a, b);
   }
   // Set this flag to 'false', otherwise Equal above will see gibberish values
   // that aren't safe to call ValuesEquivalent on.
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 template <>
-struct DefaultHash<blink::Member<blink::ScopedCSSName>>
-    : ScopedCSSNameWrapperPtrHash<blink::Member<blink::ScopedCSSName>> {};
+struct HashTraits<blink::Member<blink::ScopedCSSName>>
+    : ScopedCSSNameWrapperPtrHashTraits<blink::ScopedCSSName> {};
 template <>
-struct DefaultHash<blink::Member<const blink::ScopedCSSName>>
-    : ScopedCSSNameWrapperPtrHash<blink::Member<const blink::ScopedCSSName>> {};
+struct HashTraits<blink::Member<const blink::ScopedCSSName>>
+    : ScopedCSSNameWrapperPtrHashTraits<const blink::ScopedCSSName> {};
 
 }  // namespace WTF
 
diff --git a/third_party/blink/renderer/core/svg/svg_element.cc b/third_party/blink/renderer/core/svg/svg_element.cc
index 18f6e19..1086417 100644
--- a/third_party/blink/renderer/core/svg/svg_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_element.cc
@@ -682,7 +682,7 @@
 
 using AttributeToPropertyTypeMap = HashMap<QualifiedName,
                                            AnimatedPropertyType,
-                                           DefaultHashAndTraits<QualifiedName>,
+                                           HashTraits<QualifiedName>,
                                            AnimatedPropertyTypeHashTraits>;
 AnimatedPropertyType SVGElement::AnimatedPropertyTypeForCSSAttribute(
     const QualifiedName& attribute_name) {
diff --git a/third_party/blink/renderer/core/svg/svg_element.h b/third_party/blink/renderer/core/svg/svg_element.h
index a83fe242..4d8ce19 100644
--- a/third_party/blink/renderer/core/svg/svg_element.h
+++ b/third_party/blink/renderer/core/svg/svg_element.h
@@ -343,7 +343,7 @@
                                             key.NamespaceURI().Impl()};
       return HashComponents(components);
     }
-    return DefaultHash<QualifiedName>::GetHash(key);
+    return WTF::GetHash(key);
   }
   static bool Equal(const QualifiedName& a, const QualifiedName& b) {
     return a.Matches(b);
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 19dc0ba..6a4a4b47b 100644
--- a/third_party/blink/renderer/core/svg/svg_length_context.cc
+++ b/third_party/blink/renderer/core/svg/svg_length_context.cc
@@ -379,20 +379,6 @@
                         ValueForLength(y_length, zoom, viewport_size.height()));
 }
 
-float SVGLengthContext::ResolveLength(const SVGElement* context,
-                                      SVGUnitTypes::SVGUnitType type,
-                                      const SVGLength& x) {
-  DCHECK_NE(SVGUnitTypes::kSvgUnitTypeUnknown, type);
-  if (type == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) {
-    SVGLengthContext length_context(context);
-    return x.Value(length_context);
-  }
-  // TODO(fs): ScaleByPercentage() won't be correct for eg. cm units. They need
-  // to be resolved in user space and then be considered in objectBoundingBox
-  // space.
-  return x.ScaleByPercentage(1);
-}
-
 float SVGLengthContext::ResolveValue(const CSSPrimitiveValue& primitive_value,
                                      SVGLengthMode mode) const {
   CSSToLengthConversionDataContext conversion_context(context_);
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 0bb81e61..9b2c51f 100644
--- a/third_party/blink/renderer/core/svg/svg_length_context.h
+++ b/third_party/blink/renderer/core/svg/svg_length_context.h
@@ -64,9 +64,6 @@
                                      const SVGLength& y,
                                      const SVGLength& width,
                                      const SVGLength& height);
-  static float ResolveLength(const SVGElement*,
-                             SVGUnitTypes::SVGUnitType,
-                             const SVGLength&);
   gfx::Vector2dF ResolveLengthPair(const Length& x_length,
                                    const Length& y_length,
                                    const ComputedStyle&) const;
@@ -92,10 +89,10 @@
                               float dimension);
 
   gfx::SizeF ResolveViewport() const;
+  float ViewportDimension(SVGLengthMode) const;
   float ResolveValue(const CSSPrimitiveValue&, SVGLengthMode) const;
 
  private:
-  float ViewportDimension(SVGLengthMode) const;
   float ValueForLength(const Length&, float zoom, SVGLengthMode) const;
   static float ValueForLength(const Length&, float zoom, float dimension);
 
diff --git a/third_party/blink/renderer/core/timing/performance_user_timing.cc b/third_party/blink/renderer/core/timing/performance_user_timing.cc
index 6a2025d..1056e5c6 100644
--- a/third_party/blink/renderer/core/timing/performance_user_timing.cc
+++ b/third_party/blink/renderer/core/timing/performance_user_timing.cc
@@ -206,7 +206,7 @@
         GetPerformanceMarkUnsafeTimeForTraces(start_time, start);
     base::TimeTicks unsafe_end_time =
         GetPerformanceMarkUnsafeTimeForTraces(end_time, end);
-    unsigned hash = WTF::StringHash::GetHash(measure_name);
+    unsigned hash = WTF::GetHash(measure_name);
     WTF::AddFloatToHash(hash, start_time);
     WTF::AddFloatToHash(hash, end_time);
 
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc
index aae4b1b0..db57172 100644
--- a/third_party/blink/renderer/core/timing/window_performance.cc
+++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -587,7 +587,7 @@
     base::TimeTicks unsafe_start_time =
         GetTimeOriginInternal() + base::Milliseconds(entry->startTime());
     base::TimeTicks unsafe_end_time = entry->unsafePresentationTimestamp();
-    unsigned hash = WTF::StringHash::GetHash(entry->name());
+    unsigned hash = WTF::GetHash(entry->name());
     WTF::AddFloatToHash(hash, entry->startTime());
     TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP1(
         "devtools.timeline", "EventTiming", hash, unsafe_start_time, "data",
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_key.cc b/third_party/blink/renderer/modules/indexeddb/idb_key.cc
index 8a76314..3cc5084a 100644
--- a/third_party/blink/renderer/modules/indexeddb/idb_key.cc
+++ b/third_party/blink/renderer/modules/indexeddb/idb_key.cc
@@ -201,7 +201,7 @@
   }
 
   // Remove duplicates using std::sort/std::unique rather than a hashtable to
-  // avoid the complexity of implementing DefaultHash<IDBKey>.
+  // avoid the complexity of implementing HashTraits<IDBKey>.
   std::sort(
       result.begin(), result.end(),
       [](const std::unique_ptr<IDBKey>& a, const std::unique_ptr<IDBKey>& b) {
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 30624c8..43458a6 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -9,6 +9,7 @@
 #include <tuple>
 #include <utility>
 
+#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/privacy_budget/identifiability_metric_builder.h"
@@ -59,6 +60,155 @@
 
 namespace {
 
+// This enum is used for logging and values must match the ones in
+// tools/metrics/histograms/enums.xml
+enum class WebRtcScalabilityMode {
+  kInvalid = 0,
+  kL1T1 = 1,
+  kL1T2 = 2,
+  kL1T3 = 3,
+  kL2T1 = 4,
+  kL2T1h = 5,
+  kL2T1_KEY = 6,
+  kL2T2 = 7,
+  kL2T2h = 8,
+  kL2T2_KEY = 9,
+  kL2T2_KEY_SHIFT = 10,
+  kL2T3 = 11,
+  kL2T3h = 12,
+  kL2T3_KEY = 13,
+  kL3T1 = 14,
+  kL3T1h = 15,
+  kL3T1_KEY = 16,
+  kL3T2 = 17,
+  kL3T2h = 18,
+  kL3T2_KEY = 19,
+  kL3T3 = 20,
+  kL3T3h = 21,
+  kL3T3_KEY = 22,
+  kS2T1 = 23,
+  kS2T1h = 24,
+  kS2T2 = 25,
+  kS2T2h = 26,
+  kS2T3 = 27,
+  kS2T3h = 28,
+  kS3T1 = 29,
+  kS3T1h = 30,
+  kS3T2 = 31,
+  kS3T2h = 32,
+  kS3T3 = 33,
+  kS3T3h = 34,
+  kMaxValue = kS3T3h,
+};
+
+WebRtcScalabilityMode ScalabilityModeStringToUMAMode(
+    const std::string& scalability_mode_string) {
+  if (scalability_mode_string == "L1T1") {
+    return WebRtcScalabilityMode::kL1T1;
+  }
+  if (scalability_mode_string == "L1T2") {
+    return WebRtcScalabilityMode::kL1T2;
+  }
+  if (scalability_mode_string == "L1T3") {
+    return WebRtcScalabilityMode::kL1T3;
+  }
+  if (scalability_mode_string == "L2T1") {
+    return WebRtcScalabilityMode::kL2T1;
+  }
+  if (scalability_mode_string == "L2T1h") {
+    return WebRtcScalabilityMode::kL2T1h;
+  }
+  if (scalability_mode_string == "L2T1_KEY") {
+    return WebRtcScalabilityMode::kL2T1_KEY;
+  }
+  if (scalability_mode_string == "L2T2") {
+    return WebRtcScalabilityMode::kL2T2;
+  }
+  if (scalability_mode_string == "L2T2h") {
+    return WebRtcScalabilityMode::kL2T2h;
+  }
+  if (scalability_mode_string == "L2T2_KEY") {
+    return WebRtcScalabilityMode::kL2T2_KEY;
+  }
+  if (scalability_mode_string == "L2T2_KEY_SHIFT") {
+    return WebRtcScalabilityMode::kL2T2_KEY_SHIFT;
+  }
+  if (scalability_mode_string == "L2T3") {
+    return WebRtcScalabilityMode::kL2T3;
+  }
+  if (scalability_mode_string == "L2T3h") {
+    return WebRtcScalabilityMode::kL2T3h;
+  }
+  if (scalability_mode_string == "L2T3_KEY") {
+    return WebRtcScalabilityMode::kL2T3_KEY;
+  }
+  if (scalability_mode_string == "L3T1") {
+    return WebRtcScalabilityMode::kL3T1;
+  }
+  if (scalability_mode_string == "L3T1h") {
+    return WebRtcScalabilityMode::kL3T1h;
+  }
+  if (scalability_mode_string == "L3T1_KEY") {
+    return WebRtcScalabilityMode::kL3T1_KEY;
+  }
+  if (scalability_mode_string == "L3T2") {
+    return WebRtcScalabilityMode::kL3T2;
+  }
+  if (scalability_mode_string == "L3T2h") {
+    return WebRtcScalabilityMode::kL3T2h;
+  }
+  if (scalability_mode_string == "L3T2_KEY") {
+    return WebRtcScalabilityMode::kL3T2_KEY;
+  }
+  if (scalability_mode_string == "L3T3") {
+    return WebRtcScalabilityMode::kL3T3;
+  }
+  if (scalability_mode_string == "L3T3h") {
+    return WebRtcScalabilityMode::kL3T3h;
+  }
+  if (scalability_mode_string == "L3T3_KEY") {
+    return WebRtcScalabilityMode::kL3T3_KEY;
+  }
+  if (scalability_mode_string == "S2T1") {
+    return WebRtcScalabilityMode::kS2T1;
+  }
+  if (scalability_mode_string == "S2T1h") {
+    return WebRtcScalabilityMode::kS2T1h;
+  }
+  if (scalability_mode_string == "S2T2") {
+    return WebRtcScalabilityMode::kS2T2;
+  }
+  if (scalability_mode_string == "S2T2h") {
+    return WebRtcScalabilityMode::kS2T2h;
+  }
+  if (scalability_mode_string == "S2T3") {
+    return WebRtcScalabilityMode::kS2T3;
+  }
+  if (scalability_mode_string == "S2T3h") {
+    return WebRtcScalabilityMode::kS2T3h;
+  }
+  if (scalability_mode_string == "S3T1") {
+    return WebRtcScalabilityMode::kS3T1;
+  }
+  if (scalability_mode_string == "S3T1h") {
+    return WebRtcScalabilityMode::kS3T1h;
+  }
+  if (scalability_mode_string == "S3T2") {
+    return WebRtcScalabilityMode::kS3T2;
+  }
+  if (scalability_mode_string == "S3T2h") {
+    return WebRtcScalabilityMode::kS3T2h;
+  }
+  if (scalability_mode_string == "S3T3") {
+    return WebRtcScalabilityMode::kS3T3;
+  }
+  if (scalability_mode_string == "S3T3h") {
+    return WebRtcScalabilityMode::kS3T3h;
+  }
+
+  return WebRtcScalabilityMode::kInvalid;
+}
+
 class ReplaceTrackRequest : public RTCVoidRequest {
  public:
   ReplaceTrackRequest(RTCRtpSender* sender,
@@ -353,6 +503,9 @@
   // https://w3c.github.io/webrtc-svc/
   if (encoding->hasScalabilityMode()) {
     webrtc_encoding.scalability_mode = encoding->scalabilityMode().Utf8();
+    WebRtcScalabilityMode scalability_mode =
+        ScalabilityModeStringToUMAMode(*webrtc_encoding.scalability_mode);
+    UMA_HISTOGRAM_ENUMERATION("WebRtcScalabilityMode", scalability_mode);
   }
   webrtc_encoding.adaptive_ptime = encoding->adaptivePtime();
   return webrtc_encoding;
diff --git a/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller_test.cc b/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller_test.cc
index dac36727..07c80ef 100644
--- a/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller_test.cc
+++ b/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller_test.cc
@@ -133,8 +133,7 @@
 // Test that when a LockError message is received, the request is set as failed
 // with the correct values.
 TEST_F(ScreenOrientationControllerTest, LockRequest_Error) {
-  HashMap<LockResult, blink::WebLockOrientationError, WTF::IntHash<LockResult>>
-      errors;
+  HashMap<LockResult, blink::WebLockOrientationError> errors;
   errors.insert(LockResult::SCREEN_ORIENTATION_LOCK_RESULT_ERROR_NOT_AVAILABLE,
                 blink::kWebLockOrientationErrorNotAvailable);
   errors.insert(
diff --git a/third_party/blink/renderer/modules/storage/storage_namespace.h b/third_party/blink/renderer/modules/storage/storage_namespace.h
index 3c8d5a5..e4d7764b 100644
--- a/third_party/blink/renderer/modules/storage/storage_namespace.h
+++ b/third_party/blink/renderer/modules/storage/storage_namespace.h
@@ -135,7 +135,7 @@
   // TODO(https://crbug.com/1212808) Migrate hash map and function.
   HashMap<std::unique_ptr<const BlinkStorageKey>,
           scoped_refptr<CachedStorageArea>,
-          BlinkStorageKeyHash>
+          BlinkStorageKeyHashTraits>
       cached_areas_;
 };
 
diff --git a/third_party/blink/renderer/platform/bindings/dom_wrapper_world.cc b/third_party/blink/renderer/platform/bindings/dom_wrapper_world.cc
index d24a647..3b140fd 100644
--- a/third_party/blink/renderer/platform/bindings/dom_wrapper_world.cc
+++ b/third_party/blink/renderer/platform/bindings/dom_wrapper_world.cc
@@ -41,6 +41,7 @@
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
 #include "third_party/blink/renderer/platform/wtf/hash_traits.h"
 #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
 #include "third_party/blink/renderer/platform/wtf/thread_specific.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h
index 4c42cb9..1eba4ce 100644
--- a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h
+++ b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h
@@ -214,14 +214,14 @@
   // A really simple hash function, which makes lookups faster. The set of
   // possible keys for this is relatively small and fixed at compile time, so
   // collisions are less of a worry than they would otherwise be.
-  struct SimplePtrHash : public WTF::PtrHash<const void> {
+  struct SimplePtrHashTraits : public GenericHashTraits<const void*> {
     static unsigned GetHash(const void* key) {
       uintptr_t k = reinterpret_cast<uintptr_t>(key);
       return static_cast<unsigned>(k ^ (k >> 8));
     }
   };
   using V8TemplateMap =
-      HashMap<const void*, v8::Eternal<v8::Template>, SimplePtrHash>;
+      HashMap<const void*, v8::Eternal<v8::Template>, SimplePtrHashTraits>;
   V8TemplateMap& SelectV8TemplateMap(const DOMWrapperWorld&);
   bool HasInstance(const WrapperTypeInfo* wrapper_type_info,
                    v8::Local<v8::Value> untrusted_value,
diff --git a/third_party/blink/renderer/platform/crypto.h b/third_party/blink/renderer/platform/crypto.h
index 32fd2c9..11d0c86 100644
--- a/third_party/blink/renderer/platform/crypto.h
+++ b/third_party/blink/renderer/platform/crypto.h
@@ -8,8 +8,6 @@
 #include "base/containers/span.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
-#include "third_party/blink/renderer/platform/wtf/hash_functions.h"
-#include "third_party/blink/renderer/platform/wtf/text/string_hasher.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/boringssl/src/include/openssl/digest.h"
@@ -52,21 +50,4 @@
 
 }  // namespace blink
 
-namespace WTF {
-
-struct DigestValueHash {
-  STATIC_ONLY(DigestValueHash);
-  static unsigned GetHash(const blink::DigestValue& v) {
-    return StringHasher::ComputeHash(v.data(), v.size());
-  }
-  static bool Equal(const blink::DigestValue& a, const blink::DigestValue& b) {
-    return a == b;
-  }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-template <>
-struct DefaultHash<blink::DigestValue> : DigestValueHash {};
-
-}  // namespace WTF
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_CRYPTO_H_
diff --git a/third_party/blink/renderer/platform/fonts/cursor_position_test.cc b/third_party/blink/renderer/platform/fonts/cursor_position_test.cc
index 908a3ac..51eb1668 100644
--- a/third_party/blink/renderer/platform/fonts/cursor_position_test.cc
+++ b/third_party/blink/renderer/platform/fonts/cursor_position_test.cc
@@ -74,7 +74,7 @@
   }
 
  private:
-  HashMap<FontName, String, WTF::IntHash<FontName>> font_path = {
+  HashMap<FontName, String> font_path = {
       {kAhem, "Ahem.woff"},
       {kAmiri, "third_party/Amiri/amiri_arabic.woff2"},
       {kMegalopolis, "third_party/MEgalopolis/MEgalopolisExtra.woff"},
diff --git a/third_party/blink/renderer/platform/fonts/font_cache_key.h b/third_party/blink/renderer/platform/fonts/font_cache_key.h
index e59e6c4..9a7be88 100644
--- a/third_party/blink/renderer/platform/fonts/font_cache_key.h
+++ b/third_party/blink/renderer/platform/fonts/font_cache_key.h
@@ -90,7 +90,7 @@
       options_,
       device_scale_factor_hash,
 #if BUILDFLAG(IS_ANDROID)
-      (locale_.empty() ? 0 : AtomicStringHash::GetHash(locale_)) ^
+      (locale_.empty() ? 0 : WTF::GetHash(locale_)) ^
 #endif  // BUILDFLAG(IS_ANDROID)
           (variation_settings_ ? variation_settings_->GetHash() : 0),
       palette_ ? palette_->GetHash() : 0,
@@ -152,32 +152,10 @@
   bool is_unique_match_ = false;
 };
 
-struct FontCacheKeyHash {
-  STATIC_ONLY(FontCacheKeyHash);
-  static unsigned GetHash(const FontCacheKey& key) { return key.GetHash(); }
-
-  static bool Equal(const FontCacheKey& a, const FontCacheKey& b) {
-    return a == b;
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-struct FontCacheKeyTraits : WTF::SimpleClassHashTraits<FontCacheKey> {
-  STATIC_ONLY(FontCacheKeyTraits);
-
-  // std::string's empty state need not be zero in all implementations,
-  // and it is held within FontFaceCreationParams.
-  static const bool kEmptyValueIsZero = false;
-};
-
 }  // namespace blink
 
 namespace WTF {
 template <>
-struct DefaultHash<blink::FontCacheKey> : blink::FontCacheKeyHash {};
-
-template <>
 struct HashTraits<blink::FontCacheKey>
     : WTF::SimpleClassHashTraits<blink::FontCacheKey> {
   // std::string's empty state need not be zero in all implementations,
diff --git a/third_party/blink/renderer/platform/fonts/font_data_cache.h b/third_party/blink/renderer/platform/fonts/font_data_cache.h
index 41d7f8e..0f0ca8e 100644
--- a/third_party/blink/renderer/platform/fonts/font_data_cache.h
+++ b/third_party/blink/renderer/platform/fonts/font_data_cache.h
@@ -41,30 +41,17 @@
 enum ShouldRetain { kRetain, kDoNotRetain };
 enum PurgeSeverity { kPurgeIfNeeded, kForcePurge };
 
-struct FontDataCacheKeyHash {
-  STATIC_ONLY(FontDataCacheKeyHash);
+struct FontDataCacheKeyHashTraits : GenericHashTraits<const FontPlatformData*> {
+  STATIC_ONLY(FontDataCacheKeyHashTraits);
   static unsigned GetHash(const FontPlatformData* platform_data) {
     return platform_data->GetHash();
   }
 
   static bool Equal(const FontPlatformData* a, const FontPlatformData* b) {
-    const FontPlatformData* empty_value =
-        reinterpret_cast<FontPlatformData*>(-1);
-
-    if (a == empty_value)
-      return b == empty_value;
-    if (b == empty_value)
-      return a == empty_value;
-
-    if (!a || !b)
-      return a == b;
-
-    CHECK(a && b);
-
     return *a == *b;
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = true;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 class FontDataCache final {
@@ -92,7 +79,7 @@
 
   typedef HashMap<const FontPlatformData*,
                   std::pair<scoped_refptr<SimpleFontData>, unsigned>,
-                  FontDataCacheKeyHash>
+                  FontDataCacheKeyHashTraits>
       Cache;
 
   Cache cache_;
diff --git a/third_party/blink/renderer/platform/fonts/font_description.cc b/third_party/blink/renderer/platform/fonts/font_description.cc
index 545a07e..2c3f254 100644
--- a/third_party/blink/renderer/platform/fonts/font_description.cc
+++ b/third_party/blink/renderer/platform/fonts/font_description.cc
@@ -410,8 +410,7 @@
     if (family->FamilyName().empty())
       continue;
     WTF::AddIntToHash(hash, family->FamilyIsGeneric());
-    WTF::AddIntToHash(hash,
-                      WTF::AtomicStringHash::GetHash(family->FamilyName()));
+    WTF::AddIntToHash(hash, WTF::GetHash(family->FamilyName()));
   }
   return hash;
 }
diff --git a/third_party/blink/renderer/platform/fonts/font_description.h b/third_party/blink/renderer/platform/fonts/font_description.h
index d254e910..e1b3581 100644
--- a/third_party/blink/renderer/platform/fonts/font_description.h
+++ b/third_party/blink/renderer/platform/fonts/font_description.h
@@ -572,24 +572,6 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::FontDescription> {
-  static unsigned GetHash(const blink::FontDescription& description) {
-    return description.GetHash();
-  }
-
-  static bool Equal(const blink::FontDescription& a,
-                    const blink::FontDescription& b) {
-    return a == b;
-  }
-
-  // Empty and deleted FontDescriptions have different HashCategory flag values
-  // from all regular FontDescriptions.
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-template <typename T>
-struct HashTraits;
-template <>
 struct HashTraits<blink::FontDescription>
     : SimpleClassHashTraits<blink::FontDescription> {
   // FontDescription default constructor creates a regular value instead of the
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 3e0b8fe..74b81780 100644
--- a/third_party/blink/renderer/platform/fonts/font_matching_metrics.h
+++ b/third_party/blink/renderer/platform/fonts/font_matching_metrics.h
@@ -56,9 +56,8 @@
 struct IdentifiableTokenKeyHashTraits
     : WTF::SimpleClassHashTraits<IdentifiableTokenKey> {
   static unsigned GetHash(const IdentifiableTokenKey& key) {
-    IntHash<int64_t> hasher;
-    return hasher.GetHash(key.token.ToUkmMetricValue()) ^
-           hasher.GetHash((key.is_deleted_value << 1) + key.is_empty_value);
+    return WTF::GetHash(key.token.ToUkmMetricValue()) ^
+           WTF::GetHash((key.is_deleted_value << 1) + key.is_empty_value);
   }
   static const bool kEmptyValueIsZero = false;
   static IdentifiableTokenKey EmptyValue() { return IdentifiableTokenKey(); }
diff --git a/third_party/blink/renderer/platform/fonts/font_palette.cc b/third_party/blink/renderer/platform/fonts/font_palette.cc
index 8db6af8..00741893 100644
--- a/third_party/blink/renderer/platform/fonts/font_palette.cc
+++ b/third_party/blink/renderer/platform/fonts/font_palette.cc
@@ -31,12 +31,10 @@
   if (palette_keyword_ != kCustomPalette)
     return computed_hash;
 
-  WTF::AddIntToHash(computed_hash,
-                    AtomicStringHash::GetHash(palette_values_name_));
-  WTF::AddIntToHash(computed_hash,
-                    match_font_family_.empty()
-                        ? 0
-                        : AtomicStringHash::GetHash(match_font_family_));
+  WTF::AddIntToHash(computed_hash, WTF::GetHash(palette_values_name_));
+  WTF::AddIntToHash(computed_hash, match_font_family_.empty()
+                                       ? 0
+                                       : WTF::GetHash(match_font_family_));
   WTF::AddIntToHash(computed_hash, base_palette_.type);
   WTF::AddIntToHash(computed_hash, base_palette_.index);
 
diff --git a/third_party/blink/renderer/platform/fonts/font_variant_alternates.cc b/third_party/blink/renderer/platform/fonts/font_variant_alternates.cc
index e55eec7..840dcb0 100644
--- a/third_party/blink/renderer/platform/fonts/font_variant_alternates.cc
+++ b/third_party/blink/renderer/platform/fonts/font_variant_alternates.cc
@@ -200,29 +200,23 @@
 
 unsigned FontVariantAlternates::GetHash() const {
   unsigned computed_hash = 0;
-  WTF::AddIntToHash(computed_hash, stylistic_.has_value()
-                                       ? AtomicStringHash::GetHash(*stylistic_)
-                                       : -1);
+  WTF::AddIntToHash(computed_hash,
+                    stylistic_.has_value() ? WTF::GetHash(*stylistic_) : -1);
   WTF::AddIntToHash(computed_hash, historical_forms_);
-  WTF::AddIntToHash(computed_hash, swash_.has_value()
-                                       ? AtomicStringHash::GetHash(*swash_)
-                                       : -1);
-  WTF::AddIntToHash(computed_hash, ornaments_.has_value()
-                                       ? AtomicStringHash::GetHash(*ornaments_)
-                                       : -1);
-  WTF::AddIntToHash(computed_hash, annotation_.has_value()
-                                       ? AtomicStringHash::GetHash(*annotation_)
-                                       : -1);
+  WTF::AddIntToHash(computed_hash,
+                    swash_.has_value() ? WTF::GetHash(*swash_) : -1);
+  WTF::AddIntToHash(computed_hash,
+                    ornaments_.has_value() ? WTF::GetHash(*ornaments_) : -1);
+  WTF::AddIntToHash(computed_hash,
+                    annotation_.has_value() ? WTF::GetHash(*annotation_) : -1);
   if (!styleset_.empty()) {
     for (const AtomicString& styleset_alias : styleset_) {
-      WTF::AddIntToHash(computed_hash,
-                        AtomicStringHash::GetHash(styleset_alias));
+      WTF::AddIntToHash(computed_hash, WTF::GetHash(styleset_alias));
     }
   }
   if (!character_variant_.empty()) {
     for (const AtomicString& character_variant_alias : character_variant_) {
-      WTF::AddIntToHash(computed_hash,
-                        AtomicStringHash::GetHash(character_variant_alias));
+      WTF::AddIntToHash(computed_hash, WTF::GetHash(character_variant_alias));
     }
   }
   WTF::AddIntToHash(computed_hash, resolved_features_.size());
diff --git a/third_party/blink/renderer/platform/geometry/geometry_hash_traits.h b/third_party/blink/renderer/platform/geometry/geometry_hash_traits.h
index 67a185d..740bd4f 100644
--- a/third_party/blink/renderer/platform/geometry/geometry_hash_traits.h
+++ b/third_party/blink/renderer/platform/geometry/geometry_hash_traits.h
@@ -12,22 +12,16 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<gfx::SizeF> {
-  STATIC_ONLY(DefaultHash);
-  static unsigned GetHash(const gfx::SizeF& key) {
-    return HashInts(DefaultHash<float>::GetHash(key.width()),
-                    DefaultHash<float>::GetHash(key.height()));
-  }
-  static bool Equal(const gfx::SizeF& a, const gfx::SizeF& b) {
-    return DefaultHash<float>::Equal(a.width(), b.width()) &&
-           DefaultHash<float>::Equal(a.height(), b.height());
-  }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-template <>
 struct HashTraits<gfx::SizeF> : GenericHashTraits<gfx::SizeF> {
   STATIC_ONLY(HashTraits);
+  static unsigned GetHash(const gfx::SizeF& key) {
+    return HashInts(WTF::GetHash(key.width()), WTF::GetHash(key.height()));
+  }
+  static bool Equal(const gfx::SizeF& a, const gfx::SizeF& b) {
+    return HashTraits<float>::Equal(a.width(), b.width()) &&
+           HashTraits<float>::Equal(a.height(), b.height());
+  }
+
   static constexpr bool kEmptyValueIsZero = false;
   static constexpr gfx::SizeF EmptyValue() {
     return gfx::SizeF(std::numeric_limits<float>::infinity(), 0);
@@ -38,19 +32,13 @@
 };
 
 template <>
-struct DefaultHash<SkIRect> {
-  STATIC_ONLY(DefaultHash);
+struct HashTraits<SkIRect> : GenericHashTraits<SkIRect> {
+  STATIC_ONLY(HashTraits);
   static unsigned GetHash(const SkIRect& key) {
     return HashInts(HashInts(key.x(), key.y()),
                     HashInts(key.right(), key.bottom()));
   }
-  static bool Equal(const SkIRect& a, const SkIRect& b) { return a == b; }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
 
-template <>
-struct HashTraits<SkIRect> : GenericHashTraits<SkIRect> {
-  STATIC_ONLY(HashTraits);
   static constexpr bool kEmptyValueIsZero = false;
   static SkIRect EmptyValue() { return SkIRect::MakeWH(-1, 0); }
   static SkIRect DeletedValue() { return SkIRect::MakeWH(0, -1); }
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 a4a8e42..31cc680 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
@@ -117,8 +117,7 @@
   friend class CanvasResourceDispatcherTest;
   struct FrameResource;
 
-  using ResourceMap =
-      HashMap<viz::ResourceId, std::unique_ptr<FrameResource>, ResourceIdHash>;
+  using ResourceMap = HashMap<viz::ResourceId, std::unique_ptr<FrameResource>>;
 
   bool PrepareFrame(scoped_refptr<CanvasResource>&&,
                     base::TimeTicks commit_start_time,
diff --git a/third_party/blink/renderer/platform/graphics/color.h b/third_party/blink/renderer/platform/graphics/color.h
index 6b748b38..54b88455c 100644
--- a/third_party/blink/renderer/platform/graphics/color.h
+++ b/third_party/blink/renderer/platform/graphics/color.h
@@ -402,16 +402,4 @@
 
 }  // namespace blink
 
-namespace WTF {
-template <>
-struct DefaultHash<blink::Color> {
-  STATIC_ONLY(DefaultHash);
-  static unsigned GetHash(const blink::Color& key) { return key.GetHash(); }
-  static bool Equal(const blink::Color& a, const blink::Color& b) {
-    return a == b;
-  }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-}  // namespace WTF
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_COLOR_H_
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc
index 647a8d7..c28545c 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc
@@ -593,13 +593,17 @@
   // Apply effects.
   result_.StartPaint();
   if (!has_filter) {
+    // TODO(ajuma): This should really be rounding instead of flooring the
+    // alpha value, but that breaks slimming paint reftests.
+    auto alpha = base::ClampFloor<uint8_t>(255 * effect.Opacity());
     if (has_other_effects) {
       cc::PaintFlags flags;
       flags.setBlendMode(effect.BlendMode());
-      flags.setAlphaf(effect.Opacity());
+      flags.setAlphaf(alpha / 255.0f);
       save_layer_id = push<cc::SaveLayerOp>(flags);
     } else {
-      save_layer_id = push<cc::SaveLayerAlphaOp>(effect.Opacity());
+      save_layer_id =
+          push<cc::SaveLayerAlphaOp>(static_cast<float>(alpha / 255.0f));
     }
   } else {
     // Handle filter effect.
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
index 99cb93ba..745407c2 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
@@ -124,10 +124,10 @@
   EXPECT_THAT(
       output,
       ElementsAre(PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 90, 90),
-                                                 0.5f)),  // <e1>
-                  PaintOpIs<cc::DrawRecordOp>(),          // <p0/>
-                  PaintOpIs<cc::DrawRecordOp>(),          // <p1/>
-                  PaintOpIs<cc::RestoreOp>()));           // </e1>
+                                                 127 / 255.f)),  // <e1>
+                  PaintOpIs<cc::DrawRecordOp>(),                 // <p0/>
+                  PaintOpIs<cc::DrawRecordOp>(),                 // <p1/>
+                  PaintOpIs<cc::RestoreOp>()));                  // </e1>
 }
 
 TEST_P(PaintChunksToCcLayerTest, EffectGroupingNested) {
@@ -145,16 +145,16 @@
       output,
       ElementsAre(
           PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 444, 666),
-                                         0.5f)),  // <e1>
+                                         127 / 255.f)),  // <e1>
           PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 100, 100),
-                                         0.5f)),  // <e2>
-          PaintOpIs<cc::DrawRecordOp>(),          // <p0/>
-          PaintOpIs<cc::RestoreOp>(),             // </e2>
+                                         127 / 255.f)),  // <e2>
+          PaintOpIs<cc::DrawRecordOp>(),                 // <p0/>
+          PaintOpIs<cc::RestoreOp>(),                    // </e2>
           PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(111, 222, 333, 444),
-                                         0.5f)),  // <e3>
-          PaintOpIs<cc::DrawRecordOp>(),          // <p1/>
-          PaintOpIs<cc::RestoreOp>(),             // </e3>
-          PaintOpIs<cc::RestoreOp>()));           // </e1>
+                                         127 / 255.f)),  // <e3>
+          PaintOpIs<cc::DrawRecordOp>(),                 // <p1/>
+          PaintOpIs<cc::RestoreOp>(),                    // </e3>
+          PaintOpIs<cc::RestoreOp>()));                  // </e1>
 }
 
 TEST_P(PaintChunksToCcLayerTest, EffectFilterGroupingNestedWithTransforms) {
@@ -184,8 +184,8 @@
               gfx::TransformToSkM44(t1->Matrix() * t2->Matrix()))),  // <t1*t2>
           // chunk1.bounds + e2(t2^-1(chunk2.bounds))
           PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 155, 155),
-                                         0.5f)),  // <e1>
-          PaintOpIs<cc::DrawRecordOp>(),          // <p1/>
+                                         127 / 255.f)),  // <e1>
+          PaintOpIs<cc::DrawRecordOp>(),                 // <p1/>
           // t2^-1(chunk2.bounds)
           PaintOpEq(cc::SaveLayerOp(SkRect::MakeXYWH(70, 70, 70, 70),
                                     expected_flags)),  // <e2>
@@ -231,14 +231,14 @@
                   PaintOpIs<cc::DrawRecordOp>(),  // <p1/>
                   PaintOpIs<cc::RestoreOp>(),     // </c3>
                   PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 90, 90),
-                                                 0.5f)),  // <e1>
+                                                 127 / 255.f)),  // <e1>
                   PaintOpIs<cc::SaveOp>(),
                   PaintOpIs<cc::ClipRectOp>(),  // <c3+c4>
                   PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 50, 50),
-                                                 0.5f)),  // <e2>
-                  PaintOpIs<cc::DrawRecordOp>(),          // <p2/>
-                  PaintOpIs<cc::RestoreOp>(),             // </e2>
-                  PaintOpIs<cc::RestoreOp>(),             // </c3+c4>
+                                                 127 / 255.f)),  // <e2>
+                  PaintOpIs<cc::DrawRecordOp>(),                 // <p2/>
+                  PaintOpIs<cc::RestoreOp>(),                    // </e2>
+                  PaintOpIs<cc::RestoreOp>(),                    // </c3+c4>
                   PaintOpIs<cc::SaveOp>(),
                   PaintOpIs<cc::ClipRectOp>(),    // <c3>
                   PaintOpIs<cc::DrawRecordOp>(),  // <p3/>
@@ -296,7 +296,7 @@
           PaintOpIs<cc::SaveOp>(),
           PaintOpEq(cc::ConcatOp(gfx::TransformToSkM44(t1->Matrix()))),  // <t1>
           PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 100, 100),
-                                         0.5f)),  // <e1>
+                                         127 / 255.f)),  // <e1>
           PaintOpIs<cc::SaveOp>(),
           PaintOpEq(cc::ConcatOp(gfx::TransformToSkM44(
               t1->Matrix().GetCheckedInverse()))),  // <t1^-1>
@@ -388,7 +388,7 @@
       chunks.Build(), PropertyTreeState(t0(), *c1, e0()));
   EXPECT_THAT(output, ElementsAre(PaintOpEq(cc::SaveLayerAlphaOp(
                                       SkRect::MakeXYWH(0, 0, 100, 100),
-                                      0.5f)),  // <e1>
+                                      127 / 255.f)),  // <e1>
                                   PaintOpIs<cc::SaveOp>(),
                                   PaintOpIs<cc::ClipRectOp>(),    // <c2>
                                   PaintOpIs<cc::DrawRecordOp>(),  // <p0/>
@@ -411,9 +411,9 @@
       output,
       ElementsAre(
           PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 100, 100),
-                                         0.5f)),  // <e1>
+                                         127 / 255.f)),  // <e1>
           PaintOpEq(cc::SaveLayerAlphaOp(SkRect::MakeXYWH(0, 0, 100, 100),
-                                         0.5f)),  // <e2>
+                                         127 / 255.f)),  // <e2>
           PaintOpIs<cc::SaveOp>(),
           PaintOpIs<cc::ClipRectOp>(),    // <c1>
           PaintOpIs<cc::DrawRecordOp>(),  // <p0/>
@@ -435,7 +435,7 @@
       chunks.Build(), PropertyTreeState(t0(), c0(), *e1));
   EXPECT_THAT(output, ElementsAre(PaintOpEq(cc::SaveLayerAlphaOp(
                                       SkRect::MakeXYWH(0, 0, 100, 100),
-                                      0.5f)),  // <e2>
+                                      127 / 255.f)),  // <e2>
                                   PaintOpIs<cc::SaveOp>(),
                                   PaintOpIs<cc::ClipRectOp>(),    // <c1>
                                   PaintOpIs<cc::DrawRecordOp>(),  // <p0/>
@@ -456,7 +456,7 @@
       chunks.Build(), PropertyTreeState(t0(), *c1, *e1));
   EXPECT_THAT(output, ElementsAre(PaintOpEq(cc::SaveLayerAlphaOp(
                                       SkRect::MakeXYWH(0, 0, 100, 100),
-                                      0.5f)),                     // <e2>
+                                      127 / 255.f)),              // <e2>
                                   PaintOpIs<cc::DrawRecordOp>(),  // <p0/>
                                   PaintOpIs<cc::RestoreOp>()));   // </e2>
 }
@@ -566,7 +566,7 @@
 
   EXPECT_THAT(output, ElementsAre(PaintOpEq(cc::SaveLayerAlphaOp(
                                       SkRect::MakeXYWH(0, 0, 100, 100),
-                                      0.5f)),                 // <e1>
+                                      127 / 255.f)),          // <e1>
                                   PaintOpIs<cc::RestoreOp>()  // </e1>
                                   ));
 }
diff --git a/third_party/blink/renderer/platform/graphics/image_decoding_store.h b/third_party/blink/renderer/platform/graphics/image_decoding_store.h
index 5ddf426..bfd564b 100644
--- a/third_party/blink/renderer/platform/graphics/image_decoding_store.h
+++ b/third_party/blink/renderer/platform/graphics/image_decoding_store.h
@@ -173,29 +173,18 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::DecoderCacheKey> {
-  STATIC_ONLY(DefaultHash);
-  static unsigned GetHash(const blink::DecoderCacheKey& p) {
-    auto first = HashInts(DefaultHash<blink::ImageFrameGenerator*>::GetHash(
-                              const_cast<blink::ImageFrameGenerator*>(p.gen_)),
-                          DefaultHash<SkISize>::GetHash(p.size_));
-    auto second = HashInts(
-        DefaultHash<uint8_t>::GetHash(static_cast<uint8_t>(p.alpha_option_)),
-        p.client_id_);
-    return HashInts(first, second);
-  }
-  static bool Equal(const blink::DecoderCacheKey& a,
-                    const blink::DecoderCacheKey& b) {
-    return a.gen_ == b.gen_ && a.size_ == b.size_ &&
-           a.alpha_option_ == b.alpha_option_ && a.client_id_ == b.client_id_;
-  }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-template <>
 struct HashTraits<blink::DecoderCacheKey>
     : GenericHashTraits<blink::DecoderCacheKey> {
   STATIC_ONLY(HashTraits);
+  static unsigned GetHash(const blink::DecoderCacheKey& p) {
+    auto first =
+        HashInts(WTF::GetHash(const_cast<blink::ImageFrameGenerator*>(p.gen_)),
+                 WTF::GetHash(p.size_));
+    auto second = HashInts(WTF::GetHash(static_cast<uint8_t>(p.alpha_option_)),
+                           p.client_id_);
+    return HashInts(first, second);
+  }
+
   static const bool kEmptyValueIsZero = true;
   static blink::DecoderCacheKey EmptyValue() {
     return blink::DecoderCacheEntry::MakeCacheKey(
@@ -203,15 +192,12 @@
         static_cast<blink::ImageDecoder::AlphaOption>(0),
         cc::PaintImage::kDefaultGeneratorClientId);
   }
-  static void ConstructDeletedValue(blink::DecoderCacheKey& slot, bool) {
-    slot = blink::DecoderCacheEntry::MakeCacheKey(
+  static blink::DecoderCacheKey DeletedValue() {
+    return blink::DecoderCacheEntry::MakeCacheKey(
         nullptr, SkISize::Make(-1, -1),
         static_cast<blink::ImageDecoder::AlphaOption>(0),
         cc::PaintImage::kDefaultGeneratorClientId);
   }
-  static bool IsDeletedValue(const blink::DecoderCacheKey& value) {
-    return value.size_ == SkISize::Make(-1, -1);
-  }
 };
 
 }  // namespace WTF
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item.h b/third_party/blink/renderer/platform/graphics/paint/display_item.h
index df55407..9b11a08 100644
--- a/third_party/blink/renderer/platform/graphics/paint/display_item.h
+++ b/third_party/blink/renderer/platform/graphics/paint/display_item.h
@@ -380,20 +380,14 @@
     const_cast<wtf_size_t&>(slot.fragment) = kNotFound;
   }
   static bool IsDeletedValue(const Key& id) { return id.fragment == kNotFound; }
-};
 
-template <>
-struct DefaultHash<blink::DisplayItem::Id::HashKey> {
-  STATIC_ONLY(DefaultHash);
-  using Key = blink::DisplayItem::Id::HashKey;
   static unsigned GetHash(const Key& id) {
-    unsigned hash = IntHash<blink::DisplayItemClientId>::GetHash(id.client_id);
+    unsigned hash = WTF::GetHash(id.client_id);
     WTF::AddIntToHash(hash, id.type);
     WTF::AddIntToHash(hash, id.fragment);
     return hash;
   }
-  static bool Equal(const Key& a, const Key& b) { return a == b; }
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 }  // namespace WTF
diff --git a/third_party/blink/renderer/platform/graphics/resource_id_traits.h b/third_party/blink/renderer/platform/graphics/resource_id_traits.h
index 0ddc632..915477c4 100644
--- a/third_party/blink/renderer/platform/graphics/resource_id_traits.h
+++ b/third_party/blink/renderer/platform/graphics/resource_id_traits.h
@@ -20,6 +20,9 @@
 
 template <>
 struct HashTraits<viz::ResourceId> : GenericHashTraits<viz::ResourceId> {
+  static uint32_t GetHash(const viz::ResourceId& id) {
+    return WTF::GetHash(id.GetUnsafeValue());
+  }
   static const bool kEmptyValueIsZero = false;
   static viz::ResourceId EmptyValue() {
     return viz::ResourceId(std::numeric_limits<uint32_t>::max());
@@ -31,22 +34,4 @@
 
 }  // namespace WTF
 
-namespace blink {
-
-struct ResourceIdHash {
-  STATIC_ONLY(ResourceIdHash);
-
-  static bool Equal(const viz::ResourceId& a, const viz::ResourceId& b) {
-    return a == b;
-  }
-
-  static uint32_t GetHash(const viz::ResourceId& id) {
-    return WTF::HashInt(id.GetUnsafeValue());
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-}  // namespace blink
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_RESOURCE_ID_TRAITS_H_
diff --git a/third_party/blink/renderer/platform/graphics/skia/sk_image_info_hash.h b/third_party/blink/renderer/platform/graphics/skia/sk_image_info_hash.h
index 54b5c4df..232fb9b 100644
--- a/third_party/blink/renderer/platform/graphics/skia/sk_image_info_hash.h
+++ b/third_party/blink/renderer/platform/graphics/skia/sk_image_info_hash.h
@@ -12,8 +12,7 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<SkImageInfo> {
-  STATIC_ONLY(DefaultHash);
+struct HashTraits<SkImageInfo> : GenericHashTraits<SkImageInfo> {
   static unsigned GetHash(const SkImageInfo& key) {
     unsigned result = HashInts(key.width(), key.height());
     result = HashInts(result, key.colorType());
@@ -22,15 +21,7 @@
       result = HashInts(result, static_cast<uint32_t>(cs->hash()));
     return result;
   }
-  static bool Equal(const SkImageInfo& a, const SkImageInfo& b) {
-    return a == b;
-  }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
 
-template <>
-struct HashTraits<SkImageInfo> : GenericHashTraits<SkImageInfo> {
-  STATIC_ONLY(HashTraits);
   static const bool kEmptyValueIsZero = true;
   static SkImageInfo EmptyValue() {
     return SkImageInfo::Make(0, 0, kUnknown_SkColorType, kUnknown_SkAlphaType,
diff --git a/third_party/blink/renderer/platform/graphics/skia/sk_size_hash.h b/third_party/blink/renderer/platform/graphics/skia/sk_size_hash.h
index 5480150..602e7c6 100644
--- a/third_party/blink/renderer/platform/graphics/skia/sk_size_hash.h
+++ b/third_party/blink/renderer/platform/graphics/skia/sk_size_hash.h
@@ -32,36 +32,20 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<SkSize> {
-  STATIC_ONLY(DefaultHash);
+struct HashTraits<SkSize> : GenericHashTraits<SkSize> {
   static unsigned GetHash(const SkSize& key) {
     return HashInts(key.width(), key.height());
   }
-  static bool Equal(const SkSize& a, const SkSize& b) { return a == b; }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-template <>
-struct HashTraits<SkSize> : GenericHashTraits<SkSize> {
-  STATIC_ONLY(HashTraits);
   static constexpr bool kEmptyValueIsZero = true;
   static SkSize EmptyValue() { return SkSize::Make(0, 0); }
   static SkSize DeletedValue() { return SkSize::Make(-1, -1); }
 };
 
 template <>
-struct DefaultHash<SkISize> {
-  STATIC_ONLY(DefaultHash);
+struct HashTraits<SkISize> : GenericHashTraits<SkISize> {
   static unsigned GetHash(const SkISize& key) {
     return HashInts(key.width(), key.height());
   }
-  static bool Equal(const SkISize& a, const SkISize& b) { return a == b; }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-template <>
-struct HashTraits<SkISize> : GenericHashTraits<SkISize> {
-  STATIC_ONLY(HashTraits);
   static constexpr bool kEmptyValueIsZero = true;
   static SkISize EmptyValue() { return SkISize::Make(0, 0); }
   static SkISize DeletedValue() { return SkISize::Make(-1, -1); }
diff --git a/third_party/blink/renderer/platform/heap/collection_support/heap_hash_counted_set.h b/third_party/blink/renderer/platform/heap/collection_support/heap_hash_counted_set.h
index cdf3f2e..a1b5d14 100644
--- a/third_party/blink/renderer/platform/heap/collection_support/heap_hash_counted_set.h
+++ b/third_party/blink/renderer/platform/heap/collection_support/heap_hash_counted_set.h
@@ -12,7 +12,7 @@
 
 namespace blink {
 
-template <typename Value, typename Traits = DefaultHashAndTraits<Value>>
+template <typename Value, typename Traits = HashTraits<Value>>
 class HeapHashCountedSet final
     : public GarbageCollected<HeapHashCountedSet<Value, Traits>>,
       public HashCountedSet<Value, Traits, HeapAllocator> {
diff --git a/third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h b/third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h
index 36be6b9d..a2a830d 100644
--- a/third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h
+++ b/third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h
@@ -15,7 +15,7 @@
 
 template <typename KeyArg,
           typename MappedArg,
-          typename KeyTraitsArg = DefaultHashAndTraits<KeyArg>,
+          typename KeyTraitsArg = HashTraits<KeyArg>,
           typename MappedTraitsArg = HashTraits<MappedArg>>
 class HeapHashMap final
     : public GarbageCollected<
diff --git a/third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h b/third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h
index e0550d4..7a63411 100644
--- a/third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h
+++ b/third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h
@@ -12,8 +12,7 @@
 
 namespace blink {
 
-template <typename ValueArg,
-          typename TraitsArg = DefaultHashAndTraits<ValueArg>>
+template <typename ValueArg, typename TraitsArg = HashTraits<ValueArg>>
 class HeapHashSet final
     : public GarbageCollected<HeapHashSet<ValueArg, TraitsArg>>,
       public HashSet<ValueArg, TraitsArg, HeapAllocator> {
diff --git a/third_party/blink/renderer/platform/heap/collection_support/heap_linked_hash_set.h b/third_party/blink/renderer/platform/heap/collection_support/heap_linked_hash_set.h
index e8f78e0e..0400cfd 100644
--- a/third_party/blink/renderer/platform/heap/collection_support/heap_linked_hash_set.h
+++ b/third_party/blink/renderer/platform/heap/collection_support/heap_linked_hash_set.h
@@ -15,8 +15,7 @@
 
 namespace blink {
 
-template <typename ValueArg,
-          typename TraitsArg = DefaultHashAndTraits<ValueArg>>
+template <typename ValueArg, typename TraitsArg = HashTraits<ValueArg>>
 class HeapLinkedHashSet final
     : public GarbageCollected<HeapLinkedHashSet<ValueArg, TraitsArg>>,
       public LinkedHashSet<ValueArg, TraitsArg, HeapAllocator> {
diff --git a/third_party/blink/renderer/platform/heap/cross_thread_persistent.h b/third_party/blink/renderer/platform/heap/cross_thread_persistent.h
index 3b0223c..4503223 100644
--- a/third_party/blink/renderer/platform/heap/cross_thread_persistent.h
+++ b/third_party/blink/renderer/platform/heap/cross_thread_persistent.h
@@ -71,13 +71,6 @@
     : BasePersistentHashTraits<T, blink::CrossThreadWeakPersistent<T>> {};
 
 template <typename T>
-struct DefaultHash<blink::CrossThreadPersistent<T>> : PersistentHashBase<T> {};
-
-template <typename T>
-struct DefaultHash<blink::CrossThreadWeakPersistent<T>>
-    : PersistentHashBase<T> {};
-
-template <typename T>
 struct CrossThreadCopier<blink::CrossThreadPersistent<T>>
     : public CrossThreadCopierPassThrough<blink::CrossThreadPersistent<T>> {
   STATIC_ONLY(CrossThreadCopier);
diff --git a/third_party/blink/renderer/platform/heap/heap_test_objects.h b/third_party/blink/renderer/platform/heap/heap_test_objects.h
index ba46351..0771f903 100644
--- a/third_party/blink/renderer/platform/heap/heap_test_objects.h
+++ b/third_party/blink/renderer/platform/heap/heap_test_objects.h
@@ -128,7 +128,7 @@
     return other.Value() == Value();
   }
 
-  unsigned GetHash() { return IntHash<int>::GetHash(x_); }
+  unsigned GetHash() { return WTF::GetHash(x_); }
 
  private:
   int x_;
diff --git a/third_party/blink/renderer/platform/heap/member.h b/third_party/blink/renderer/platform/heap/member.h
index 0854ac7..4464b6b 100644
--- a/third_party/blink/renderer/platform/heap/member.h
+++ b/third_party/blink/renderer/platform/heap/member.h
@@ -63,43 +63,6 @@
 
 namespace WTF {
 
-// Default hash for hash tables with Member<>-derived elements.
-template <typename T>
-struct MemberHash
-    : IntHash<cppgc::internal::MemberBase::RawStorage::IntegralType> {
-  using Base = IntHash<cppgc::internal::MemberBase::RawStorage::IntegralType>;
-  STATIC_ONLY(MemberHash);
-  // Heap hash containers allow to operate with raw pointers, e.g.
-  //   HeapHashSet<Member<GCed>> set;
-  //   set.find(raw_ptr);
-  // Therefore, provide two hashing functions, one for raw pointers, another for
-  // Member. Prefer compressing raw pointers instead of decompressing Members,
-  // assuming the former is cheaper.
-  static unsigned GetHash(const T* key) {
-    cppgc::internal::MemberBase::RawStorage st(key);
-    return Base::GetHash(st.GetAsInteger());
-  }
-  template <typename Member,
-            std::enable_if_t<WTF::IsAnyMemberType<Member>::value>* = nullptr>
-  static unsigned GetHash(const Member& m) {
-    return Base::GetHash(m.GetRawStorage().GetAsInteger());
-  }
-
-  template <typename U, typename V>
-  static bool Equal(const U& a, const V& b) {
-    return a == b;
-  }
-};
-
-template <typename T>
-struct DefaultHash<blink::Member<T>> : MemberHash<T> {};
-
-template <typename T>
-struct DefaultHash<blink::WeakMember<T>> : MemberHash<T> {};
-
-template <typename T>
-struct DefaultHash<blink::UntracedMember<T>> : MemberHash<T> {};
-
 template <typename T>
 struct IsTraceable<blink::Member<T>> {
   STATIC_ONLY(IsTraceable);
@@ -115,10 +78,29 @@
   static const bool value = true;
 };
 
+// Default hash for hash tables with Member<>-derived elements.
 template <typename T, typename MemberType>
 struct BaseMemberHashTraits : SimpleClassHashTraits<MemberType> {
   STATIC_ONLY(BaseMemberHashTraits);
 
+  // Heap hash containers allow to operate with raw pointers, e.g.
+  //   HeapHashSet<Member<GCed>> set;
+  //   set.find(raw_ptr);
+  // Therefore, provide two hashing functions, one for raw pointers, another for
+  // Member. Prefer compressing raw pointers instead of decompressing Members,
+  // assuming the former is cheaper.
+  static unsigned GetHash(const T* key) {
+    cppgc::internal::MemberBase::RawStorage st(key);
+    return WTF::GetHash(st.GetAsInteger());
+  }
+  template <typename Member,
+            std::enable_if_t<WTF::IsAnyMemberType<Member>::value>* = nullptr>
+  static unsigned GetHash(const Member& m) {
+    return WTF::GetHash(m.GetRawStorage().GetAsInteger());
+  }
+
+  static constexpr bool kEmptyValueIsZero = true;
+
   using PeekInType = T*;
   using PeekOutType = T*;
   using IteratorGetType = MemberType*;
@@ -142,21 +124,28 @@
   }
 };
 
+// Custom HashTraits<Member<Type>> can inherit this type.
 template <typename T>
-struct HashTraits<blink::Member<T>>
-    : BaseMemberHashTraits<T, blink::Member<T>> {
+struct MemberHashTraits : BaseMemberHashTraits<T, blink::Member<T>> {
   static constexpr bool kCanTraceConcurrently = true;
 };
-
 template <typename T>
-struct HashTraits<blink::WeakMember<T>>
-    : BaseMemberHashTraits<T, blink::WeakMember<T>> {
+struct HashTraits<blink::Member<T>> : MemberHashTraits<T> {};
+
+// Custom HashTraits<WeakMember<Type>> can inherit this type.
+template <typename T>
+struct WeakMemberHashTraits : BaseMemberHashTraits<T, blink::WeakMember<T>> {
   static constexpr bool kCanTraceConcurrently = true;
 };
-
 template <typename T>
-struct HashTraits<blink::UntracedMember<T>>
+struct HashTraits<blink::WeakMember<T>> : WeakMemberHashTraits<T> {};
+
+// Custom HashTraits<UntracedMember<Type>> can inherit this type.
+template <typename T>
+struct UntracedMemberHashTraits
     : BaseMemberHashTraits<T, blink::UntracedMember<T>> {};
+template <typename T>
+struct HashTraits<blink::UntracedMember<T>> : UntracedMemberHashTraits<T> {};
 
 template <typename T>
 class MemberConstructTraits {
diff --git a/third_party/blink/renderer/platform/heap/persistent.h b/third_party/blink/renderer/platform/heap/persistent.h
index 5f66ae73e..aadba9a 100644
--- a/third_party/blink/renderer/platform/heap/persistent.h
+++ b/third_party/blink/renderer/platform/heap/persistent.h
@@ -90,7 +90,15 @@
 
 template <typename T, typename PersistentType>
 struct BasePersistentHashTraits : SimpleClassHashTraits<PersistentType> {
-  STATIC_ONLY(BasePersistentHashTraits);
+  template <typename U>
+  static unsigned GetHash(const U& key) {
+    return WTF::GetHash<T*>(key);
+  }
+
+  template <typename U, typename V>
+  static bool Equal(const U& a, const V& b) {
+    return a == b;
+  }
 
   // TODO: Implement proper const'ness for iterator types. Requires support
   // in the marking Visitor.
@@ -126,28 +134,6 @@
 struct HashTraits<blink::WeakPersistent<T>>
     : BasePersistentHashTraits<T, blink::WeakPersistent<T>> {};
 
-// Default hash for hash tables with Persistent<>-derived elements.
-template <typename T>
-struct PersistentHashBase : PtrHash<T> {
-  STATIC_ONLY(PersistentHashBase);
-
-  template <typename U>
-  static unsigned GetHash(const U& key) {
-    return PtrHash<T>::GetHash(key);
-  }
-
-  template <typename U, typename V>
-  static bool Equal(const U& a, const V& b) {
-    return a == b;
-  }
-};
-
-template <typename T>
-struct DefaultHash<blink::Persistent<T>> : PersistentHashBase<T> {};
-
-template <typename T>
-struct DefaultHash<blink::WeakPersistent<T>> : PersistentHashBase<T> {};
-
 }  // namespace WTF
 
 namespace base {
diff --git a/third_party/blink/renderer/platform/heap/test/heap_compact_test.cc b/third_party/blink/renderer/platform/heap/test/heap_compact_test.cc
index 2638224..85aac6b 100644
--- a/third_party/blink/renderer/platform/heap/test/heap_compact_test.cc
+++ b/third_party/blink/renderer/platform/heap/test/heap_compact_test.cc
@@ -36,7 +36,7 @@
     return other.Value() == Value();
   }
 
-  unsigned GetHash() { return IntHash<int>::GetHash(x_); }
+  unsigned GetHash() { return WTF::GetHash(x_); }
 
   explicit IntWrapper(int x) : x_(x) {}
 
diff --git a/third_party/blink/renderer/platform/heap/test/heap_test.cc b/third_party/blink/renderer/platform/heap/test/heap_test.cc
index 4fb698b..c492d0a 100644
--- a/third_party/blink/renderer/platform/heap/test/heap_test.cc
+++ b/third_party/blink/renderer/platform/heap/test/heap_test.cc
@@ -79,7 +79,7 @@
     return other.Value() == Value();
   }
 
-  unsigned GetHash() { return IntHash<int>::GetHash(x_); }
+  unsigned GetHash() { return WTF::GetHash(x_); }
 
   IntWrapper(int x) : x_(x) {}
 
@@ -1653,7 +1653,7 @@
 
   static int live_things_with_destructor_;
 
-  unsigned GetHash() { return IntHash<int>::GetHash(x_); }
+  unsigned GetHash() { return WTF::GetHash(x_); }
 
  private:
   static const int kEmptyValue = 0;
@@ -2566,7 +2566,7 @@
     return other.Value() == Value();
   }
 
-  unsigned GetHash() { return IntHash<int>::GetHash(x_); }
+  unsigned GetHash() { return WTF::GetHash(x_); }
   void VoidFunction() {}
 
   OffHeapInt() = delete;
diff --git a/third_party/blink/renderer/platform/link_hash.h b/third_party/blink/renderer/platform/link_hash.h
index ebb4f3d2..ba1ffcaa4 100644
--- a/third_party/blink/renderer/platform/link_hash.h
+++ b/third_party/blink/renderer/platform/link_hash.h
@@ -39,11 +39,8 @@
 typedef uint64_t LinkHash;
 
 // Use the low 32-bits of the 64-bit LinkHash as the key for HashSets.
-struct LinkHashHash {
-  STATIC_ONLY(LinkHashHash);
+struct LinkHashHashTraits : GenericHashTraits<LinkHash> {
   static unsigned GetHash(LinkHash key) { return static_cast<unsigned>(key); }
-  static bool Equal(LinkHash a, LinkHash b) { return a == b; }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
 };
 
 // Resolves the potentially relative URL "attributeURL" relative to the given
diff --git a/third_party/blink/renderer/platform/loader/fetch/preload_key.h b/third_party/blink/renderer/platform/loader/fetch/preload_key.h
index 83d3216..e31a48b3 100644
--- a/third_party/blink/renderer/platform/loader/fetch/preload_key.h
+++ b/third_party/blink/renderer/platform/loader/fetch/preload_key.h
@@ -16,19 +16,6 @@
 // blink::ResourceFetcher).
 struct PreloadKey final {
  public:
-  struct Hash {
-    STATIC_ONLY(Hash);
-
-   public:
-    static unsigned GetHash(const PreloadKey& key) {
-      return KURLHash::GetHash(key.url);
-    }
-    static bool Equal(const PreloadKey& x, const PreloadKey& y) {
-      return x == y;
-    }
-    static constexpr bool safe_to_compare_to_empty_or_deleted = false;
-  };
-
   PreloadKey() = default;
   PreloadKey(const KURL& url, ResourceType type)
       : url(RemoveFragmentFromUrl(url)), type(type) {}
@@ -54,12 +41,17 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::PreloadKey> : blink::PreloadKey::Hash {};
-
-template <>
 struct HashTraits<blink::PreloadKey>
     : public SimpleClassHashTraits<blink::PreloadKey> {
-  static const bool kEmptyValueIsZero = false;
+  static unsigned GetHash(const blink::PreloadKey& key) {
+    return WTF::GetHash(key.url);
+  }
+  static constexpr bool kSafeToCompareToEmptyOrDeleted =
+      HashTraits<blink::KURL>::kSafeToCompareToEmptyOrDeleted;
+
+  // This doesn't delegate to KURL because the `type` field of PreloadKey() is
+  // not zero.
+  static constexpr bool kEmptyValueIsZero = false;
 
   static bool IsDeletedValue(const blink::PreloadKey& value) {
     return HashTraits<blink::KURL>::IsDeletedValue(value.url);
diff --git a/third_party/blink/renderer/platform/network/blink_schemeful_site.h b/third_party/blink/renderer/platform/network/blink_schemeful_site.h
index 04bae12a..1a1849db 100644
--- a/third_party/blink/renderer/platform/network/blink_schemeful_site.h
+++ b/third_party/blink/renderer/platform/network/blink_schemeful_site.h
@@ -75,7 +75,6 @@
   }
 
  private:
-  friend struct WTF::DefaultHash<BlinkSchemefulSite>;
   friend struct WTF::HashTraits<BlinkSchemefulSite>;
 
   // IPC serialization code needs to access internal origin.
@@ -119,25 +118,21 @@
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::BlinkSchemefulSite> {
-  STATIC_ONLY(DefaultHash);
-
+struct HashTraits<blink::BlinkSchemefulSite>
+    : SimpleClassHashTraits<blink::BlinkSchemefulSite> {
   static unsigned GetHash(const blink::BlinkSchemefulSite& schemeful_site) {
-    return blink::SecurityOriginHash::GetHash(schemeful_site.site_as_origin_);
+    return blink::SecurityOriginHashTraits::GetHash(
+        schemeful_site.site_as_origin_);
   }
 
   static bool Equal(const blink::BlinkSchemefulSite& a,
                     const blink::BlinkSchemefulSite& b) {
-    return blink::SecurityOriginHash::Equal(a.site_as_origin_,
-                                            b.site_as_origin_);
+    return blink::SecurityOriginHashTraits::Equal(a.site_as_origin_,
+                                                  b.site_as_origin_);
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
-};
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 
-template <>
-struct HashTraits<blink::BlinkSchemefulSite>
-    : SimpleClassHashTraits<blink::BlinkSchemefulSite> {
   static bool IsEmptyValue(const blink::BlinkSchemefulSite& value) {
     return !value.site_as_origin_;
   }
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 fef760a9..68f95408 100644
--- a/third_party/blink/renderer/platform/network/network_state_notifier.cc
+++ b/third_party/blink/renderer/platform/network/network_state_notifier.cc
@@ -435,7 +435,7 @@
   if (!host)
     return 1.0;
 
-  unsigned hash = StringHash::GetHash(host) + RandomizationSalt();
+  unsigned hash = WTF::GetHash(host) + RandomizationSalt();
   double random_multiplier = 0.9 + static_cast<double>((hash % 21)) * 0.01;
   DCHECK_LE(0.90, random_multiplier);
   DCHECK_GE(1.10, random_multiplier);
diff --git a/third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.cc b/third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.cc
index 52c711d8..0613a2d 100644
--- a/third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.cc
+++ b/third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.cc
@@ -21,7 +21,7 @@
 
   // Return the precomputed hash for the string. This makes this method O(1)
   // instead of O(n), at the cost of only using the lower 32 bits of the hash.
-  return IdentifiableToken(StringHash::GetHash(in));
+  return IdentifiableToken(WTF::GetHash(in));
 }
 
 IdentifiableToken IdentifiabilitySensitiveStringToken(const String& in) {
@@ -30,7 +30,7 @@
 
   // Take the precomputed 32-bit hash, and xor the top and bottom halves to
   // produce a 16-bit hash.
-  const uint32_t original_hash = StringHash::GetHash(in);
+  const uint32_t original_hash = WTF::GetHash(in);
   return IdentifiableToken(((original_hash & 0xFFFF0000) >> 16) ^
                            (original_hash & 0xFFFF));
 }
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index fdd1e91..1e91b38 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -732,7 +732,6 @@
     {
         // http://crbug.com/1276900
         name: "CSSInitialLetter",
-        depends_on: ["LayoutNG"],
         status: "stable",
         base_feature: "CSSInitialLetter",
     },
@@ -965,7 +964,6 @@
     {
       // crbug.com/1259085
       name: "DeferredShaping",
-      depends_on: ["LayoutNG"],
       status: "test",
       base_feature: "DeferredShaping",
     },
@@ -1431,7 +1429,6 @@
     },
     {
       name: "FormattedText",
-      depends_on: ["LayoutNG"],
       status: "experimental",
     },
     {
@@ -1630,17 +1627,6 @@
       base_feature: "LayoutMediaNGContainer",
     },
     {
-      // LayoutNG has been enabled in M76, but we still keep this flag for
-      // testing. See web_tests/FlagExpectations/disable-layout-ng for more
-      // details about running web tests with LayoutNG disabled. This flag also
-      // provides a convenient way for testing legacy layout code path in blink
-      // unit tests.
-      name: "LayoutNG",
-      implied_by: ["BidiCaretAffinity"],
-      status: "stable",
-      base_feature: "LayoutNG",
-    },
-    {
       // A kill-switch for a fix of crbug.com/1366268.
       name: "LayoutNGDelayScrollOffsetClamping",
       base_feature: "LayoutNGDelayScrollOffsetClamping",
@@ -1655,7 +1641,6 @@
     },
     {
       name: "LayoutNGPrinting",
-      depends_on: ["LayoutNG"],
       status: "stable",
       base_feature: "LayoutNGPrinting",
     },
@@ -1670,7 +1655,6 @@
     },
     {
       name: "LayoutNGSubgrid",
-      depends_on: ["LayoutNG"],
       status: "test"
     },
     {
@@ -1738,7 +1722,6 @@
     {
       name: "MathMLCore",
       status: "stable",
-      depends_on: ["LayoutNG"],
       base_feature: "MathMLCore",
     },
     {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/attribution_group.h b/third_party/blink/renderer/platform/scheduler/main_thread/attribution_group.h
index e5975ee..39157740 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/attribution_group.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/attribution_group.h
@@ -34,32 +34,17 @@
   bool is_deleted_value = false;
 };
 
-struct AttributionGroupHash {
-  STATIC_ONLY(AttributionGroupHash);
-
-  static unsigned GetHash(const AttributionGroup& group) {
-    return static_cast<unsigned>(group.attribution.GetHash());
-  }
-
-  static bool Equal(const AttributionGroup& a, const AttributionGroup& b) {
-    return a == b;
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
 }  // namespace scheduler
 }  // namespace blink
 
 namespace WTF {
 
 template <>
-struct DefaultHash<blink::scheduler::AttributionGroup>
-    : blink::scheduler::AttributionGroupHash {};
-
-template <>
 struct HashTraits<blink::scheduler::AttributionGroup>
     : SimpleClassHashTraits<blink::scheduler::AttributionGroup> {
+  static unsigned GetHash(const blink::scheduler::AttributionGroup& group) {
+    return static_cast<unsigned>(group.attribution.GetHash());
+  }
   static const bool kEmptyValueIsZero = false;
 };
 
diff --git a/third_party/blink/renderer/platform/storage/blink_storage_key_hash.h b/third_party/blink/renderer/platform/storage/blink_storage_key_hash.h
index 3498c7b..7e1c3e0 100644
--- a/third_party/blink/renderer/platform/storage/blink_storage_key_hash.h
+++ b/third_party/blink/renderer/platform/storage/blink_storage_key_hash.h
@@ -12,15 +12,14 @@
 
 namespace blink {
 
-struct BlinkStorageKeyHash {
-  STATIC_ONLY(BlinkStorageKeyHash);
-
+struct BlinkStorageKeyHashTraits
+    : GenericHashTraits<std::unique_ptr<const BlinkStorageKey>> {
   static unsigned GetHash(const BlinkStorageKey* storage_key) {
     absl::optional<base::UnguessableToken> nonce = storage_key->GetNonce();
     size_t nonce_hash = nonce ? base::UnguessableTokenHash()(*nonce) : 0;
     unsigned hash_codes[] = {
-      SecurityOriginHash::GetHash(storage_key->GetSecurityOrigin()),
-      DefaultHash<BlinkSchemefulSite>::GetHash(storage_key->GetTopLevelSite()),
+      SecurityOriginHashTraits::GetHash(storage_key->GetSecurityOrigin()),
+      WTF::GetHash(storage_key->GetTopLevelSite()),
       static_cast<unsigned>(storage_key->GetAncestorChainBit()),
 #if ARCH_CPU_32_BITS
       nonce_hash,
@@ -58,7 +57,7 @@
     return Equal(a.get(), b.get());
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/supplementable.h b/third_party/blink/renderer/platform/supplementable.h
index aa33354d..99e62f3 100644
--- a/third_party/blink/renderer/platform/supplementable.h
+++ b/third_party/blink/renderer/platform/supplementable.h
@@ -211,8 +211,7 @@
   void Trace(Visitor* visitor) const override { visitor->Trace(supplements_); }
 
  protected:
-  using SupplementMap =
-      HeapHashMap<const char*, Member<Supplement<T>>, PtrHash<const char>>;
+  using SupplementMap = HeapHashMap<const char*, Member<Supplement<T>>>;
   SupplementMap supplements_;
 
   Supplementable()
diff --git a/third_party/blink/renderer/platform/testing/shape_result_perf_test.cc b/third_party/blink/renderer/platform/testing/shape_result_perf_test.cc
index dc9abd4..b6d0e0a 100644
--- a/third_party/blink/renderer/platform/testing/shape_result_perf_test.cc
+++ b/third_party/blink/renderer/platform/testing/shape_result_perf_test.cc
@@ -71,7 +71,7 @@
 
   Font font;
 
-  HashMap<FontName, String, WTF::IntHash<FontName>> font_path = {
+  HashMap<FontName, String> font_path = {
       {kAhem, "Ahem.woff"},
       {kAmiri, "third_party/Amiri/amiri_arabic.woff2"},
       {kMegalopolis, "third_party/MEgalopolis/MEgalopolisExtra.woff"},
diff --git a/third_party/blink/renderer/platform/text/web_entities.h b/third_party/blink/renderer/platform/text/web_entities.h
index fce0ab3c..a50c8ea 100644
--- a/third_party/blink/renderer/platform/text/web_entities.h
+++ b/third_party/blink/renderer/platform/text/web_entities.h
@@ -34,6 +34,7 @@
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/hash_map.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/weborigin/kurl.h b/third_party/blink/renderer/platform/weborigin/kurl.h
index 479b3b5..113b538 100644
--- a/third_party/blink/renderer/platform/weborigin/kurl.h
+++ b/third_party/blink/renderer/platform/weborigin/kurl.h
@@ -320,7 +320,7 @@
 
 // Defined in kurl_hash.h.
 template <>
-struct DefaultHash<blink::KURL>;
+struct HashTraits<blink::KURL>;
 
 template <>
 struct CrossThreadCopier<blink::KURL>
diff --git a/third_party/blink/renderer/platform/weborigin/kurl_hash.h b/third_party/blink/renderer/platform/weborigin/kurl_hash.h
index 4c9a0b1..8175df2 100644
--- a/third_party/blink/renderer/platform/weborigin/kurl_hash.h
+++ b/third_party/blink/renderer/platform/weborigin/kurl_hash.h
@@ -31,34 +31,24 @@
 #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
-namespace blink {
+namespace WTF {
 
 // KURLHash doesn't support null KURLs.  get(), contains(), and add() on
 // HashMap<KURL,..., KURLHash> cause a null-pointer dereference when passed null
 // KURLs.
-
-struct KURLHash {
-  STATIC_ONLY(KURLHash);
-  static unsigned GetHash(const KURL& key) {
-    return key.GetString().Impl()->GetHash();
-  }
-
-  static bool Equal(const KURL& a, const KURL& b) {
-    return StringHash::Equal(a.GetString(), b.GetString());
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = false;
-};
-
-}  // namespace blink
-
-namespace WTF {
-
-template <>
-struct DefaultHash<blink::KURL> : blink::KURLHash {};
-
 template <>
 struct HashTraits<blink::KURL> : SimpleClassHashTraits<blink::KURL> {
+  static unsigned GetHash(const blink::KURL& key) {
+    return WTF::GetHash(key.GetString());
+  }
+
+  static bool Equal(const blink::KURL& a, const blink::KURL& b) {
+    return HashTraits<String>::Equal(a.GetString(), b.GetString());
+  }
+
+  static constexpr bool kSafeToCompareToEmptyOrDeleted =
+      HashTraits<String>::kSafeToCompareToEmptyOrDeleted;
+
   static bool IsDeletedValue(const blink::KURL& value) {
     return HashTraits<String>::IsDeletedValue(value.GetString());
   }
diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.h b/third_party/blink/renderer/platform/weborigin/scheme_registry.h
index 016ad70..bbc5252 100644
--- a/third_party/blink/renderer/platform/weborigin/scheme_registry.h
+++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.h
@@ -39,8 +39,7 @@
 using URLSchemesSet = HashSet<String>;
 
 template <typename Mapped, typename MappedTraits>
-using URLSchemesMap =
-    HashMap<String, Mapped, DefaultHashAndTraits<String>, MappedTraits>;
+using URLSchemesMap = HashMap<String, Mapped, HashTraits<String>, MappedTraits>;
 
 class PLATFORM_EXPORT SchemeRegistry {
   STATIC_ONLY(SchemeRegistry);
diff --git a/third_party/blink/renderer/platform/weborigin/security_origin.h b/third_party/blink/renderer/platform/weborigin/security_origin.h
index 0c004d4..30aca31 100644
--- a/third_party/blink/renderer/platform/weborigin/security_origin.h
+++ b/third_party/blink/renderer/platform/weborigin/security_origin.h
@@ -40,15 +40,9 @@
 #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 #include "url/origin.h"
 
-namespace mojo {
-struct UrlOriginAdapter;
-}  // namespace mojo
-
 namespace blink {
 
 class KURL;
-struct SecurityOriginHash;
-class SecurityOriginTest;
 
 // An identifier which defines the source of content (e.g. a document) and
 // restricts what other objects it is permitted to access (based on their
@@ -387,9 +381,9 @@
 
  private:
   // Various serialisation and test routines that need direct nonce access.
-  friend mojo::UrlOriginAdapter;
-  friend SecurityOriginHash;
-  friend SecurityOriginTest;
+  friend struct mojo::UrlOriginAdapter;
+  friend struct SecurityOriginHashTraits;
+  friend class SecurityOriginTest;
 
   // For calling GetNonceForSerialization().
   friend class BlobURLOpaqueOriginNonceMap;
diff --git a/third_party/blink/renderer/platform/weborigin/security_origin_hash.h b/third_party/blink/renderer/platform/weborigin/security_origin_hash.h
index 305105d..510b3ae 100644
--- a/third_party/blink/renderer/platform/weborigin/security_origin_hash.h
+++ b/third_party/blink/renderer/platform/weborigin/security_origin_hash.h
@@ -30,11 +30,8 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WEBORIGIN_SECURITY_ORIGIN_HASH_H_
 
 #include "base/memory/scoped_refptr.h"
-#include "build/build_config.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
-#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+#include "third_party/blink/renderer/platform/wtf/hash_traits.h"
 
 namespace blink {
 
@@ -42,8 +39,8 @@
 // As such it ignores the domain that might or might not be set on the origin.
 // If you need "same origin-domain" equality you'll need to use a different hash
 // function.
-struct SecurityOriginHash {
-  STATIC_ONLY(SecurityOriginHash);
+struct SecurityOriginHashTraits
+    : GenericHashTraits<scoped_refptr<const SecurityOrigin>> {
   static unsigned GetHash(const SecurityOrigin* origin) {
     const base::UnguessableToken* nonce = origin->GetNonceForSerialization();
     size_t nonce_hash = nonce ? base::UnguessableTokenHash()(*nonce) : 0;
@@ -86,7 +83,7 @@
     return Equal(a.get(), b.get());
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/weborigin/security_origin_test.cc b/third_party/blink/renderer/platform/weborigin/security_origin_test.cc
index c87fd9ac..67e18463 100644
--- a/third_party/blink/renderer/platform/weborigin/security_origin_test.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_origin_test.cc
@@ -719,9 +719,9 @@
   scoped_refptr<const SecurityOrigin> copied = origin->IsolatedCopy();
   EXPECT_TRUE(origin->CanAccess(copied.get()));
   EXPECT_TRUE(origin->IsSameOriginWith(copied.get()));
-  EXPECT_EQ(SecurityOriginHash::GetHash(origin),
-            SecurityOriginHash::GetHash(copied));
-  EXPECT_TRUE(SecurityOriginHash::Equal(origin, copied));
+  EXPECT_EQ(SecurityOriginHashTraits::GetHash(origin),
+            SecurityOriginHashTraits::GetHash(copied));
+  EXPECT_TRUE(SecurityOriginHashTraits::Equal(origin, copied));
 }
 
 TEST_F(SecurityOriginTest, EdgeCases) {
diff --git a/third_party/blink/renderer/platform/wtf/hash_counted_set.h b/third_party/blink/renderer/platform/wtf/hash_counted_set.h
index b3b46b1b..b57f295 100644
--- a/third_party/blink/renderer/platform/wtf/hash_counted_set.h
+++ b/third_party/blink/renderer/platform/wtf/hash_counted_set.h
@@ -32,7 +32,7 @@
 // the set. The iterators have fields ->key and ->value that return the set
 // members and their counts, respectively.
 template <typename Value,
-          typename Traits = DefaultHashAndTraits<Value>,
+          typename Traits = HashTraits<Value>,
           typename Allocator = PartitionAllocator>
 class HashCountedSet {
   USE_ALLOCATOR(HashCountedSet, Allocator);
diff --git a/third_party/blink/renderer/platform/wtf/hash_functions.h b/third_party/blink/renderer/platform/wtf/hash_functions.h
index 7cd0d46..e580911 100644
--- a/third_party/blink/renderer/platform/wtf/hash_functions.h
+++ b/third_party/blink/renderer/platform/wtf/hash_functions.h
@@ -22,40 +22,37 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_HASH_FUNCTIONS_H_
 
 #include <stdint.h>
-#include <memory>
 #include <type_traits>
+
 #include "base/bit_cast.h"
-#include "base/memory/scoped_refptr.h"
-#include "build/build_config.h"
-#include "third_party/blink/renderer/platform/wtf/hash_table_deleted_value_type.h"
-#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
 
 namespace WTF {
 
+namespace internal {
+
 template <size_t size>
 struct IntTypes;
 template <>
 struct IntTypes<1> {
-  typedef int8_t SignedType;
   typedef uint8_t UnsignedType;
 };
 template <>
 struct IntTypes<2> {
-  typedef int16_t SignedType;
   typedef uint16_t UnsignedType;
 };
 template <>
 struct IntTypes<4> {
-  typedef int32_t SignedType;
   typedef uint32_t UnsignedType;
 };
 template <>
 struct IntTypes<8> {
-  typedef int64_t SignedType;
   typedef uint64_t UnsignedType;
 };
 
-// integer hash function
+template <typename T>
+using IntHashBits = typename IntTypes<sizeof(T)>::UnsignedType;
+
+// Hash functions for integral and enum types.
 
 // Thomas Wang's 32 Bit Mix Function:
 // http://www.cris.com/~Ttwang/tech/inthash.htm
@@ -93,6 +90,8 @@
   return static_cast<unsigned>(key);
 }
 
+}  // namespace internal
+
 // Compound integer hash method:
 // http://opendatastructures.org/versions/edition-0.1d/ods-java/node33.html#SECTION00832000000000000000
 inline unsigned HashInts(unsigned key1, unsigned key2) {
@@ -108,76 +107,28 @@
 }
 
 template <typename T>
-struct IntHash {
-  static unsigned GetHash(T key) {
-    return HashInt(
-        static_cast<typename IntTypes<sizeof(T)>::UnsignedType>(key));
-  }
-  static bool Equal(T a, T b) { return a == b; }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
+unsigned HashInt(T key) {
+  static_assert(std::is_integral_v<T> || std::is_enum_v<T>);
+  return internal::HashInt(static_cast<internal::IntHashBits<T>>(key));
+}
 
 template <typename T>
-struct FloatHash {
-  typedef typename IntTypes<sizeof(T)>::UnsignedType Bits;
-  static unsigned GetHash(T key) { return HashInt(base::bit_cast<Bits>(key)); }
-  static bool Equal(T a, T b) {
-    return base::bit_cast<Bits>(a) == base::bit_cast<Bits>(b);
-  }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
-
-// pointer identity hash function
+unsigned HashFloat(T key) {
+  static_assert(std::is_floating_point_v<T>);
+  return internal::HashInt(base::bit_cast<internal::IntHashBits<T>>(key));
+}
 
 template <typename T>
-struct PtrHash {
-  static unsigned GetHash(T* key) {
-#if defined(COMPILER_MSVC)
-#pragma warning(push)
-// work around what seems to be a bug in MSVC's conversion warnings
-#pragma warning(disable : 4244)
-#endif
-    return IntHash<uintptr_t>::GetHash(reinterpret_cast<uintptr_t>(key));
-#if defined(COMPILER_MSVC)
-#pragma warning(pop)
-#endif
-  }
-  static bool Equal(T* a, T* b) { return a == b; }
-  static bool Equal(std::nullptr_t, T* b) { return !b; }
-  static bool Equal(T* a, std::nullptr_t) { return !a; }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
-};
+bool FloatEqualForHash(T a, T b) {
+  static_assert(std::is_floating_point_v<T>);
+  return base::bit_cast<internal::IntHashBits<T>>(a) ==
+         base::bit_cast<internal::IntHashBits<T>>(b);
+}
 
 template <typename T>
-struct RefPtrHash : PtrHash<T> {
-  using PtrHash<T>::GetHash;
-  static unsigned GetHash(const scoped_refptr<T>& key) {
-    return GetHash(key.get());
-  }
-  using PtrHash<T>::Equal;
-  static bool Equal(const scoped_refptr<T>& a, const scoped_refptr<T>& b) {
-    return a == b;
-  }
-  static bool Equal(T* a, const scoped_refptr<T>& b) { return a == b; }
-  static bool Equal(const scoped_refptr<T>& a, T* b) { return a == b; }
-};
-
-template <typename T>
-struct UniquePtrHash : PtrHash<T> {
-  using PtrHash<T>::GetHash;
-  static unsigned GetHash(const std::unique_ptr<T>& key) {
-    return GetHash(key.get());
-  }
-  static bool Equal(const std::unique_ptr<T>& a, const std::unique_ptr<T>& b) {
-    return a == b;
-  }
-  static bool Equal(const std::unique_ptr<T>& a, const T* b) {
-    return a.get() == b;
-  }
-  static bool Equal(const T* a, const std::unique_ptr<T>& b) {
-    return a == b.get();
-  }
-};
+unsigned HashPointer(T* key) {
+  return HashInt(base::bit_cast<internal::IntHashBits<T*>>(key));
+}
 
 // Useful compounding hash functions.
 inline void AddIntToHash(unsigned& hash, unsigned key) {
@@ -185,93 +136,9 @@
 }
 
 inline void AddFloatToHash(unsigned& hash, float value) {
-  AddIntToHash(hash, FloatHash<float>::GetHash(value));
+  AddIntToHash(hash, HashFloat(value));
 }
 
-// Default hash function for each type.
-template <typename T>
-struct DefaultHash;
-
-// Actual implementation of DefaultHash. This is kept temporarily before we
-// combine all DefaultHash into HashTraits.
-//
-// The case of |isIntegral| == false is not implemented by default.
-template <typename T, bool isIntegral>
-struct DefaultHashImpl {
-  // If DefaultHash<T> falls back to this, the hash traits type is supposed to
-  // be completely implemented. See hash_traits.h.
-  using Undefined = void;
-};
-
-template <typename T>
-struct DefaultHashImpl<T, true> : IntHash<T> {};
-
-// Canonical implementation of DefaultHash.
-template <typename T>
-struct DefaultHash
-    : DefaultHashImpl<T, std::is_integral<T>::value || std::is_enum<T>::value> {
-};
-
-// Specializations of DefaultHash follow.
-template <>
-struct DefaultHash<float> : FloatHash<float> {};
-template <>
-struct DefaultHash<double> : FloatHash<double> {};
-
-// Specializations for pointer types.
-template <typename T>
-struct DefaultHash<T*> : PtrHash<T> {};
-template <typename T>
-struct DefaultHash<scoped_refptr<T>> : RefPtrHash<T> {};
-template <typename T>
-struct DefaultHash<std::unique_ptr<T>> : UniquePtrHash<T> {};
-
-// Specializations for pairs.
-
-// Generic case (T or U is non-integral):
-template <typename T, typename U, bool areBothIntegral>
-struct PairHashImpl {
-  static unsigned GetHash(const std::pair<T, U>& p) {
-    return HashInts(DefaultHash<T>::GetHash(p.first),
-                    DefaultHash<U>::GetHash(p.second));
-  }
-  static bool Equal(const std::pair<T, U>& a, const std::pair<T, U>& b) {
-    return DefaultHash<T>::Equal(a.first, b.first) &&
-           DefaultHash<U>::Equal(a.second, b.second);
-  }
-  static const bool safe_to_compare_to_empty_or_deleted =
-      DefaultHash<T>::safe_to_compare_to_empty_or_deleted &&
-      DefaultHash<U>::safe_to_compare_to_empty_or_deleted;
-};
-
-// Special version for pairs of integrals:
-template <typename T, typename U>
-struct PairHashImpl<T, U, true> {
-  static unsigned GetHash(const std::pair<T, U>& p) {
-    return HashInts(p.first, p.second);
-  }
-  static bool Equal(const std::pair<T, U>& a, const std::pair<T, U>& b) {
-    return PairHashImpl<T, U, false>::Equal(
-        a, b);  // Refer to the generic version.
-  }
-  static const bool safe_to_compare_to_empty_or_deleted =
-      PairHashImpl<T, U, false>::safe_to_compare_to_empty_or_deleted;
-};
-
-// Combined version:
-template <typename T, typename U>
-struct PairHash
-    : PairHashImpl<T,
-                   U,
-                   std::is_integral<T>::value && std::is_integral<U>::value> {};
-
-template <typename T, typename U>
-struct DefaultHash<std::pair<T, U>> : PairHash<T, U> {};
-
 }  // namespace WTF
 
-using WTF::DefaultHash;
-using WTF::IntHash;
-using WTF::PtrHash;
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_HASH_FUNCTIONS_H_
diff --git a/third_party/blink/renderer/platform/wtf/hash_map.h b/third_party/blink/renderer/platform/wtf/hash_map.h
index 2ab5c35..19fc5f85 100644
--- a/third_party/blink/renderer/platform/wtf/hash_map.h
+++ b/third_party/blink/renderer/platform/wtf/hash_map.h
@@ -57,7 +57,7 @@
 // can be lifted if you supply custom key traits.
 template <typename KeyArg,
           typename MappedArg,
-          typename KeyTraitsArg = DefaultHashAndTraits<KeyArg>,
+          typename KeyTraitsArg = HashTraits<KeyArg>,
           typename MappedTraitsArg = HashTraits<MappedArg>,
           typename Allocator = PartitionAllocator>
 class HashMap {
@@ -66,7 +66,7 @@
   friend class HashCountedSet;
 
  private:
-  typedef HashTraitsAdapter<KeyArg, KeyTraitsArg> KeyTraits;
+  typedef KeyTraitsArg KeyTraits;
   typedef MappedTraitsArg MappedTraits;
   typedef HashMapValueTraits<KeyTraits, MappedTraits> ValueTraits;
 
diff --git a/third_party/blink/renderer/platform/wtf/hash_map_test.cc b/third_party/blink/renderer/platform/wtf/hash_map_test.cc
index 6011b5b8..ee8c678 100644
--- a/third_party/blink/renderer/platform/wtf/hash_map_test.cc
+++ b/third_party/blink/renderer/platform/wtf/hash_map_test.cc
@@ -91,12 +91,10 @@
   static const unsigned kMinimumTableSize = 8;
 };
 
-using DoubleHashMap =
-    HashMap<double, int64_t, DefaultHash<double>, TestDoubleHashTraits>;
+using DoubleHashMap = HashMap<double, int64_t, TestDoubleHashTraits>;
 
 int BucketForKey(double key) {
-  return DefaultHash<double>::GetHash(key) &
-         (TestDoubleHashTraits::kMinimumTableSize - 1);
+  return WTF::GetHash(key) & (TestDoubleHashTraits::kMinimumTableSize - 1);
 }
 
 TEST(HashMapTest, DoubleHashCollisions) {
@@ -627,15 +625,15 @@
 }
 
 TEST(HashMapTest, IsValidKey) {
-  static_assert(DefaultHash<int>::safe_to_compare_to_empty_or_deleted,
+  static_assert(HashTraits<int>::kSafeToCompareToEmptyOrDeleted,
                 "type should be comparable to empty or deleted");
-  static_assert(DefaultHash<int*>::safe_to_compare_to_empty_or_deleted,
+  static_assert(HashTraits<int*>::kSafeToCompareToEmptyOrDeleted,
                 "type should be comparable to empty or deleted");
   static_assert(
-      DefaultHash<
-          scoped_refptr<DummyRefCounted>>::safe_to_compare_to_empty_or_deleted,
+      HashTraits<
+          scoped_refptr<DummyRefCounted>>::kSafeToCompareToEmptyOrDeleted,
       "type should be comparable to empty or deleted");
-  static_assert(!DefaultHash<AtomicString>::safe_to_compare_to_empty_or_deleted,
+  static_assert(!HashTraits<AtomicString>::kSafeToCompareToEmptyOrDeleted,
                 "type should not be comparable to empty or deleted");
 
   EXPECT_FALSE((HashMap<int, int>::IsValidKey(0)));
diff --git a/third_party/blink/renderer/platform/wtf/hash_set.h b/third_party/blink/renderer/platform/wtf/hash_set.h
index bcd416c..fb6b9a8 100644
--- a/third_party/blink/renderer/platform/wtf/hash_set.h
+++ b/third_party/blink/renderer/platform/wtf/hash_set.h
@@ -38,13 +38,13 @@
 // allowed; for integer keys 0 or -1 can't be used as a key. This restriction
 // can be lifted if you supply custom key traits.
 template <typename ValueArg,
-          typename TraitsArg = DefaultHashAndTraits<ValueArg>,
+          typename TraitsArg = HashTraits<ValueArg>,
           typename Allocator = PartitionAllocator>
 class HashSet {
   USE_ALLOCATOR(HashSet, Allocator);
 
  private:
-  typedef HashTraitsAdapter<ValueArg, TraitsArg> ValueTraits;
+  typedef TraitsArg ValueTraits;
   typedef typename ValueTraits::PeekInType ValuePeekInType;
 
  public:
diff --git a/third_party/blink/renderer/platform/wtf/hash_traits.h b/third_party/blink/renderer/platform/wtf/hash_traits.h
index 61f1a83..79e9b25 100644
--- a/third_party/blink/renderer/platform/wtf/hash_traits.h
+++ b/third_party/blink/renderer/platform/wtf/hash_traits.h
@@ -55,6 +55,8 @@
 
 template <typename T>
 struct GenericHashTraitsBase {
+  STATIC_ONLY(GenericHashTraitsBase);
+
   using TraitType = T;
 
   // Type for functions that do not take ownership, such as contains.
@@ -175,7 +177,7 @@
 template <typename T, auto empty_value, auto deleted_value>
 struct IntOrEnumHashTraits : internal::GenericHashTraitsBase<T> {
   static_assert(std::is_integral_v<T> || std::is_enum_v<T>);
-  static unsigned GetHash(T key) { return IntHash<T>::GetHash(key); }
+  static unsigned GetHash(T key) { return WTF::HashInt(key); }
   static constexpr bool kEmptyValueIsZero =
       static_cast<int64_t>(empty_value) == 0;
   static constexpr T EmptyValue() { return static_cast<T>(empty_value); }
@@ -218,6 +220,8 @@
 template <typename T>
 struct GenericHashTraits<T, std::enable_if_t<std::is_floating_point_v<T>>>
     : internal::GenericHashTraitsBase<T> {
+  static unsigned GetHash(T key) { return HashFloat(key); }
+  static bool Equal(T a, T b) { return FloatEqualForHash(a, b); }
   static constexpr T EmptyValue() { return std::numeric_limits<T>::infinity(); }
   static constexpr T DeletedValue() {
     return -std::numeric_limits<T>::infinity();
@@ -242,6 +246,7 @@
 
 template <typename P>
 struct GenericHashTraits<P*> : internal::GenericHashTraitsBase<P*> {
+  static unsigned GetHash(P* key) { return HashPointer(key); }
   static constexpr bool kEmptyValueIsZero = true;
   static constexpr P* DeletedValue() { return reinterpret_cast<P*>(-1); }
 };
@@ -253,6 +258,17 @@
                 "Unexpected RefPtr size."
                 " RefPtr needs to be single pointer to support deleted value.");
 
+  static unsigned GetHash(P* key) { return HashPointer(key); }
+  static unsigned GetHash(const scoped_refptr<P>& key) {
+    return GetHash(key.get());
+  }
+
+  static bool Equal(const scoped_refptr<P>& a, const scoped_refptr<P>& b) {
+    return a == b;
+  }
+  static bool Equal(P* a, const scoped_refptr<P>& b) { return a == b; }
+  static bool Equal(const scoped_refptr<P>& a, P* b) { return a == b; }
+
   class RefPtrValuePeeker {
     DISALLOW_NEW();
 
@@ -301,6 +317,21 @@
 template <typename T>
 struct GenericHashTraits<std::unique_ptr<T>>
     : internal::GenericHashTraitsBase<std::unique_ptr<T>> {
+  static unsigned GetHash(T* key) { return HashPointer(key); }
+  static unsigned GetHash(const std::unique_ptr<T>& key) {
+    return GetHash(key.get());
+  }
+
+  static bool Equal(const std::unique_ptr<T>& a, const std::unique_ptr<T>& b) {
+    return a == b;
+  }
+  static bool Equal(const std::unique_ptr<T>& a, const T* b) {
+    return a.get() == b;
+  }
+  static bool Equal(const T* a, const std::unique_ptr<T>& b) {
+    return a == b.get();
+  }
+
   static constexpr bool kEmptyValueIsZero = true;
   static bool IsEmptyValue(const std::unique_ptr<T>& value) { return !value; }
 
@@ -364,13 +395,9 @@
   }
 };
 
+// Defined in string_hash.h.
 template <>
-struct HashTraits<String> : SimpleClassHashTraits<String> {
-  // Defined in string_hash.h.
-  static bool IsEmptyValue(const String&);
-  static bool IsDeletedValue(const String& value);
-  static void ConstructDeletedValue(String& slot, bool zero_value);
-};
+struct HashTraits<String>;
 
 namespace internal {
 
@@ -592,44 +619,14 @@
 struct HashTraits<KeyValuePair<Key, Value>>
     : public KeyValuePairHashTraits<HashTraits<Key>, HashTraits<Value>> {};
 
-// Temporary adapters during combining HashFunctions and HashTraits.
-template <typename HashFunctions, typename KeyTraits, typename Enable = void>
-struct CombinedHashTraits : HashFunctions, KeyTraits {
-  using HashFunctions::Equal;
-  using HashFunctions::GetHash;
-  // Note the name change.
-  static constexpr bool kSafeToCompareToEmptyOrDeleted =
-      HashFunctions::safe_to_compare_to_empty_or_deleted;
-};
-// If HashFunctions is not explicitly defined, we assume KeyTraits is already a
-// full hash traits type.
-template <typename HashFunctions, typename KeyTraits>
-struct CombinedHashTraits<HashFunctions,
-                          KeyTraits,
-                          std::void_t<typename HashFunctions::Undefined>>
-    : KeyTraits {};
-template <typename Key, typename Enable = void>
-struct DefaultHashAndTraits
-    : CombinedHashTraits<DefaultHash<Key>, HashTraits<Key>> {};
-// Use HashFunctions + HashTraits<Key> if the second argument (i.e. the third
-// argument of HashMap) is a legacy hash functions type.
-template <typename Key, typename HashFunctions, typename Enable = void>
-struct HashTraitsAdapter : CombinedHashTraits<HashFunctions, HashTraits<Key>> {
-};
-// Use KeyTraits if it's already a full hash traits type.
-template <typename Key, typename KeyTraits>
-struct HashTraitsAdapter<Key,
-                         KeyTraits,
-                         std::void_t<typename KeyTraits::TraitType>>
-    : KeyTraits {};
+// Shortcut of HashTraits<T>::GetHash(), which can deduct T automatically.
+template <typename T>
+unsigned GetHash(const T& key) {
+  return HashTraits<T>::GetHash(key);
+}
 
 }  // namespace WTF
 
-// Temporary hash traits adapters.
-using WTF::CombinedHashTraits;
-using WTF::DefaultHashAndTraits;
-using WTF::HashTraitsAdapter;
-
 using WTF::AlreadyHashedTraits;
 using WTF::AlreadyHashedWithZeroKeyTraits;
 using WTF::EnumHashTraits;
diff --git a/third_party/blink/renderer/platform/wtf/linked_hash_set.h b/third_party/blink/renderer/platform/wtf/linked_hash_set.h
index 827a279..ecf604a 100644
--- a/third_party/blink/renderer/platform/wtf/linked_hash_set.h
+++ b/third_party/blink/renderer/platform/wtf/linked_hash_set.h
@@ -49,7 +49,7 @@
 //
 // Note: empty/deleted values as defined in HashTraits are not allowed.
 template <typename ValueArg,
-          typename TraitsArg = DefaultHashAndTraits<ValueArg>,
+          typename TraitsArg = HashTraits<ValueArg>,
           typename Allocator = PartitionAllocator>
 class LinkedHashSet {
   USE_ALLOCATOR(LinkedHashSet, Allocator);
@@ -127,8 +127,7 @@
   using reverse_iterator = IteratorWrapper<BackingReverseIterator>;
   using const_reverse_iterator = IteratorWrapper<BackingReverseIterator>;
 
-  typedef typename HashTraitsAdapter<ValueArg, TraitsArg>::PeekInType
-      ValuePeekInType;
+  typedef typename TraitsArg::PeekInType ValuePeekInType;
 
   LinkedHashSet();
   LinkedHashSet(const LinkedHashSet&) = default;
diff --git a/third_party/blink/renderer/platform/wtf/text/atomic_string.h b/third_party/blink/renderer/platform/wtf/text/atomic_string.h
index 45a5a3b..b18e99e0 100644
--- a/third_party/blink/renderer/platform/wtf/text/atomic_string.h
+++ b/third_party/blink/renderer/platform/wtf/text/atomic_string.h
@@ -284,10 +284,10 @@
 WTF_EXPORT extern const AtomicString& g_https_atom;
 
 template <typename T>
-struct DefaultHash;
+struct HashTraits;
 // Defined in atomic_string_hash.h.
 template <>
-struct DefaultHash<AtomicString>;
+struct HashTraits<AtomicString>;
 
 // Pretty printer for gtest and base/logging.*.  It prepends and appends
 // double-quotes, and escapes characters other than ASCII printables.
diff --git a/third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h b/third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h
index 2360ff4..4b9907b 100644
--- a/third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h
+++ b/third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h
@@ -35,24 +35,14 @@
 
 namespace WTF {
 
-struct AtomicStringHash {
+template <>
+struct HashTraits<AtomicString> : SimpleClassHashTraits<AtomicString> {
   static unsigned GetHash(const AtomicString& key) {
     return key.Impl()->ExistingHash();
   }
 
-  static bool Equal(const AtomicString& a, const AtomicString& b) {
-    return a == b;
-  }
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
-};
-
-// AtomicStringHash is the default hash for AtomicString
-template <>
-struct DefaultHash<AtomicString> : AtomicStringHash {};
-
-template <>
-struct HashTraits<AtomicString> : SimpleClassHashTraits<AtomicString> {
   // Unlike other types, we can return a const reference for AtomicString's
   // empty value (g_null_atom).
   typedef const AtomicString& PeekOutType;
@@ -73,6 +63,4 @@
 
 }  // namespace WTF
 
-using WTF::AtomicStringHash;
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_ATOMIC_STRING_HASH_H_
diff --git a/third_party/blink/renderer/platform/wtf/text/atomic_string_table.h b/third_party/blink/renderer/platform/wtf/text/atomic_string_table.h
index cd3c8e6..cb0263e 100644
--- a/third_party/blink/renderer/platform/wtf/text/atomic_string_table.h
+++ b/third_party/blink/renderer/platform/wtf/text/atomic_string_table.h
@@ -115,6 +115,7 @@
 
   base::Lock lock_;
   HashSet<StringImpl*> table_ GUARDED_BY(lock_);
+  static_assert(HashTraits<StringImpl*>::x == 10);
 };
 
 inline bool operator==(const AtomicStringTable::WeakResult& lhs,
diff --git a/third_party/blink/renderer/platform/wtf/text/string_hash.h b/third_party/blink/renderer/platform/wtf/text/string_hash.h
index c3e128b..bbe0216 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_hash.h
+++ b/third_party/blink/renderer/platform/wtf/text/string_hash.h
@@ -30,54 +30,49 @@
 
 namespace WTF {
 
-inline bool HashTraits<String>::IsEmptyValue(const String& value) {
-  return value.IsNull();
-}
+// The GetHash() functions in below HashTraits do not support null strings.
+// find(), Contains(), and insert() on HashMap<String,...> cause a null-pointer
+// dereference when passed null strings.
 
-inline bool HashTraits<String>::IsDeletedValue(const String& value) {
-  return HashTraits<scoped_refptr<StringImpl>>::IsDeletedValue(value.impl_);
-}
-
-inline void HashTraits<String>::ConstructDeletedValue(String& slot,
-                                                      bool zero_value) {
-  HashTraits<scoped_refptr<StringImpl>>::ConstructDeletedValue(slot.impl_,
-                                                               zero_value);
-}
-
-// The GetHash() functions on StringHash do not support null strings. find(),
-// Contains(), and insert() on HashMap<String,..., StringHash> cause a
-// null-pointer dereference when passed null strings.
-struct StringHash {
-  STATIC_ONLY(StringHash);
-  static unsigned GetHash(StringImpl* key) { return key->GetHash(); }
+template <>
+struct HashTraits<StringImpl*> : GenericHashTraits<StringImpl*> {
+  static unsigned GetHash(const StringImpl* key) { return key->GetHash(); }
   static inline bool Equal(const StringImpl* a, const StringImpl* b) {
     return EqualNonNull(a, b);
   }
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
+  static constexpr int x = 10;
+};
 
+template <>
+struct HashTraits<scoped_refptr<StringImpl>>
+    : GenericHashTraits<scoped_refptr<StringImpl>> {
   static unsigned GetHash(const scoped_refptr<StringImpl>& key) {
     return key->GetHash();
   }
   static bool Equal(const scoped_refptr<StringImpl>& a,
                     const scoped_refptr<StringImpl>& b) {
-    return Equal(a.get(), b.get());
+    return EqualNonNull(a.get(), b.get());
   }
-
-  static unsigned GetHash(const String& key) { return key.Impl()->GetHash(); }
-  static bool Equal(const String& a, const String& b) {
-    return Equal(a.Impl(), b.Impl());
-  }
-
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
-// StringHash is the default hash for String, StringImpl* and
-// scopoed_refptr<StringImpl>.
 template <>
-struct DefaultHash<String> : StringHash {};
-template <>
-struct DefaultHash<StringImpl*> : StringHash {};
-template <>
-struct DefaultHash<scoped_refptr<StringImpl>> : StringHash {};
+struct HashTraits<String> : SimpleClassHashTraits<String> {
+  static unsigned GetHash(const String& key) { return key.Impl()->GetHash(); }
+  static bool Equal(const String& a, const String& b) {
+    return EqualNonNull(a.Impl(), b.Impl());
+  }
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
+  static bool IsEmptyValue(const String& s) { return s.IsNull(); }
+  static bool IsDeletedValue(const String& s) {
+    return HashTraits<scoped_refptr<StringImpl>>::IsDeletedValue(s.impl_);
+  }
+  static void ConstructDeletedValue(String& slot, bool zero_value) {
+    HashTraits<scoped_refptr<StringImpl>>::ConstructDeletedValue(slot.impl_,
+                                                                 zero_value);
+  }
+};
 
 }  // namespace WTF
 
@@ -85,11 +80,9 @@
 template <>
 struct hash<WTF::String> {
   size_t operator()(const WTF::String& string) const {
-    return WTF::StringHash::GetHash(string);
+    return WTF::GetHash(string);
   }
 };
 }  // namespace std
 
-using WTF::StringHash;
-
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_STRING_HASH_H_
diff --git a/third_party/blink/renderer/platform/wtf/text/string_impl.h b/third_party/blink/renderer/platform/wtf/text/string_impl.h
index d09056b..9eabf27 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_impl.h
+++ b/third_party/blink/renderer/platform/wtf/text/string_impl.h
@@ -947,12 +947,12 @@
 }
 
 template <typename T>
-struct DefaultHash;
+struct HashTraits;
 // Defined in string_hash.h.
 template <>
-struct DefaultHash<StringImpl*>;
+struct HashTraits<StringImpl*>;
 template <>
-struct DefaultHash<scoped_refptr<StringImpl>>;
+struct HashTraits<scoped_refptr<StringImpl>>;
 
 }  // namespace WTF
 
diff --git a/third_party/blink/renderer/platform/wtf/text/text_encoding_registry.cc b/third_party/blink/renderer/platform/wtf/text/text_encoding_registry.cc
index 4482f85..4911a43 100644
--- a/third_party/blink/renderer/platform/wtf/text/text_encoding_registry.cc
+++ b/third_party/blink/renderer/platform/wtf/text/text_encoding_registry.cc
@@ -47,7 +47,6 @@
 #include "third_party/blink/renderer/platform/wtf/text/text_codec_utf16.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_codec_utf8.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_encoding.h"
-
 #include "third_party/blink/renderer/platform/wtf/wtf.h"
 
 namespace WTF {
@@ -55,7 +54,7 @@
 const size_t kMaxEncodingNameLength = 63;
 
 // Hash for all-ASCII strings that does case folding.
-struct TextEncodingNameHash {
+struct TextEncodingNameHashTraits : GenericHashTraits<const char*> {
   static bool Equal(const char* s1, const char* s2) {
     char c1;
     char c2;
@@ -87,7 +86,7 @@
     }
   }
 
-  static const bool safe_to_compare_to_empty_or_deleted = false;
+  static constexpr bool kSafeToCompareToEmptyOrDeleted = false;
 };
 
 struct TextCodecFactory {
@@ -97,7 +96,7 @@
       : function(f), additional_data(d) {}
 };
 
-typedef HashMap<const char*, const char*, TextEncodingNameHash>
+typedef HashMap<const char*, const char*, TextEncodingNameHashTraits>
     TextEncodingNameMap;
 typedef HashMap<const char*, TextCodecFactory> TextCodecMap;
 
diff --git a/third_party/blink/renderer/platform/wtf/text/wtf_string.h b/third_party/blink/renderer/platform/wtf/text/wtf_string.h
index a7723248..ebd232e 100644
--- a/third_party/blink/renderer/platform/wtf/text/wtf_string.h
+++ b/third_party/blink/renderer/platform/wtf/text/wtf_string.h
@@ -672,10 +672,10 @@
 }
 
 template <typename T>
-struct DefaultHash;
+struct HashTraits;
 // Defined in string_hash.h.
 template <>
-struct DefaultHash<String>;
+struct HashTraits<String>;
 
 // Shared global empty string.
 WTF_EXPORT extern const String& g_empty_string;
diff --git a/third_party/blink/renderer/platform/wtf/wtf_test_helper.h b/third_party/blink/renderer/platform/wtf/wtf_test_helper.h
index d4c4901d..49221fd 100644
--- a/third_party/blink/renderer/platform/wtf/wtf_test_helper.h
+++ b/third_party/blink/renderer/platform/wtf/wtf_test_helper.h
@@ -100,25 +100,18 @@
   static bool IsDeletedValue(const MoveOnlyHashValue& value) {
     return value.Value() == MoveOnlyHashValue::kDeleted;
   }
-};
-
-struct MoveOnlyHash {
   static unsigned GetHash(const MoveOnlyHashValue& value) {
-    return DefaultHash<int>::GetHash(value.Value());
+    return WTF::GetHash(value.Value());
   }
   static bool Equal(const MoveOnlyHashValue& left,
                     const MoveOnlyHashValue& right) {
-    return DefaultHash<int>::Equal(left.Value(), right.Value());
+    return left.Value() == right.Value();
   }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
 };
 
 template <>
 struct HashTraits<MoveOnlyHashValue> : MoveOnlyHashTraits {};
 
-template <>
-struct DefaultHash<MoveOnlyHashValue> : MoveOnlyHash {};
-
 class CountCopy final {
  public:
   static int* const kDeletedValue;
@@ -152,24 +145,17 @@
   static bool IsDeletedValue(const CountCopy& value) {
     return value.Counter() == CountCopy::kDeletedValue;
   }
-};
-
-struct CountCopyHash : public PtrHash<const int*> {
   static unsigned GetHash(const CountCopy& value) {
-    return PtrHash<const int>::GetHash(value.Counter());
+    return WTF::GetHash(value.Counter());
   }
   static bool Equal(const CountCopy& left, const CountCopy& right) {
-    return PtrHash<const int>::Equal(left.Counter(), right.Counter());
+    return left.Counter() == right.Counter();
   }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
 };
 
 template <>
 struct HashTraits<CountCopy> : CountCopyHashTraits {};
 
-template <>
-struct DefaultHash<CountCopy> : CountCopyHash {};
-
 template <typename T>
 class ValueInstanceCount final {
  public:
@@ -221,27 +207,19 @@
   static bool IsDeletedValue(const ValueInstanceCount<T>& value) {
     return value.Counter() == ValueInstanceCount<T>::kDeletedValue;
   }
-};
-
-template <typename T>
-struct ValueInstanceCountHash : public PtrHash<const int*> {
   static unsigned GetHash(const ValueInstanceCount<T>& value) {
-    return PtrHash<const int>::GetHash(value.Counter());
+    return WTF::GetHash(value.Counter());
   }
   static bool Equal(const ValueInstanceCount<T>& left,
                     const ValueInstanceCount<T>& right) {
-    return PtrHash<const int>::Equal(left.Counter(), right.Counter());
+    return left.Counter() == right.Counter();
   }
-  static const bool safe_to_compare_to_empty_or_deleted = true;
 };
 
 template <typename T>
 struct HashTraits<ValueInstanceCount<T>>
     : public ValueInstanceCountHashTraits<T> {};
 
-template <typename T>
-struct DefaultHash<ValueInstanceCount<T>> : public ValueInstanceCountHash<T> {};
-
 class DummyRefCounted : public RefCounted<DummyRefCounted> {
  public:
   DummyRefCounted(bool& is_deleted) : is_deleted_(is_deleted) {
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index 7fb431d..2fde2cf 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -342,7 +342,7 @@
 ### virtual/gpu/fast/canvas/ blending layout tests are slow
 crbug.com/866850 virtual/gpu/fast/canvas/canvas-blend-image.html [ Slow ]
 crbug.com/866850 [ Linux ] virtual/gpu/fast/canvas/canvas-blending-color-over-image.html [ Slow ]
-crbug.com/866850 [ Mac ] virtual/gpu/fast/canvas/canvas-blending-color-over-image.html [ Slow ]
+crbug.com/866850 [ Debug Mac12 ] virtual/gpu/fast/canvas/canvas-blending-color-over-image.html [ Slow ]
 crbug.com/866850 [ Linux ] virtual/gpu/fast/canvas/canvas-blending-color-over-pattern.html [ Slow ]
 crbug.com/866850 [ Linux ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-image.html [ Slow ]
 crbug.com/866850 [ Mac ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-image.html [ Slow ]
@@ -610,7 +610,6 @@
 crbug.com/874695 media/unsupported-rtsp.html [ Slow ]
 crbug.com/874695 [ Debug Mac12 ] media/video-controls-always-visible-when-control-hovered.html [ Slow ]
 crbug.com/874695 [ Release ] media/video-controls-always-visible-when-control-hovered.html [ Slow ]
-crbug.com/874695 [ Debug Mac12 ] media/video-controls-auto-hide-after-play-by-touch.html [ Slow ]
 crbug.com/874695 [ Release ] media/video-controls-auto-hide-after-play-by-touch.html [ Slow ]
 crbug.com/874695 [ Release ] media/video-controls-dont-show-on-focus-when-disabled.html [ Slow ]
 crbug.com/874695 media/video-controls-focus-movement-on-hide.html [ Slow ]
@@ -1001,7 +1000,6 @@
 crbug.com/1044415 [ Linux Release ] http/tests/devtools/runtime/evaluate-without-side-effects.js [ Slow ]
 crbug.com/1044415 [ Mac10.15 Release ] http/tests/devtools/runtime/evaluate-without-side-effects.js [ Slow ]
 crbug.com/1044415 [ Mac11 Release ] http/tests/devtools/runtime/evaluate-without-side-effects.js [ Slow ]
-crbug.com/1044415 [ Mac11-arm64 Release ] http/tests/devtools/runtime/evaluate-without-side-effects.js [ Slow ]
 crbug.com/1044415 [ Mac12 Release ] http/tests/devtools/runtime/evaluate-without-side-effects.js [ Slow ]
 crbug.com/1044415 [ Release Win ] http/tests/devtools/runtime/evaluate-without-side-effects.js [ Slow ]
 crbug.com/1044425 [ Linux Release ] http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.js [ Slow ]
@@ -1091,7 +1089,6 @@
 crbug.com/1046784 [ Linux ] http/tests/devtools/elements/styles-4/styles-formatting.js [ Slow ]
 crbug.com/1046784 [ Mac10.15 Release ] http/tests/devtools/elements/styles-4/styles-formatting.js [ Slow ]
 crbug.com/1046784 [ Mac11 Release ] http/tests/devtools/elements/styles-4/styles-formatting.js [ Slow ]
-crbug.com/1046784 [ Mac11-arm64 Release ] http/tests/devtools/elements/styles-4/styles-formatting.js [ Slow ]
 crbug.com/1046784 [ Mac12 ] http/tests/devtools/elements/styles-4/styles-formatting.js [ Slow ]
 crbug.com/1046784 [ Release Win ] http/tests/devtools/elements/styles-4/styles-formatting.js [ Slow ]
 crbug.com/1046784 [ Linux ] http/tests/devtools/search/search-in-sourcemap.js [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index ee4a388..7635082 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1141,7 +1141,6 @@
 crbug.com/1179497 external/wpt/css/css-tables/col-definite-min-size-001.html [ Failure ]
 crbug.com/1179497 external/wpt/css/css-tables/col-definite-size-001.html [ Failure ]
 crbug.com/910725 external/wpt/css/css-tables/tentative/paint/overflow-hidden-table.html [ Failure ]
-crbug.com/1395226 external/wpt/css/css-tables/html5-table-formatting-3.html [ Failure ]
 
 # [css-contain]
 
@@ -1763,6 +1762,9 @@
 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 ]
 crbug.com/1383480 external/wpt/css/selectors/invalidation/media-pseudo-classes-in-has.html [ Timeout ]
+crbug.com/1383480 external/wpt/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html [ Skip Timeout ]
+crbug.com/1408679 external/wpt/css/selectors/invalidation/lang-pseudo-class-in-has-xhtml.xhtml [ Failure ]
+crbug.com/1408679 external/wpt/css/selectors/invalidation/lang-pseudo-class-in-has.html [ Failure ]
 
 # ====== Style team owned tests to here ======
 
@@ -2992,17 +2994,39 @@
 # Disable temporarily while updating WebRTC
 crbug.com/webrtc/10567 external/wpt/webrtc-extensions/RTCRtpParameters-maxFramerate.html [ Failure Pass ]
 crbug.com/webrtc/10567 external/wpt/webrtc/RTCRtpParameters-encodings.html [ Failure Pass ]
-crbug.com/webrtc/10567 external/wpt/webrtc/simulcast/setParameters-encodings.https.html [ Pass Failure ]
+crbug.com/webrtc/10567 external/wpt/webrtc/simulcast/setParameters-encodings.https.html [ Failure Pass ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-block-trimmed-only.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-column-block-multiline.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-column-grow.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-column-inline-multiline.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-column-orthogonal-item.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-column-shrink.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-row-block-multiline.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-row-grow.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-row-inline-multiline.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-row-orthogonal-item.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-row-shrink.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/flex-trim-all-margins.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/grid-block-end.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/grid-block-start.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/grid-block.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/grid-inline-end.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/grid-inline-start.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/grid-inline.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-values/ch-unit-018.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-values/ic-unit-015.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-fonts/font-palette-empty-font-family.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-transforms/animation/translate-animation-on-svg.html [ Failure ]
 crbug.com/626703 external/wpt/css/mediaqueries/negation-001.html [ Failure ]
-crbug.com/626703 external/wpt/css/selectors/invalidation/lang-pseudo-class-in-has-xhtml.xhtml [ Failure ]
-crbug.com/626703 external/wpt/css/selectors/invalidation/lang-pseudo-class-in-has.html [ Failure ]
-crbug.com/626703 external/wpt/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html [ Skip Timeout ]
 crbug.com/626703 virtual/backface-visibility-interop/external/wpt/css/css-transforms/animation/translate-animation-on-svg.html [ Failure ]
 crbug.com/626703 [ Win10.20h2 ] virtual/media-foundation-for-clear-dcomp/external/wpt/media-source/dedicated-worker/mediasource-worker-detach-element.html [ Timeout ]
 crbug.com/626703 virtual/threaded/external/wpt/css/css-transforms/animation/translate-animation-on-svg.html [ Failure ]
@@ -5768,9 +5792,6 @@
 # Flakiness of WIP MediaStreamTrack on workers.
 crbug.com/1290767 external/wpt/mediacapture-insertable-streams/MediaStreamTrackGenerator-pipes-data-in-worker.https.html [ Crash Pass ]
 
-# Temporarily disable tests to land branded types related changes.
-crbug.com/1253323 http/tests/devtools/sources/debugger/navigator-view.js [ Crash Failure Pass Timeout ]
-
 # Sheriff 2022-01-26
 crbug.com/1290978 [ Win ] external/wpt/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html [ Crash Failure Pass Timeout ]
 crbug.com/1290978 [ Mac ] external/wpt/css/CSS2/normal-flow/crashtests/block-in-inline-ax-crash.html [ Crash Failure Pass Timeout ]
@@ -6336,8 +6357,6 @@
 crbug.com/1395120 [ Mac11-arm64 ] fast/frames/sandboxed-iframe-plugins.html [ Failure ]
 crbug.com/1395450 [ Debug Linux ] virtual/plz-dedicated-worker/http/tests/devtools/layers/layer-tree-model.js [ Failure ]
 crbug.com/1395412 [ Mac10.15 ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/navigate-iframe-in2out.js [ Failure ]
-crbug.com/1395409 [ Mac ] inspector-protocol/overlay/overlay-viewport.js [ Failure ]
-crbug.com/1395409 [ Win ] inspector-protocol/overlay/overlay-viewport.js [ Failure ]
 crbug.com/1396422 [ Mac11-arm64 ] inspector-protocol/css/css-get-media-queries.js [ Failure ]
 crbug.com/1403736 [ Mac11-arm64 ] external/wpt/html/semantics/popovers/light-dismiss-event-ordering.tentative.html [ Timeout ]
 crbug.com/1396079 [ Mac ] inspector-protocol/memory/forcibly-purge-javascript-memory.js [ Crash Failure ]
@@ -6940,3 +6959,5 @@
 
 # Sheriff 2023-01-20
 crbug.com/1408919 [ Mac ] virtual/text-antialias/capitalize-boundaries.html [ Failure Pass ]
+crbug.com/1408967 [ Fuchsia ] fast/block/float/float-in-float-painting.html [ Failure Pass ]
+crbug.com/1408967 [ Fuchsia ] fast/layers/opacity-transforms.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/blink/web_tests/css3/blending/background-blend-mode-tiled-gradient-expected.png
index 5bb1019..29395ca 100644
--- a/third_party/blink/web_tests/css3/blending/background-blend-mode-tiled-gradient-expected.png
+++ b/third_party/blink/web_tests/css3/blending/background-blend-mode-tiled-gradient-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/css3/blending/effect-background-blend-mode-stacking-expected.png b/third_party/blink/web_tests/css3/blending/effect-background-blend-mode-stacking-expected.png
index e8f3a8b..b78828a 100644
--- a/third_party/blink/web_tests/css3/blending/effect-background-blend-mode-stacking-expected.png
+++ b/third_party/blink/web_tests/css3/blending/effect-background-blend-mode-stacking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/css3/blending/svg-blend-multiply-alpha-expected.png b/third_party/blink/web_tests/css3/blending/svg-blend-multiply-alpha-expected.png
index a9b6217..6cc28101 100644
--- a/third_party/blink/web_tests/css3/blending/svg-blend-multiply-alpha-expected.png
+++ b/third_party/blink/web_tests/css3/blending/svg-blend-multiply-alpha-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/css3/filters/css-opacity-with-drop-shadow-expected.png b/third_party/blink/web_tests/css3/filters/css-opacity-with-drop-shadow-expected.png
index 28b6a05..040a92b4 100644
--- a/third_party/blink/web_tests/css3/filters/css-opacity-with-drop-shadow-expected.png
+++ b/third_party/blink/web_tests/css3/filters/css-opacity-with-drop-shadow-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/css3/flexbox/line-wrapping.html b/third_party/blink/web_tests/css3/flexbox/line-wrapping.html
index 3f5d340..6b8ff23 100644
--- a/third_party/blink/web_tests/css3/flexbox/line-wrapping.html
+++ b/third_party/blink/web_tests/css3/flexbox/line-wrapping.html
@@ -247,16 +247,5 @@
     </div>
 </div>
 
-<script>
-// All the vertical-lr cases are off by 4px in the x direction. See http://webkit.org/b/71193.
-// Fix it up if !LayoutNG.
-if (window.internals && !internals.runtimeFlags.layoutNGEnabled) {
-  for (let div of document.querySelectorAll('.vertical-lr > div')) {
-    div.style.marginLeft = '-4px';
-    div.style.marginRight = '4px';
-  }
-}
-</script>
-
 </body>
 </html>
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 e15f438..b5330f6 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
@@ -15672,7 +15672,7 @@
      ]
     ],
     "payment-request-event-manual.https.html": [
-     "e595dd2160ff2bd4cb0701cb0786cf81385f4e75",
+     "9cd20354631b2277c17e543a4b30f81b90f0dbdb",
      [
       null,
       {}
@@ -73961,7 +73961,7 @@
       ]
      ],
      "root-element-opacity.html": [
-      "4885d805ad3f3b59d60ccbf3047e8694d7be0f18",
+      "a8195bc552e5270c45716cc34ad6063769fd5581",
       [
        null,
        [
@@ -73970,7 +73970,23 @@
          "=="
         ]
        ],
-       {}
+       {
+        "fuzzy": [
+         [
+          null,
+          [
+           [
+            0,
+            1
+           ],
+           [
+            0,
+            480000
+           ]
+          ]
+         ]
+        ]
+       }
       ]
      ],
      "svg": {
@@ -83049,7 +83065,7 @@
     "css-box": {
      "margin-trim": {
       "block-container-block-001.html": [
-       "516a90cf652c39b55c9b31cb1c9c73f6c6e31e33",
+       "e31abec3678e39dd37339364a4c2977ed2adae30",
        [
         null,
         [
@@ -83062,7 +83078,7 @@
        ]
       ],
       "block-container-block-002.html": [
-       "1f86d555bf777781932aceb43f623d2d9ac6961c",
+       "399141b17e4dcabf718ad5f8133b71caaa8b36d9",
        [
         null,
         [
@@ -83075,7 +83091,7 @@
        ]
       ],
       "block-container-block-end-001.html": [
-       "e36a207fb6970e0bc4550e8410dfdad382cb41db",
+       "fcee65692ce94ac94dd3e8fbf6f5db4d18bdd6c9",
        [
         null,
         [
@@ -83088,7 +83104,7 @@
        ]
       ],
       "block-container-block-end-002.html": [
-       "2859e104685af45f51eadf1e84b91583a773c183",
+       "42d559fbe927761b98ca8a47167ca15e5afb78bc",
        [
         null,
         [
@@ -83101,7 +83117,7 @@
        ]
       ],
       "block-container-block-start-001.html": [
-       "2fecf07e644544516cc15e6d4f6c13e8c6f0f03f",
+       "c33c7f0abe5aa80c396f0050a47e4ea3c854e9dc",
        [
         null,
         [
@@ -83114,7 +83130,7 @@
        ]
       ],
       "block-container-block-start-002.html": [
-       "6edbb54e942dbb265aa20b2bd6454c2366ab5677",
+       "339c990d10edbae71ba9d60707157b9d748aea5a",
        [
         null,
         [
@@ -83126,8 +83142,21 @@
         {}
        ]
       ],
+      "block-container-non-adjoining-item.html": [
+       "215175418b834c74f99f66237aebdcd1b859776f",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "block-container-replaced-block-end.html": [
-       "6011d10de532c3f90e2644e36c43b3682dd867a1",
+       "0225460b7b71f163cb22eea1b7c9b275b258b89f",
        [
         null,
         [
@@ -83140,7 +83169,7 @@
        ]
       ],
       "block-container-replaced-block-start.html": [
-       "c943fb16bbd8a0886de9f4f72ba7d9142279c742",
+       "10080c974f3b5a013f1a9cb87c55a85121058098",
        [
         null,
         [
@@ -83153,7 +83182,319 @@
        ]
       ],
       "block-container-replaced-block.html": [
-       "54d701176ce6a8f36f1cb20f5e3be33acda26204",
+       "036066f6910e9e6043cc8ccb9267c56a861bef6e",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-block-end-trimmed-only.html": [
+       "0a99b3f308bb7f232a8295aa79ce40995ffd94c5",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-block-end-trimmed-only-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-block-start-trimmed-only.html": [
+       "5e867ea43d1ce873ac7984ce1a7271680540cf4c",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-block-trimmed-only.html": [
+       "e73048282515e62bec6d9fc663df83b2ff8431c0",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-block-trimmed-only-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-column-block-multiline.html": [
+       "6536d7f00dfcbc7e6e80ad18731c0b69825176ce",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-column-grow.html": [
+       "62c55b2bfff07c019ea7e5292b0d81f407ca96be",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-column-inline-multiline.html": [
+       "25003aab08e8f383ac2fdd33963d5e5d5af9afd3",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-column-inline-multiline-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-column-orthogonal-item.html": [
+       "9f13e2ce71ca8255e1a16558633c45ecbd45cd73",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-column-shrink.html": [
+       "06395ff6d5e35cbe125f58bed7de482759a1ea70",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-inline-end-trimmed-only.html": [
+       "33451daf30a9d0035529c53d40a8f2316109de3f",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-inline-start-trimmed-only.html": [
+       "05cf112e66adc4b1364b789b5697e89c8d0eb594",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-inline-trimmed-only.html": [
+       "637dc485afed7d29238ccb1e4b24e3d6bbff08a1",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-row-block-multiline.html": [
+       "c8fc788ca266e655c725d82c5f23160fbc7b5282",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-row-block-multiline-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-row-grow.html": [
+       "64395461cfd714e37a8dec5ff339f8fc343d3b59",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-row-inline-multiline.html": [
+       "d563373d50a1cad7542d60f5ec3880a13c5c7347",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-row-orthogonal-item.html": [
+       "3facc7450caa965d47fb05cfad558136931b51fb",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-row-shrink.html": [
+       "172c946cb4a004aa0f6146f674d5f53ee48b9db4",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "flex-trim-all-margins.html": [
+       "1c2eda8aa095978938005704200bf107a7716fb1",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/flex-trim-all-margins-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "grid-block-end.html": [
+       "ffbc374756c22872c05e6c19d2a296a3cc8f0a1a",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/grid-block-end-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "grid-block-start.html": [
+       "21d5447253581111503f95bb304107d0b70871d8",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/grid-block-start-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "grid-block.html": [
+       "6a4c3bbc9466db04dc06e0d880e7d505d3f5ae82",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "grid-inline-end.html": [
+       "3754a9b50aa189c52f32def4ca2f739b089e4003",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/grid-inline-end-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "grid-inline-start.html": [
+       "e0f4c6d45467eed5ab4ba8d084c58632b231dd8e",
+       [
+        null,
+        [
+         [
+          "/css/css-box/margin-trim/grid-inline-start-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "grid-inline.html": [
+       "1ac228296afaa9e8ef8437af4f62719796db6329",
+       [
+        null,
+        [
+         [
+          "/css/reference/ref-filled-green-100px-square-only.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "grid-trim-ignores-collapsed-tracks.html": [
+       "15768ea7aa91425b12d9dee0dacd0eb83bf0cc91",
        [
         null,
         [
@@ -95312,7 +95653,7 @@
       ]
      ],
      "t32-opacity-offscreen-with-alpha-c.xht": [
-      "57e5e3cc860cd2600dd4723831d29fb39f684782",
+      "035609e8a46aea92633b7b71f9bc40ba58a13569",
       [
        null,
        [
@@ -95321,7 +95662,23 @@
          "=="
         ]
        ],
-       {}
+       {
+        "fuzzy": [
+         [
+          null,
+          [
+           [
+            0,
+            1
+           ],
+           [
+            0,
+            5120
+           ]
+          ]
+         ]
+        ]
+       }
       ]
      ],
      "t32-opacity-zorder-c.xht": [
@@ -102717,6 +103074,19 @@
         {}
        ]
       ],
+      "content-visibility-auto-nested.html": [
+       "9fc7c03b3a7c8e91dca0536658c86682f7213408",
+       [
+        null,
+        [
+         [
+          "/css/css-contain/content-visibility/content-visibility-auto-nested-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "content-visibility-canvas.html": [
        "fe469489528c45797b8ff68bfc739c39cefdf7b0",
        [
@@ -157679,7 +158049,7 @@
       ]
      ],
      "backdrop-animate-002.html": [
-      "6fd153becdee39018031586d82186cd2bac67f11",
+      "910807a7a63081e0bedaffd262bb261bccf611aa",
       [
        null,
        [
@@ -157699,7 +158069,7 @@
            ],
            [
             0,
-            472272
+            472500
            ]
           ]
          ]
@@ -221244,7 +221614,7 @@
       ]
      ],
      "set-current-time.html": [
-      "efb5ffb8ae1b762f163cf3921102dec23d51436b",
+      "5758ade6e741c9e132262b50b7fd5315bc0c74e5",
       [
        null,
        [
@@ -221253,7 +221623,23 @@
          "=="
         ]
        ],
-       {}
+       {
+        "fuzzy": [
+         [
+          null,
+          [
+           [
+            0,
+            1
+           ],
+           [
+            0,
+            10000
+           ]
+          ]
+         ]
+        ]
+       }
       ]
      ],
      "set-universal-specificity.html": [
@@ -221269,6 +221655,19 @@
        {}
       ]
      ],
+     "view-transition-name-is-grouping.html": [
+      "95739351f0fa508ba3449f104317812acbba89b6",
+      [
+       null,
+       [
+        [
+         "/css/css-view-transitions/view-transition-name-is-grouping-ref.html",
+         "=="
+        ]
+       ],
+       {}
+      ]
+     ],
      "web-animations-api.html": [
       "b9d62fabc6b3d485e73cdd4708923b4f9821949e",
       [
@@ -257072,6 +257471,32 @@
         {}
        ]
       ],
+      "fallback-001.svg": [
+       "e2788e5f93e4f13352a53a57e229f90d1b1011d4",
+       [
+        null,
+        [
+         [
+          "/svg/pservers/reftests/reference/green-100x100.svg",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "fallback-002.svg": [
+       "6180cb2a96fb0a80c0b08e3a9000935b9360a73a",
+       [
+        null,
+        [
+         [
+          "/svg/pservers/reftests/reference/green-100x100.svg",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "marker-path-001.svg": [
        "7fb4adf4277321eb69e50fecb9018c1950aef4ca",
        [
@@ -262408,6 +262833,16 @@
    }
   },
   "support": {
+   ".cache": {
+    "gitignore2.json": [
+     "935112590932e9f6f881d07b9adc6dae55588259",
+     []
+    ],
+    "mtime.json": [
+     "e1f2bfce77660074ff55728ab3c7e0b71193be78",
+     []
+    ]
+   },
    ".gitignore": [
     "d93e645d547894b50149d3726de2654957b6e06f",
     []
@@ -262470,6 +262905,14 @@
    ],
    "FileAPI": {
     "BlobURL": {
+     "cross-partition.tentative.https-expected.txt": [
+      "baf1499f392564b77983a515b960d6849445989e",
+      []
+     ],
+     "cross-partition.tentative.https.html.ini": [
+      "2762f14cb4894c5bd7f7ec8ba06bc2795afcbf8b",
+      []
+     ],
      "support": {
       "file_test2.txt": [
        "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
@@ -269333,7 +269776,7 @@
       []
      ],
      "cookie-helper.sub.js": [
-      "1420779e0d5a13d8da9a242324143e2e6b043afa",
+      "ff33ecb6bd2c025c58ec07924b8ac99d8529a461",
       []
      ],
      "cookie-test.js": [
@@ -281567,6 +282010,14 @@
        "d73e7755c2fb087bf737c7e3b0cbd92edbdacbdc",
        []
       ],
+      "block-container-non-adjoining-item-ref.html": [
+       "4affb87f11b2174047836baecc556734fd2e77b7",
+       []
+      ],
+      "block-container-non-adjoining-item.html.ini": [
+       "b503f8a4724306f63ae9abf09ee7466538c62161",
+       []
+      ],
       "block-container-replaced-block-end.html.ini": [
        "c63040766006cf1330c728fec2873215db197d06",
        []
@@ -281578,6 +282029,154 @@
       "block-container-replaced-block.html.ini": [
        "bd5117f6ac17bdb573b69ef7b0131f68be715e73",
        []
+      ],
+      "flex-block-end-trimmed-only-ref.html": [
+       "514518243665d2225fda093931188c6d10b73219",
+       []
+      ],
+      "flex-block-end-trimmed-only.html.ini": [
+       "28af4fbdf5e8a9a237586f60322a64667ca31ce9",
+       []
+      ],
+      "flex-block-start-trimmed-only-ref.html": [
+       "58a7e5ba31fb0d6cb39e552f29c5dba77eafe522",
+       []
+      ],
+      "flex-block-start-trimmed-only.html.ini": [
+       "620f867c737d046a7bec0e8b2be6a281b741e18b",
+       []
+      ],
+      "flex-block-trimmed-only-ref.html": [
+       "f4cf4fec863f0d3ca86f18a231d6b1aabd48b211",
+       []
+      ],
+      "flex-block-trimmed-only.html.ini": [
+       "7d560bf4d384be348c85e1b91547953d1b2c7485",
+       []
+      ],
+      "flex-column-block-multiline.html.ini": [
+       "6c432dc7d6dda17c3c38064d8aa7580e7d35e916",
+       []
+      ],
+      "flex-column-grow.html.ini": [
+       "dd2cec9be86a29de4af2f44c92af9667c25c9076",
+       []
+      ],
+      "flex-column-inline-multiline-ref.html": [
+       "c4b36a91b7bfb0a4872a036626a50e0333317bfc",
+       []
+      ],
+      "flex-column-inline-multiline.html.ini": [
+       "416a3228554c491316048559c1dc2da6ec5da0fe",
+       []
+      ],
+      "flex-column-orthogonal-item.html.ini": [
+       "b04c87fc5bf1e8614d582867aa1311dd00bcf13c",
+       []
+      ],
+      "flex-column-shrink.html.ini": [
+       "c1ded405fa19c370f1e9996cfcd67d16afcdcb2f",
+       []
+      ],
+      "flex-inline-end-trimmed-only-ref.html": [
+       "9fb945d00c99c0c16be88b9f5db31d0ac2e7490c",
+       []
+      ],
+      "flex-inline-end-trimmed-only.html.ini": [
+       "e81b2d3e9abdd39a70a1890fd57561c649c6a05c",
+       []
+      ],
+      "flex-inline-start-trimmed-only-ref.html": [
+       "f7dc9ec5c5e63c271311ab5afc5ccbae3867d3a6",
+       []
+      ],
+      "flex-inline-start-trimmed-only.html.ini": [
+       "0367f962e3d9f0dff5f9a02d270b48b69686b047",
+       []
+      ],
+      "flex-inline-trimmed-only-ref.html": [
+       "e262b903df597cc36c8ea93577c52080641ef671",
+       []
+      ],
+      "flex-inline-trimmed-only.html.ini": [
+       "c42811216b8f9a096f953228bdfcd7c0b450233d",
+       []
+      ],
+      "flex-row-block-multiline-ref.html": [
+       "8eb29f580618891f14f2c1ab33ce320c4f49b275",
+       []
+      ],
+      "flex-row-block-multiline.html.ini": [
+       "9210cc2484fbd6608fc2a22c18c3aacfd4cf604e",
+       []
+      ],
+      "flex-row-grow.html.ini": [
+       "0c56dea5a714d0fe7cd0312251ca9f11bdcdb1ea",
+       []
+      ],
+      "flex-row-inline-multiline.html.ini": [
+       "d4762b1ac1f1938ddc99e7d107abd03f2f990cdb",
+       []
+      ],
+      "flex-row-orthogonal-item.html.ini": [
+       "621a89ad8ad5459064c198b835f37cc808b1994b",
+       []
+      ],
+      "flex-row-shrink.html.ini": [
+       "70f900f22ab653e5177f96895ef4693a7f280eca",
+       []
+      ],
+      "flex-trim-all-margins-ref.html": [
+       "aebc1045d16f2777d2a32d09ca7e1e6f38065d75",
+       []
+      ],
+      "flex-trim-all-margins.html.ini": [
+       "9e346871a878072bc9526e8221072a8c4169b0bb",
+       []
+      ],
+      "grid-block-end-ref.html": [
+       "0ada6451471ca1ec61f88b403bab0f40c393ef8e",
+       []
+      ],
+      "grid-block-end.html.ini": [
+       "4846925f0a711f39a385dc75d5790f6d65e740e2",
+       []
+      ],
+      "grid-block-start-ref.html": [
+       "486b64c74aa5b65e96416aeac0a7c88e3b4a7c2c",
+       []
+      ],
+      "grid-block-start.html.ini": [
+       "2e4f8fab729f7c13f8146a982c164de1f6664eae",
+       []
+      ],
+      "grid-block.html.ini": [
+       "8a6beb4100573aa12ee180ed6cab3b6585587894",
+       []
+      ],
+      "grid-inline-end-ref.html": [
+       "e51a97faf8f91b41cf8596e053cbc66acaa2a158",
+       []
+      ],
+      "grid-inline-end.html.ini": [
+       "001c139c45fc65fec6d3156c9b198699c20292ae",
+       []
+      ],
+      "grid-inline-start-ref.html": [
+       "c35b1f5fe64eda18b695ae759be5d74c1202672b",
+       []
+      ],
+      "grid-inline-start.html.ini": [
+       "760bd87248eb086352a996eb32bd33e6f3facb62",
+       []
+      ],
+      "grid-inline.html.ini": [
+       "72221f6d17a3987fc1910d43055b3e7cd7806320",
+       []
+      ],
+      "grid-trim-ignores-collapsed-tracks.html.ini": [
+       "a4fe74e34f6e5f3281ab579d62de2bfca96fe792",
+       []
       ]
      },
      "parsing": {
@@ -284853,6 +285452,10 @@
        "03a2875b75a7de0cb2fad0284da20bd6420c3f49",
        []
       ],
+      "content-visibility-auto-nested-ref.html": [
+       "bc00c86b8be8c7e27ec14c3b6b45522f184cb50b",
+       []
+      ],
       "content-visibility-canvas-ref.html": [
        "dbedcf18ad7200f3595ba70607fb023a1373edb7",
        []
@@ -290317,7 +290920,7 @@
       []
      ],
      "cjk-kerning.html.ini": [
-      "5f57054ae95563dfd924ace4a18776bd51a65c77",
+      "cf10f40714d0b64c83f8037bd93071a2b6b95c94",
       []
      ],
      "crash-large-grapheme-cluster.html.ini": [
@@ -291445,6 +292048,14 @@
        "7103f850507771c3d9b94a9482c8121a5a0516d4",
        []
       ],
+      "font-feature-settings-computed-expected.txt": [
+       "b08dbcf0a8fea955761590ca23c3eb4143a3ebfe",
+       []
+      ],
+      "font-feature-settings-computed.html.ini": [
+       "80d1a38130222e4fc2db4f1f15fb2b1b38cabf4e",
+       []
+      ],
       "font-language-override-computed-expected.txt": [
        "5ed737846daa780dfc671aa36da9c340c425e831",
        []
@@ -309212,6 +309823,10 @@
       "eff0f6889eaf803ee0949a524d69b86a2df450fe",
       []
      ],
+     "active-selection-018.html.ini": [
+      "8a2acb27c2ba76080eef3f1a1e94c47e290cb8cc",
+      []
+     ],
      "active-selection-025.html.ini": [
       "757135a4ac74fb7fda1332fc83a1343aecf9d59e",
       []
@@ -328348,6 +328963,14 @@
       "47d69a5cb06400fbd6b8b16ca31136b2f5e84df5",
       []
      ],
+     "view-transition-name-is-grouping-ref.html": [
+      "add20600f818ee118422c770c0a3f0cd367740b6",
+      []
+     ],
+     "view-transition-name-is-grouping.html.ini": [
+      "7dca067797389783a4578b85a047d16a43bb6194",
+      []
+     ],
      "view-transition-name-on-added-element.html.ini": [
       "bc93bdd5fee11bf79d744a5f9c8c6e0ec8169d85",
       []
@@ -343800,38 +344423,6 @@
       "54961ae54bcb25ce95a461d7ccecfdd1414a6475",
       []
      ],
-     "message-target-dedicated-worker.js": [
-      "26ff23ef8ac65009c3c5efd4bdeda3970ae93910",
-      []
-     ],
-     "message-target-service-worker.js": [
-      "4a6174ae3b5539300954f6f36782a96a066b4889",
-      []
-     ],
-     "message-target-shared-worker.js": [
-      "6829c61d4cf9f32f4834ae09ffba1d614b0430a0",
-      []
-     ],
-     "message-target.html": [
-      "32c7f0c56c61d4d2f6e432dd3c38f8afe91f9762",
-      []
-     ],
-     "message-target.js": [
-      "191b4748ab5fc5c0e0416d1e96c476262c6cfe0d",
-      []
-     ],
-     "messaging-blob-helpers.js": [
-      "852f2e2d3213075ce738fbc2bb5ac4a1f4008ad6",
-      []
-     ],
-     "messaging-helpers.js": [
-      "55fc04ab817aeac2ccf13e716030264666b79d97",
-      []
-     ],
-     "messaging-serialize-helpers.js": [
-      "ada68f43db50683ec3350e243ebe8da6966e8196",
-      []
-     ],
      "opaque-origin-sandbox.html": [
       "f489f889b3cfbe7887c6c6dad04de79cd52cc76e",
       []
@@ -348963,7 +349554,7 @@
         ]
        },
        "open-features-is-popup-condition.html.ini": [
-        "9b6299598d1496ba1f0af382b5f678d6f1da0e72",
+        "526cf3d770453a60f4f3287b0c57fc5dee9b3f1b",
         []
        ],
        "open-features-negative-innerwidth-innerheight.html.ini": [
@@ -352647,7 +353238,7 @@
         []
        ],
        "property-frames.https.html.ini": [
-        "0c518e00799a95f34918412003f16eac8f0cdc0c",
+        "ca690767d1a254108e62b968ceccd98c0322b321",
         []
        ],
        "property-indexed-getter.https.html.headers": [
@@ -352963,7 +353554,7 @@
         []
        ],
        "iframe-popup.https.html.ini": [
-        "4f6dc509504b25a91462730fcac2315ccc823f69",
+        "a9f437575f66150f8fd2c836b899e3f0482b56e5",
         []
        ],
        "iframe-popup.https_1-2-expected.txt": [
@@ -369371,6 +369962,10 @@
        "93865b930da39216831b33d17bd1bdf0ecb72eed",
        []
       ],
+      "early-hints-delay.h2.py": [
+       "ba8796bc11a136fa9652fbf6b07612c929c1c9b0",
+       []
+      ],
       "early-hints-helpers.sub.js": [
        "3991e8fe9da479dd0f5b4cea537542ba948a8540",
        []
@@ -373800,7 +374395,7 @@
      []
     ],
     "app-can-make-payment.js": [
-     "cd27bce02e0920167cf19fce4c150eeadcad949c",
+     "6b060dffb7848ea40529bd7cf8782f1b49c64c66",
      []
     ],
     "app-change-payment-method.js": [
@@ -373816,7 +374411,7 @@
      []
     ],
     "app-simple.js": [
-     "833a01f47e0c09ea306ebde565e72d2d2ed715e4",
+     "9e70c08246b5b534ea032b9275b0d82676b3c701",
      []
     ],
     "app-supports-shipping-contact-delegation.js": [
@@ -373827,12 +374422,16 @@
      "5b334d9c3aca0a974c9c32063c5b56d2214a89e2",
      []
     ],
+    "can-make-payment-event-manifest.json": [
+     "b31ea5ce08b59d8b227f8ad03555244e1f616b52",
+     []
+    ],
     "can-make-payment-event.https-expected.txt": [
-     "032a53a666a897b91c9fbf8947ead811a13b9093",
+     "aea7ba401cf56058b312101179b77757ea0dd0ea",
      []
     ],
     "can-make-payment-event.https.html.ini": [
-     "dcbbfd605af4cddbbc76d35c30b27748e3189fcf",
+     "dd51e19ec88df5999c4442f4eba3ee5a739fd351",
      []
     ],
     "change-payment-method-manual-manifest.json": [
@@ -373885,6 +374484,10 @@
      "1aea7000c1428e84f8e1d4ce1ccae63e97741122",
      []
     ],
+    "payment-request-event-manual-manifest.json": [
+     "f97229762ce388ff0695d56684099b9286326a29",
+     []
+    ],
     "register-and-activate-service-worker.js": [
      "fb54c5c06488f319b0b4152837cc6a1b530cab7a",
      []
@@ -374188,6 +374791,10 @@
      []
     ],
     "not-restored-reasons": {
+     "performance-navigation-timing-attributes.tentative.window.js.ini": [
+      "d1e2fdf757d049dcac4658ec965bb0f0219ca2f0",
+      []
+     ],
      "performance-navigation-timing-bfcache-reasons-stay.tentative.window.js.ini": [
       "dad12f9516c2592363b0c1902d6a3fe755126f47",
       []
@@ -374205,7 +374812,7 @@
       []
      ],
      "performance-navigation-timing-same-origin-bfcache.tentative.window.js.ini": [
-      "9d137351f5cc93dc66ca41b8db92923bb3b88d06",
+      "2faeab35f7932b2191cc0d963c0bc95d8cdfd868",
       []
      ],
      "performance-navigation-timing-same-origin-replace.tentative.window.js.ini": [
@@ -378072,7 +378679,7 @@
      []
     ],
     "resource-timing-level1.js": [
-     "95b5cdfb1ed0ca2bbfd6b692ad565512218dd7a4",
+     "6167777fe68fa3d08534857b8a6e3d585bf8947a",
      []
     ],
     "resource-timing-level1.sub.html.ini": [
@@ -378264,6 +378871,14 @@
       "7debc9ce3f6cb061be8ca37b73fcf9f2a5396389",
       []
      ],
+     "header-delay.h2.py": [
+      "be29e52b0e836ca0228b9e51cd22c31a0bb4c899",
+      []
+     ],
+     "header-delay.py": [
+      "a47a63e9814a78bd06e2f55922de27fe073da45f",
+      []
+     ],
      "iframe-TAO-crossorigin-port.sub.html": [
       "97d77fcc58a3bbd347a98e2cbd9fa6243a83838a",
       []
@@ -384478,18 +385093,30 @@
      []
     ],
     "helpers.js": [
-     "de9fba2d1c48fbb6cdbfcba9e7a9aaf99f68e04a",
+     "99ba79234135f6dc8f2d92692ac23e8ea89b637a",
+     []
+    ],
+    "requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js.ini": [
+     "6da875227824216b8abdaf8eb39aaf4c87f1ae04",
      []
     ],
     "requestStorageAccess-cross-origin-iframe.sub.https.window.js.ini": [
      "a57f570a978b0d669abaaf6fff166958f724d058",
      []
     ],
+    "requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js.ini": [
+     "f5f6fcdca475ac06fc8845b27adeb0766529e25e",
+     []
+    ],
     "requestStorageAccess-nested-cross-origin-iframe.sub.https.window.js.ini": [
      "3ff1e112c200e8abd484518aa005e2f3818a9895",
      []
     ],
     "resources": {
+     "embedded_responder.js": [
+      "0d563e6b30ccaf55229de06e5e1c0a846f5f4e4b",
+      []
+     ],
      "hasStorageAccess-iframe.html": [
       "d57c3961e54f6d599ffe13af4498470a2e49e636",
       []
@@ -384506,6 +385133,10 @@
       "4880464a257c65e16d7a70471a31a571f8de4878",
       []
      ],
+     "script-with-cookie-header.py": [
+      "83129a55595e54225afd7e9161931d8e5f60f0c0",
+      []
+     ],
      "set-cookie.py": [
       "019697a4a8608943e0258664138ce9a7b6ae6876",
       []
@@ -384774,7 +385405,7 @@
    },
    "subapps": {
     "add-error.tentative.https.html.ini": [
-     "a14f87925db97b794ac0209bed762c84ee0dcff7",
+     "e76639a136fd240ef47c003ee9cbe0a06afe5a0b",
      []
     ],
     "add-success.tentative.https.html.ini": [
@@ -441348,7 +441979,7 @@
       ]
      ],
      "font-variation-settings-serialization-001.html": [
-      "65178c978d3683b81c7a630d0922d425095cca79",
+      "88764fd652f453f2def184a26f922783aa6d0121",
       [
        null,
        {}
@@ -441477,7 +442108,7 @@
        ]
       ],
       "font-feature-settings-computed.html": [
-       "8fa2eda8214ef112a2435e277632b2107099798e",
+       "89704ac5f477f32be76ad073b9814172e7f9bdf3",
        [
         null,
         {}
@@ -535269,6 +535900,13 @@
          null,
          {}
         ]
+       ],
+       "translate-non-html-translation-mode.html": [
+        "3bd7f6ace9cb389e1d6cf8eb235f7773a62d5069",
+        [
+         null,
+         {}
+        ]
        ]
       },
       "images": {
@@ -561131,6 +561769,15 @@
        }
       ]
      ],
+     "early-hints-response-time.h2.html": [
+      "ac70b3d332e6540881d0e683f91e3493df7ef6f1",
+      [
+       null,
+       {
+        "timeout": "long"
+       }
+      ]
+     ],
      "embed-object.h2.window.js": [
       "82365fafddbb8df1ea80cecdf2d24db65e3ef379",
       [
@@ -570905,7 +571552,7 @@
      ]
     ],
     "can-make-payment-event.https.html": [
-     "941c206e3b36fc91175e414bf773dd54e5d7d982",
+     "776c68be43ad727b6f8108bb6dbbebd7ebec3196",
      [
       null,
       {
@@ -571778,8 +572425,50 @@
      ]
     ],
     "not-restored-reasons": {
+     "performance-navigation-timing-attributes.tentative.window.js": [
+      "4d403e12aa65e2fe7489f15b9cb63e33718c3e2b",
+      [
+       "performance-timeline/not-restored-reasons/performance-navigation-timing-attributes.tentative.window.html",
+       {
+        "script_metadata": [
+         [
+          "title",
+          "RemoteContextHelper navigation using BFCache"
+         ],
+         [
+          "script",
+          "./test-helper.js"
+         ],
+         [
+          "script",
+          "/common/dispatcher/dispatcher.js"
+         ],
+         [
+          "script",
+          "/common/get-host-info.sub.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "/html/browsers/browsing-the-web/back-forward-cache/resources/rc-helper.js"
+         ],
+         [
+          "script",
+          "/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"
+         ],
+         [
+          "script",
+          "/websockets/constants.sub.js"
+         ]
+        ]
+       }
+      ]
+     ],
      "performance-navigation-timing-bfcache-reasons-stay.tentative.window.js": [
-      "a39663f3d8661f4f68e8d254267f776fed6ffebb",
+      "a0f11abc837eef2985e9ed7bf6081083f752f573",
       [
        "performance-timeline/not-restored-reasons/performance-navigation-timing-bfcache-reasons-stay.tentative.window.html",
        {
@@ -571859,7 +572548,7 @@
       ]
      ],
      "performance-navigation-timing-cross-origin-bfcache.tentative.window.js": [
-      "115ea81d4d4430313f67f8281c36222e1dd99b6a",
+      "d1f29eab6fbad770f98a48bfb6118e570cc605f5",
       [
        "performance-timeline/not-restored-reasons/performance-navigation-timing-cross-origin-bfcache.tentative.window.html",
        {
@@ -571901,7 +572590,7 @@
       ]
      ],
      "performance-navigation-timing-not-bfcached.tentative.window.js": [
-      "7bbc59e94bd7fdd5d9ce1f279ad86d89ee88f60e",
+      "6367f58ce916ac0019a3458e9b042eb4dd73e8ae",
       [
        "performance-timeline/not-restored-reasons/performance-navigation-timing-not-bfcached.tentative.window.html",
        {
@@ -571943,7 +572632,7 @@
       ]
      ],
      "performance-navigation-timing-redirect-on-history.tentative.window.js": [
-      "a9d9facde82c0cb3a1562c8177e3ea719cdaa1d3",
+      "39e9ac9964ae6b2706cc118bfe528a027b7f51dd",
       [
        "performance-timeline/not-restored-reasons/performance-navigation-timing-redirect-on-history.tentative.window.html",
        {
@@ -572027,7 +572716,7 @@
       ]
      ],
      "performance-navigation-timing-same-origin-replace.tentative.window.js": [
-      "5ee3c30c65f1bebea831faddb1735fe89a078314",
+      "e8805be6c4b5e1892b3ffb548708a15887ebd88f",
       [
        "performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-replace.tentative.window.html",
        {
@@ -589152,6 +589841,20 @@
       {}
      ]
     ],
+    "interim-response-times.h2.html": [
+     "850ee7cb5f539b76ddfd9c1489915fa9ddaf7215",
+     [
+      null,
+      {}
+     ]
+    ],
+    "interim-response-times.html": [
+     "b922590d5d32c2b3899d82e4ea9297d54b6c7cc2",
+     [
+      null,
+      {}
+     ]
+    ],
     "link-sequence-of-events.html": [
      "be9db32cd92968a210f54a26ae14b6e93a8e836c",
      [
@@ -601565,6 +602268,32 @@
       }
      ]
     ],
+    "requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js": [
+     "5081bb4a9cb7ded381bfcc52716b013c508210a1",
+     [
+      "storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.html",
+      {
+       "script_metadata": [
+        [
+         "script",
+         "helpers.js"
+        ],
+        [
+         "script",
+         "/cookies/resources/cookie-helper.sub.js"
+        ],
+        [
+         "script",
+         "/resources/testdriver.js"
+        ],
+        [
+         "script",
+         "/resources/testdriver-vendor.js"
+        ]
+       ]
+      }
+     ]
+    ],
     "requestStorageAccess-cross-origin-iframe.sub.https.window.js": [
      "38e3fd6d9abb47ccb6ba4b91609d903caf3ce364",
      [
@@ -601587,6 +602316,32 @@
       }
      ]
     ],
+    "requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js": [
+     "75ea90744ff11691b1a4c134c42bb755572c5381",
+     [
+      "storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.html",
+      {
+       "script_metadata": [
+        [
+         "script",
+         "helpers.js"
+        ],
+        [
+         "script",
+         "/cookies/resources/cookie-helper.sub.js"
+        ],
+        [
+         "script",
+         "/resources/testdriver.js"
+        ],
+        [
+         "script",
+         "/resources/testdriver-vendor.js"
+        ]
+       ]
+      }
+     ]
+    ],
     "requestStorageAccess-insecure.sub.window.js": [
      "f845f0647ca001e7a5fe304816a055e2d70c28df",
      [
@@ -620765,7 +621520,7 @@
        ]
       ],
       "audiocontext-sinkid-setsinkid.https.html": [
-       "c4fbe41e921c5403077e23e1074194f3caaf4e26",
+       "61d2586bfb7d43a406fc661d31806c85c96904b0",
        [
         null,
         {}
diff --git a/third_party/blink/web_tests/external/wpt/FileAPI/BlobURL/cross-partition.tentative.https.html.ini b/third_party/blink/web_tests/external/wpt/FileAPI/BlobURL/cross-partition.tentative.https.html.ini
new file mode 100644
index 0000000..2762f14
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/FileAPI/BlobURL/cross-partition.tentative.https.html.ini
@@ -0,0 +1,9 @@
+[cross-partition.tentative.https.html]
+  [Blob URL shouldn't be revocable from a cross-partition iframe]
+    expected: FAIL
+
+  [Blob URL shouldn't be revocable from a cross-partition dedicated worker]
+    expected: FAIL
+
+  [Blob URL shouldn't be revocable from a cross-partition shared worker]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/compositing/root-element-opacity.html b/third_party/blink/web_tests/external/wpt/css/compositing/root-element-opacity.html
index a8195bc..4885d805 100644
--- a/third_party/blink/web_tests/external/wpt/css/compositing/root-element-opacity.html
+++ b/third_party/blink/web_tests/external/wpt/css/compositing/root-element-opacity.html
@@ -3,7 +3,6 @@
 <link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
 <link rel="help" href="https://drafts.fxtf.org/compositing/#pagebackdrop">
 <link rel="match" href="root-element-opacity-ref.html">
-<meta name="fuzzy" content="0-1;0-480000">
 <html style="background: #BBB; opacity: 0.5">
   <div id=spacer style="width: 100px; height: 3000px"></div>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-001.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-001.html
index 516a90c..e31abec3 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-001.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block trim 001</title>
+<title>margin-trim: block-container-block-001</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
@@ -9,7 +9,7 @@
 <style>
 .container {
     background-color: green;
-    width: 100px;
+    width: min-content;
     margin-trim: block;
 }
 .outer {
@@ -20,6 +20,7 @@
 .child {
     margin-top: 50px;
     margin-bottom: 50px;
+    width: 100px;
     height: 50px;
 }
 </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-002.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-002.html
index 1f86d55..399141b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-002.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block trim 002</title>
+<title>margin-trim: block-container-block-002</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
@@ -9,7 +9,7 @@
 <style>
 .container {
     background-color: green;
-    width: 100px;
+    width: min-content;
     margin-trim: block;
 }
 .first {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-001.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-001.html
index e36a207..fcee656 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-001.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block end trim 001</title>
+<title>margin-trim: block-container-block-end-001</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
@@ -9,7 +9,7 @@
 <style>
 .container {
     background-color: green;
-    width: 100px;
+    width: min-content;
     margin-trim: block-end;
 }
 .outer {
@@ -19,6 +19,7 @@
 }
 .child {
     margin-bottom: 50px;
+    width: 100px;
     height: 50px;
 }
 </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-002.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-002.html
index 2859e104..42d559fb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-end-002.html
@@ -1,14 +1,14 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block end trim 002</title>
+<title>margin-trim: block-container-block-end-002</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
 <meta name="assert" content="block-end should trim block end margin for ONLY block-level first child">
 <style>
 .container {
-    width: 100px;
+    width: min-content;
     margin-trim: block-end;
     background-color: green;
 }
@@ -18,13 +18,13 @@
     background-color: green;
 }
 .first {
-    width: 100%;
+    width: 100px;
     margin-bottom: 25px;
     height: 25px;
 }
 .second {
     margin-bottom: 100px;
-    width: 100%;
+    width: 100px;
     height: 10px;
 }
 </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-001.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-001.html
index 2fecf07e..c33c7f0a 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-001.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block start trim 001</title>
+<title>margin-trim: block-container-block-start-001</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
@@ -9,7 +9,7 @@
 <style>
 .container {
     background-color: green;
-    width: 100px;
+    width: min-content;
     margin-trim: block-start;
 }
 .outer {
@@ -18,6 +18,7 @@
     height: 50px;
 }
 .child {
+    width: 100px;
     margin-top: 50px;
     height: 50px;
 }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-002.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-002.html
index 6edbb54..339c990d 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-block-start-002.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block start trim 002</title>
+<title>margin-trim: block-container-block-start-002</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
@@ -9,7 +9,7 @@
 <style>
 .container {
     background-color: green;
-    width: 100px;
+    width: min-content;
     margin-trim: block-start;
 }
 .outer {
@@ -19,12 +19,12 @@
 }
 .first {
     margin-top: 50px;
-    width: 100%;
+    width: 100px;
     height: 40px;
 }
 .second {
     margin-top: 10px;
-    width: 100%;
+    width: 100px;
     height: 40px;
 }
 </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html
new file mode 100644
index 0000000..4affb87
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: block-container-non-adjoining-item</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
+<meta name="assert" content="non-adjoining first child should still have its margins trimmed and the container should keep its set margin">
+<style>
+.container {
+    background-color: green;
+    width: min-content;
+    margin-bottom: 100px;
+    padding-bottom: 50px;
+    background-clip: padding-box;
+}
+.child {
+    width: 100px;
+    height: 50px;
+}
+</style>
+</head>
+<body>
+<div class="container">
+    <div class="child"></div>
+</div>
+<div>This text should be 100px below the green square.</div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item.html
new file mode 100644
index 0000000..2151754
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: block-container-non-adjoining-item</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
+<link rel="match" href="block-container-non-adjoining-item-ref.html">
+<meta name="assert" content="non-adjoining first child should still have its margins trimmed and the container should keep its set margin">
+<style>
+.container {
+    background-color: green;
+    width: min-content;
+    margin-bottom: 100px;
+    padding-bottom: 50px;
+    background-clip: padding-box;
+    margin-trim: block;
+}
+.child {
+    margin-top: 50px;
+    margin-bottom: 200px;
+    width: 100px;
+    height: 50px;
+}
+</style>
+</head>
+<body>
+<div class="container">
+    <div class="child"></div>
+</div>
+<div>This text should be 100px below the green square.</div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item.html.ini
new file mode 100644
index 0000000..b503f8a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-non-adjoining-item.html.ini
@@ -0,0 +1,2 @@
+[block-container-non-adjoining-item.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-end.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-end.html
index 6011d10d..0225460 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-end.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-end.html
@@ -1,14 +1,14 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block container replaced block-end trim</title>
+<title>margin-trim: block-container-replaced-block-end</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
 <meta name="assert" content="block level replaced element should have block-end trimmed">
 <style>
 .container {
-   width: 100px;
+   width: min-content;
    margin-trim: block-end;
 }
 .outer {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-start.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-start.html
index c943fb1..10080c9 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-start.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block-start.html
@@ -1,14 +1,14 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block container replaced block-start trim</title>
+<title>margin-trim: block-container-replaced-block-start</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
 <meta name="assert" content="block level replaced element should have block-start trimmed">
 <style>
 .container {
-   width: 100px;
+   width: min-content;
    margin-trim: block-start;
 }
 .outer {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block.html
index 54d7011..036066f69 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/block-container-replaced-block.html
@@ -1,14 +1,14 @@
 <!DOCTYPE html>
 <html>
 <head>
-<title>CSS margin-trim: block container replaced block trim</title>
+<title>margin-trim: block-container-replaced-block</title>
 <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
 <link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-block">
 <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
 <meta name="assert" content="block level replaced element should have both block-start and block-end trimmed when block is specified">
 <style>
 .container {
-    width: 100px;
+    width: min-content;
     margin-trim: block;
 }
 .outer {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only-ref.html
new file mode 100644
index 0000000..5145182
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-block-end-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="block-end should trim only margin block end of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block-start: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only.html
new file mode 100644
index 0000000..0a99b3f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-block-end-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-block-end-trimmed-only-ref.html">
+<meta name="assert" content="block-end should trim only margin block end of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    margin-trim: block-end;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only.html.ini
new file mode 100644
index 0000000..28af4fb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-end-trimmed-only.html.ini
@@ -0,0 +1,2 @@
+[flex-block-end-trimmed-only.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html
new file mode 100644
index 0000000..58a7e5b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-block-start-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="block-start should trim only margin block start of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block-end: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only.html
new file mode 100644
index 0000000..5e867ea
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-block-start-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-block-start-trimmed-only-ref.html">
+<meta name="assert" content="block-start should trim only margin block start of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    margin-trim: block-start;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only.html.ini
new file mode 100644
index 0000000..620f867
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-start-trimmed-only.html.ini
@@ -0,0 +1,2 @@
+[flex-block-start-trimmed-only.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only-ref.html
new file mode 100644
index 0000000..f4cf4fe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-block-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="block should trim only block margins of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only.html
new file mode 100644
index 0000000..e7304828
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-block-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-block-trimmed-only-ref.html">
+<meta name="assert" content="block should trim only block margins of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    margin-trim: block;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only.html.ini
new file mode 100644
index 0000000..7d560bf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-block-trimmed-only.html.ini
@@ -0,0 +1,2 @@
+[flex-block-trimmed-only.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-block-multiline.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-block-multiline.html
new file mode 100644
index 0000000..6536d7f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-block-multiline.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-column-block-multiline</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="block-start should be trimmed for items at the start of the flex line and block-end should be trimmed for items at the end of the flex line">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    height: 100px;
+    flex-wrap: wrap;
+    flex-direction: column;
+    margin-trim: block;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+item:nth-child(odd) {
+    margin-block-start: 25px;
+}
+item:nth-child(even) {
+    margin-block-end: 25px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-block-multiline.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-block-multiline.html.ini
new file mode 100644
index 0000000..6c432dc7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-block-multiline.html.ini
@@ -0,0 +1,2 @@
+[flex-column-block-multiline.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-grow.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-grow.html
new file mode 100644
index 0000000..62c55b2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-grow.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-column-grow</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="items should grow to take up the space made available by trimming margins">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    height: 100px;
+    flex-direction: column;
+    margin-trim: block;
+}
+item {
+    display: block;
+    width: 100px;
+    height: 50px;
+    margin-block: 25px;
+    flex: 1 0 auto;
+    background-color: green;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-grow.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-grow.html.ini
new file mode 100644
index 0000000..dd2cec9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-grow.html.ini
@@ -0,0 +1,2 @@
+[flex-column-grow.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline-ref.html
new file mode 100644
index 0000000..c4b36a9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline-ref.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-column-inline-multiline</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="inline-start should be trimmed for all items on the first flex line and inline-end should be trimmed for all items on the last flex line">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    height: 100px;
+    flex-direction: column;
+    flex-wrap: wrap;
+    gap: 0px 30px;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline.html
new file mode 100644
index 0000000..25003aa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-column-inline-multiline</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-column-inline-multiline-ref.html">
+<meta name="assert" content="inline-start should be trimmed for all items on the first flex line and inline-end should be trimmed for all items on the last flex line">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    height: 100px;
+    flex-direction: column;
+    flex-wrap: wrap;
+    margin-trim: inline;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline-start: 10px;
+    margin-inline-end: 20px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline.html.ini
new file mode 100644
index 0000000..416a322
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-inline-multiline.html.ini
@@ -0,0 +1,2 @@
+[flex-column-inline-multiline.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-orthogonal-item.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-orthogonal-item.html
new file mode 100644
index 0000000..9f13e2c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-orthogonal-item.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-column-orthogonal-item</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="orthogonal items have correct margins trimmed according to the flexbox's writing mode">
+<style>
+flexbox {
+    display: flex;
+    flex-direction: column;
+    margin-trim: block;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 100px;
+    height: 50px;
+}
+.orthogonal {
+    writing-mode: vertical-rl;
+}
+item:first-child {
+    margin-inline-start: 10px;
+}
+item:last-child {
+    margin-block-end: 10px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item class="orthogonal"></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-orthogonal-item.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-orthogonal-item.html.ini
new file mode 100644
index 0000000..b04c87fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-orthogonal-item.html.ini
@@ -0,0 +1,2 @@
+[flex-column-orthogonal-item.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-shrink.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-shrink.html
new file mode 100644
index 0000000..06395ff6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-shrink.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-column-shrink</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="content should fill all available space when flex item is larger than the container and the margins are trimmed">
+<style>
+flexbox {
+    display: flex;
+    flex-direction: column;
+    width: min-content;
+    height: 100px;
+    margin-trim: block;
+}
+item {
+    display: block;
+    background-color: green;
+    margin-block: 25px;
+    flex: 0 1 auto;
+    width: 100px;
+    height: 150px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-shrink.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-shrink.html.ini
new file mode 100644
index 0000000..c1ded405
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-column-shrink.html.ini
@@ -0,0 +1,2 @@
+[flex-column-shrink.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html
new file mode 100644
index 0000000..9fb945d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-inline-end-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="inline-end should trim only inline-end margins of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    gap: 20px;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-block: 10px;
+}
+item:first-child {
+    margin-inline-start: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only.html
new file mode 100644
index 0000000..33451da
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-inline-end-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-inline-end-trimmed-only-ref.html">
+<meta name="assert" content="inline-end should trim only inline-end margins of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    margin-trim: inline-end;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only.html.ini
new file mode 100644
index 0000000..e81b2d3e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-end-trimmed-only.html.ini
@@ -0,0 +1,2 @@
+[flex-inline-end-trimmed-only.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html
new file mode 100644
index 0000000..f7dc9ec
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-inline-start-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="inline-start should trim only inline-start margin of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    gap: 20px;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-block: 10px;
+}
+item:last-child {
+    margin-inline-end: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only.html
new file mode 100644
index 0000000..05cf112
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-inline-start-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-inline-start-trimmed-only-ref.html">
+<meta name="assert" content="inline-start trims only inline-start margin of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    margin-trim: inline-start;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only.html.ini
new file mode 100644
index 0000000..0367f96
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-start-trimmed-only.html.ini
@@ -0,0 +1,2 @@
+[flex-inline-start-trimmed-only.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html
new file mode 100644
index 0000000..e262b90
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-inline-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="inline should trim only the inline margins of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    gap: 20px;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only.html
new file mode 100644
index 0000000..637dc48
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-inline-trimmed-only</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-inline-trimmed-only-ref.html">
+<meta name="assert" content="inline will trim only the inline margins of flex items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    border: 1px black solid;
+    margin-trim: inline;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only.html.ini
new file mode 100644
index 0000000..c428112
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-inline-trimmed-only.html.ini
@@ -0,0 +1,2 @@
+[flex-inline-trimmed-only.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline-ref.html
new file mode 100644
index 0000000..8eb29f58
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-row-block-multiline</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="block-start margins are trimmed for items on first flex line and block-end margins and trimmed for items on last flex line">
+<style>
+flexbox {
+    display: flex;
+    width: 100px;
+    flex-wrap: wrap;
+    gap: 20px 0px;
+    border: 1px solid black;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline.html
new file mode 100644
index 0000000..c8fc788
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-row-block-multiline</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-row-block-multiline-ref.html">
+<meta name="assert" content="block-start margins are trimmed for items on first flex line and block-end margins and trimmed for items on last flex line">
+<style>
+flexbox {
+    display: flex;
+    width: 100px;
+    flex-wrap: wrap;
+    margin-trim: block;
+    border: 1px solid black;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline.html.ini
new file mode 100644
index 0000000..9210cc2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-block-multiline.html.ini
@@ -0,0 +1,2 @@
+[flex-row-block-multiline.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-grow.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-grow.html
new file mode 100644
index 0000000..6439546
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-grow.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-row-grow</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="items should grow to take up the space made available by trimming margins">
+<style>
+flexbox {
+    display: flex;
+    width: 100px;
+    margin-trim: inline;
+}
+item {
+    display: block;
+    width: 50px;
+    height: 100px;
+    margin-inline: 25px;
+    flex: 1 0 auto;
+    background-color: green;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-grow.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-grow.html.ini
new file mode 100644
index 0000000..0c56dea5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-grow.html.ini
@@ -0,0 +1,2 @@
+[flex-row-grow.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-inline-multiline.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-inline-multiline.html
new file mode 100644
index 0000000..d563373
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-inline-multiline.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-row-inline-multiline</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="inline-start margins are trimmed for items at start of flex line and inline-end margins are trimmed for items at end of flex line">
+<style>
+flexbox {
+    display: flex;
+    width: 100px;
+    flex-wrap: wrap;
+    margin-trim: inline;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+item:nth-child(odd) {
+    margin-inline-start: 25px;
+}
+item:nth-child(even) {
+    margin-inline-end: 25px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-inline-multiline.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-inline-multiline.html.ini
new file mode 100644
index 0000000..d4762b1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-inline-multiline.html.ini
@@ -0,0 +1,2 @@
+[flex-row-inline-multiline.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-orthogonal-item.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-orthogonal-item.html
new file mode 100644
index 0000000..3facc74
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-orthogonal-item.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-row-orthogonal-item</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="orthogonal items have correct margins trimmed according to the flexbox's writing mode">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    margin-trim: inline
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 100px;
+}
+.orthogonal {
+    writing-mode: vertical-rl;
+}
+item:first-child {
+    margin-block-end: 10px;
+}
+item:last-child {
+    margin-inline-end: 10px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item class="orthogonal"></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-orthogonal-item.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-orthogonal-item.html.ini
new file mode 100644
index 0000000..621a89a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-orthogonal-item.html.ini
@@ -0,0 +1,2 @@
+[flex-row-orthogonal-item.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-shrink.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-shrink.html
new file mode 100644
index 0000000..172c946c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-shrink.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-row-shrink</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="content should fill all available space when flex item is larger than the container and the margins are trimmed">
+<style>
+flexbox {
+    display: flex;
+    width: 100px;
+    margin-trim: inline;
+}
+item {
+    display: block;
+    background-color: green;
+    margin-inline: 25px;
+    flex: 0 1 auto;
+    width: 150px;
+    height: 100px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<flexbox>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-shrink.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-shrink.html.ini
new file mode 100644
index 0000000..70f900f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-row-shrink.html.ini
@@ -0,0 +1,2 @@
+[flex-row-shrink.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins-ref.html
new file mode 100644
index 0000000..aebc1045
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins-ref.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-trim-all-margins</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<meta name="assert" content="specifying all margin edges should trim all of them correctly for the appropriate items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    gap: 20px;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins.html
new file mode 100644
index 0000000..1c2eda8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: flex-trim-all-margins</title>
+<link rel="author" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-flex">
+<link rel="match" href="flex-trim-all-margins-ref.html">
+<meta name="assert" content="specifying all margin edges should trim all of them correctly for the appropriate items">
+<style>
+flexbox {
+    display: flex;
+    width: min-content;
+    margin-trim: block-start block-end inline-start inline-end;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline: 10px;
+    margin-block: 10px;
+}
+</style>
+</head>
+<body>
+<flexbox>
+<item></item>
+<item></item>
+<item></item>
+</flexbox>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins.html.ini
new file mode 100644
index 0000000..9e34687
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/flex-trim-all-margins.html.ini
@@ -0,0 +1,2 @@
+[flex-trim-all-margins.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end-ref.html
new file mode 100644
index 0000000..0ada6451
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end-ref.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-block-end</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<meta name="assert" content="block-end should trim block-end margins of items on last row">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item style="grid-row: span 2; height: auto;"></item>
+<item style="margin-block-end: 10px;"></item>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end.html
new file mode 100644
index 0000000..ffbc374
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-block-end</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<link rel="match" href="grid-block-end-ref.html">
+<meta name="assert" content="block-end should trim block-end margins of items on last row">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+    margin-trim: block-end;
+}
+
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-block-end: 10px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item style="grid-row: span 2; height: auto;"></item>
+<item></item>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end.html.ini
new file mode 100644
index 0000000..4846925f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-end.html.ini
@@ -0,0 +1,2 @@
+[grid-block-end.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start-ref.html
new file mode 100644
index 0000000..486b64c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start-ref.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-block-start</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<meta name="assert" content="block-start should trim block-start margins of items on first row">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+.block-start-margin {
+    margin-block-start: 10px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item></item>
+<item></item>
+<item class="block-start-margin"></item>
+<item class="block-start-margin"></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start.html
new file mode 100644
index 0000000..21d5447
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-block-start</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<link rel="match" href="grid-block-start-ref.html">
+<meta name="assert" content="block-start should trim block-start margins of items on first row">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+    margin-trim: block-start;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-block-start: 10px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start.html.ini
new file mode 100644
index 0000000..2e4f8fa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block-start.html.ini
@@ -0,0 +1,2 @@
+[grid-block-start.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block.html
new file mode 100644
index 0000000..6a4c3bbc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-block</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="block should trim block-start margin of items on first row and block-end margins of items on last row">
+<style>
+grid {
+    display: inline-grid;
+    grid-template-columns: auto auto;
+    margin-trim: block;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+.block-start-margin {
+    margin-block-start: 10px;
+}
+.block-end-margin {
+    margin-block-end: 20px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<grid>
+<item class="block-start-margin"></item>
+<item class="block-start-margin"></item>
+<item class="block-end-margin"></item>
+<item class="block-end-margin"></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block.html.ini
new file mode 100644
index 0000000..8a6beb4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-block.html.ini
@@ -0,0 +1,2 @@
+[grid-block.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end-ref.html
new file mode 100644
index 0000000..e51a97f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-inline-end</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<meta name="assert" content="inline-end should trim inline-end margins of items on last column">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+    margin-trim: inline-end;
+}
+
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item style="grid-column: span 2; width: auto;"></item>
+<item style="margin-inline-end: 10px;"></item>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end.html
new file mode 100644
index 0000000..3754a9b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-inline-end</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<link rel="match" href="grid-inline-end-ref.html">
+<meta name="assert" content="inline-end should trim inline-end margins of items on last column">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+    margin-trim: inline-end;
+}
+
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline-end: 10px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item style="grid-column: span 2; width: auto;"></item>
+<item></item>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end.html.ini
new file mode 100644
index 0000000..001c139
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-end.html.ini
@@ -0,0 +1,2 @@
+[grid-inline-end.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start-ref.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start-ref.html
new file mode 100644
index 0000000..c35b1f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start-ref.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-inline-start</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<meta name="assert" content="inline-start should trim inline-start margins of items on first column">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+    margin-trim: inline-start;
+}
+
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+.inline-start-margin {
+    margin-inline-start: 10px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item></item>
+<item class="inline-start-margin"></item>
+<item></item>
+<item class="inline-start-margin"></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start.html
new file mode 100644
index 0000000..e0f4c6d45
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-inline-start</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<link rel="match" href="grid-inline-start-ref.html">
+<meta name="assert" content="inline-start should trim inline-start margins of items on first column">
+<style>
+grid {
+    display: inline-grid;
+    border: 1px solid black;
+    grid-template-columns: auto auto;
+    margin-trim: inline-start;
+}
+
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+    margin-inline-start: 10px;
+}
+</style>
+</head>
+<body>
+<grid>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start.html.ini
new file mode 100644
index 0000000..760bd87
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline-start.html.ini
@@ -0,0 +1,2 @@
+[grid-inline-start.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline.html
new file mode 100644
index 0000000..1ac22829
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-inline</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="inline should trim inline-start margin of items on first column and inline-end margins of items on last column">
+<style>
+grid {
+    display: inline-grid;
+    grid-template-columns: auto auto;
+    margin-trim: inline;
+}
+item {
+    display: block;
+    background-color: green;
+    width: 50px;
+    height: 50px;
+}
+item:nth-child(odd) {
+    margin-inline-start: 10px;
+}
+item:nth-child(even) {
+    margin-inline-end: 20px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<grid>
+<item></item>
+<item></item>
+<item></item>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline.html.ini
new file mode 100644
index 0000000..72221f6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-inline.html.ini
@@ -0,0 +1,2 @@
+[grid-inline.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html
new file mode 100644
index 0000000..15768ea7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>margin-trim: grid-trim-ignores-collapsed-tracks</title>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-box-4/#margin-trim-grid">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="should ignore collapsed margins when determining if an edge should be trimmed">
+<style>
+grid {
+    display: inline-grid;
+    grid-template-rows: repeat(auto-fit, 250px);
+    grid-template-columns: repeat(auto-fit, 250px);
+    margin-trim: block-start inline-start;
+}
+item {
+    display: block;
+    background-color: green;
+    grid-column: 2;
+    grid-row: 2;
+    margin-inline-start: 30px;
+    margin-block-start: 50px;
+    width: 100px;
+    height: 100px;
+}
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<grid>
+<item></item>
+</grid>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html.ini b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html.ini
new file mode 100644
index 0000000..a4fe74e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html.ini
@@ -0,0 +1,2 @@
+[grid-trim-ignores-collapsed-tracks.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/t32-opacity-offscreen-with-alpha-c.xht b/third_party/blink/web_tests/external/wpt/css/css-color/t32-opacity-offscreen-with-alpha-c.xht
index 035609e..57e5e3cc 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/t32-opacity-offscreen-with-alpha-c.xht
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/t32-opacity-offscreen-with-alpha-c.xht
@@ -7,7 +7,6 @@
 		<link rel="help" href="http://www.w3.org/TR/css3-color/#transparency" />
 		<link rel="match" href="t32-opacity-offscreen-with-alpha-c-ref.html" />
 		<meta name="assert" content="That alpha within the offscreen buffer is composited correctly." />
-		<meta name="fuzzy" content="0-1;0-5120" />
 		<style type="text/css"><![CDATA[
 
 		body { background: white; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-nested-ref.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-nested-ref.html
new file mode 100644
index 0000000..bc00c86
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-nested-ref.html
@@ -0,0 +1,10 @@
+<!doctype HTML>
+<html>
+<meta charset="utf8">
+<title>Content Visibility: content in nested `content-visibility: auto` elements is considered relevant</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+
+<div style="border:solid">
+    <div>content with content-visibility: auto</div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-nested.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-nested.html
new file mode 100644
index 0000000..9fc7c03
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-auto-nested.html
@@ -0,0 +1,28 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: content in nested `content-visibility: auto` elements is considered relevant</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="content-visibility-auto-nested-ref.html">
+<meta name="assert" content="content in nested `content-visibility: auto` elements is considered relevant">
+
+<script src="/common/reftest-wait.js"></script>
+<script src="../resources/utils.js"></script>
+
+<style>
+div {
+    content-visibility: auto;
+}
+</style>
+
+<script>
+function runTest() {
+  requestAnimationFrame(takeScreenshot);
+}
+window.onload = () => { requestAnimationFrame(runTest); };
+</script>
+
+<div style="border:solid">
+    <div>content with content-visibility: auto</div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/cjk-kerning.html.ini b/third_party/blink/web_tests/external/wpt/css/css-fonts/cjk-kerning.html.ini
index 5f57054..cf10f407 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-fonts/cjk-kerning.html.ini
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/cjk-kerning.html.ini
@@ -6,11 +6,11 @@
 
   [expected match: .default .cjk vs .kernOFF .cjk]
     expected:
-      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): FAIL
+      if (processor == "x86_64") and (flag_specific == "") and (product == "content_shell"): FAIL
 
   [expected mismatch: .kernOFF .cjk vs .kernON .cjk]
     expected:
-      if (os == "linux") and (flag_specific == "") and (product == "content_shell"): PASS
+      if (processor == "x86_64") and (flag_specific == "") and (product == "content_shell"): PASS
       FAIL
 
   [expected mismatch: .paltOFFkernON .cjk vs .paltONkernON .cjk]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-variation-settings-serialization-001.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-variation-settings-serialization-001.html
index 65178c9..88764fd 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-fonts/font-variation-settings-serialization-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/font-variation-settings-serialization-001.html
@@ -2,11 +2,11 @@
 <html>
     <head>
         <meta charset="utf-8">
-        <title>CSS Test: font-feature-settings serialization</title>
+        <title>CSS Test: font-variation-settings serialization</title>
         <link rel="author" title="Greg Whitworth" href="mailto:gwhit@microsoft.com">
         <link rel="help" href="http://www.w3.org/TR/css-fonts-4/#propdef-font-variation-settings">
         <link rel="issue" href="https://github.com/w3c/csswg-drafts/issues/1959#issuecomment-360864254">
-        <meta name="desctiption" content="It was decided in issue 1959 that font-variation-settings is a map, therefor duplicates should be removed">
+        <meta name="description" content="It was decided in issue 1959 that font-variation-settings is a map, therefore duplicates should be removed">
         <script src="/resources/testharness.js"></script>
         <script src="/resources/testharnessreport.js"></script>
     </head>
@@ -17,7 +17,7 @@
             const test1_canEqual = ['"bldA" 2', "'bldA' 2"];
             test(function() {
                 assert_in_array(getComputedStyle(document.getElementById('test1')).fontVariationSettings, test1_canEqual);
-            }, "font-feature-settings should be serialized to not include duplicates");
+            }, "font-variation-settings should be serialized to not include duplicates");
         </script>
     </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed-expected.txt
new file mode 100644
index 0000000..b08dbcf0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS Property font-feature-settings value 'normal'
+PASS Property font-feature-settings value '"dlig"'
+PASS Property font-feature-settings value '"smcp"'
+PASS Property font-feature-settings value '"c2sc"'
+PASS Property font-feature-settings value '"liga" 0'
+PASS Property font-feature-settings value '"tnum", "hist"'
+PASS Property font-feature-settings value '"PKRN"'
+FAIL Property font-feature-settings value '"dlig", "smcp", "dlig" 0' assert_in_array: value "\"dlig\", \"smcp\", \"dlig\" 0" not in array ["\"smcp\", \"dlig\" 0", "\"dlig\" 0, \"smcp\""]
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed.html
index 8fa2eda8..89704ac 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed.html
@@ -4,7 +4,9 @@
 <meta charset="utf-8">
 <title>CSS Fonts Module Level 3: getComputedStyle().fontFeatureSettings</title>
 <link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
-<meta name="assert" content="font-feature-settings computed value is as specified.">
+<meta name="assert" content="The computed value of font-feature-settings is a map, so any duplicates in the specified value must not be preserved.">
+<!-- Note that this conflicts with the computed value being "as specified", which the summary shows.
+     See https://github.com/w3c/csswg-drafts/issues/8296#issuecomment-1377622802 -->
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/css/support/computed-testcommon.js"></script>
@@ -18,11 +20,13 @@
 test_computed_value('font-feature-settings', '"smcp"');
 test_computed_value('font-feature-settings', '"c2sc"');
 test_computed_value('font-feature-settings', '"liga" 0');
-test_computed_value('font-feature-settings', '"tnum", "hist"');
+test_computed_value('font-feature-settings', '"tnum", "hist"',
+                    ['"tnum", "hist"', '"hist", "tnum"']);
 
 test_computed_value('font-feature-settings', '"PKRN"');
 
-test_computed_value('font-feature-settings', '"dlig", "smcp", "dlig" 0');
+test_computed_value('font-feature-settings', '"dlig", "smcp", "dlig" 0',
+                    ['"smcp", "dlig" 0', '"dlig" 0, "smcp"']);
 </script>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed.html.ini b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed.html.ini
new file mode 100644
index 0000000..80d1a38
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/parsing/font-feature-settings-computed.html.ini
@@ -0,0 +1,3 @@
+[font-feature-settings-computed.html]
+  [Property font-feature-settings value '"dlig", "smcp", "dlig" 0']
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/active-selection-018.html.ini b/third_party/blink/web_tests/external/wpt/css/css-pseudo/active-selection-018.html.ini
new file mode 100644
index 0000000..8a2acb2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/active-selection-018.html.ini
@@ -0,0 +1,2 @@
+[active-selection-018.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/backdrop-animate-002.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/backdrop-animate-002.html
index 910807a..6fd153b 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/backdrop-animate-002.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/backdrop-animate-002.html
@@ -5,7 +5,7 @@
 <link rel="match" href="backdrop-animate-002-ref.html">
 <dialog id="target">Dialog contents</dialog>
 <!-- This test fails on WPT.fyi with off-by-one on the green background (Chrome-only): -->
-<meta name="fuzzy" content="maxDifference=0-1;totalPixels=0-472500">
+<meta name="fuzzy" content="maxDifference=0-1;totalPixels=0-472272">
 <script>
 const target = document.getElementById("target");
 target.showModal();
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html
index 5758ade..efb5ffb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/set-current-time.html
@@ -4,7 +4,6 @@
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:vmpstr@chromium.org">
 <link rel="match" href="set-current-time-ref.html">
-<meta name="fuzzy" content="0-1;0-10000">
 <script src="/common/reftest-wait.js"></script>
 <style>
 :root { view-transition-name: unset; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/view-transition-name-is-grouping.html.ini b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/view-transition-name-is-grouping.html.ini
new file mode 100644
index 0000000..7dca067
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/view-transition-name-is-grouping.html.ini
@@ -0,0 +1,2 @@
+[view-transition-name-is-grouping.html]
+  expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-dedicated-worker.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-dedicated-worker.js
deleted file mode 100644
index 26ff23ef..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-dedicated-worker.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-importScripts(
-  'test-helpers.js',
-  'messaging-serialize-helpers.js',
-  'message-target.js'
-);
-
-add_message_event_handlers(/*receiver=*/self, /*target=*/self);
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-service-worker.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-service-worker.js
deleted file mode 100644
index 4a6174ae..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-service-worker.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-importScripts(
-  'test-helpers.js',
-  'messaging-serialize-helpers.js',
-  'message-target.js'
-);
-
-add_message_event_handlers(/*receiver=*/self);
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-shared-worker.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-shared-worker.js
deleted file mode 100644
index 6829c61d..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-shared-worker.js
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-
-importScripts(
-  'test-helpers.js',
-  'messaging-serialize-helpers.js',
-  'message-target.js'
-);
-
-self.addEventListener('connect', connect_event => {
-  const message_port = connect_event.ports[0];
-  add_message_event_handlers(
-    /*receiver=*/message_port, /*target=*/message_port);
-  message_port.start();
-});
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.html b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.html
deleted file mode 100644
index 32c7f0c..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<script src='test-helpers.js'></script>
-<script src='messaging-serialize-helpers.js'></script>
-<script src='message-target.js'></script>
-<script id="inline_script">
-  'use strict'
-
-  if (window.parent !== null) {
-    window.parent.postMessage('LOADED', { targetOrigin: '*' });
-  }
-
-  if (window.opener !== null) {
-    window.opener.postMessage('LOADED', { targetOrigin: '*' });
-  }
-
-  // Use an undefined message target to send responses to
-  // MessageEvent::source instead.
-  const target = undefined;
-
-  add_message_event_handlers(
-    /*receiver=*/self, target, /*target_origin=*/'*');
-</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.js
deleted file mode 100644
index 191b474..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.js
+++ /dev/null
@@ -1,157 +0,0 @@
-'use strict';
-
-// This script depends on the following scripts:
-//    /file-system-access/resources/messaging-helpers.js
-//    /file-system-access/resources/test-helpers.js
-
-// add_message_event_handlers() is the helper function used to setup all
-// message targets, including iframes and workers.
-//
-// Adds a message event handler and a message error handler to |receiver|.
-// The 'data' property from received MessageEvents must include a 'type'
-// property. The 'type' selects the test logic to run. Most message type
-// handlers use postMessage() to respond to the sender with test results.
-// The sender then validates the test results after receiving the response.
-//
-// Both |target| and |target_origin| are optional. |target| is used
-// to send message responses back to the sender. When omitted, the
-// 'source' from received MessageEvents is used instead.
-//
-// For window messaging, |target_origin| specifies the origin to receive
-// responses. Most window tests use '*' for the |target_origin|. Worker
-// and message port tests must use undefined for |target_origin| to avoid
-// exceptions.
-function add_message_event_handlers(receiver, target, target_origin) {
-  receiver.addEventListener('message', async function (message_event) {
-    const message_data = message_event.data;
-
-    // Reply to the sender using the 'source' from the received MessageEvent.
-    let message_source = message_event.source;
-    if (message_source === null) {
-      // However, some message senders, like DedicatedWorkers, don't include
-      // a source. Fallback to the target when the source is null.
-      message_source = target;
-    }
-
-    try {
-      switch (message_data.type) {
-        case 'receive-message-port':
-          // Receive a MessagePort to use as a message target for testing.
-          add_message_event_handlers(
-            /*receiver=*/message_data.message_port,
-            /*target=*/message_data.message_port);
-          message_data.message_port.start();
-          break;
-
-        case 'create-broadcast-channel':
-          // Create a BroadcastChannel to use as a message target for testing.
-          const broadcast_channel =
-            new BroadcastChannel(message_data.broadcast_channel_name);
-          add_message_event_handlers(
-            /*receiver=*/broadcast_channel,
-            /*target=*/broadcast_channel);
-          message_source.postMessage(
-            { type: 'broadcast-channel-created' },
-            { targetOrigin: target_origin });
-          break;
-
-        case 'receive-file-system-handles':
-          // Receive a list of cloned FileSystemFileHandles. Access the
-          // properties of each FileSystemFileHandle by serializing the
-          // handle to a JavaScript object. Then respond with the serialized
-          // results, enabling the sender to verify that the cloned handle
-          // produced the expected property values from this execution context.
-          const serialized_handles = [];
-          const cloned_handles = message_data.cloned_handles;
-          for (let i = 0; i < cloned_handles.length; ++i) {
-            const serialized = await serialize_handle(cloned_handles[i]);
-            serialized_handles.push(serialized);
-          }
-          message_source.postMessage({
-            type: 'receive-serialized-file-system-handles',
-            serialized_handles,
-            // Respond with the cloned handles to create new clones for
-            // the sender to verify.
-            cloned_handles,
-          }, { targetOrigin: target_origin });
-          break;
-
-        case 'receive-serialized-file-system-handles':
-          // Do nothing. This message is meant for test runner validation.
-          // Other message targets may receive this message while testing
-          // broadcast channels.
-          break;
-
-        case 'create-file':
-          // Create a new file and then respond to the sender with it.
-          const directory = await navigator.storage.getDirectory();
-          const file_handle =
-            await directory.getFileHandle('temp-file', { create: true });
-          message_source.postMessage(
-            { type: 'receive-file', file_handle },
-            { targetOrigin: target_origin });
-          break;
-
-        case 'create-directory':
-          // Create a new directory and then respond to the sender with it.
-          const parent_directory = await navigator.storage.getDirectory();
-          const directory_handle =
-            await parent_directory.getDirectoryHandle('temp-directory',
-              { create: true });
-          message_source.postMessage(
-            { type: 'receive-directory', directory_handle },
-            { targetOrigin: target_origin });
-          break;
-
-        case 'create-sync-access-handle':
-          // Receive a file and create a sync access handle out of it. Report
-          // success to the sender.
-          let success = true;
-          try {
-            const access_handle = await message_data.file_handle.createSyncAccessHandle();
-            access_handle.close();
-          } catch (error) {
-            success = false;
-          }
-
-          message_source.postMessage(
-            { type: 'receive-sync-access-handle-result', success },
-            { targetOrigin: target_origin });
-          break;
-
-        default:
-          throw `Unknown message type: '${message_data.type}'`;
-      }
-    } catch (error) {
-      // Respond with an error to trigger a failure in the sender's
-      // test runner.
-      message_source.postMessage(`ERROR: ${error}`,
-        { targetOrigin: target_origin });
-    }
-  });
-
-  receiver.addEventListener('messageerror', async function (message_event) {
-    // Select the target for message responses (see comment in 'message' event
-    // listener above).
-    let message_source = message_event.source;
-    if (message_source === null) {
-      message_source = target;
-    }
-
-    try {
-      // Respond with the MessageEvent's property values, enabling the sender
-      // to verify results.
-      const serialized_message_error_event =
-        serialize_message_error_event(message_event);
-      message_source.postMessage({
-        type: 'serialized-message-error',
-        serialized_message_error_event
-      }, { targetOrigin: target_origin });
-    } catch (error) {
-      // Respond with an error to trigger a failure in the sender's
-      // test runner.
-      message_source.postMessage(`ERROR: ${error}`,
-        { targetOrigin: target_origin });
-    }
-  });
-}
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-blob-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-blob-helpers.js
deleted file mode 100644
index 852f2e2..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-blob-helpers.js
+++ /dev/null
@@ -1,51 +0,0 @@
-'use strict';
-
-// Creates a blob URL with the contents of 'message-target.html'. Use the
-// blob as an iframe src or a window.open() URL, which creates a same origin
-// message target.
-async function create_message_target_blob_url(test) {
-  const html = await create_message_target_html_without_subresources(test);
-  const blob = new Blob([html], { type: 'text/html' });
-  return URL.createObjectURL(blob);
-}
-
-// Creates a data URI with the contents of 'message-target.html'. Use the
-// data URI as an iframe src, which creates a cross origin message target.
-async function create_message_target_data_uri(test) {
-  const iframe_html =
-    await create_message_target_html_without_subresources(test);
-  return `data:text/html,${encodeURIComponent(iframe_html)}`;
-}
-
-// Constructs a version of 'message-target.html' without any subresources.
-// Enables the creation of blob URLs, data URIs and iframe srcdocs re-using
-// the contents of 'message-target.html'.
-async function create_message_target_html_without_subresources(test) {
-  const test_helpers_script = await fetch_text('resources/test-helpers.js');
-
-  const messaging_helpers_script =
-    await fetch_text('resources/messaging-helpers.js');
-
-  const messaging_serialize_helpers_script =
-    await fetch_text('resources/messaging-serialize-helpers.js');
-
-  const message_target_script =
-    await fetch_text('resources/message-target.js');
-
-  // Get the inline script code from 'message-target.html'.
-  const iframe = await add_iframe(test, { src: 'resources/message-target.html' });
-  const iframe_script =
-    iframe.contentWindow.document.getElementById('inline_script').outerHTML;
-  iframe.remove();
-
-  return '<!DOCTYPE html>' +
-    `<script>${test_helpers_script}</script>` +
-    `<script>${messaging_serialize_helpers_script}</script>` +
-    `<script>${message_target_script}</script>` +
-    `${iframe_script}`;
-}
-
-async function fetch_text(url) {
-  const response = await fetch(url);
-  return await response.text();
-}
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-helpers.js
deleted file mode 100644
index 55fc04a..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-helpers.js
+++ /dev/null
@@ -1,187 +0,0 @@
-'use strict';
-
-// This script depends on the following script:
-//    /file-system-access/resources/test-helpers.js
-//    /service-workers/service-worker/resources/test-helpers.sub.js
-
-// Define the URL constants used for each type of message target, including
-// iframes and workers.
-const kDocumentMessageTarget = 'resources/message-target.html';
-const kSharedWorkerMessageTarget = 'resources/message-target-shared-worker.js';
-const kServiceWorkerMessageTarget =
-  'resources/message-target-service-worker.js';
-const kDedicatedWorkerMessageTarget =
-  'resources/message-target-dedicated-worker.js';
-
-function create_dedicated_worker(test, url) {
-  const dedicated_worker = new Worker(url);
-  test.add_cleanup(() => {
-    dedicated_worker.terminate();
-  });
-  return dedicated_worker;
-}
-
-async function create_service_worker(test, script_url, scope) {
-  const registration = await service_worker_unregister_and_register(
-    test, script_url, scope);
-  test.add_cleanup(() => {
-    return registration.unregister();
-  });
-  return registration;
-}
-
-// Creates an iframe and waits to receive a message from the iframe.
-// Valid |options| include src, srcdoc and sandbox, which mirror the
-// corresponding iframe element properties.
-async function add_iframe(test, options) {
-  const iframe = document.createElement('iframe');
-
-  if (options.sandbox !== undefined) {
-    iframe.sandbox = options.sandbox;
-  }
-
-  if (options.src !== undefined) {
-    iframe.src = options.src;
-  }
-
-  if (options.srcdoc !== undefined) {
-    iframe.srcdoc = options.srcdoc;
-  }
-
-  document.body.appendChild(iframe);
-  test.add_cleanup(() => {
-    iframe.remove();
-  });
-
-  await wait_for_loaded_message(self);
-  return iframe;
-}
-
-// Creates a child window using window.open() and waits to receive a message
-// from the child window.
-async function open_window(test, url) {
-  const child_window = window.open(url);
-  test.add_cleanup(() => {
-    child_window.close();
-  });
-  await wait_for_loaded_message(self);
-  return child_window;
-}
-
-// Wait until |receiver| gets a message event with the data set to 'LOADED'.
-// The postMessage() tests use messaging instead of the loaded event because
-// cross-origin child windows from window.open() do not dispatch the loaded
-// event to the parent window.
-async function wait_for_loaded_message(receiver) {
-  const message_promise = new Promise((resolve, reject) => {
-    receiver.addEventListener('message', message_event => {
-      if (message_event.data === 'LOADED') {
-        resolve();
-      } else {
-        reject('The message target must receive a "LOADED" message response.');
-      }
-    });
-  });
-  await message_promise;
-}
-
-// Sets up a new message channel. Sends one port to |target| and then returns
-// the other port.
-function create_message_channel(target, target_origin) {
-  const message_channel = new MessageChannel();
-
-  const message_data =
-    { type: 'receive-message-port', message_port: message_channel.port2 };
-  target.postMessage(
-    message_data,
-    {
-      transfer: [message_channel.port2],
-      targetOrigin: target_origin
-    });
-  message_channel.port1.start();
-  return message_channel.port1;
-}
-
-// Creates a variety of different FileSystemFileHandles for testing.
-async function create_file_system_handles(test, root) {
-  // Create some files to use with postMessage().
-  const empty_file = await createEmptyFile(test, 'empty-file', root);
-  const first_file = await createFileWithContents(
-    test, 'first-file-with-contents', 'first-text-content', root);
-  const second_file = await createFileWithContents(
-    test, 'second-file-with-contents', 'second-text-content', root);
-
-  // Create an empty directory to use with postMessage().
-  const empty_directory = await createDirectory(test, 'empty-directory', root);
-
-  // Create a directory containing both files and subdirectories to use
-  // with postMessage().
-  const directory_with_files =
-    await createDirectory(test, 'directory-with-files', root);
-  await createFileWithContents(test, 'first-file-in-directory',
-    'first-directory-text-content', directory_with_files);
-  await createFileWithContents(test, 'second-file-in-directory',
-    'second-directory-text-content', directory_with_files);
-  const subdirectory =
-    await createDirectory(test, 'subdirectory', directory_with_files);
-  await createFileWithContents(test, 'first-file-in-subdirectory',
-    'first-subdirectory-text-content', subdirectory);
-
-  return [
-    empty_file,
-    first_file,
-    second_file,
-    // Include the same FileSystemFileHandle twice.
-    second_file,
-    empty_directory,
-    // Include the Same FileSystemDirectoryHandle object twice.
-    empty_directory,
-    directory_with_files
-  ];
-}
-
-// Tests sending an array of FileSystemHandles to |target| with postMessage().
-// The array includes both FileSystemFileHandles and FileSystemDirectoryHandles.
-// After receiving the message, |target| accesses all cloned handles by
-// serializing the properties of each handle to a JavaScript object.
-//
-// |target| then responds with the resulting array of serialized handles. The
-// response also includes the array of cloned handles, which creates more
-// clones. After receiving the response, this test runner verifies that both
-// the serialized handles and the cloned handles contain the expected properties.
-async function do_post_message_test(
-  test, root_dir, receiver, target, target_origin) {
-  // Create and send the handles to |target|.
-  const handles =
-    await create_file_system_handles(test, root_dir, target, target_origin);
-  target.postMessage(
-    { type: 'receive-file-system-handles', cloned_handles: handles },
-    { targetOrigin: target_origin });
-
-  // Wait for |target| to respond with results.
-  const event_watcher = new EventWatcher(test, receiver, 'message');
-  const message_event = await event_watcher.wait_for('message');
-  const response = message_event.data;
-
-  assert_equals(response.type, 'receive-serialized-file-system-handles',
-    'The test runner must receive a "serialized-file-system-handles" ' +
-    `message response. Actual response: ${response}`);
-
-  // Verify the results.
-  const expected_serialized_handles = await serialize_handles(handles);
-
-  assert_equals_serialized_handles(
-    response.serialized_handles, expected_serialized_handles);
-
-  await assert_equals_cloned_handles(response.cloned_handles, handles);
-}
-
-// Runs the same test as do_post_message_test(), but uses a MessagePort.
-// This test starts by establishing a message channel between the test runner
-// and |target|. Afterwards, the test sends FileSystemHandles through the
-// message port channel.
-async function do_message_port_test(test, root_dir, target, target_origin) {
-  const message_port = create_message_channel(target, target_origin);
-  await do_post_message_test(
-      test, root_dir, /*receiver=*/ message_port, /*target=*/ message_port);
-}
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-serialize-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-serialize-helpers.js
deleted file mode 100644
index ada68f43..0000000
--- a/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-serialize-helpers.js
+++ /dev/null
@@ -1,230 +0,0 @@
-'use strict';
-
-// This script depends on the following script:
-//    /file-system-access/resources/test-helpers.js
-
-// Serializes an array of FileSystemHandles where each element can be either a
-// FileSystemFileHandle or FileSystemDirectoryHandle.
-async function serialize_handles(handle_array) {
-  const serialized_handle_array = [];
-  for (let i = 0; i < handle_array.length; ++i) {
-    serialized_handle_array.push(await serialize_handle(handle_array[i]));
-  }
-  return serialized_handle_array;
-}
-
-// Serializes either a FileSystemFileHandle or FileSystemDirectoryHandle.
-async function serialize_handle(handle) {
-  switch (handle.kind) {
-    case 'directory':
-      return await serialize_file_system_directory_handle(handle);
-    case 'file':
-      return await serialize_file_system_file_handle(handle);
-    default:
-      throw 'Object is not a FileSystemFileHandle or ' +
-          `FileSystemDirectoryHandle ${handle}`;
-  }
-}
-
-// Creates a dictionary for a FileSystemHandle base, which contains
-// serialized properties shared by both FileSystemFileHandle and
-// FileSystemDirectoryHandle.
-async function serialize_file_system_handle(handle) {
-  const read_permission =
-    await handle.queryPermission({ mode: 'read' });
-
-  const write_permission =
-    await handle.queryPermission({ mode: 'readwrite' })
-
-  return {
-    kind: handle.kind,
-    name: handle.name,
-    read_permission,
-    write_permission
-  };
-}
-
-// Create a dictionary with each property value in FileSystemFileHandle.
-// Also, reads the contents of the file to include with the returned
-// dictionary.  Example output:
-// {
-//   kind: "file",
-//   name: "example-file-name"
-//   read_permission: "granted",
-//   write_permission: "granted",
-//   contents: "example-file-contents"
-// }
-async function serialize_file_system_file_handle(file_handle) {
-  const contents = await getFileContents(file_handle);
-
-  const serialized_file_system_handle =
-    await serialize_file_system_handle(file_handle);
-
-  return Object.assign(serialized_file_system_handle, { contents });
-}
-
-// Create a dictionary with each property value in FileSystemDirectoryHandle.
-// Example output:
-// {
-//   kind: "directory",
-//   name: "example-directory-name"
-//   read_permission: "granted",
-//   write_permission: "granted",
-//   files: [<first serialized file>, ...]
-//   directories: [<first serialized subdirectory>, ...]
-// }
-async function serialize_file_system_directory_handle(directory_handle) {
-  // Serialize the contents of the directory.
-  const serialized_files = [];
-  const serialized_directories = [];
-  for await (const child_handle of directory_handle.values()) {
-    const serialized_child_handle = await serialize_handle(child_handle);
-    if (child_handle.kind === "directory") {
-      serialized_directories.push(serialized_child_handle);
-    } else {
-      serialized_files.push(serialized_child_handle);
-    }
-  }
-
-  // Order the serialized contents of the directory by name.
-  serialized_files.sort((left, right) => {
-    return left.name.localeCompare(right.name);
-  });
-  serialized_directories.sort((left, right) => {
-    return left.name.localeCompare(right.name);
-  });
-
-  // Serialize the directory's common properties shared by all
-  // FileSystemHandles.
-  const serialized_file_system_handle =
-    await serialize_file_system_handle(directory_handle);
-
-  return Object.assign(
-    serialized_file_system_handle,
-    { files: serialized_files, directories: serialized_directories });
-}
-
-// Verifies |left_array| is a clone of |right_array| where each element
-// is a cloned FileSystemHandle with the same properties and contents.
-async function assert_equals_cloned_handles(left_array, right_array) {
-  assert_equals(left_array.length, right_array.length,
-    'Each array of FileSystemHandles must have the same length');
-
-  for (let i = 0; i < left_array.length; ++i) {
-    assert_not_equals(left_array[i], right_array[i],
-      'Clones must create new FileSystemHandle instances.');
-
-    const left_serialized = await serialize_handle(left_array[i]);
-    const right_serialized = await serialize_handle(right_array[i]);
-    assert_equals_serialized_handle(left_serialized, right_serialized);
-  }
-}
-
-// Verifies |left_array| is the same as |right_array| where each element
-// is a serialized FileSystemHandle with the same properties.
-function assert_equals_serialized_handles(left_array, right_array) {
-  assert_equals(left_array.length, right_array.length,
-    'Each array of serialized handles must have the same length');
-
-  for (let i = 0; i < left_array.length; ++i) {
-    assert_equals_serialized_handle(left_array[i], right_array[i]);
-  }
-}
-
-// Verifies each property of a serialized FileSystemFileHandle or
-// FileSystemDirectoryHandle.
-function assert_equals_serialized_handle(left, right) {
-  switch (left.kind) {
-    case 'directory':
-      assert_equals_serialized_file_system_directory_handle(left, right);
-      break;
-    case 'file':
-      assert_equals_serialized_file_system_file_handle(left, right);
-      break;
-    default:
-      throw 'Object is not a FileSystemFileHandle or ' +
-          `FileSystemDirectoryHandle ${left}`;
-  }
-}
-
-// Compares the output of serialize_file_system_handle() for
-// two FileSystemHandles.
-function assert_equals_serialized_file_system_handle(left, right) {
-  assert_equals(left.kind, right.kind,
-    'Each FileSystemHandle instance must use the expected "kind".');
-
-  assert_equals(left.name, right.name,
-    'Each FileSystemHandle instance must use the expected "name" ' +
-    ' property.');
-
-  assert_equals(left.read_permission, right.read_permission,
-    'Each FileSystemHandle instance must have the expected read ' +
-    ' permission.');
-
-  assert_equals(left.write_permission, right.write_permission,
-    'Each FileSystemHandle instance must have the expected write ' +
-    ' permission.');
-}
-
-// Compares the output of serialize_file_system_file_handle()
-// for two FileSystemFileHandle.
-function assert_equals_serialized_file_system_file_handle(left, right) {
-  assert_equals_serialized_file_system_handle(left, right);
-  assert_equals(left.contents, right.contents,
-    'Each FileSystemFileHandle instance must have the same contents.');
-}
-
-// Compares the output of serialize_file_system_directory_handle()
-// for two FileSystemDirectoryHandles.
-function assert_equals_serialized_file_system_directory_handle(left, right) {
-  assert_equals_serialized_file_system_handle(left, right);
-
-  assert_equals(left.files.length, right.files.length,
-    'Each FileSystemDirectoryHandle must contain the same number of ' +
-    'file children');
-
-  for (let i = 0; i < left.files.length; ++i) {
-    assert_equals_serialized_file_system_file_handle(
-      left.files[i], right.files[i]);
-  }
-
-  assert_equals(left.directories.length, right.directories.length,
-    'Each FileSystemDirectoryHandle must contain the same number of ' +
-    'directory children');
-
-  for (let i = 0; i < left.directories.length; ++i) {
-    assert_equals_serialized_file_system_directory_handle(
-      left.directories[i], right.directories[i]);
-  }
-}
-
-// Creates a dictionary with interesting property values from MessageEvent.
-function serialize_message_error_event(message_error_event) {
-  return {
-    data: message_error_event.data,
-    origin: message_error_event.origin,
-    last_event_id: message_error_event.lastEventId,
-    has_source: (message_error_event.source !== null),
-    ports_length: message_error_event.ports.length
-  };
-}
-
-// Compares the output of serialize_message_error_event() with an
-// expected result.
-function assert_equals_serialized_message_error_event(
-  serialized_event, expected_origin, expected_has_source) {
-  assert_equals(serialized_event.data, null,
-    'The message error event must set the "data" property to null.');
-
-  assert_equals(serialized_event.origin, expected_origin,
-    'The message error event must have the expected "origin" property.');
-
-  assert_equals(serialized_event.last_event_id, "",
-    'The message error event must set the "lastEventId" property to the empty string.');
-
-  assert_equals(serialized_event.has_source, expected_has_source,
-    'The message error event must have the expected "source" property.');
-
-  assert_equals(serialized_event.ports_length, 0,
-    'The message error event must not contain any message ports.');
-}
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini
index 9b62995..526cf3d7 100644
--- a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini
+++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/open-close/open-features-is-popup-condition.html.ini
@@ -1,2 +1,5 @@
 [open-features-is-popup-condition.html?single-1]
   expected: [TIMEOUT, ERROR]
+
+[open-features-is-popup-condition.html?single-2]
+  expected: [TIMEOUT, 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 0c518e00..ca69076 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,4 +1,6 @@
 [property-frames.https.html]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [same-origin > w => w.frames]
     expected: FAIL
 
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 4f6dc5095..a9f4375 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,6 +9,8 @@
 
 
 [iframe-popup.https.html?9-last]
+  expected:
+    if product == "chrome": [ERROR, OK]
   [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/dom/elements/global-attributes/translate-non-html-translation-mode.html b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/translate-non-html-translation-mode.html
new file mode 100644
index 0000000..3bd7f6ac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/dom/elements/global-attributes/translate-non-html-translation-mode.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Non-HTML elements have a translation mode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  test(() => {
+    const svgContainer = document.createElement("svg");
+    const foreignObject = document.createElement("foreignObject");
+    svgContainer.appendChild(foreignObject);
+    const div = document.createElement("div");
+    foreignObject.appendChild(div);
+
+    assert_true(div.translate);
+  }, 'Non-HTML elements default to translate-enabled');
+
+  test(() => {
+    const outerDiv = document.createElement("div");
+    outerDiv.translate = true;
+    assert_true(outerDiv.translate);
+
+    const svgContainer = document.createElement("svg");
+    outerDiv.appendChild(svgContainer);
+    const foreignObject = document.createElement("foreignObject");
+    svgContainer.appendChild(foreignObject);
+    const div = document.createElement("div");
+    foreignObject.appendChild(div);
+
+    assert_true(div.translate);
+  }, "Non-HTML elements inherit their parent's translation-enabled state");
+
+  test(() => {
+    const outerDiv = document.createElement("div");
+    outerDiv.translate = false;
+    assert_false(outerDiv.translate);
+
+    const svgContainer = document.createElement("svg");
+    outerDiv.appendChild(svgContainer);
+    const foreignObject = document.createElement("foreignObject");
+    svgContainer.appendChild(foreignObject);
+    const div = document.createElement("div");
+    foreignObject.appendChild(div);
+
+    assert_false(div.translate);
+  }, "Non-HTML elements inherit their parent's no-translation state");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/payment-handler/can-make-payment-event.https.html.ini b/third_party/blink/web_tests/external/wpt/payment-handler/can-make-payment-event.https.html.ini
index dcbbfd60..dd51e19ec 100644
--- a/third_party/blink/web_tests/external/wpt/payment-handler/can-make-payment-event.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/payment-handler/can-make-payment-event.https.html.ini
@@ -16,3 +16,24 @@
 
   [If CanMakePaymentEvent.respondWith(Promise.resolve(false)) is called, then the payment method is not supported.]
     expected: FAIL
+
+  [If CanMakePaymentEvent.respondWith(Promise.reject(error)) is called, then canMakePayment() still returns true and the app can still be invoked.]
+    expected: FAIL
+
+  [If CanMakePaymentEvent.respondWith(Promise.resolve(false)) is called, then canMakePayment() still returns true and the app can still be invoked.]
+    expected: FAIL
+
+  [If CanMakePaymentEvent.respondWith(Promise.resolve(true)) is called, then canMakePayment() returns true and the app can be invoked.]
+    expected: FAIL
+
+  [If CanMakePaymentEvent.respondWith(true) is called, then canMakePayment() returns true and the app can be invoked.]
+    expected: FAIL
+
+  [If a payment handler is not installed and cannot be installed just-in-time, then the payment method is not supported.]
+    expected: FAIL
+
+  [If CanMakePaymentEvent.respondWith(false) is called, then canMakePayment() still returns true and the app can still be invoked.]
+    expected: FAIL
+
+  [If a payment handler is not installed, but can be installed just-in-time, then the payment method is supported.]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-attributes.tentative.window.js.ini b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-attributes.tentative.window.js.ini
new file mode 100644
index 0000000..d1e2fdf7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-attributes.tentative.window.js.ini
@@ -0,0 +1,3 @@
+[performance-navigation-timing-attributes.tentative.window.html]
+  [RemoteContextHelper navigation using BFCache]
+    expected: 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 9d13735..2faeab3 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 (flag_specific == "") and (product == "content_shell") and (os == "win"): [PASS, FAIL]
-      if (flag_specific == "") and (product == "chrome"): FAIL
+      if (os == "linux") and (version == "trusty") and (product == "chrome"): FAIL
+      if (os == "linux") and (version == "Ubuntu 18.04"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js.ini b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js.ini
new file mode 100644
index 0000000..6da875227
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js.ini
@@ -0,0 +1,6 @@
+[requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.html]
+  expected:
+    if product == "chrome": OK
+    TIMEOUT
+  [Self-initiated same-origin navigations preserve storage access]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js.ini b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js.ini
new file mode 100644
index 0000000..f5f6fcd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js.ini
@@ -0,0 +1,3 @@
+[requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.html]
+  [Grants have per-frame scope]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/subapps/add-error.tentative.https.html.ini b/third_party/blink/web_tests/external/wpt/subapps/add-error.tentative.https.html.ini
index a14f879..e76639a1 100644
--- a/third_party/blink/web_tests/external/wpt/subapps/add-error.tentative.https.html.ini
+++ b/third_party/blink/web_tests/external/wpt/subapps/add-error.tentative.https.html.ini
@@ -13,3 +13,6 @@
 
   [Too many subapps at once.]
     expected: FAIL
+
+  [API supports only root-relative paths.]
+    expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/svg/painting/reftests/fallback-001.svg b/third_party/blink/web_tests/external/wpt/svg/painting/reftests/fallback-001.svg
new file mode 100644
index 0000000..e2788e5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/painting/reftests/fallback-001.svg
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml">
+  <title>SVG paint server: without fallback color nothing is painted</title>
+  <h:link rel="match" href="../../pservers/reftests/reference/green-100x100.svg"/>
+  <rect width="100" height="100" fill="green"/>
+  <rect width="100" height="100" fill="url(#null)"/>
+</svg>
diff --git a/third_party/blink/web_tests/external/wpt/svg/painting/reftests/fallback-002.svg b/third_party/blink/web_tests/external/wpt/svg/painting/reftests/fallback-002.svg
new file mode 100644
index 0000000..6180cb2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/painting/reftests/fallback-002.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml">
+  <title>SVG paint server: paint fallback color</title>
+  <h:link rel="match" href="../../pservers/reftests/reference/green-100x100.svg"/>
+  <rect width="100" height="100" fill="url(#null) green"/>
+</svg>
diff --git a/third_party/blink/web_tests/fast/backgrounds/svg-as-mask-expected.png b/third_party/blink/web_tests/fast/backgrounds/svg-as-mask-expected.png
index 9370d2f..2cea9b1 100644
--- a/third_party/blink/web_tests/fast/backgrounds/svg-as-mask-expected.png
+++ b/third_party/blink/web_tests/fast/backgrounds/svg-as-mask-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/dynamic/anonymous-block-layer-lost-expected.png b/third_party/blink/web_tests/fast/dynamic/anonymous-block-layer-lost-expected.png
index f87d11b..16b3506 100644
--- a/third_party/blink/web_tests/fast/dynamic/anonymous-block-layer-lost-expected.png
+++ b/third_party/blink/web_tests/fast/dynamic/anonymous-block-layer-lost-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/layers/add-layer-with-nested-stacking-expected.png b/third_party/blink/web_tests/fast/layers/add-layer-with-nested-stacking-expected.png
index 6cda17ad..130b991b 100644
--- a/third_party/blink/web_tests/fast/layers/add-layer-with-nested-stacking-expected.png
+++ b/third_party/blink/web_tests/fast/layers/add-layer-with-nested-stacking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/layers/opacity-stacking-expected.png b/third_party/blink/web_tests/fast/layers/opacity-stacking-expected.png
index f04e03df..7832ca71 100644
--- a/third_party/blink/web_tests/fast/layers/opacity-stacking-expected.png
+++ b/third_party/blink/web_tests/fast/layers/opacity-stacking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/multicol/transform-inside-opacity-expected.png b/third_party/blink/web_tests/fast/multicol/transform-inside-opacity-expected.png
index 5e34c7e3..2d6765af 100644
--- a/third_party/blink/web_tests/fast/multicol/transform-inside-opacity-expected.png
+++ b/third_party/blink/web_tests/fast/multicol/transform-inside-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/reflections/reflection-masks-opacity-expected.png b/third_party/blink/web_tests/fast/reflections/reflection-masks-opacity-expected.png
index a494426..8982998 100644
--- a/third_party/blink/web_tests/fast/reflections/reflection-masks-opacity-expected.png
+++ b/third_party/blink/web_tests/fast/reflections/reflection-masks-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap-expected.html b/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap-expected.html
index 9e29dc74..b5ffb23 100644
--- a/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap-expected.html
+++ b/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap-expected.html
@@ -1,2 +1,2 @@
 <!DOCTYPE html>
-<div style="width:100px; height:100px; background:green; opacity:0.5;"></div>
+<div style="width:100px; height:100px; background:rgb(128,192,128);"></div>
diff --git a/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap.html b/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap.html
index d1cd48c..8f7db59 100644
--- a/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap.html
+++ b/third_party/blink/web_tests/fast/sub-pixel/save-layer-bounds-should-snap.html
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
 <div style="transform:scale(2); transform-origin:0 0; width:99px; height:99px;">
-  <div style="width:50%; height:50%; background:green; opacity:0.501;"></div>
+  <div style="width:50%; height:50%; background:green; opacity:0.5;"></div>
 </div>
diff --git a/third_party/blink/web_tests/flag-specific/disable-site-isolation-trials/fast/sub-pixel/save-layer-bounds-should-snap-expected.png b/third_party/blink/web_tests/flag-specific/disable-site-isolation-trials/fast/sub-pixel/save-layer-bounds-should-snap-expected.png
deleted file mode 100644
index e69de29..0000000
--- a/third_party/blink/web_tests/flag-specific/disable-site-isolation-trials/fast/sub-pixel/save-layer-bounds-should-snap-expected.png
+++ /dev/null
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/block/float/float-in-float-painting-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/block/float/float-in-float-painting-expected.png
index 6056e3c..26ed246 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/fast/block/float/float-in-float-painting-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/block/float/float-in-float-painting-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/select/basic-selects-expected.png
index 4c1cdcf..b3668e22 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index 9d91a47..4b1abbec 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/svg/foreignObject/filter-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/svg/foreignObject/filter-expected.png
index d126177..0c4580e 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/svg/foreignObject/filter-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/svg/foreignObject/filter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/transforms/transform-on-inline-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/transforms/transform-on-inline-expected.png
index 3cb2b6ac..b51c39bc 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/transforms/transform-on-inline-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/transforms/transform-on-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/complex-text-opacity-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/complex-text-opacity-expected.png
index 149f4a70..89821c0a7 100644
--- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/complex-text-opacity-expected.png
+++ b/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/complex-text-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/css3/blending/effect-background-blend-mode-stacking-expected.png b/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/css3/blending/effect-background-blend-mode-stacking-expected.png
index 186469b..4b9e61e 100644
--- a/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/css3/blending/effect-background-blend-mode-stacking-expected.png
+++ b/third_party/blink/web_tests/flag-specific/skia-vulkan-swiftshader/css3/blending/effect-background-blend-mode-stacking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/devtools/layers/layer-canvas-log-expected.txt b/third_party/blink/web_tests/http/tests/devtools/layers/layer-canvas-log-expected.txt
index 9a38b0c6..c458c28 100644
--- a/third_party/blink/web_tests/http/tests/devtools/layers/layer-canvas-log-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/layers/layer-canvas-log-expected.txt
@@ -44,7 +44,7 @@
         method : "drawRect"
         params : {
             paint : {
-                color : "#80000000"
+                color : "#7F000000"
                 flags : "AntiAlias"
                 strokeCap : "Butt"
                 strokeJoin : "Miter"
diff --git a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view-expected.txt b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view-expected.txt
index 613fcc4..f98604c7 100644
--- a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view-expected.txt
@@ -208,12 +208,10 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -225,14 +223,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     script.js
@@ -250,15 +245,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -282,14 +274,11 @@
       script2.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   script.js
@@ -304,15 +293,12 @@
     script2.js
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
@@ -374,12 +360,10 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -391,14 +375,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     script.js
@@ -416,15 +397,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -448,14 +426,11 @@
       script2.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   script.js
@@ -470,15 +445,12 @@
     script2.js
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
@@ -506,13 +478,11 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -524,14 +494,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     script.js
@@ -550,15 +517,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -585,14 +549,11 @@
       script2.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   script.js
@@ -608,15 +569,12 @@
     script2.js
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
@@ -647,14 +605,12 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js
   script.js?a=2
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -666,14 +622,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     script.js
@@ -693,15 +646,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -729,14 +679,11 @@
       script2.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   script.js
@@ -753,15 +700,12 @@
     script2.js
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
@@ -793,16 +737,14 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js
   script.js
   script.js?a=1
   script.js?a=2
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -814,14 +756,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     script.js
@@ -843,15 +782,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -883,14 +819,11 @@
       script2.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   script.js
@@ -909,15 +842,12 @@
     script2.js
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
@@ -952,19 +882,17 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo.js
   foo.js
   foo.js
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js
   script.js
   script.js?a=1
   script.js?a=2
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -976,14 +904,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     foo.js
@@ -1008,15 +933,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -1054,14 +976,11 @@
       script2.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   foo.js
@@ -1083,15 +1002,12 @@
     script2.js
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
@@ -1133,19 +1049,17 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo.js
   foo.js
   foo.js
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js
   script.js
   script.js?a=1
   script.js?a=2
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -1157,14 +1071,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     foo.js
@@ -1189,15 +1100,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -1235,14 +1143,11 @@
       script2.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   foo.js
@@ -1264,15 +1169,12 @@
     script2.js
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
@@ -1348,19 +1250,17 @@
 top
   (index)
   ?a=b
-  ?a=b
   foo.js
   foo.js
   foo.js
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   script.js
   script.js
   script.js
   script.js?a=1
   script.js?a=2
   script.js?a=2
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   white space.html
   childframe (post-message-listener.html)
     script.js
@@ -1368,14 +1268,11 @@
 Sources:
 -------- Setting mode: [frame/domain]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     (index)
     ?a=b
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
     white space.html
   localhost:8080
     foo.js
@@ -1394,15 +1291,12 @@
 Sources:
 -------- Setting mode: [frame/domain/folder]
 top
-  (no domain)
-    ?a=b
-    very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
   example.com
     path with spaces
       white space.html
-    the%2fdir
+    the/dir
       foo?bar=100%&baz=a%20%2fb
-      foo?bar=100&baz=a %2fb
+      foo?bar=100&baz=a%20%2fb
     (index)
     ?a=b
   localhost:8080
@@ -1432,14 +1326,11 @@
           script.js
 Sources:
 -------- Setting mode: [domain]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   (index)
   ?a=b
   foo?bar=100%&baz=a%20%2fb
-  foo?bar=100&baz=a %2fb
+  foo?bar=100&baz=a%20%2fb
   white space.html
 localhost:8080
   foo.js
@@ -1455,15 +1346,12 @@
   script.js?a=2
 Sources:
 -------- Setting mode: [domain/folder]
-(no domain)
-  ?a=b
-  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo…
 example.com
   path with spaces
     white space.html
-  the%2fdir
+  the/dir
     foo?bar=100%&baz=a%20%2fb
-    foo?bar=100&baz=a %2fb
+    foo?bar=100&baz=a%20%2fb
   (index)
   ?a=b
 localhost:8080
diff --git a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view.js b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view.js
index ed9eee0..41d4214 100644
--- a/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view.js
+++ b/third_party/blink/web_tests/http/tests/devtools/sources/debugger/navigator-view.js
@@ -102,10 +102,7 @@
       'http://example.com/the%2fdir/foo?bar=100%&baz=a%20%2fb', false);
   await addUISourceCode(
       'http://example.com/path%20with%20spaces/white%20space.html', false);
-  await addUISourceCode('?a=b', false);
-  await addUISourceCode(
-      'very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_url',
-      false);
+
   SourcesTestRunner.dumpNavigatorViewInAllModes(sourcesNavigatorView);
   SourcesTestRunner.dumpNavigatorViewInAllModes(contentScriptsNavigatorView);
 
diff --git a/third_party/blink/web_tests/http/tests/devtools/tabbed-editors-history-expected.txt b/third_party/blink/web_tests/http/tests/devtools/tabbed-editors-history-expected.txt
deleted file mode 100644
index 398a166..0000000
--- a/third_party/blink/web_tests/http/tests/devtools/tabbed-editors-history-expected.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Tests history saving logic in TabbedEditorContainer.
-
-  history = []
-  history = [{"url":"url_1"}]
-  history = [{"url":"url_2"},{"url":"url_1"}]
-  history = [{"url":"url_3"},{"url":"url_2"},{"url":"url_1"}]
-  history = [{"url":"url_2"},{"url":"url_3"},{"url":"url_1"}]
-  history = [{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_11"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_12"},{"url":"url_11"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_13"},{"url":"url_12"},{"url":"url_11"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_12"},{"url":"url_13"},{"url":"url_11"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_11"},{"url":"url_12"},{"url":"url_13"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_11","selectionRange":{"startLine":15,"startColumn":5,"endLine":15,"endColumn":10},"scrollLineNumber":10},{"url":"url_12"},{"url":"url_13"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_12"},{"url":"url_13"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_12"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_14"},{"url":"url_12"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_15"},{"url":"url_14"},{"url":"url_12"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_16"},{"url":"url_15"},{"url":"url_14"},{"url":"url_12"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_15"},{"url":"url_14"},{"url":"url_12"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_14"},{"url":"url_12"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_12"},{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_1"},{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_2"},{"url":"url_3"}]
-  history = [{"url":"url_3"}]
-  history = []
-
diff --git a/third_party/blink/web_tests/http/tests/devtools/tabbed-editors-history.js b/third_party/blink/web_tests/http/tests/devtools/tabbed-editors-history.js
deleted file mode 100644
index 506c2a2..0000000
--- a/third_party/blink/web_tests/http/tests/devtools/tabbed-editors-history.js
+++ /dev/null
@@ -1,68 +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.
-
-(async function() {
-  TestRunner.addResult(`Tests history saving logic in TabbedEditorContainer.\n`);
-  await TestRunner.loadLegacyModule('sources'); await TestRunner.loadTestModule('sources_test_runner');
-
-  function dumpHistory(history) {
-    TestRunner.addResult('  history = ' + JSON.stringify(history.serializeToObject()) + '');
-  }
-
-  function updateScrollAndSelectionAndDump(history, url, scrollLineNumber, selection) {
-    history.updateScrollLineNumber(url, scrollLineNumber);
-    history.updateSelectionRange(url, selection);
-    dumpHistory(history);
-  }
-
-  function updateAndDump(history, urls) {
-    history.update(urls);
-    dumpHistory(history);
-  }
-
-  function removeAndDump(history, url) {
-    history.remove(url);
-    dumpHistory(history);
-  }
-
-  function url(index) {
-    return 'url_' + index;
-  }
-
-  var history = new Sources.TabbedEditorContainer.History([]);
-
-  dumpHistory(history);
-  // Emulate opening of several tabs.
-  updateAndDump(history, [url(1)]);
-  updateAndDump(history, [url(2), url(1)]);
-  updateAndDump(history, [url(3), url(2), url(1)]);
-  // Emulate switching between tabs.
-  updateAndDump(history, [url(2), url(3), url(1)]);
-  updateAndDump(history, [url(1), url(2), url(3)]);
-  // Emulate opening of several tabs from another page.
-  updateAndDump(history, [url(11)]);
-  updateAndDump(history, [url(12), url(11)]);
-  updateAndDump(history, [url(13), url(12), url(11)]);
-  // ... and switching between them.
-  updateAndDump(history, [url(12), url(13), url(11)]);
-  updateAndDump(history, [url(11), url(12), url(13)]);
-  updateScrollAndSelectionAndDump(history, url(11), 10, new TextUtils.TextRange(15, 5, 15, 10));
-  // Now close some tabs.
-  removeAndDump(history, url(11));
-  removeAndDump(history, url(13));
-  // Now open some other instead of them.
-  updateAndDump(history, [url(14), url(12)]);
-  updateAndDump(history, [url(15), url(14), url(12)]);
-  updateAndDump(history, [url(16), url(15), url(14), url(12)]);
-  // Close all of them one by one.
-  removeAndDump(history, url(16));
-  removeAndDump(history, url(15));
-  removeAndDump(history, url(14));
-  removeAndDump(history, url(12));
-  removeAndDump(history, url(1));
-  removeAndDump(history, url(2));
-  removeAndDump(history, url(3));
-
-  TestRunner.completeTest();
-})();
diff --git a/third_party/blink/web_tests/inspector-protocol/overlay/overlay-viewport.js b/third_party/blink/web_tests/inspector-protocol/overlay/overlay-viewport.js
index 4d5b960..a12a94e0 100644
--- a/third_party/blink/web_tests/inspector-protocol/overlay/overlay-viewport.js
+++ b/third_party/blink/web_tests/inspector-protocol/overlay/overlay-viewport.js
@@ -19,8 +19,7 @@
     });
   }
 
-  async function getViewportResetCommands(count) {
-    await waitForAnimationFrame();
+  async function takeViewportResetCommands(count) {
     return await session.evaluate((count) => {
       return internals.evaluateInInspectorOverlay(`(function () {
         const commands = window.commands;
@@ -40,11 +39,18 @@
   });
 
   async function runTest(label, metrics, commandCount) {
+    // Consume another frame and delete any commands that might come from
+    // a previous test. On Mac and Windows, an additional frame might be
+    // rendered during the call to setDeviceMetricsOverride resulting in overlay
+    // commands using the previous emulation params being recorded.
+    await waitForAnimationFrame();
+    await takeViewportResetCommands(0);
     const result = await dp.Emulation.setDeviceMetricsOverride(metrics);
+    await waitForAnimationFrame();
     testRunner.log('Response to setDeviceMetricsOverride:');
     testRunner.log(result);
     testRunner.log(label);
-    testRunner.log(await getViewportResetCommands(commandCount));
+    testRunner.log(await takeViewportResetCommands(commandCount));
   }
 
   await runTest('Initial device metrics:', {
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.png b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.png
index dc85ee8..32a197c 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.png
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt
index 377e689..f289ace 100644
--- a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt
@@ -1,7 +1,7 @@
 {
   "layers": [
     {
-      "name": "Scrolling background of LayoutNGView #document",
+      "name": "Scrolling background of LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF"
diff --git a/third_party/blink/web_tests/paint/invalidation/multicol/column-float-under-stacked-inline-expected.png b/third_party/blink/web_tests/paint/invalidation/multicol/column-float-under-stacked-inline-expected.png
index a92e6a8..c6cabcbb 100644
--- a/third_party/blink/web_tests/paint/invalidation/multicol/column-float-under-stacked-inline-expected.png
+++ b/third_party/blink/web_tests/paint/invalidation/multicol/column-float-under-stacked-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.png b/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.png
index ec6131b..7c45db8b 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.png
+++ b/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.txt
index 6f2c37f9..94d1a9a 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/svg/js-update-bounce-expected.txt
@@ -1,7 +1,7 @@
 {
   "layers": [
     {
-      "name": "Scrolling background of LayoutNGView #document",
+      "name": "Scrolling background of LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
diff --git a/third_party/blink/web_tests/paint/transparency/compositing-alpha-fold-crash-expected.png b/third_party/blink/web_tests/paint/transparency/compositing-alpha-fold-crash-expected.png
index 401c9e0..f9f0ec5c 100644
--- a/third_party/blink/web_tests/paint/transparency/compositing-alpha-fold-crash-expected.png
+++ b/third_party/blink/web_tests/paint/transparency/compositing-alpha-fold-crash-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png b/third_party/blink/web_tests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png
index 5f93470..6512bdce 100644
--- a/third_party/blink/web_tests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png
+++ b/third_party/blink/web_tests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png
Binary files differ
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 10c5c95b..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/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/blink/web_tests/platform/linux/css3/blending/background-blend-mode-tiled-gradient-expected.png
deleted file mode 100644
index d3e3d2b..0000000
--- a/third_party/blink/web_tests/platform/linux/css3/blending/background-blend-mode-tiled-gradient-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-expected.png b/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-expected.png
index d703a14..fb1aa1d 100644
--- a/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-tiled-expected.png b/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-tiled-expected.png
index d2e9d1e..c60ce74 100644
--- a/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-tiled-expected.png
+++ b/third_party/blink/web_tests/platform/linux/css3/blending/effect-background-blend-mode-tiled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/backgrounds/opacity-on-document-element-expected.png b/third_party/blink/web_tests/platform/linux/fast/backgrounds/opacity-on-document-element-expected.png
index 11d8f13..ea63cff 100644
--- a/third_party/blink/web_tests/platform/linux/fast/backgrounds/opacity-on-document-element-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/backgrounds/opacity-on-document-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/block/float/float-in-float-painting-expected.png b/third_party/blink/web_tests/platform/linux/fast/block/float/float-in-float-painting-expected.png
index 8cfb9b1..ca050cb 100644
--- a/third_party/blink/web_tests/platform/linux/fast/block/float/float-in-float-painting-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/block/float/float-in-float-painting-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers-expected.png
index 317086eb..199463e4 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers2-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers2-expected.png
index 8fda8f4..86e2c30 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/ZeroOpacityLayers2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png
index cfa28df9a..f1f8931 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png
index d8141490..fbfeaac 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/calendar-picker/date-picker-month-selection-changed-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index f8854bd3..61ae5d3c 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 7cf4eee..a0c45fe 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index 832e404e..aa55c445 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/indeterminate-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/indeterminate-expected.png
index 63ffb59..4aaed41ca 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/indeterminate-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/indeterminate-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png
index b8c234f..212ae019 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png
index c0964101..90a2c00c 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png
index de1ccc5..77b1f27 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png
index 89ae6b61..8cf2461 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/layers/opacity-outline-expected.png b/third_party/blink/web_tests/platform/linux/fast/layers/opacity-outline-expected.png
index 75d08d4..a18ab6d 100644
--- a/third_party/blink/web_tests/platform/linux/fast/layers/opacity-outline-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/layers/opacity-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/layers/opacity-transforms-expected.png b/third_party/blink/web_tests/platform/linux/fast/layers/opacity-transforms-expected.png
index 3979ff18..0933ee6 100644
--- a/third_party/blink/web_tests/platform/linux/fast/layers/opacity-transforms-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/layers/opacity-transforms-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/multicol/layers-in-multicol-expected.png b/third_party/blink/web_tests/platform/linux/fast/multicol/layers-in-multicol-expected.png
index cb5d630..ee4d480 100644
--- a/third_party/blink/web_tests/platform/linux/fast/multicol/layers-in-multicol-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/multicol/layers-in-multicol-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/overflow/007-expected.png b/third_party/blink/web_tests/platform/linux/fast/overflow/007-expected.png
index 6ebcab2..d60f328 100644
--- a/third_party/blink/web_tests/platform/linux/fast/overflow/007-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/overflow/007-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 433576f..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/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/backgr_layers-opacity-collapsed-border-expected.png
index 89aa8b1a..9f41f1d 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/backgr_layers-opacity-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/backgr_layers-opacity-expected.png
index 89aa8b1a..9f41f1d 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/backgr_layers-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/backgr_layers-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/dynamic-caption-add-before-child-expected.png
index 9ed07d15..0e7c8e3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/dynamic-caption-add-before-child-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/dynamic-caption-add-before-child-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/multiple-captions-display-expected.png
index a0f7699..3a3808f9 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/multiple-captions-display-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/multiple-captions-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/table/overflowHidden-expected.png b/third_party/blink/web_tests/platform/linux/fast/table/overflowHidden-expected.png
index a1e978f..d92bf244 100644
--- a/third_party/blink/web_tests/platform/linux/fast/table/overflowHidden-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/table/overflowHidden-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/platform/linux/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index 65e38142..b9aaf65 100644
--- a/third_party/blink/web_tests/platform/linux/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/platform/linux/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/linux/media/audio-controls-rendering-expected.png
index 35bd351..a11bb1a 100644
--- a/third_party/blink/web_tests/platform/linux/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/linux/media/audio-repaint-expected.png
index 0d13811b..cb995706 100644
--- a/third_party/blink/web_tests/platform/linux/media/audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/audio-repaint-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 f71f74a..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/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 37844fec..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/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/linux/media/media-controls-clone-expected.png
index fc7b4d9..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 e09cba5..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/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/linux/media/media-document-audio-repaint-expected.png
index bb5d327..70b8bec8 100644
--- a/third_party/blink/web_tests/platform/linux/media/media-document-audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/linux/media/media-document-audio-repaint-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 094aa3a..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 a9f955af..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/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
index 6dacadd..363f3b0 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 39108ea..841db752 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index ecd2a38b..640a607 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -1,7 +1,7 @@
 {
   "layers": [
     {
-      "name": "Scrolling background of LayoutNGView #document",
+      "name": "Scrolling background of LayoutView #document",
       "bounds": [1026, 1012],
       "contentsOpaque": true,
       "backgroundColor": "#FFFFFF",
@@ -27,7 +27,7 @@
       "contentsOpaque": true
     },
     {
-      "name": "Scroll corner of LayoutNGView #document",
+      "name": "Scroll corner of LayoutView #document",
       "position": [785, 585],
       "bounds": [15, 15],
       "contentsOpaque": true
diff --git a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
index afc9adc..ec3b0cdb 100644
--- a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
index 4fed618e..bcd57c4b 100644
--- a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
index 48fc93fd..b4067043 100644
--- a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
index 6e683abc..7b4591b 100644
--- a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/text-text-08-b-expected.png b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/text-text-08-b-expected.png
index fa202d9..e98d4af5 100644
--- a/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/text-text-08-b-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/W3C-SVG-1.1/text-text-08-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-5-expected.png b/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-5-expected.png
index bcb28ef..29c48dd 100644
--- a/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-5-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-5-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-6-expected.png b/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-6-expected.png
index 62fb5ae9c..93b9d5e 100644
--- a/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-6-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/as-background-image/svg-as-background-6-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/batik/text/smallFonts-expected.png b/third_party/blink/web_tests/platform/linux/svg/batik/text/smallFonts-expected.png
index 0232567d..24f7389 100644
--- a/third_party/blink/web_tests/platform/linux/svg/batik/text/smallFonts-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/batik/text/smallFonts-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/batik/text/textAnchor-expected.png b/third_party/blink/web_tests/platform/linux/svg/batik/text/textAnchor-expected.png
index 87797f6f..3a0cfa4e 100644
--- a/third_party/blink/web_tests/platform/linux/svg/batik/text/textAnchor-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/batik/text/textAnchor-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/batik/text/textFeatures-expected.png b/third_party/blink/web_tests/platform/linux/svg/batik/text/textFeatures-expected.png
index 97278b2..c3c206a3 100644
--- a/third_party/blink/web_tests/platform/linux/svg/batik/text/textFeatures-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/batik/text/textFeatures-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/batik/text/textProperties-expected.png b/third_party/blink/web_tests/platform/linux/svg/batik/text/textProperties-expected.png
index a41f0d2..b1f102c7 100644
--- a/third_party/blink/web_tests/platform/linux/svg/batik/text/textProperties-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/batik/text/textProperties-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/batik/text/verticalText-expected.png b/third_party/blink/web_tests/platform/linux/svg/batik/text/verticalText-expected.png
index 6357454d..afa4d9a1 100644
--- a/third_party/blink/web_tests/platform/linux/svg/batik/text/verticalText-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/batik/text/verticalText-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/container-opacity-clip-viewBox-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/container-opacity-clip-viewBox-expected.png
index c0d3597..f54ebb7 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/container-opacity-clip-viewBox-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/container-opacity-clip-viewBox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/dominant-baseline-hanging-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/dominant-baseline-hanging-expected.png
index a90f818936..344727b 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/dominant-baseline-hanging-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/dominant-baseline-hanging-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/non-opaque-filters-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/non-opaque-filters-expected.png
index 65f63e5..8e9e093 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/non-opaque-filters-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/non-opaque-filters-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/text-image-opacity-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/text-image-opacity-expected.png
index 6a1bcfe..1c26e2b 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/text-image-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/text-image-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-container-in-target-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-container-in-target-expected.png
index ad3fec3..b7083b4e 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-container-in-target-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-container-in-target-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-target-container-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-target-container-expected.png
index 6c22953..9e78d7a 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-target-container-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/use-modify-target-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-containing-use-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-containing-use-expected.png
index e8ab952c..3d0e84f 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-containing-use-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-containing-use-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-expected.png
index a3a4fa85..6b37f1c 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/use-on-g-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/use-on-use-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/use-on-use-expected.png
index a3a4fa85..6b37f1c 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/use-on-use-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/use-on-use-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/use-transform-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/use-transform-expected.png
index 9d2d04c..ceba02a 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/use-transform-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/use-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/text/text-selection-text-08-b-expected.png b/third_party/blink/web_tests/platform/linux/svg/text/text-selection-text-08-b-expected.png
index d0659a68..22f2ef29 100644
--- a/third_party/blink/web_tests/platform/linux/svg/text/text-selection-text-08-b-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/text/text-selection-text-08-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/transforms/2d/hindi-rotated-expected.png b/third_party/blink/web_tests/platform/linux/transforms/2d/hindi-rotated-expected.png
index 480a081..64a946b 100644
--- a/third_party/blink/web_tests/platform/linux/transforms/2d/hindi-rotated-expected.png
+++ b/third_party/blink/web_tests/platform/linux/transforms/2d/hindi-rotated-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/transforms/transform-on-inline-expected.png b/third_party/blink/web_tests/platform/linux/transforms/transform-on-inline-expected.png
index cd821ed..3dfbe67 100644
--- a/third_party/blink/web_tests/platform/linux/transforms/transform-on-inline-expected.png
+++ b/third_party/blink/web_tests/platform/linux/transforms/transform-on-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/transforms/transform-table-row-expected.png b/third_party/blink/web_tests/platform/linux/transforms/transform-table-row-expected.png
index 82a65c77..64e3a69 100644
--- a/third_party/blink/web_tests/platform/linux/transforms/transform-table-row-expected.png
+++ b/third_party/blink/web_tests/platform/linux/transforms/transform-table-row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/transforms/transforms-with-opacity-expected.png b/third_party/blink/web_tests/platform/linux/transforms/transforms-with-opacity-expected.png
index 0816f9b1..1a338261 100644
--- a/third_party/blink/web_tests/platform/linux/transforms/transforms-with-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/linux/transforms/transforms-with-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
index a93a6c4..0c6f599 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
index 522b29f..0f7228d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index e39f8308..ba4a32eed 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 9e3db5b9..5d12efd 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index d18985a..5034705 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
index 51d5267..70629127 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
index f3be14b44..3a5a617 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-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 3d1c4e4..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/linux/virtual/text-antialias/complex-text-opacity-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/complex-text-opacity-expected.png
index 2adb925..60e20707 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/complex-text-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/complex-text-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/letter-spacing-negative-opacity-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
index 2fcdc57..983c618 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index f8854bd3..61ae5d3c 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..a0c45fe
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
new file mode 100644
index 0000000..aa55c445
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-multiple-appearance-basic-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 644cbe67..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/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index bb8f4b7..a67653f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 689f2d7..ef39896d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index 704cdab98..da00da5 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/basic-selects-expected.png
index cbe3a457..9c8ace3 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/disabled-select-change-index-expected.png
index 309c038..2a2d3d37 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/disabled-select-change-index-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png
index da98ad2b..32ccd9a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-disabled-appearance-expected.png
index f6cd1e06..fd3a3704 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-disabled-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/layers/opacity-outline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/layers/opacity-outline-expected.png
index 85a18b6..d717d8cc 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/layers/opacity-outline-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/fast/layers/opacity-outline-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 002d2d7..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/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index e94bdd3..cb8803f6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/audio-controls-rendering-expected.png
index a0f5476..4fcf781 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/media/audio-controls-rendering-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 f558ddfa..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 f3d69ab..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 7c5097a..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/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/media-document-audio-repaint-expected.png
index 8eac3f0..421f698 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/media/media-document-audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/media/media-document-audio-repaint-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 9b3d7c4..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/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 7a4ee54..26f668ac 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
index 61cd13d..4b0c88a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/svg/batik/text/verticalText-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/svg/batik/text/verticalText-expected.png
index efe07cf..57fe3d0 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/svg/batik/text/verticalText-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/svg/batik/text/verticalText-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/svg/custom/container-opacity-clip-viewBox-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/svg/custom/container-opacity-clip-viewBox-expected.png
index 014d5c6..ac0e003 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/svg/custom/container-opacity-clip-viewBox-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/svg/custom/container-opacity-clip-viewBox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/text-selection-text-08-b-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/text-selection-text-08-b-expected.png
index 50b94f82..a2f0148 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/text-selection-text-08-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/svg/text/text-selection-text-08-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/transforms/2d/hindi-rotated-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/transforms/2d/hindi-rotated-expected.png
index 664764b..ce866d95 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/transforms/2d/hindi-rotated-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/transforms/2d/hindi-rotated-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index 36b02d6..04e7c6b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
index 3d9caab..bb1ee73 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
index 560e82f..a69c195 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-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 8551786..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/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
deleted file mode 100644
index 4fcf781..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
deleted file mode 100644
index 4fcf781..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/complex-text-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/complex-text-opacity-expected.png
index 1962968..444d132a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/complex-text-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/complex-text-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/letter-spacing-negative-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
index 9480313b..bbd70e5 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index bb8f4b7..a67653f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 689f2d7..ef39896d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index 704cdab98..da00da5 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-multiple-appearance-basic-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 8db83934..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/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 6318de1d..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/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index c2e0432..5266e67 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-controls-rendering-expected.png
index b176d868..7f4d45d2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-repaint-expected.png
index bb37ef2..a34023c56 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/audio-repaint-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 7630524..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/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 34f04d6..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 99de66a..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 3d19053..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/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/media-document-audio-repaint-expected.png
index 9177533..e525e33 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/media/media-document-audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/media/media-document-audio-repaint-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 4705938..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 efbefe7..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/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
index bc68c56e..0c704c7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
index 630b4e3..f5cf1e4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-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 31bd24e5..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-mac10.14/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
deleted file mode 100644
index 7f4d45d2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png
deleted file mode 100644
index a34023c56..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png
deleted file mode 100644
index e525e33..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
deleted file mode 100644
index 7f4d45d2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png
deleted file mode 100644
index a34023c56..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png
deleted file mode 100644
index e525e33..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png
index 02cce93c..edc719a 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-expected.png
index 336b69e..9231b63 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png
index e09a109..4c98dca 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png
index bfb8d65a2..d2fec75 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/svg-blend-multiply-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/svg-blend-multiply-alpha-expected.png
index bc15d4b..180fdc3 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/svg-blend-multiply-alpha-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/css3/blending/svg-blend-multiply-alpha-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 49cc223..fabf60d 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/reflections/opacity-reflection-transform-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/reflections/opacity-reflection-transform-expected.png
index 57c4e15..37295a3 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/reflections/opacity-reflection-transform-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/fast/reflections/opacity-reflection-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index 18c7f11..1250a3f 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-controls-rendering-expected.png
index 2eb1e6f..cfa241e 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-repaint-expected.png
index 6ca9546..f7b44c5f 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/audio-repaint-expected.png
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 046bacd..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 492d145..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/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-document-audio-repaint-expected.png
index 9a12ca95..8874a70 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-document-audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/media/media-document-audio-repaint-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
index 67bb53f..8b9af94 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/as-background-image/svg-as-background-6-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/as-background-image/svg-as-background-6-expected.png
index a65a271..b5b4ac0 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/as-background-image/svg-as-background-6-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/as-background-image/svg-as-background-6-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/custom/marker-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/custom/marker-opacity-expected.png
index f1b0d96..baf71a09 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/custom/marker-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/custom/marker-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png
deleted file mode 100644
index 97cc331..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png
deleted file mode 100644
index 97cc331..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index b3f7a4e..38adcf5 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
new file mode 100644
index 0000000..3bd95da
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
index a75e60f..1f391b8 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
index 2fe5baf..f371cbb 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
deleted file mode 100644
index cfa241e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png
deleted file mode 100644
index f7b44c5f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png
deleted file mode 100644
index 8874a70..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
deleted file mode 100644
index cfa241e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png
deleted file mode 100644
index f7b44c5f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png
deleted file mode 100644
index 8874a70..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 49cc223..fabf60d 100644
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png
index 02cce93c..edc719a 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/background-blend-mode-tiled-gradient-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-expected.png
index 336b69e..9231b63 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png
index e09a109..4c98dca 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-stacking-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png
index bfb8d65a2..d2fec75 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/effect-background-blend-mode-tiled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/svg-blend-multiply-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/svg-blend-multiply-alpha-expected.png
index bc15d4b..180fdc3 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/svg-blend-multiply-alpha-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/css3/blending/svg-blend-multiply-alpha-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 49cc223..fabf60d 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/reflections/opacity-reflection-transform-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/reflections/opacity-reflection-transform-expected.png
index 57c4e15..37295a3 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/reflections/opacity-reflection-transform-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/fast/reflections/opacity-reflection-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index 18c7f11..1250a3f 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-controls-rendering-expected.png
index 2eb1e6f..cfa241e 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-repaint-expected.png
index 6ca9546..f7b44c5f 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/audio-repaint-expected.png
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 046bacd..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 492d145..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/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-document-audio-repaint-expected.png
index 9a12ca95..8874a70 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-document-audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/media/media-document-audio-repaint-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
index 67bb53f..8b9af94 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/as-background-image/svg-as-background-6-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/as-background-image/svg-as-background-6-expected.png
index a65a271..b5b4ac0 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/as-background-image/svg-as-background-6-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/as-background-image/svg-as-background-6-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/custom/marker-opacity-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/custom/marker-opacity-expected.png
index f1b0d96..baf71a09 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/custom/marker-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/custom/marker-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
index 1dc65e3..55cd33a 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png
deleted file mode 100644
index 97cc331..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png
deleted file mode 100644
index 97cc331..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png
deleted file mode 100644
index e62a63c2..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index b3f7a4e..38adcf5 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
new file mode 100644
index 0000000..3bd95da
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
index a75e60f..1f391b8 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
index 2fe5baf..f371cbb 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
deleted file mode 100644
index cfa241e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png
deleted file mode 100644
index f7b44c5f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png
deleted file mode 100644
index 8874a70..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-dcomp/media/media-document-audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
deleted file mode 100644
index cfa241e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-controls-rendering-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png
deleted file mode 100644
index f7b44c5f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png
deleted file mode 100644
index 8874a70..0000000
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/media-foundation-for-clear-frameserver/media/media-document-audio-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 49cc223..fabf60d 100644
--- a/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/use-common-select-popup/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/transitions/scale-transition-no-start-expected.png b/third_party/blink/web_tests/platform/mac/compositing/transitions/scale-transition-no-start-expected.png
index d8b394d..0067925 100644
--- a/third_party/blink/web_tests/platform/mac/compositing/transitions/scale-transition-no-start-expected.png
+++ b/third_party/blink/web_tests/platform/mac/compositing/transitions/scale-transition-no-start-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 7c9cfaa0..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/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/blink/web_tests/platform/mac/css3/blending/background-blend-mode-tiled-gradient-expected.png
deleted file mode 100644
index d3e3d2b..0000000
--- a/third_party/blink/web_tests/platform/mac/css3/blending/background-blend-mode-tiled-gradient-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-expected.png b/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-expected.png
index d703a14..fb1aa1d 100644
--- a/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-expected.png
+++ b/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-tiled-expected.png b/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-tiled-expected.png
index d2e9d1e..c60ce74 100644
--- a/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-tiled-expected.png
+++ b/third_party/blink/web_tests/platform/mac/css3/blending/effect-background-blend-mode-tiled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/backgrounds/opacity-on-document-element-expected.png b/third_party/blink/web_tests/platform/mac/fast/backgrounds/opacity-on-document-element-expected.png
index eadc5cc..c5aca45 100644
--- a/third_party/blink/web_tests/platform/mac/fast/backgrounds/opacity-on-document-element-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/backgrounds/opacity-on-document-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/block/float/float-in-float-painting-expected.png b/third_party/blink/web_tests/platform/mac/fast/block/float/float-in-float-painting-expected.png
index 44d4b5a..f56bd7a4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/block/float/float-in-float-painting-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/block/float/float-in-float-painting-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers-expected.png b/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers-expected.png
index 8651d9a2..acc49674 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers2-expected.png b/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers2-expected.png
index 52000bc2..65d9d831 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers2-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css/ZeroOpacityLayers2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index 13ca99d..e58bdf2f 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index de599ca..9e1970d2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index a6372d3..0b0d8db 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png
index e36236e9..5a8c3fa4 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/indeterminate-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png
index 36678f03..ef801e8 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png
index f138c8c..352f206 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png
index 27bb60b..0aa04df 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png
index 22a5036f..2d042fe 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/layers/opacity-outline-expected.png b/third_party/blink/web_tests/platform/mac/fast/layers/opacity-outline-expected.png
index d8a2a2263..14b3afc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/layers/opacity-outline-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/layers/opacity-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/layers/opacity-transforms-expected.png b/third_party/blink/web_tests/platform/mac/fast/layers/opacity-transforms-expected.png
index 86338cad..08af2ff 100644
--- a/third_party/blink/web_tests/platform/mac/fast/layers/opacity-transforms-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/layers/opacity-transforms-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/multicol/layers-in-multicol-expected.png b/third_party/blink/web_tests/platform/mac/fast/multicol/layers-in-multicol-expected.png
index 5ef8f01..9243efa 100644
--- a/third_party/blink/web_tests/platform/mac/fast/multicol/layers-in-multicol-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/multicol/layers-in-multicol-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/overflow/007-expected.png b/third_party/blink/web_tests/platform/mac/fast/overflow/007-expected.png
index ac3b288a..fc661192 100644
--- a/third_party/blink/web_tests/platform/mac/fast/overflow/007-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/overflow/007-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 f61ee3b..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/fast/reflections/opacity-reflection-transform-expected.png b/third_party/blink/web_tests/platform/mac/fast/reflections/opacity-reflection-transform-expected.png
index cf8f69a..00e3acd 100644
--- a/third_party/blink/web_tests/platform/mac/fast/reflections/opacity-reflection-transform-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/reflections/opacity-reflection-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-collapsed-border-expected.png
index 012e4c6f..1ef4432 100644
--- a/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-expected.png
index 012e4c6f..1ef4432 100644
--- a/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/table/backgr_layers-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/mac/fast/table/dynamic-caption-add-before-child-expected.png
index e29ab70e..59715b19 100644
--- a/third_party/blink/web_tests/platform/mac/fast/table/dynamic-caption-add-before-child-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/table/dynamic-caption-add-before-child-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/mac/fast/table/multiple-captions-display-expected.png
index 25c18fd..ab164595 100644
--- a/third_party/blink/web_tests/platform/mac/fast/table/multiple-captions-display-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/table/multiple-captions-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/table/overflowHidden-expected.png b/third_party/blink/web_tests/platform/mac/fast/table/overflowHidden-expected.png
index 017447e7..d21e749 100644
--- a/third_party/blink/web_tests/platform/mac/fast/table/overflowHidden-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/table/overflowHidden-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/platform/mac/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index 1a661790..b3936e83 100644
--- a/third_party/blink/web_tests/platform/mac/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/platform/mac/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac/media/audio-controls-rendering-expected.png
index b7ecf363..e89c20c1 100644
--- a/third_party/blink/web_tests/platform/mac/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac/media/audio-repaint-expected.png
index 65d103b8a..7695770 100644
--- a/third_party/blink/web_tests/platform/mac/media/audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/audio-repaint-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 c6c98d403..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/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 fa740de..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/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/mac/media/media-controls-clone-expected.png
index 487499a..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 e8477f3..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/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/mac/media/media-document-audio-repaint-expected.png
index 72b51c8..3231d6e8 100644
--- a/third_party/blink/web_tests/platform/mac/media/media-document-audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/mac/media/media-document-audio-repaint-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 bf010383..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 7e37038..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/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
index dd46ae6..693ca5f 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 3fe60b5..824bc653 100644
--- a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
index 93032e4b..00326e9 100644
--- a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
index c01eec9..154c0132 100644
--- a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
index 9e7c1912..b75ddac 100644
--- a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
index 613d88a4..5b147da 100644
--- a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/text-text-08-b-expected.png b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/text-text-08-b-expected.png
index f297698..20709a0 100644
--- a/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/text-text-08-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/W3C-SVG-1.1/text-text-08-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-5-expected.png b/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-5-expected.png
index 9506892..a7019dc9 100644
--- a/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-5-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-5-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-6-expected.png b/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-6-expected.png
index 5acd36a..124199a 100644
--- a/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-6-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/as-background-image/svg-as-background-6-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/batik/text/smallFonts-expected.png b/third_party/blink/web_tests/platform/mac/svg/batik/text/smallFonts-expected.png
index e3839ac..94189aa 100644
--- a/third_party/blink/web_tests/platform/mac/svg/batik/text/smallFonts-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/batik/text/smallFonts-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/batik/text/textAnchor-expected.png b/third_party/blink/web_tests/platform/mac/svg/batik/text/textAnchor-expected.png
index e18c9e3..db5aa346 100644
--- a/third_party/blink/web_tests/platform/mac/svg/batik/text/textAnchor-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/batik/text/textAnchor-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/batik/text/textFeatures-expected.png b/third_party/blink/web_tests/platform/mac/svg/batik/text/textFeatures-expected.png
index e2235e5..6ae10a6 100644
--- a/third_party/blink/web_tests/platform/mac/svg/batik/text/textFeatures-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/batik/text/textFeatures-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/batik/text/textProperties-expected.png b/third_party/blink/web_tests/platform/mac/svg/batik/text/textProperties-expected.png
index 3a67a598..cfedc3c 100644
--- a/third_party/blink/web_tests/platform/mac/svg/batik/text/textProperties-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/batik/text/textProperties-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/batik/text/verticalText-expected.png b/third_party/blink/web_tests/platform/mac/svg/batik/text/verticalText-expected.png
index a8d3484..ca30a27 100644
--- a/third_party/blink/web_tests/platform/mac/svg/batik/text/verticalText-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/batik/text/verticalText-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/container-opacity-clip-viewBox-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/container-opacity-clip-viewBox-expected.png
index 5a97bf1..172e1de 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/container-opacity-clip-viewBox-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/container-opacity-clip-viewBox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/dominant-baseline-hanging-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/dominant-baseline-hanging-expected.png
index 915cbe98..81f57ff 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/dominant-baseline-hanging-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/dominant-baseline-hanging-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/non-opaque-filters-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/non-opaque-filters-expected.png
index 9155e6e..86d7115 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/non-opaque-filters-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/non-opaque-filters-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/text-image-opacity-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/text-image-opacity-expected.png
index 264c19c..0587824 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/text-image-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/text-image-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-container-in-target-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-container-in-target-expected.png
index 6e44302..8d73aa6 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-container-in-target-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-container-in-target-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-target-container-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-target-container-expected.png
index ed65e53..e752c114 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-target-container-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/use-modify-target-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-containing-use-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-containing-use-expected.png
index c74116a..c9ba215c 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-containing-use-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-containing-use-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-expected.png
index a8b32e6..ea32bd1 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/use-on-g-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/use-on-use-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/use-on-use-expected.png
index a8b32e6..ea32bd1 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/use-on-use-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/use-on-use-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/use-transform-expected.png b/third_party/blink/web_tests/platform/mac/svg/custom/use-transform-expected.png
index 40af6944..7d14180 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/use-transform-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/use-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/text/text-selection-text-08-b-expected.png b/third_party/blink/web_tests/platform/mac/svg/text/text-selection-text-08-b-expected.png
index 1ad277dc..610ae77 100644
--- a/third_party/blink/web_tests/platform/mac/svg/text/text-selection-text-08-b-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/text/text-selection-text-08-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/transforms/2d/hindi-rotated-expected.png b/third_party/blink/web_tests/platform/mac/transforms/2d/hindi-rotated-expected.png
index bc17ac2..1ce9b39 100644
--- a/third_party/blink/web_tests/platform/mac/transforms/2d/hindi-rotated-expected.png
+++ b/third_party/blink/web_tests/platform/mac/transforms/2d/hindi-rotated-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/transforms/transform-on-inline-expected.png b/third_party/blink/web_tests/platform/mac/transforms/transform-on-inline-expected.png
index 9885212..bd5999b 100644
--- a/third_party/blink/web_tests/platform/mac/transforms/transform-on-inline-expected.png
+++ b/third_party/blink/web_tests/platform/mac/transforms/transform-on-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/transforms/transform-table-row-expected.png b/third_party/blink/web_tests/platform/mac/transforms/transform-table-row-expected.png
index 3292044d..61d19bf 100644
--- a/third_party/blink/web_tests/platform/mac/transforms/transform-table-row-expected.png
+++ b/third_party/blink/web_tests/platform/mac/transforms/transform-table-row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/transforms/transforms-with-opacity-expected.png b/third_party/blink/web_tests/platform/mac/transforms/transforms-with-opacity-expected.png
index 5147027..b6ad1bc 100644
--- a/third_party/blink/web_tests/platform/mac/transforms/transforms-with-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac/transforms/transforms-with-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
index d39e1dca..cb8efa6 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
index 038c7c3..4a32480 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index b9e4613..188e8b3 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index 59581e1..3bd95da 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
index 17d0760b..5da3c2f 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
index 9173ea0..5946bb7 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-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 52a0595..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/text-antialias/complex-text-opacity-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/complex-text-opacity-expected.png
index 3bb9fd1e..befe4c2d 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/complex-text-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/complex-text-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/letter-spacing-negative-opacity-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
index 20a43e9..2a6aeab2 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/compositing/transitions/scale-transition-no-start-expected.png b/third_party/blink/web_tests/platform/win/compositing/transitions/scale-transition-no-start-expected.png
index 5ec2f87..ba342f9 100644
--- a/third_party/blink/web_tests/platform/win/compositing/transitions/scale-transition-no-start-expected.png
+++ b/third_party/blink/web_tests/platform/win/compositing/transitions/scale-transition-no-start-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/backgrounds/opacity-on-document-element-expected.png b/third_party/blink/web_tests/platform/win/fast/backgrounds/opacity-on-document-element-expected.png
index 5a673e14..9747f57 100644
--- a/third_party/blink/web_tests/platform/win/fast/backgrounds/opacity-on-document-element-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/backgrounds/opacity-on-document-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/float/float-in-float-painting-expected.png b/third_party/blink/web_tests/platform/win/fast/block/float/float-in-float-painting-expected.png
index 64cf90b..bdf0d1d 100644
--- a/third_party/blink/web_tests/platform/win/fast/block/float/float-in-float-painting-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/block/float/float-in-float-painting-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers-expected.png b/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers-expected.png
index e74c8df4..bdb3ec29 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers2-expected.png b/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers2-expected.png
index b0fdea8..8b2342f 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers2-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/ZeroOpacityLayers2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index f2940d3..a1f4c8a4 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 7f3c21ef..add7f3e 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index 60cbf92..826fe95 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/indeterminate-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/indeterminate-expected.png
index 13839c3..200990c 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/indeterminate-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/indeterminate-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png
index 2d49530..f1acb10 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/basic-selects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png
index 68d5b87b..c4b6024 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/disabled-select-change-index-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png
index 40487c0..106ca1dc 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png
index adb6ab47..dcf5405 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-disabled-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/layers/opacity-outline-expected.png b/third_party/blink/web_tests/platform/win/fast/layers/opacity-outline-expected.png
index 8b65132..0665e08 100644
--- a/third_party/blink/web_tests/platform/win/fast/layers/opacity-outline-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/layers/opacity-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/layers/opacity-transforms-expected.png b/third_party/blink/web_tests/platform/win/fast/layers/opacity-transforms-expected.png
index bb3e23ce..e8c858a 100644
--- a/third_party/blink/web_tests/platform/win/fast/layers/opacity-transforms-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/layers/opacity-transforms-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/multicol/layers-in-multicol-expected.png b/third_party/blink/web_tests/platform/win/fast/multicol/layers-in-multicol-expected.png
index c4448e1..62b98ea 100644
--- a/third_party/blink/web_tests/platform/win/fast/multicol/layers-in-multicol-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/multicol/layers-in-multicol-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/overflow/007-expected.png b/third_party/blink/web_tests/platform/win/fast/overflow/007-expected.png
index 282116cb..58f301d 100644
--- a/third_party/blink/web_tests/platform/win/fast/overflow/007-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/overflow/007-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 882072bf..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/fast/reflections/opacity-reflection-transform-expected.png b/third_party/blink/web_tests/platform/win/fast/reflections/opacity-reflection-transform-expected.png
index beeff6d..49eb015 100644
--- a/third_party/blink/web_tests/platform/win/fast/reflections/opacity-reflection-transform-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/reflections/opacity-reflection-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-collapsed-border-expected.png b/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-collapsed-border-expected.png
index baaa365..ec6a410 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-collapsed-border-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-expected.png b/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-expected.png
index baaa365..ec6a410 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/backgr_layers-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/dynamic-caption-add-before-child-expected.png b/third_party/blink/web_tests/platform/win/fast/table/dynamic-caption-add-before-child-expected.png
index 9635330..a3ad924 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/dynamic-caption-add-before-child-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/dynamic-caption-add-before-child-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/multiple-captions-display-expected.png b/third_party/blink/web_tests/platform/win/fast/table/multiple-captions-display-expected.png
index 89a602de..5d42064 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/multiple-captions-display-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/multiple-captions-display-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/overflowHidden-expected.png b/third_party/blink/web_tests/platform/win/fast/table/overflowHidden-expected.png
index c1958c4..03e045c 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/overflowHidden-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/overflowHidden-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/http/tests/media/video-buffered-range-contains-currentTime-expected.png b/third_party/blink/web_tests/platform/win/http/tests/media/video-buffered-range-contains-currentTime-expected.png
index fc802cf..6b9ac5e 100644
--- a/third_party/blink/web_tests/platform/win/http/tests/media/video-buffered-range-contains-currentTime-expected.png
+++ b/third_party/blink/web_tests/platform/win/http/tests/media/video-buffered-range-contains-currentTime-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/win/media/audio-controls-rendering-expected.png
index da02658..844fb6a 100644
--- a/third_party/blink/web_tests/platform/win/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/media/audio-repaint-expected.png b/third_party/blink/web_tests/platform/win/media/audio-repaint-expected.png
index 25b07db4..762754e 100644
--- a/third_party/blink/web_tests/platform/win/media/audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/audio-repaint-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 e2e05d38..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/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 45523bbc..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/media-controls-clone-expected.png b/third_party/blink/web_tests/platform/win/media/media-controls-clone-expected.png
index b6a87a6..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 e4f0e7d3..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/media-document-audio-repaint-expected.png b/third_party/blink/web_tests/platform/win/media/media-document-audio-repaint-expected.png
index 474da4b4..ce5124d 100644
--- a/third_party/blink/web_tests/platform/win/media/media-document-audio-repaint-expected.png
+++ b/third_party/blink/web_tests/platform/win/media/media-document-audio-repaint-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 cb6e108..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 e819ae4d..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/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
index ba54015..e19b323a 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index a798712..1b5bd12 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
index c463bf4..c38d4928 100644
--- a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
index dacee76..e359034 100644
--- a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/filters-blend-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
index 14767ab..fea2c473 100644
--- a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
index 649f0b9f..8d88bae6 100644
--- a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/text-text-08-b-expected.png b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/text-text-08-b-expected.png
index 61210efa..1c68e42d 100644
--- a/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/text-text-08-b-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/W3C-SVG-1.1/text-text-08-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-5-expected.png b/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-5-expected.png
index 6092be3..23c82431 100644
--- a/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-5-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-5-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-6-expected.png b/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-6-expected.png
index cc268560..7aa5733 100644
--- a/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-6-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/as-background-image/svg-as-background-6-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/batik/text/smallFonts-expected.png b/third_party/blink/web_tests/platform/win/svg/batik/text/smallFonts-expected.png
index c0f8338f..c34cad7 100644
--- a/third_party/blink/web_tests/platform/win/svg/batik/text/smallFonts-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/batik/text/smallFonts-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/batik/text/textAnchor-expected.png b/third_party/blink/web_tests/platform/win/svg/batik/text/textAnchor-expected.png
index d4075d0..b59653eb 100644
--- a/third_party/blink/web_tests/platform/win/svg/batik/text/textAnchor-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/batik/text/textAnchor-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/batik/text/textFeatures-expected.png b/third_party/blink/web_tests/platform/win/svg/batik/text/textFeatures-expected.png
index 3b37f36..0d4a2f7 100644
--- a/third_party/blink/web_tests/platform/win/svg/batik/text/textFeatures-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/batik/text/textFeatures-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/batik/text/textProperties-expected.png b/third_party/blink/web_tests/platform/win/svg/batik/text/textProperties-expected.png
index f57a321..c84989f 100644
--- a/third_party/blink/web_tests/platform/win/svg/batik/text/textProperties-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/batik/text/textProperties-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/batik/text/verticalText-expected.png b/third_party/blink/web_tests/platform/win/svg/batik/text/verticalText-expected.png
index dae9fba..625163d 100644
--- a/third_party/blink/web_tests/platform/win/svg/batik/text/verticalText-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/batik/text/verticalText-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/container-opacity-clip-viewBox-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/container-opacity-clip-viewBox-expected.png
index 6aaa787..a4baca7 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/container-opacity-clip-viewBox-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/container-opacity-clip-viewBox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/dominant-baseline-hanging-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/dominant-baseline-hanging-expected.png
index 92a59e9b..c6478373 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/dominant-baseline-hanging-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/dominant-baseline-hanging-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/non-opaque-filters-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/non-opaque-filters-expected.png
index 6d6b443..f09068f8 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/non-opaque-filters-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/non-opaque-filters-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/text-image-opacity-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/text-image-opacity-expected.png
index e840fe6..b139a65 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/text-image-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/text-image-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/use-modify-container-in-target-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/use-modify-container-in-target-expected.png
index 752cbf31..2481e20 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/use-modify-container-in-target-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/use-modify-container-in-target-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/use-modify-target-container-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/use-modify-target-container-expected.png
index a44a7f6c..7a22566b 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/use-modify-target-container-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/use-modify-target-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-containing-use-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-containing-use-expected.png
index 9fb95a6..95940b8 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-containing-use-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-containing-use-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-expected.png
index 9a138a9..be2f09d 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/use-on-g-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/use-on-use-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/use-on-use-expected.png
index 9a138a9..be2f09d 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/use-on-use-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/use-on-use-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/use-transform-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/use-transform-expected.png
index 20f1d7d..c07b5335 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/use-transform-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/use-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/text/text-selection-text-08-b-expected.png b/third_party/blink/web_tests/platform/win/svg/text/text-selection-text-08-b-expected.png
index 4df2bed..396b36a0 100644
--- a/third_party/blink/web_tests/platform/win/svg/text/text-selection-text-08-b-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/text/text-selection-text-08-b-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/transforms/2d/hindi-rotated-expected.png b/third_party/blink/web_tests/platform/win/transforms/2d/hindi-rotated-expected.png
index 8a89787..7a9bba8 100644
--- a/third_party/blink/web_tests/platform/win/transforms/2d/hindi-rotated-expected.png
+++ b/third_party/blink/web_tests/platform/win/transforms/2d/hindi-rotated-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/transforms/transform-on-inline-expected.png b/third_party/blink/web_tests/platform/win/transforms/transform-on-inline-expected.png
index 5aa1e5c..363f65ba 100644
--- a/third_party/blink/web_tests/platform/win/transforms/transform-on-inline-expected.png
+++ b/third_party/blink/web_tests/platform/win/transforms/transform-on-inline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/transforms/transform-table-row-expected.png b/third_party/blink/web_tests/platform/win/transforms/transform-table-row-expected.png
index b672010..0400927 100644
--- a/third_party/blink/web_tests/platform/win/transforms/transform-table-row-expected.png
+++ b/third_party/blink/web_tests/platform/win/transforms/transform-table-row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/transforms/transforms-with-opacity-expected.png b/third_party/blink/web_tests/platform/win/transforms/transforms-with-opacity-expected.png
index 905bc920..eb1301c 100644
--- a/third_party/blink/web_tests/platform/win/transforms/transforms-with-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/win/transforms/transforms-with-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
index 6b21f0f..4f6e863 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/date/date-picker-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
index 57edcb9..ef2ec41 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/datetimelocal-picker/datetimelocal-month-year-selector-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
index 9ec54d7e..5301e48 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-disabled-multiple-hover-focused-unselected-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
index 49f20260..05647eac 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
index 2f0714b1..4e616fa 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
index 046cf3ec..3191694 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
index 8f26a75..c0cea46 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-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 e04cd5aa..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/platform/win/virtual/text-antialias/complex-text-opacity-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/complex-text-opacity-expected.png
index 9fa8e1f..31a16b7 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/complex-text-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/complex-text-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/letter-spacing-negative-opacity-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
index d2b040dc..8f41d22 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/letter-spacing-negative-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/custom/group-opacity-expected.png b/third_party/blink/web_tests/svg/custom/group-opacity-expected.png
index eca9f5c3..f1a5b9d3 100644
--- a/third_party/blink/web_tests/svg/custom/group-opacity-expected.png
+++ b/third_party/blink/web_tests/svg/custom/group-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/custom/marker-opacity-expected.png b/third_party/blink/web_tests/svg/custom/marker-opacity-expected.png
index cea8b9a..29aad87 100644
--- a/third_party/blink/web_tests/svg/custom/marker-opacity-expected.png
+++ b/third_party/blink/web_tests/svg/custom/marker-opacity-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/custom/marker-zero-length-linecaps-expected.png b/third_party/blink/web_tests/svg/custom/marker-zero-length-linecaps-expected.png
index 9210d18..5952106d 100644
--- a/third_party/blink/web_tests/svg/custom/marker-zero-length-linecaps-expected.png
+++ b/third_party/blink/web_tests/svg/custom/marker-zero-length-linecaps-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/custom/root-container-opacity-clip-viewBox-expected.png b/third_party/blink/web_tests/svg/custom/root-container-opacity-clip-viewBox-expected.png
index 74c7211..b506046 100644
--- a/third_party/blink/web_tests/svg/custom/root-container-opacity-clip-viewBox-expected.png
+++ b/third_party/blink/web_tests/svg/custom/root-container-opacity-clip-viewBox-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
index d3083ae7..a7602b0 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
index d3083ae7..a7602b0 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
index d3083ae7..a7602b0 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
index d3083ae7..a7602b0 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
index d3083ae7..a7602b0 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
index d3083ae7..a7602b0 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png
index 4bf20c1..2292c99 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png
index 4bf20c1..2292c99 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png
index c7f575b..2b62614 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/foreignObject/clip-expected.png b/third_party/blink/web_tests/svg/foreignObject/clip-expected.png
index f42980c..2ad1e2d 100644
--- a/third_party/blink/web_tests/svg/foreignObject/clip-expected.png
+++ b/third_party/blink/web_tests/svg/foreignObject/clip-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/foreignObject/filter-expected.png b/third_party/blink/web_tests/svg/foreignObject/filter-expected.png
index 6927d79..ef4492f 100644
--- a/third_party/blink/web_tests/svg/foreignObject/filter-expected.png
+++ b/third_party/blink/web_tests/svg/foreignObject/filter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/svg/foreignObject/mask-expected.png b/third_party/blink/web_tests/svg/foreignObject/mask-expected.png
index 6927d79..ef4492f 100644
--- a/third_party/blink/web_tests/svg/foreignObject/mask-expected.png
+++ b/third_party/blink/web_tests/svg/foreignObject/mask-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/http/tests/devtools/layers/layer-canvas-log-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/http/tests/devtools/layers/layer-canvas-log-expected.txt
new file mode 100644
index 0000000..c458c28
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/plz-dedicated-worker/http/tests/devtools/layers/layer-canvas-log-expected.txt
@@ -0,0 +1,177 @@
+Tests layer command log
+
+Canvas log:
+{
+    0 : {
+        commandIndex : 0
+        method : "drawPaint"
+        params : {
+            paint : {
+                blendMode : "Src"
+                color : "#00000000"
+                flags : "none"
+                strokeCap : "Butt"
+                strokeJoin : "Miter"
+                strokeMiter : 4
+                strokeWidth : 0
+                styleName : "Fill"
+            }
+        }
+    }
+    1 : {
+        commandIndex : 1
+        method : "drawRect"
+        params : {
+            paint : {
+                color : "#FF0000FF"
+                flags : "AntiAlias"
+                strokeCap : "Butt"
+                strokeJoin : "Miter"
+                strokeMiter : 4
+                strokeWidth : 0
+                styleName : "Fill"
+            }
+            rect : {
+                bottom : 100
+                left : 0
+                right : 100
+                top : 0
+            }
+        }
+    }
+    10 : {
+        commandIndex : 10
+        method : "drawRect"
+        params : {
+            paint : {
+                color : "#7F000000"
+                flags : "AntiAlias"
+                strokeCap : "Butt"
+                strokeJoin : "Miter"
+                strokeMiter : 4
+                strokeWidth : 0
+                styleName : "Fill"
+            }
+            rect : {
+                bottom : 10
+                left : 0
+                right : 10
+                top : 0
+            }
+        }
+    }
+    11 : {
+        commandIndex : 11
+        method : "restore"
+        params : undefined
+    }
+    2 : {
+        commandIndex : 2
+        method : "drawRect"
+        params : {
+            paint : {
+                color : "#FFFF0000"
+                flags : "AntiAlias"
+                strokeCap : "Butt"
+                strokeJoin : "Miter"
+                strokeMiter : 4
+                strokeWidth : 0
+                styleName : "Fill"
+            }
+            rect : {
+                bottom : 50
+                left : 0
+                right : 50
+                top : 0
+            }
+        }
+    }
+    3 : {
+        commandIndex : 3
+        method : "save"
+        params : undefined
+    }
+    4 : {
+        commandIndex : 4
+        method : "concat44"
+        params : {
+            matrix44 : [
+                1
+                0
+                0
+                0
+                0
+                1
+                0
+                0
+                0
+                0
+                1
+                0
+                0
+                50
+                0
+                1
+            ]
+        }
+    }
+    5 : {
+        commandIndex : 5
+        method : "drawImage"
+        params : {
+            image : {
+                height : 21
+                opaque : false
+                width : 19
+            }
+            left : 0
+            paint : {
+                color : "#FF000000"
+                flags : "AntiAlias"
+                strokeCap : "Butt"
+                strokeJoin : "Miter"
+                strokeMiter : 4
+                strokeWidth : 0
+                styleName : "Fill"
+            }
+            sampling : {
+                filter : "kLinear"
+                mipmap : "kNearest"
+            }
+            top : 0
+        }
+    }
+    6 : {
+        commandIndex : 6
+        method : "restore"
+        params : undefined
+    }
+    7 : {
+        commandIndex : 7
+        method : "save"
+        params : undefined
+    }
+    8 : {
+        commandIndex : 8
+        method : "translate"
+        params : {
+            dx : 0
+            dy : 71
+        }
+    }
+    9 : {
+        commandIndex : 9
+        method : "clipRect"
+        params : {
+            SkRegion::Op : "kIntersect_Op"
+            rect : {
+                bottom : 150
+                left : 0
+                right : 300
+                top : 0
+            }
+            softClipEdgeStyle : true
+        }
+    }
+}
+
diff --git a/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/css-opacity-with-drop-shadow-expected.png b/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/css-opacity-with-drop-shadow-expected.png
index 02399e8..5cd9b2b7 100644
--- a/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/css-opacity-with-drop-shadow-expected.png
+++ b/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/css-opacity-with-drop-shadow-expected.png
Binary files differ
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 74e3a92b..9767aec 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,5 +1,4 @@
 [root-and-nested-element-transition.html]
   expected:
-    if (os == "linux") and (version == "Ubuntu 18.04"): ERROR
-    if os == "win": ERROR
+    if processor == "x86": ERROR
     FAIL
diff --git a/third_party/closure_compiler/externs/passwords_private.js b/third_party/closure_compiler/externs/passwords_private.js
deleted file mode 100644
index df82fdb..0000000
--- a/third_party/closure_compiler/externs/passwords_private.js
+++ /dev/null
@@ -1,500 +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.
-
-// This file was generated by:
-//   tools/json_schema_compiler/compiler.py.
-// NOTE: The format of types has changed. 'FooType' is now
-//   'chrome.passwordsPrivate.FooType'.
-// Please run the closure compiler before committing changes.
-// See https://chromium.googlesource.com/chromium/src/+/main/docs/closure_compilation.md
-
-/**
- * @fileoverview Externs generated from namespace: passwordsPrivate
- * @externs
- */
-
-/** @const */
-chrome.passwordsPrivate = {};
-
-/**
- * @enum {string}
- */
-chrome.passwordsPrivate.PlaintextReason = {
-  VIEW: 'VIEW',
-  COPY: 'COPY',
-  EDIT: 'EDIT',
-};
-
-/**
- * @enum {string}
- */
-chrome.passwordsPrivate.ExportProgressStatus = {
-  NOT_STARTED: 'NOT_STARTED',
-  IN_PROGRESS: 'IN_PROGRESS',
-  SUCCEEDED: 'SUCCEEDED',
-  FAILED_CANCELLED: 'FAILED_CANCELLED',
-  FAILED_WRITE_FAILED: 'FAILED_WRITE_FAILED',
-};
-
-/**
- * @enum {string}
- */
-chrome.passwordsPrivate.CompromiseType = {
-  LEAKED: 'LEAKED',
-  PHISHED: 'PHISHED',
-  REUSED: 'REUSED',
-  WEAK: 'WEAK',
-};
-
-/**
- * @enum {string}
- */
-chrome.passwordsPrivate.PasswordStoreSet = {
-  DEVICE: 'DEVICE',
-  ACCOUNT: 'ACCOUNT',
-  DEVICE_AND_ACCOUNT: 'DEVICE_AND_ACCOUNT',
-};
-
-/**
- * @enum {string}
- */
-chrome.passwordsPrivate.PasswordCheckState = {
-  IDLE: 'IDLE',
-  RUNNING: 'RUNNING',
-  CANCELED: 'CANCELED',
-  OFFLINE: 'OFFLINE',
-  SIGNED_OUT: 'SIGNED_OUT',
-  NO_PASSWORDS: 'NO_PASSWORDS',
-  QUOTA_LIMIT: 'QUOTA_LIMIT',
-  OTHER_ERROR: 'OTHER_ERROR',
-};
-
-/**
- * @enum {string}
- */
-chrome.passwordsPrivate.ImportResultsStatus = {
-  UNKNOWN_ERROR: 'UNKNOWN_ERROR',
-  SUCCESS: 'SUCCESS',
-  IO_ERROR: 'IO_ERROR',
-  BAD_FORMAT: 'BAD_FORMAT',
-  DISMISSED: 'DISMISSED',
-  MAX_FILE_SIZE: 'MAX_FILE_SIZE',
-  IMPORT_ALREADY_ACTIVE: 'IMPORT_ALREADY_ACTIVE',
-  NUM_PASSWORDS_EXCEEDED: 'NUM_PASSWORDS_EXCEEDED',
-};
-
-/**
- * @enum {string}
- */
-chrome.passwordsPrivate.ImportEntryStatus = {
-  UNKNOWN_ERROR: 'UNKNOWN_ERROR',
-  MISSING_PASSWORD: 'MISSING_PASSWORD',
-  MISSING_URL: 'MISSING_URL',
-  INVALID_URL: 'INVALID_URL',
-  NON_ASCII_URL: 'NON_ASCII_URL',
-  LONG_URL: 'LONG_URL',
-  LONG_PASSWORD: 'LONG_PASSWORD',
-  LONG_USERNAME: 'LONG_USERNAME',
-  CONFLICT_PROFILE: 'CONFLICT_PROFILE',
-  CONFLICT_ACCOUNT: 'CONFLICT_ACCOUNT',
-  LONG_NOTE: 'LONG_NOTE',
-  LONG_CONCATENATED_NOTE: 'LONG_CONCATENATED_NOTE',
-};
-
-/**
- * @typedef {{
- *   status: !chrome.passwordsPrivate.ImportEntryStatus,
- *   url: string,
- *   username: string
- * }}
- */
-chrome.passwordsPrivate.ImportEntry;
-
-/**
- * @typedef {{
- *   status: !chrome.passwordsPrivate.ImportResultsStatus,
- *   numberImported: number,
- *   failedImports: !Array<!chrome.passwordsPrivate.ImportEntry>,
- *   fileName: string
- * }}
- */
-chrome.passwordsPrivate.ImportResults;
-
-/**
- * @typedef {{
- *   signonRealm: string,
- *   shown: string,
- *   link: string
- * }}
- */
-chrome.passwordsPrivate.UrlCollection;
-
-/**
- * @typedef {{
- *   compromiseTime: number,
- *   elapsedTimeSinceCompromise: string,
- *   compromiseTypes: !Array<!chrome.passwordsPrivate.CompromiseType>,
- *   isMuted: boolean
- * }}
- */
-chrome.passwordsPrivate.CompromisedInfo;
-
-/**
- * @typedef {{
- *   name: string,
- *   url: string
- * }}
- */
-chrome.passwordsPrivate.DomainInfo;
-
-/**
- * @typedef {{
- *   urls: !chrome.passwordsPrivate.UrlCollection,
- *   affiliatedDomains: (!Array<!chrome.passwordsPrivate.DomainInfo>|undefined),
- *   username: string,
- *   password: (string|undefined),
- *   federationText: (string|undefined),
- *   id: number,
- *   storedIn: !chrome.passwordsPrivate.PasswordStoreSet,
- *   isAndroidCredential: boolean,
- *   note: (string|undefined),
- *   changePasswordUrl: (string|undefined),
- *   compromisedInfo: (!chrome.passwordsPrivate.CompromisedInfo|undefined)
- * }}
- */
-chrome.passwordsPrivate.PasswordUiEntry;
-
-/**
- * @typedef {{
- *   name: string,
- *   iconUrl: string,
- *   entries: !Array<!chrome.passwordsPrivate.PasswordUiEntry>
- * }}
- */
-chrome.passwordsPrivate.CredentialGroup;
-
-/**
- * @typedef {{
- *   urls: !chrome.passwordsPrivate.UrlCollection,
- *   id: number
- * }}
- */
-chrome.passwordsPrivate.ExceptionEntry;
-
-/**
- * @typedef {{
- *   status: !chrome.passwordsPrivate.ExportProgressStatus,
- *   folderName: (string|undefined)
- * }}
- */
-chrome.passwordsPrivate.PasswordExportProgress;
-
-/**
- * @typedef {{
- *   state: !chrome.passwordsPrivate.PasswordCheckState,
- *   totalNumberOfPasswords: (number|undefined),
- *   alreadyProcessed: (number|undefined),
- *   remainingInQueue: (number|undefined),
- *   elapsedTimeSinceLastCheck: (string|undefined)
- * }}
- */
-chrome.passwordsPrivate.PasswordCheckStatus;
-
-/**
- * @typedef {{
- *   url: string,
- *   username: string,
- *   password: string,
- *   note: string,
- *   useAccountStore: boolean
- * }}
- */
-chrome.passwordsPrivate.AddPasswordOptions;
-
-/**
- * @typedef {{
- *   username: string,
- *   password: string,
- *   note: (string|undefined)
- * }}
- */
-chrome.passwordsPrivate.ChangeSavedPasswordParams;
-
-/**
- * Function that logs that the Passwords page was accessed from the Chrome
- * Settings WebUI.
- */
-chrome.passwordsPrivate.recordPasswordsPageAccessInSettings = function() {};
-
-/**
- * Changes the saved password corresponding to |id|. Invokes |callback| or
- * raises an error depending on whether the operation succeeded.
- * @param {number} id The id for the password entry being updated.
- * @param {!chrome.passwordsPrivate.ChangeSavedPasswordParams} params The
- *     dictionary which holds the changed parameters.
- * @param {function(number): void=} callback The callback that gets invoked in
- *     the end.
- */
-chrome.passwordsPrivate.changeSavedPassword = function(id, params, callback) {};
-
-/**
- * Removes the saved password corresponding to |id| in |fromStores|. If no saved
- * password for this pair exists, this function is a no-op.
- * @param {number} id The id for the password entry being removed.
- * @param {!chrome.passwordsPrivate.PasswordStoreSet} fromStores The store(s)
- *     from which the password entry is being removed.
- */
-chrome.passwordsPrivate.removeSavedPassword = function(id, fromStores) {};
-
-/**
- * Removes the saved password exception corresponding to |id|. If no exception
- * with this id exists, this function is a no-op. This will remove exception
- * from both stores.
- * @param {number} id The id for the exception url entry is being removed.
- */
-chrome.passwordsPrivate.removePasswordException = function(id) {};
-
-/**
- * Undoes the last removal of saved password(s) or exception(s).
- */
-chrome.passwordsPrivate.undoRemoveSavedPasswordOrException = function() {};
-
-/**
- * Returns the plaintext password corresponding to |id|. Note that on some
- * operating systems, this call may result in an OS-level reauthentication. Once
- * the password has been fetched, it will be returned via |callback|.
- * @param {number} id The id for the password entry being being retrieved.
- * @param {!chrome.passwordsPrivate.PlaintextReason} reason The reason why the
- *     plaintext password is requested.
- * @param {function(string): void} callback The callback that gets invoked with
- *     the retrieved password.
- */
-chrome.passwordsPrivate.requestPlaintextPassword = function(id, reason, callback) {};
-
-/**
- * Returns the PasswordUiEntries (with |password|, |note| field filled)
- * corresponding to |ids|. Note that on some operating systems, this call may
- * result in an OS-level reauthentication. Once the PasswordUiEntry has been
- * fetched, it will be returned via |callback|.
- * @param {!Array<number>} ids Ids for the password entries being retrieved.
- * @param {function(!Array<!chrome.passwordsPrivate.PasswordUiEntry>): void}
- *     callback The callback that gets invoked with the retrieved
- *     PasswordUiEntries.
- */
-chrome.passwordsPrivate.requestCredentialsDetails = function(ids, callback) {};
-
-/**
- * Returns the list of saved passwords.
- * @param {function(!Array<!chrome.passwordsPrivate.PasswordUiEntry>): void}
- *     callback Called with the list of saved passwords.
- */
-chrome.passwordsPrivate.getSavedPasswordList = function(callback) {};
-
-/**
- * Returns the list of Credential groups.
- * @param {function(!Array<!chrome.passwordsPrivate.CredentialGroup>): void}
- *     callback Called with the list of groups.
- */
-chrome.passwordsPrivate.getCredentialGroups = function(callback) {};
-
-/**
- * Returns the list of password exceptions.
- * @param {function(!Array<!chrome.passwordsPrivate.ExceptionEntry>): void}
- *     callback Called with the list of password exceptions.
- */
-chrome.passwordsPrivate.getPasswordExceptionList = function(callback) {};
-
-/**
- * Moves passwords currently stored on the device to being stored in the
- * signed-in, non-syncing Google Account. For each id, the result is a no-op if
- * any of these is true: |id| is invalid; |id| corresponds to a password already
- * stored in the account; or the user is not using the account-scoped password
- * storage.
- * @param {!Array<number>} ids The ids for the password entries being moved.
- */
-chrome.passwordsPrivate.movePasswordsToAccount = function(ids) {};
-
-/**
- * Triggers the Password Manager password import functionality.
- * @param {!chrome.passwordsPrivate.PasswordStoreSet} toStore
- * @param {function(!chrome.passwordsPrivate.ImportResults): void} callback
- */
-chrome.passwordsPrivate.importPasswords = function(toStore, callback) {};
-
-/**
- * Triggers the Password Manager password export functionality. Completion Will
- * be signaled by the onPasswordsFileExportProgress event. |callback| will be
- * called when the request is started or rejected. If rejected
- * $(ref:runtime.lastError) will be set to <code>'in-progress'</code> or
- * <code>'reauth-failed'</code>.
- * @param {function(): void} callback
- */
-chrome.passwordsPrivate.exportPasswords = function(callback) {};
-
-/**
- * Requests the export progress status. This is the same as the last value seen
- * on the onPasswordsFileExportProgress event. This function is useful for
- * checking if an export has already been initiated from an older tab, where we
- * might have missed the original event.
- * @param {function(!chrome.passwordsPrivate.ExportProgressStatus): void}
- *     callback
- */
-chrome.passwordsPrivate.requestExportProgressStatus = function(callback) {};
-
-/**
- * Stops exporting passwords and cleans up any passwords, which were already
- * written to the filesystem.
- */
-chrome.passwordsPrivate.cancelExportPasswords = function() {};
-
-/**
- * Requests the account-storage opt-in state of the current user.
- * @param {function(boolean): void} callback
- */
-chrome.passwordsPrivate.isOptedInForAccountStorage = function(callback) {};
-
-/**
- * Triggers the opt-in or opt-out flow for the account storage.
- * @param {boolean} optIn
- */
-chrome.passwordsPrivate.optInForAccountStorage = function(optIn) {};
-
-/**
- * Requests the latest insecure credentials.
- * @param {function(!Array<!chrome.passwordsPrivate.PasswordUiEntry>): void}
- *     callback
- */
-chrome.passwordsPrivate.getInsecureCredentials = function(callback) {};
-
-/**
- * Requests to mute |credential| from the password store. Invokes |callback| on
- * completion.
- * @param {!chrome.passwordsPrivate.PasswordUiEntry} credential
- * @param {function(): void=} callback
- */
-chrome.passwordsPrivate.muteInsecureCredential = function(credential, callback) {};
-
-/**
- * Requests to unmute |credential| from the password store. Invokes |callback|
- * on completion.
- * @param {!chrome.passwordsPrivate.PasswordUiEntry} credential
- * @param {function(): void=} callback
- */
-chrome.passwordsPrivate.unmuteInsecureCredential = function(credential, callback) {};
-
-/**
- * Records that a change password flow was started for |credential|.
- * @param {!chrome.passwordsPrivate.PasswordUiEntry} credential The credential
- *     for which the flow was triggered.
- * @param {function(): void=} callback
- */
-chrome.passwordsPrivate.recordChangePasswordFlowStarted = function(credential, callback) {};
-
-/**
- * Starts a check for insecure passwords. Invokes |callback| on completion.
- * @param {function(): void=} callback
- */
-chrome.passwordsPrivate.startPasswordCheck = function(callback) {};
-
-/**
- * Stops checking for insecure passwords. Invokes |callback| on completion.
- * @param {function(): void=} callback
- */
-chrome.passwordsPrivate.stopPasswordCheck = function(callback) {};
-
-/**
- * Returns the current status of the check via |callback|.
- * @param {function(!chrome.passwordsPrivate.PasswordCheckStatus): void}
- *     callback
- */
-chrome.passwordsPrivate.getPasswordCheckStatus = function(callback) {};
-
-/**
- * Requests whether the account store is a default location for saving
- * passwords. False means the device store is a default one. Must be called when
- * the current user has already opted-in for account storage.
- * @param {function(boolean): void} callback
- */
-chrome.passwordsPrivate.isAccountStoreDefault = function(callback) {};
-
-/**
- * Requests whether the given |url| meets the requirements to save a password
- * for it (e.g. valid, has proper scheme etc.) and returns the corresponding
- * URLCollection on success. Otherwise it raises an error.
- * @param {string} url
- * @param {function(!chrome.passwordsPrivate.UrlCollection): void} callback
- */
-chrome.passwordsPrivate.getUrlCollection = function(url, callback) {};
-
-/**
- * Saves a new password entry described by the given |options|. Invokes
- * |callback| or raises an error depending on whether the operation succeeded.
- * @param {!chrome.passwordsPrivate.AddPasswordOptions} options Details about a
- *     new password and storage to be used.
- * @param {function(): void=} callback The callback that gets invoked on
- *     success.
- */
-chrome.passwordsPrivate.addPassword = function(options, callback) {};
-
-/**
- * Restarts the authentication timeout timer if the user is authenticated.
- * @param {function(): void=} callback The callback that gets invoked on
- *     success.
- */
-chrome.passwordsPrivate.extendAuthValidity = function(callback) {};
-
-/**
- * Switches Biometric authentication before filling state after successful
- * authentication.
- */
-chrome.passwordsPrivate.switchBiometricAuthBeforeFillingState = function() {};
-
-/**
- * Shows a dialog for creating a shortcut for the Password Manager page.
- */
-chrome.passwordsPrivate.showAddShortcutDialog = function() {};
-
-/**
- * Fired when the saved passwords list has changed, meaning that an entry has
- * been added or removed.
- * @type {!ChromeEvent}
- */
-chrome.passwordsPrivate.onSavedPasswordsListChanged;
-
-/**
- * Fired when the password exceptions list has changed, meaning that an entry
- * has been added or removed.
- * @type {!ChromeEvent}
- */
-chrome.passwordsPrivate.onPasswordExceptionsListChanged;
-
-/**
- * Fired when the status of the export has changed.
- * @type {!ChromeEvent}
- */
-chrome.passwordsPrivate.onPasswordsFileExportProgress;
-
-/**
- * Fired when the opt-in state for the account-scoped storage has changed.
- * @type {!ChromeEvent}
- */
-chrome.passwordsPrivate.onAccountStorageOptInStateChanged;
-
-/**
- * Fired when the insecure credentials changed.
- * @type {!ChromeEvent}
- */
-chrome.passwordsPrivate.onInsecureCredentialsChanged;
-
-/**
- * Fired when the status of the password check changes.
- * @type {!ChromeEvent}
- */
-chrome.passwordsPrivate.onPasswordCheckStatusChanged;
-
-/**
- * Fired when the password manager access timed out.
- * @type {!ChromeEvent}
- */
-chrome.passwordsPrivate.onPasswordManagerAuthTimeout;
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index d212ba3..1b3cb48 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -35612,6 +35612,7 @@
   <int value="1754"
       label="SMARTCARDPROVIDERPRIVATE_REPORTGETSTATUSCHANGERESULT"/>
   <int value="1755" label="FILEMANAGERPRIVATE_RESUMEIOTASK"/>
+  <int value="1756" label="PASSWORDSPRIVATE_GETCREDENTIALSWITHREUSEDPASSWORD"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -59167,7 +59168,6 @@
   <int value="-1083736482" label="OmniboxCompactSuggestions:enabled"/>
   <int value="-1083547717" label="NotificationExpansionAnimation:disabled"/>
   <int value="-1083146397" label="AutofillTypeSpecificPopupWidth:enabled"/>
-  <int value="-1083092248" label="kSupportPepperVideoDecoderDevAPI:disabled"/>
   <int value="-1082302549" label="scan-cards-in-web-payments"/>
   <int value="-1082053427"
       label="OmniboxUIExperimentElideToRegistrableDomain:disabled"/>
@@ -61784,6 +61784,8 @@
   <int value="422670720" label="ContextualSearchLongpressPanelHelp:disabled"/>
   <int value="423615350" label="enable-tab-audio-muting"/>
   <int value="423855924" label="enable-tab-switcher-theme-colors"/>
+  <int value="425026866"
+      label="PageInfoAboutThisSiteImprovedBottomSheet:disabled"/>
   <int value="425072496" label="GridLayoutForNtpShortcuts:enabled"/>
   <int value="425938961" label="DesksCloseAll:disabled"/>
   <int value="426199960" label="Commander:enabled"/>
@@ -61837,7 +61839,6 @@
       label="UsernameFirstFlowFallbackCrowdsourcing:enabled"/>
   <int value="461641589" label="WebAppWindowControlsOverlay:disabled"/>
   <int value="462453078" label="cast-streaming-force-enable-hardware-h264"/>
-  <int value="462624070" label="kSupportPepperVideoDecoderDevAPI:enabled"/>
   <int value="463582989" label="CompositorThreadedScrollbarScrolling:disabled"/>
   <int value="464226051" label="CrOSComponent:enabled"/>
   <int value="464773709" label="OmniboxExperimentalSuggestScoring:enabled"/>
@@ -63269,6 +63270,7 @@
   <int value="1293697921" label="RequestDesktopSiteExceptions:enabled"/>
   <int value="1294131571" label="disable-winrt-midi-api"/>
   <int value="1294306055" label="FeedInteractiveRefresh:disabled"/>
+  <int value="1295005331" label="SupportPepperVideoDecoderDevAPI:enabled"/>
   <int value="1295669314" label="OmniboxOnClobberFocusTypeOnContent:enabled"/>
   <int value="1296661698" label="CrOSLateBootMediaDynamicCgroup:disabled"/>
   <int value="1296878388" label="PermissionPredictions:disabled"/>
@@ -63883,6 +63885,8 @@
   <int value="1665430464" label="force-control-face-ae"/>
   <int value="1667533501" label="SameAppWindowCycle:disabled"/>
   <int value="1667584730" label="WebXR:disabled"/>
+  <int value="1667886516"
+      label="PageInfoAboutThisSiteImprovedBottomSheet:enabled"/>
   <int value="1668611601" label="enable-encrypted-media"/>
   <int value="1669522336"
       label="ExperimentalAccessibilityDictationContextChecking:disabled"/>
@@ -64679,6 +64683,7 @@
   <int value="2114894984" label="DelayCompetingLowPriorityRequests:enabled"/>
   <int value="2115848376" label="LacrosSupport:disabled"/>
   <int value="2116535245" label="PasswordEditDialogWithDetails:disabled"/>
+  <int value="2117485960" label="SupportPepperVideoDecoderDevAPI:disabled"/>
   <int value="2118287149" label="HelpAppSearchServiceIntegration:enabled"/>
   <int value="2118374092" label="MessagesForAndroidReaderMode:disabled"/>
   <int value="2119964154" label="enable-download-resumption"/>
@@ -88356,6 +88361,7 @@
   <int value="126" label="IDC_CONTENT_CONTEXT_PDF_OCR"/>
   <int value="127" label="IDC_CONTENT_CONTEXT_PDF_OCR_ALWAYS"/>
   <int value="128" label="IDC_CONTENT_CONTEXT_PDF_OCR_ONCE"/>
+  <int value="129" label="IDC_CONTENT_CONTEXT_AUTOFILL_FEEDBACK"/>
 </enum>
 
 <enum name="ReopenTabPromoStepAtDismissal">
@@ -107327,6 +107333,44 @@
   <int value="157670" label="Connected, Data, Stun, local IPv6, remote MDNS"/>
 </enum>
 
+<enum name="WebRtcScalabilityMode">
+  <int value="0" label="Invalid"/>
+  <int value="1" label="L1T1"/>
+  <int value="2" label="L1T2"/>
+  <int value="3" label="L1T3"/>
+  <int value="4" label="L2T1"/>
+  <int value="5" label="L2T1h"/>
+  <int value="6" label="L2T1_KEY"/>
+  <int value="7" label="L2T2"/>
+  <int value="8" label="L2T2h"/>
+  <int value="9" label="L2T2_KEY"/>
+  <int value="10" label="L2T2_KEY_SHIFT"/>
+  <int value="11" label="L2T3"/>
+  <int value="12" label="L2T3h"/>
+  <int value="13" label="L2T3_KEY"/>
+  <int value="14" label="L3T1"/>
+  <int value="15" label="L3T1h"/>
+  <int value="16" label="L3T1_KEY"/>
+  <int value="17" label="L3T2"/>
+  <int value="18" label="L3T2h"/>
+  <int value="19" label="L3T2_KEY"/>
+  <int value="20" label="L3T3"/>
+  <int value="21" label="L3T3h"/>
+  <int value="22" label="L3T3_KEY"/>
+  <int value="23" label="S2T1"/>
+  <int value="24" label="S2T1h"/>
+  <int value="25" label="S2T2"/>
+  <int value="26" label="S2T2h"/>
+  <int value="27" label="S2T3"/>
+  <int value="28" label="S2T3h"/>
+  <int value="29" label="S3T1"/>
+  <int value="30" label="S3T1h"/>
+  <int value="31" label="S3T2"/>
+  <int value="32" label="S3T2h"/>
+  <int value="33" label="S3T3"/>
+  <int value="34" label="S3T3h"/>
+</enum>
+
 <enum name="WebRtcStunIntegrityOutcome">
   <summary>
     Records the outcome of a STUN integrity check - succeeds, fails, or &quot;no
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index cc1a01ea..7438290 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -3010,19 +3010,6 @@
   </summary>
 </histogram>
 
-<histogram name="Autofill.ProfileImport.NewProfileEditedComplementedCountry"
-    enum="AutofillSettingsVisibleTypes" expires_after="2023-01-15">
-  <owner>fleimgruber@google.com</owner>
-  <owner>chrome-autofill-team@google.com</owner>
-  <summary>
-    Logs that the country field was edited in a new profile save prompt that was
-    shown to the user when a new address profile is observed in a form
-    submission. The edited country was complemented based on the predicted
-    country on import. This metric is emitted once the user-provided import
-    decision is final.
-  </summary>
-</histogram>
-
 <histogram name="Autofill.ProfileImport.NewProfileEditedType"
     enum="AutofillSettingsVisibleTypes" expires_after="2023-06-04">
   <owner>koerber@google.com</owner>
@@ -3045,20 +3032,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="Autofill.ProfileImport.NewProfileWithComplementedCountryDecision"
-    enum="AutofillProfileImportDecision" expires_after="2023-07-02">
-  <owner>fleimgruber@google.com</owner>
-  <owner>chrome-autofill-team@google.com</owner>
-  <summary>
-    Logs the user's decision for storing a new address profile observed in a
-    form submission, which had it's country complemented based on the predicted
-    country on import. This metric is emitted at the end of an import process
-    once the user-provided import decision is final. It is collected in addition
-    to Autofill.ProfileImport.NewProfileDecision.
-  </summary>
-</histogram>
-
 <histogram name="Autofill.ProfileImport.NewProfileWithIgnoredCountryDecision"
     enum="AutofillProfileImportDecision" expires_after="2023-06-04">
   <owner>fleimgruber@google.com</owner>
@@ -3073,21 +3046,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="Autofill.ProfileImport.NewProfileWithRemovedPhoneNumberDecision"
-    enum="AutofillProfileImportDecision" expires_after="2023-06-18">
-  <owner>fleimgruber@google.com</owner>
-  <owner>chrome-autofill-team@google.com</owner>
-  <summary>
-    Logs the user's decision for storing a new address profile observed in a
-    form submission. The profile was only considered an import candidate, after
-    an invalid phone number was removed. This metric is emitted at the end of an
-    import process once the user-provided import decision is final. It is
-    collected in addition to Autofill.ProfileImport.NewProfileDecision and only
-    if kAutofillRemoveInvalidPhoneNumberOnImport is enabled.
-  </summary>
-</histogram>
-
 <histogram name="Autofill.ProfileImport.PhoneNumberParsed" enum="Boolean"
     expires_after="2023-06-18">
   <owner>fleimgruber@google.com</owner>
@@ -3120,21 +3078,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="Autofill.ProfileImport.SilentUpdatesWithRemovedPhoneNumberProfileImportType"
-    enum="AutofillSilentUpdatesProfileImportType" expires_after="2023-07-02">
-  <owner>fleimgruber@google.com</owner>
-  <owner>chrome-autofill-team@google.com</owner>
-  <summary>
-    The type of an import of an address that is observed in a form submission
-    when the form does not satisfy profile import requirements. It was only
-    considered for a silent update after an invalid phone number was removed.
-    This metric is emitted once the import decision is final. It is collected in
-    addition to Autofill.ProfileImport.SilentUpdatesProfileImportType and only
-    if kAutofillRemoveInvalidPhoneNumberOnImport is enabled.
-  </summary>
-</histogram>
-
 <histogram name="Autofill.ProfileImport.UpdateProfileAffectedType.{Decision}"
     enum="AutofillSettingsVisibleTypes" expires_after="2023-04-30">
   <owner>koerber@google.com</owner>
@@ -3190,19 +3133,6 @@
   </summary>
 </histogram>
 
-<histogram name="Autofill.ProfileImport.UpdateProfileEditedComplementedCountry"
-    enum="AutofillSettingsVisibleTypes" expires_after="2023-01-15">
-  <owner>fleimgruber@google.com</owner>
-  <owner>chrome-autofill-team@google.com</owner>
-  <summary>
-    Logs that the country field was edited in a a profile update prompt that was
-    shown to the user when a profile similar to an already existing profile was
-    observed in a form submission. The edited country was complemented based on
-    the predicted country on import. This metric is emitted once the
-    user-provided import decision is final.
-  </summary>
-</histogram>
-
 <histogram name="Autofill.ProfileImport.UpdateProfileEditedType"
     enum="AutofillSettingsVisibleTypes" expires_after="2023-06-11">
   <owner>koerber@google.com</owner>
@@ -3269,21 +3199,6 @@
 </histogram>
 
 <histogram
-    name="Autofill.ProfileImport.UpdateProfileWithComplementedCountryDecision"
-    enum="AutofillProfileImportDecision" expires_after="2023-02-26">
-  <owner>fleimgruber@google.com</owner>
-  <owner>chrome-autofill-team@google.com</owner>
-  <summary>
-    Logs the user's decision for editing an already existing address after a
-    similar profile was observed in a form submission. The new profile had it's
-    country complemented based on the predicted country on import. This metric
-    is emitted at the end of an import process once the user-provided import
-    decision is final. It is collected in addition to
-    Autofill.ProfileImport.UpdateProfileDecision.
-  </summary>
-</histogram>
-
-<histogram
     name="Autofill.ProfileImport.UpdateProfileWithIgnoredCountryDecision"
     enum="AutofillProfileImportDecision" expires_after="2023-06-04">
   <owner>fleimgruber@google.com</owner>
@@ -3299,22 +3214,6 @@
   </summary>
 </histogram>
 
-<histogram
-    name="Autofill.ProfileImport.UpdateProfileWithRemovedPhoneNumberDecision"
-    enum="AutofillProfileImportDecision" expires_after="2023-07-09">
-  <owner>fleimgruber@google.com</owner>
-  <owner>chrome-autofill-team@google.com</owner>
-  <summary>
-    Logs the user's decision for editing an already existing address after a
-    similar profile was observed in a form submission. The profile was only
-    considered an import candidate, after an invalid phone number was removed.
-    This metric is emitted at the end of an import process once the user-
-    provided import decision is final. It is collected in addition to
-    Autofill.ProfileImport.UpdateProfileDecision and only if
-    kAutofillRemoveInvalidPhoneNumberOnImport is enabled.
-  </summary>
-</histogram>
-
 <histogram name="Autofill.ProfileSuggestionsMadeWithFormatter"
     enum="BooleanCreated" expires_after="2023-04-30">
   <owner>battre@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index c2e9847..974fcf7 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -2255,6 +2255,10 @@
 
 <histogram name="PasswordManager.PasswordEditUpdatedValues"
     enum="PasswordEditUpdatedValues" expires_after="2023-07-09">
+  <obsolete>
+    For some time now, SavedPasswordsPresenter::EditSavedCredentials is used not
+    only by &quot;password edit dialog&quot;, so the metrics is not accurate.
+  </obsolete>
   <owner>vsemeniuk@google.com</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
index 3d2daa41..5ad607d 100644
--- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml
+++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -2862,6 +2862,17 @@
   </summary>
 </histogram>
 
+<histogram name="WebRTC.Video.ScalabilityMode" enum="WebRtcScalabilityMode"
+    expires_after="M120">
+  <owner>orphis@chromium.org</owner>
+  <owner>toprice@chromium.org</owner>
+  <summary>
+    Counts usage of each scalability mode used to configure the video senders in
+    RTCRtpEncodingParameters from addTransceiver and setParameters APIs. This is
+    part of the WebRTC-SVC specification.
+  </summary>
+</histogram>
+
 <histogram name="WebRTC.Video.Screenshare.BandwidthLimitedResolutionInPercent"
     units="%" expires_after="never">
 <!-- expires-never: WebRTC health metric. -->
diff --git a/tools/typescript/definitions/passwords_private.d.ts b/tools/typescript/definitions/passwords_private.d.ts
index 442ad11f..57215b0d 100644
--- a/tools/typescript/definitions/passwords_private.d.ts
+++ b/tools/typescript/definitions/passwords_private.d.ts
@@ -157,6 +157,10 @@
         note?: string;
       }
 
+      export interface PasswordUiEntryList {
+        entries: PasswordUiEntry[];
+      }
+
       export function recordPasswordsPageAccessInSettings(): void;
       export function changeSavedPassword(
           id: number, params: ChangeSavedPasswordParams): Promise<number>;
@@ -181,6 +185,8 @@
       export function isOptedInForAccountStorage(): Promise<boolean>;
       export function optInForAccountStorage(optIn: boolean): void;
       export function getInsecureCredentials(): Promise<PasswordUiEntry[]>;
+      export function getCredentialsWithReusedPassword():
+          Promise<PasswordUiEntryList[]>;
       export function muteInsecureCredential(credential: PasswordUiEntry):
           Promise<void>;
       export function unmuteInsecureCredential(credential: PasswordUiEntry):
diff --git a/ui/base/ime/ash/mock_input_method_manager.cc b/ui/base/ime/ash/mock_input_method_manager.cc
index 4c508835..3ec8c4c 100644
--- a/ui/base/ime/ash/mock_input_method_manager.cc
+++ b/ui/base/ime/ash/mock_input_method_manager.cc
@@ -6,6 +6,8 @@
 
 #include <utility>
 
+#include "ui/base/ime/ash/input_method_util.h"
+
 namespace ash {
 namespace input_method {
 
diff --git a/ui/base/ime/ash/mock_input_method_manager.h b/ui/base/ime/ash/mock_input_method_manager.h
index 232a4d76..aaf28dc 100644
--- a/ui/base/ime/ash/mock_input_method_manager.h
+++ b/ui/base/ime/ash/mock_input_method_manager.h
@@ -8,13 +8,12 @@
 #include "base/component_export.h"
 #include "base/observer_list.h"
 #include "ui/base/ime/ash/input_method_manager.h"
-// TODO(https://crbug.com/1164001): remove and use forward declaration.
-#include "ui/base/ime/ash/input_method_util.h"
 #include "ui/base/ime/virtual_keyboard_controller.h"
 #include "ui/base/ime/virtual_keyboard_controller_observer.h"
 
 namespace ash {
 namespace input_method {
+
 class ImeKeyboard;
 
 // The mock InputMethodManager for testing.
diff --git a/ui/gl/buffer_format_utils.cc b/ui/gl/buffer_format_utils.cc
index 028b0554..601de109 100644
--- a/ui/gl/buffer_format_utils.cc
+++ b/ui/gl/buffer_format_utils.cc
@@ -51,36 +51,4 @@
   return GL_NONE;
 }
 
-unsigned BufferFormatToGLDataType(gfx::BufferFormat format) {
-  switch (format) {
-    case gfx::BufferFormat::R_8:
-    case gfx::BufferFormat::RG_88:
-    case gfx::BufferFormat::RGBX_8888:
-    case gfx::BufferFormat::BGRX_8888:
-    case gfx::BufferFormat::RGBA_8888:
-    case gfx::BufferFormat::BGRA_8888:
-      return GL_UNSIGNED_BYTE;
-    case gfx::BufferFormat::R_16:
-    case gfx::BufferFormat::RG_1616:
-      return GL_UNSIGNED_SHORT;
-    case gfx::BufferFormat::BGR_565:
-      return GL_UNSIGNED_SHORT_5_6_5;
-    case gfx::BufferFormat::RGBA_4444:
-      return GL_UNSIGNED_SHORT_4_4_4_4;
-    case gfx::BufferFormat::RGBA_1010102:
-    case gfx::BufferFormat::BGRA_1010102:
-      return GL_UNSIGNED_INT_2_10_10_10_REV;
-    case gfx::BufferFormat::RGBA_F16:
-      return GL_HALF_FLOAT_OES;
-    case gfx::BufferFormat::YVU_420:
-    case gfx::BufferFormat::YUV_420_BIPLANAR:
-    case gfx::BufferFormat::YUVA_420_TRIPLANAR:
-    case gfx::BufferFormat::P010:
-      return GL_NONE;
-  }
-
-  NOTREACHED();
-  return GL_NONE;
-}
-
 }  // namespace gl
diff --git a/ui/gl/buffer_format_utils.h b/ui/gl/buffer_format_utils.h
index d4dac31..ced36b5 100644
--- a/ui/gl/buffer_format_utils.h
+++ b/ui/gl/buffer_format_utils.h
@@ -14,9 +14,6 @@
 // mapping.
 GL_EXPORT unsigned BufferFormatToGLInternalFormat(gfx::BufferFormat format);
 
-// Map buffer format to GL type. Return GL_NONE if no sensible mapping.
-GL_EXPORT unsigned BufferFormatToGLDataType(gfx::BufferFormat format);
-
 }  // namespace gl
 
 #endif  // UI_GL_BUFFER_FORMAT_UTILS_H_
diff --git a/ui/ozone/common/native_pixmap_egl_binding.cc b/ui/ozone/common/native_pixmap_egl_binding.cc
index 74750ec..0b1e0f63 100644
--- a/ui/ozone/common/native_pixmap_egl_binding.cc
+++ b/ui/ozone/common/native_pixmap_egl_binding.cc
@@ -6,11 +6,49 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
-#include "ui/gl/buffer_format_utils.h"
+#include "base/notreached.h"
+#include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_image_native_pixmap.h"
 
 namespace ui {
 
+namespace {
+
+// Map buffer format to GL type. Return GL_NONE if no sensible mapping.
+unsigned BufferFormatToGLDataType(gfx::BufferFormat format) {
+  switch (format) {
+    case gfx::BufferFormat::R_8:
+    case gfx::BufferFormat::RG_88:
+    case gfx::BufferFormat::RGBX_8888:
+    case gfx::BufferFormat::BGRX_8888:
+    case gfx::BufferFormat::RGBA_8888:
+    case gfx::BufferFormat::BGRA_8888:
+      return GL_UNSIGNED_BYTE;
+    case gfx::BufferFormat::R_16:
+    case gfx::BufferFormat::RG_1616:
+      return GL_UNSIGNED_SHORT;
+    case gfx::BufferFormat::BGR_565:
+      return GL_UNSIGNED_SHORT_5_6_5;
+    case gfx::BufferFormat::RGBA_4444:
+      return GL_UNSIGNED_SHORT_4_4_4_4;
+    case gfx::BufferFormat::RGBA_1010102:
+    case gfx::BufferFormat::BGRA_1010102:
+      return GL_UNSIGNED_INT_2_10_10_10_REV;
+    case gfx::BufferFormat::RGBA_F16:
+      return GL_HALF_FLOAT_OES;
+    case gfx::BufferFormat::YVU_420:
+    case gfx::BufferFormat::YUV_420_BIPLANAR:
+    case gfx::BufferFormat::YUVA_420_TRIPLANAR:
+    case gfx::BufferFormat::P010:
+      return GL_NONE;
+  }
+
+  NOTREACHED();
+  return GL_NONE;
+}
+
+}  // namespace
+
 NativePixmapEGLBinding::NativePixmapEGLBinding(
     scoped_refptr<gl::GLImageNativePixmap> gl_image,
     gfx::BufferFormat format)
@@ -57,7 +95,7 @@
 }
 
 GLenum NativePixmapEGLBinding::GetDataType() {
-  return gl::BufferFormatToGLDataType(format_);
+  return BufferFormatToGLDataType(format_);
 }
 
 }  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_frame_manager.cc b/ui/ozone/platform/wayland/host/wayland_frame_manager.cc
index 9106c4e..6bc8053 100644
--- a/ui/ozone/platform/wayland/host/wayland_frame_manager.cc
+++ b/ui/ozone/platform/wayland/host/wayland_frame_manager.cc
@@ -174,7 +174,7 @@
       fatal_error_message_ = kBoundsRectNanOrInf;
     } else {
       window_->OnSequencePoint(frame->seq);
-      // During a tab dragging session, UpdateVisualSize() can implicitly invoke
+      // During a tab dragging session, OnSequencePoint() can implicitly invoke
       // Hide(). |pending_frames_| will be cleared and we should return
       // directly.
       if (pending_frames_.empty())
@@ -270,7 +270,7 @@
     if (!frame->presentation_acked)
       frame->feedback = gfx::PresentationFeedback::Failure();
   } else {
-    // Opaque region is set during UpdateVisualSize() no need to set it again.
+    // Opaque region is set during OnSequencePoint() no need to set it again.
     ApplySurfaceConfigure(frame.get(), root_surface, root_config, false);
     // A fatal error happened. Must stop the playback and terminate the gpu
     // process as it might have been compromised.
diff --git a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
index 6b97682..eea2b819 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
@@ -341,12 +341,12 @@
   });
 }
 
-TEST_P(WaylandWindowTest, UpdateVisualSizeConfiguresWaylandWindow) {
+TEST_P(WaylandWindowTest, OnSequencePointConfiguresWaylandWindow) {
   constexpr gfx::Rect kNormalBounds{500, 300};
 
   // Configure event makes Wayland update bounds, but does not change toplevel
   // input region, opaque region or window geometry immediately. Such actions
-  // are postponed to UpdateVisualSize();
+  // are postponed to OnSequencePoint();
   EXPECT_CALL(delegate_, OnBoundsChanged(Eq(kDefaultBoundsChange)));
 
   PostToServerAndWait([id = surface_id_, bounds = kNormalBounds](
@@ -550,10 +550,9 @@
   constexpr gfx::Rect kNormalBounds3{700, 400};
   uint32_t serial = 1;
 
-  // Send 3 configures, and call UpdateVisualSize out of order. The out-of-order
-  // UpdateVisualSize(kNormalBounds2) should disregarded b/c kNormalBounds2
-  // never reached UI Compositor when UpdateVisualSize(kNormalBounds2) is
-  // called.
+  // Send 3 configures, and skip OnSequencePoint for the result of the second
+  // configure. The second configure should not be acked or have its properties
+  // applied.
   PostToServerAndWait(
       [id = surface_id_, bounds1 = kNormalBounds1, bounds2 = kNormalBounds2,
        bounds3 = kNormalBounds3](wl::TestWaylandServerThread* server) {
@@ -609,17 +608,16 @@
   window_->OnSequencePoint(0);
 }
 
-TEST_P(WaylandWindowTest, UpdateVisualSizeClearsPreviousUnackedConfigures) {
+TEST_P(WaylandWindowTest, OnSequencePointClearsPreviousUnackedConfigures) {
   constexpr gfx::Rect kNormalBounds1{500, 300};
   constexpr gfx::Rect kNormalBounds2{800, 600};
   constexpr gfx::Rect kNormalBounds3{700, 400};
   uint32_t serial = 1;
   auto state = InitializeWlArrayWithActivatedState();
 
-  // Send 3 configures. Calling UpdateVisualSize(kNormalBounds3) will cause the
-  // kNormalBounds3 to be passed onto UI compositor. Hence, kNormalBounds1/2/3
-  // configs will be acknowledgeable. The next UpdateVisualSize(kNormalBounds3)
-  // will ack kNormalBounds3 and skip kNormalBounds1/2.
+  // Send 3 configures. Waiting to advance the frame (and call
+  // OnSequencePoint(3)) should mean acking and processing the completion of
+  // first two configures will be skipped.
   PostToServerAndWait([id = surface_id_, bounds = kNormalBounds1](
                           wl::TestWaylandServerThread* server) {
     wl::MockSurface* mock_surface = server->GetObject<wl::MockSurface>(id);
diff --git a/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc b/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc
index 4cfbf39c..9fef59a3 100644
--- a/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc
+++ b/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc
@@ -1403,7 +1403,7 @@
 
 // Verifies toplevel surfaces do not have buffers attached until configured,
 // even when the initial configure sequence is not acked in response to
-// xdg_surface.configure event, i.e: done asynchronously when UpdateVisualSize()
+// xdg_surface.configure event, i.e: done asynchronously when OnSequencePoint()
 // is called by they FrameManager).
 //
 // Regression test for https://crbug.com/1313023.
@@ -1424,8 +1424,9 @@
   auto widget = window->GetWidget();
 
   // Set restored bounds to a value different from the initial window bounds in
-  // order to force WaylandWindow::ProcessPendingBoundsDip() to defer the very
-  // first configure ack to be done in the subsequent UpdateVisualSize() call.
+  // order to force WaylandWindow::ProcessPendingConfigureState() to defer the
+  // very first configure ack to be done in the subsequent OnSequencePoint()
+  // call.
   window->SetRestoredBoundsInDIP(kRestoredBounds);
   wl::SyncDisplay(connection_->display_wrapper(), *connection_->display());